|
|
1.1 root 1: /* $Id: ioctl.h,v 1.1 1999/04/26 05:55:47 tb Exp $
2: *
3: * linux/ioctl.h for Linux by H.H. Bergman.
4: */
5:
6: #ifndef _ASMI386_IOCTL_H
7: #define _ASMI386_IOCTL_H
8:
9: /* ioctl command encoding: 32 bits total, command in lower 16 bits,
10: * size of the parameter structure in the lower 14 bits of the
11: * upper 16 bits.
12: * Encoding the size of the parameter structure in the ioctl request
13: * is useful for catching programs compiled with old versions
14: * and to avoid overwriting user space outside the user buffer area.
15: * The highest 2 bits are reserved for indicating the ``access mode''.
16: * NOTE: This limits the max parameter size to 16kB -1 !
17: */
18:
19: /*
20: * The following is for compatibility across the various Linux
21: * platforms. The i386 ioctl numbering scheme doesn't really enforce
22: * a type field. De facto, however, the top 8 bits of the lower 16
23: * bits are indeed used as a type field, so we might just as well make
24: * this explicit here. Please be sure to use the decoding macros
25: * below from now on.
26: */
27: #define _IOC_NRBITS 8
28: #define _IOC_TYPEBITS 8
29: #define _IOC_SIZEBITS 14
30: #define _IOC_DIRBITS 2
31:
32: #define _IOC_NRMASK ((1 << _IOC_NRBITS)-1)
33: #define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1)
34: #define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1)
35: #define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1)
36:
37: #define _IOC_NRSHIFT 0
38: #define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
39: #define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
40: #define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
41:
42: /*
43: * Direction bits.
44: */
45: #define _IOC_NONE 0U
46: #define _IOC_WRITE 1U
47: #define _IOC_READ 2U
48:
49: #define _IOC(dir,type,nr,size) \
50: (((dir) << _IOC_DIRSHIFT) | \
51: ((type) << _IOC_TYPESHIFT) | \
52: ((nr) << _IOC_NRSHIFT) | \
53: ((size) << _IOC_SIZESHIFT))
54:
55: /* used to create numbers */
56: #define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
57: #define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
58: #define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
59: #define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
60:
61: /* used to decode ioctl numbers.. */
62: #define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
63: #define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
64: #define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
65: #define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
66:
67: /* ...and for the drivers/sound files... */
68:
69: #define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT)
70: #define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT)
71: #define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
72: #define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT)
73: #define IOCSIZE_SHIFT (_IOC_SIZESHIFT)
74:
75: #endif /* _ASMI386_IOCTL_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.