Commit | Line | Data |
---|---|---|
5c04dcea MCC |
1 | ============================== |
2 | Decoding an IOCTL Magic Number | |
3 | ============================== | |
4 | ||
cf1b939e CE |
5 | To decode a hex IOCTL code: |
6 | ||
d9195881 | 7 | Most architectures use this generic format, but check |
cf1b939e CE |
8 | include/ARCH/ioctl.h for specifics, e.g. powerpc |
9 | uses 3 bits to encode read/write and 13 bits for size. | |
10 | ||
5c04dcea MCC |
11 | ====== ================================== |
12 | bits meaning | |
13 | ====== ================================== | |
cf1b939e CE |
14 | 31-30 00 - no parameters: uses _IO macro |
15 | 10 - read: _IOR | |
16 | 01 - write: _IOW | |
17 | 11 - read/write: _IOWR | |
18 | ||
19 | 29-16 size of arguments | |
20 | ||
21 | 15-8 ascii character supposedly | |
22 | unique to each driver | |
23 | ||
24 | 7-0 function # | |
5c04dcea | 25 | ====== ================================== |
cf1b939e CE |
26 | |
27 | ||
d9195881 | 28 | So for example 0x82187201 is a read with arg length of 0x218, |
5c04dcea | 29 | character 'r' function 1. Grepping the source reveals this is:: |
cf1b939e | 30 | |
5c04dcea | 31 | #define VFAT_IOCTL_READDIR_BOTH _IOR('r', 1, struct dirent [2]) |