Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ makedevice(D3) — UnixWare 2.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought






       makedevice(D3)                                        makedevice(D3)


       NAME
             makedevice - make device number from major and minor numbers

       SYNOPSIS
             #include <sys/types.h>
             #include <sys/ddi.h>
             dev_t makedevice(major_t majnum, minor_t minnum);

          Arguments
             majnum    Major number.

             minnum    Minor number.

       DESCRIPTION
             The makedevice function creates a device number from major and
             minor device numbers.

          Return Values
             The device number, containing both the major number and the
             minor number, is returned.  No validation of the major or
             minor numbers is performed.

       USAGE
             makedevice should be used to create device numbers so that the
             driver will port easily to releases that treat device numbers
             differently.

          Level
             Initialization, Base or Interrupt.

          Synchronization Constraints
             Does not sleep.

             Driver-defined basic locks, read/write locks, and sleep locks
             may be held across calls to this function.

          Singlethreaded Example
             In the following example, makedevice is used to create the
             device number selected during a clone open.  If the CLONEOPEN
             flag is set (line 9), we search through the list of minor
             devices looking for one that is available (lines 10-11).  If
             we find an unused minor, we break off the search, create a new
             device number, and store it in the memory location pointed to
             by devp (line 15).  If no unused minor was found, we return
             the error ENXIO.



                           Copyright 1994 Novell, Inc.               Page 1













      makedevice(D3)                                        makedevice(D3)


            1  xxxopen(q, devp, oflag, sflag, crp)
            2     queue_t *q;
            3     dev_t *devp;
            4     int oflag;
            5     int sflag;
            6     cred_t *crp;
            7  {
            8     minor_t minnum;
            9     if (sflag == CLONEOPEN) {
            10          for (minnum = 0; minnum < XXXMAXMIN; minnum++)
            11                if (!INUSE(minnum))
            12                      break;
            13          if (minnum >= XXXMAXMIN)
            14                return(ENXIO);
            15                SETINUSE(minnum);
            16          *devp = makedevice(getemajor(*devp), minnum);
            17    }
                  ...

         Multithreaded Example
            In the following example, makedevice is used to create the
            device number selected during a clone open.  If the CLONEOPEN
            flag is set (line 11), we lock the list of minor devices (line
            12) and search through the list, looking for a minor device
            that is available (lines 13-14).  If we find an unused minor,
            we break off the search, mark the minor as being in use (line
            20), unlock the list, create a new device number, and store it
            in the memory location pointed to by devp (line 22).  If no
            unused minor was found, we unlock the list and return the
            error ENXIO.

            1  xxxopen(q, devp, oflag, sflag, crp)
            2     queue_t *q;
            3     dev_t *devp;
            4     int oflag;
            5     int sflag;
            6     cred_t *crp;
            7  {
            8     minor_t minnum;
            9     pl_t pl;
            10    extern lock_t *xxxminlock;
            11    if (sflag == CLONEOPEN) {
            12          pl = LOCK(xxxminlock, plstr);
            13          for (minnum = 0; minnum < XXXMAXMIN; minnum++)
            14                if (!INUSE(minnum))
            15                      break;


                          Copyright 1994 Novell, Inc.               Page 2













       makedevice(D3)                                        makedevice(D3)


             16          if (minnum >= XXXMAXMIN) {
             17                UNLOCK(xxxminlock, pl);
             18                return(ENXIO);
             19          } else {
             20                SETINUSE(minnum);
             21                UNLOCK(xxxminlock, pl);
             22                *devp = makedevice(getemajor(*devp), minnum);
             23          }
             24    }
                     ...

       REFERENCES
             getemajor(D3), geteminor(D3), getmajor(D3), getminor(D3)

       NOTICES
          Portability
             All processors

          Applicability
             ddi: 1, 2, 3, 4, 5, 5mp, 6, 6mp, 7, 7mp




























                           Copyright 1994 Novell, Inc.               Page 3








Typewritten Software • bear@typewritten.org • Edmonds, WA 98026