ioctl.h
01: #ifndef _ASM_GENERIC_IOCTL_H
02: #define _ASM_GENERIC_IOCTL_H
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: #define _IOC_NRBITS     8
23: #define _IOC_TYPEBITS   8
24: 
25: 
26: 
27: 
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: 
50: 
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: #define _IOC_TYPECHECK(t) (sizeof(t))
72: 
73: 
74: #define _IO(type,nr)            _IOC(_IOC_NONE,(type),(nr),0)
75: #define _IOR(type,nr,size)      _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
76: #define _IOW(type,nr,size)      _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
77: #define _IOWR(type,nr,size)     _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
78: #define _IOR_BAD(type,nr,size)  _IOC(_IOC_READ,(type),(nr),sizeof(size))
79: #define _IOW_BAD(type,nr,size)  _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
80: #define _IOWR_BAD(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
81: 
82: 
83: #define _IOC_DIR(nr)            (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
84: #define _IOC_TYPE(nr)           (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
85: #define _IOC_NR(nr)             (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
86: #define _IOC_SIZE(nr)           (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
87: 
88: 
89: 
90: #define IOC_IN          (_IOC_WRITE << _IOC_DIRSHIFT)
91: #define IOC_OUT         (_IOC_READ << _IOC_DIRSHIFT)
92: #define IOC_INOUT       ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
93: #define IOCSIZE_MASK    (_IOC_SIZEMASK << _IOC_SIZESHIFT)
94: #define IOCSIZE_SHIFT   (_IOC_SIZESHIFT)
95: 
96: #endif 
97: 
      
      
      
      
   
      
      
         
            
            © Andrew Scott 2006 -
            2025, 
            All Rights Reserved