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: