Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /* $Id: ioctl.h,v 1.6 1999/12/01 23:58:36 davem Exp $ */
  2 #ifndef _SPARC_IOCTL_H
  3 #define _SPARC_IOCTL_H
  4 
  5 /*
  6  * Our DIR and SIZE overlap in order to simulteneously provide
  7  * a non-zero _IOC_NONE (for binary compatibility) and
  8  * 14 bits of size as on i386. Here's the layout:
  9  *
 10  *   0xE0000000   DIR
 11  *   0x80000000     DIR = WRITE
 12  *   0x40000000     DIR = READ
 13  *   0x20000000     DIR = NONE
 14  *   0x3FFF0000   SIZE (overlaps NONE bit)
 15  *   0x0000FF00   TYPE
 16  *   0x000000FF   NR (CMD)
 17  */
 18 
 19 #define _IOC_NRBITS      8
 20 #define _IOC_TYPEBITS    8
 21 #define _IOC_SIZEBITS   13      /* Actually 14, see below. */
 22 #define _IOC_DIRBITS     3
 23 
 24 #define _IOC_NRMASK      ((1 << _IOC_NRBITS)-1)
 25 #define _IOC_TYPEMASK    ((1 << _IOC_TYPEBITS)-1)
 26 #define _IOC_SIZEMASK    ((1 << _IOC_SIZEBITS)-1)
 27 #define _IOC_XSIZEMASK   ((1 << (_IOC_SIZEBITS+1))-1)
 28 #define _IOC_DIRMASK     ((1 << _IOC_DIRBITS)-1)
 29 
 30 #define _IOC_NRSHIFT     0
 31 #define _IOC_TYPESHIFT   (_IOC_NRSHIFT + _IOC_NRBITS)
 32 #define _IOC_SIZESHIFT   (_IOC_TYPESHIFT + _IOC_TYPEBITS)
 33 #define _IOC_DIRSHIFT    (_IOC_SIZESHIFT + _IOC_SIZEBITS)
 34 
 35 #define _IOC_NONE        1U
 36 #define _IOC_READ        2U
 37 #define _IOC_WRITE       4U
 38 
 39 #define _IOC(dir,type,nr,size) \
 40         (((dir)  << _IOC_DIRSHIFT) | \
 41          ((type) << _IOC_TYPESHIFT) | \
 42          ((nr)   << _IOC_NRSHIFT) | \
 43          ((size) << _IOC_SIZESHIFT))
 44 
 45 #define _IO(type,nr)        _IOC(_IOC_NONE,(type),(nr),0)
 46 #define _IOR(type,nr,size)  _IOC(_IOC_READ,(type),(nr),sizeof(size))
 47 #define _IOW(type,nr,size)  _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
 48 #define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
 49 
 50 /* Used to decode ioctl numbers in drivers despite the leading underscore... */
 51 #define _IOC_DIR(nr)    \
 52  ( (((((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) & (_IOC_WRITE|_IOC_READ)) != 0)?   \
 53                             (((nr) >> _IOC_DIRSHIFT) & (_IOC_WRITE|_IOC_READ)):  \
 54                             (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) )
 55 #define _IOC_TYPE(nr)       (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
 56 #define _IOC_NR(nr)         (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
 57 #define _IOC_SIZE(nr)   \
 58  ((((((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) & (_IOC_WRITE|_IOC_READ)) == 0)?    \
 59                          0: (((nr) >> _IOC_SIZESHIFT) & _IOC_XSIZEMASK))
 60 
 61 /* ...and for the PCMCIA and sound. */
 62 #define IOC_IN          (_IOC_WRITE << _IOC_DIRSHIFT)
 63 #define IOC_OUT         (_IOC_READ << _IOC_DIRSHIFT)
 64 #define IOC_INOUT       ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
 65 #define IOCSIZE_MASK    (_IOC_XSIZEMASK << _IOC_SIZESHIFT)
 66 #define IOCSIZE_SHIFT   (_IOC_SIZESHIFT)
 67 
 68 #endif /* !(_SPARC_IOCTL_H) */
 69 
  This page was automatically generated by the LXR engine.