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
31
32
33
34
35 #define _LINUX_IOC_NRBITS 8
36 #define _LINUX_IOC_TYPEBITS 8
37 #define _LINUX_IOC_SIZEBITS 14
38 #define _LINUX_IOC_DIRBITS 2
39
40 #define _LINUX_IOC_NRSHIFT 0
41
42 #define _LINUX_IOC_NONE 0U
43 #define _LINUX_IOC_WRITE 1U
44 #define _LINUX_IOC_READ 2U
45
46 #define _LINUX_IOC_NRMASK ((1 << _LINUX_IOC_NRBITS) - 1)
47 #define _LINUX_IOC_TYPEMASK ((1 << _LINUX_IOC_TYPEBITS) - 1)
48 #define _LINUX_IOC_SIZEMASK ((1 << _LINUX_IOC_SIZEBITS) - 1)
49 #define _LINUX_IOC_DIRMASK ((1 << _LINUX_IOC_DIRBITS) - 1)
50
51 #define _LINUX_IOC_TYPESHIFT (_LINUX_IOC_NRSHIFT + _LINUX_IOC_NRBITS)
52 #define _LINUX_IOC_SIZESHIFT (_LINUX_IOC_TYPESHIFT + _LINUX_IOC_TYPEBITS)
53 #define _LINUX_IOC_DIRSHIFT (_LINUX_IOC_SIZESHIFT + _LINUX_IOC_SIZEBITS)
54
55 #define _LINUX_IOC(dir,type,nr,size) \
56 (((nr) << _LINUX_IOC_NRSHIFT) | \
57 ((type) << _LINUX_IOC_TYPESHIFT) | \
58 ((size) << _LINUX_IOC_SIZESHIFT) | \
59 ((dir) << _LINUX_IOC_DIRSHIFT))
60
61 #define _LINUX_IO(type,nr) \
62 _LINUX_IOC(_LINUX_IOC_NONE,(type),(nr),0)
63 #define _LINUX_IOR(type,nr,size) \
64 _LINUX_IOC(_LINUX_IOC_READ,(type),(nr),sizeof(size))
65 #define _LINUX_IOW(type,nr,size) \
66 _LINUX_IOC(_LINUX_IOC_WRITE,(type),(nr),sizeof(size))
67 #define _LINUX_IOWR(type,nr,size) \
68 _LINUX_IOC(_LINUX_IOC_READ|_LINUX_IOC_WRITE,(type),(nr),sizeof(size))
69
70 #define _LINUX_IOC_DIR(nr) \
71 (((nr) >> _LINUX_IOC_DIRSHIFT) & _LINUX_IOC_DIRMASK)
72 #define _LINUX_IOC_TYPE(nr) \
73 (((nr) >> _LINUX_IOC_TYPESHIFT) & _LINUX_IOC_TYPEMASK)
74 #define _LINUX_IOC_NR(nr) \
75 (((nr) >> _LINUX_IOC_NRSHIFT) & _LINUX_IOC_NRMASK)
76 #define _LINUX_IOC_SIZE(nr) \
77 (((nr) >> _LINUX_IOC_SIZESHIFT) & _LINUX_IOC_SIZEMASK)
78
79 #define LINUX_IOCGROUP(x) _LINUX_IOC_TYPE(x)
80
81 struct linux_sys_ioctl_args;
82 int linux_ioctl_audio(struct proc *, struct linux_sys_ioctl_args *,
83 register_t *);
84 int linux_machdepioctl(struct proc *, void *, register_t *);
85 int linux_ioctl_termios(struct proc *, void *, register_t *);
86 int linux_ioctl_cdrom(struct proc *, void *, register_t *);
87 int linux_ioctl_socket(struct proc *, void *, register_t *);
88 int linux_ioctl_hdio(struct proc *, struct linux_sys_ioctl_args *,
89 register_t *);
90 int linux_ioctl_fdio(struct proc *, struct linux_sys_ioctl_args *,
91 register_t *);
92 int linux_ioctl_blkio(struct proc *, struct linux_sys_ioctl_args *,
93 register_t *);