File: /Users/paulross/dev/linux/linux-3.13/include/uapi/asm-generic/ioctl.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: #ifndef _UAPI_ASM_GENERIC_IOCTL_H
       2: #define _UAPI_ASM_GENERIC_IOCTL_H
       3: 
       4: /* ioctl command encoding: 32 bits total, command in lower 16 bits,
       5:  * size of the parameter structure in the lower 14 bits of the
       6:  * upper 16 bits.
       7:  * Encoding the size of the parameter structure in the ioctl request
       8:  * is useful for catching programs compiled with old versions
       9:  * and to avoid overwriting user space outside the user buffer area.
      10:  * The highest 2 bits are reserved for indicating the ``access mode''.
      11:  * NOTE: This limits the max parameter size to 16kB -1 !
      12:  */
      13: 
      14: /*
      15:  * The following is for compatibility across the various Linux
      16:  * platforms.  The generic ioctl numbering scheme doesn't really enforce
      17:  * a type field.  De facto, however, the top 8 bits of the lower 16
      18:  * bits are indeed used as a type field, so we might just as well make
      19:  * this explicit here.  Please be sure to use the decoding macros
      20:  * below from now on.
      21:  */
      22: #define _IOC_NRBITS    8
      23: #define _IOC_TYPEBITS    8
      24: 
      25: /*
      26:  * Let any architecture override either of the following before
      27:  * including this file.
      28:  */
      29: 
      30: #ifndef _IOC_SIZEBITS
      31: # define _IOC_SIZEBITS    14
      32: #endif
      33: 
      34: #ifndef _IOC_DIRBITS
      35: # define _IOC_DIRBITS    2
      36: #endif
      37: 
      38: #define _IOC_NRMASK    ((1 << _IOC_NRBITS)-1)
      39: #define _IOC_TYPEMASK    ((1 << _IOC_TYPEBITS)-1)
      40: #define _IOC_SIZEMASK    ((1 << _IOC_SIZEBITS)-1)
      41: #define _IOC_DIRMASK    ((1 << _IOC_DIRBITS)-1)
      42: 
      43: #define _IOC_NRSHIFT    0
      44: #define _IOC_TYPESHIFT    (_IOC_NRSHIFT+_IOC_NRBITS)
      45: #define _IOC_SIZESHIFT    (_IOC_TYPESHIFT+_IOC_TYPEBITS)
      46: #define _IOC_DIRSHIFT    (_IOC_SIZESHIFT+_IOC_SIZEBITS)
      47: 
      48: /*
      49:  * Direction bits, which any architecture can choose to override
      50:  * before including this file.
      51:  */
      52: 
      53: #ifndef _IOC_NONE
      54: # define _IOC_NONE    0U
      55: #endif
      56: 
      57: #ifndef _IOC_WRITE
      58: # define _IOC_WRITE    1U
      59: #endif
      60: 
      61: #ifndef _IOC_READ
      62: # define _IOC_READ    2U
      63: #endif
      64: 
      65: #define _IOC(dir,type,nr,size) \
      66:     (((dir)  << _IOC_DIRSHIFT) | \
      67:      ((type) << _IOC_TYPESHIFT) | \
      68:      ((nr)   << _IOC_NRSHIFT) | \
      69:      ((size) << _IOC_SIZESHIFT))
      70: 
      71: #ifndef __KERNEL__
      72: #define _IOC_TYPECHECK(t) (sizeof(t))
      73: #endif
      74: 
      75: /* used to create numbers */
      76: #define _IO(type,nr)        _IOC(_IOC_NONE,(type),(nr),0)
      77: #define _IOR(type,nr,size)    _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
      78: #define _IOW(type,nr,size)    _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
      79: #define _IOWR(type,nr,size)    _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
      80: #define _IOR_BAD(type,nr,size)    _IOC(_IOC_READ,(type),(nr),sizeof(size))
      81: #define _IOW_BAD(type,nr,size)    _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
      82: #define _IOWR_BAD(type,nr,size)    _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
      83: 
      84: /* used to decode ioctl numbers.. */
      85: #define _IOC_DIR(nr)        (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
      86: #define _IOC_TYPE(nr)        (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
      87: #define _IOC_NR(nr)        (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
      88: #define _IOC_SIZE(nr)        (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
      89: 
      90: /* ...and for the drivers/sound files... */
      91: 
      92: #define IOC_IN        (_IOC_WRITE << _IOC_DIRSHIFT)
      93: #define IOC_OUT        (_IOC_READ << _IOC_DIRSHIFT)
      94: #define IOC_INOUT    ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
      95: #define IOCSIZE_MASK    (_IOC_SIZEMASK << _IOC_SIZESHIFT)
      96: #define IOCSIZE_SHIFT    (_IOC_SIZESHIFT)
      97: 
      98: #endif /* _UAPI_ASM_GENERIC_IOCTL_H */
      99: