Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


ioctl.h
01: #ifndef _ASM_GENERIC_IOCTL_H
02: #define _ASM_GENERIC_IOCTL_H
03: 
04: /* ioctl command encoding: 32 bits total, command in lower 16 bits,
05:  * size of the parameter structure in the lower 14 bits of the
06:  * upper 16 bits.
07:  * Encoding the size of the parameter structure in the ioctl request
08:  * is useful for catching programs compiled with old versions
09:  * 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: #define _IOC_TYPECHECK(t) (sizeof(t))
72: 
73: /* used to create numbers */
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: /* used to decode ioctl numbers.. */
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: /* ...and for the drivers/sound files... */
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 /* _ASM_GENERIC_IOCTL_H */
97: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/