xref: /OK3568_Linux_fs/kernel/Documentation/userspace-api/ioctl/ioctl-decoding.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun==============================
2*4882a593SmuzhiyunDecoding an IOCTL Magic Number
3*4882a593Smuzhiyun==============================
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunTo decode a hex IOCTL code:
6*4882a593Smuzhiyun
7*4882a593SmuzhiyunMost architectures use this generic format, but check
8*4882a593Smuzhiyuninclude/ARCH/ioctl.h for specifics, e.g. powerpc
9*4882a593Smuzhiyunuses 3 bits to encode read/write and 13 bits for size.
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun ====== ==================================
12*4882a593Smuzhiyun bits   meaning
13*4882a593Smuzhiyun ====== ==================================
14*4882a593Smuzhiyun 31-30	00 - no parameters: uses _IO macro
15*4882a593Smuzhiyun	10 - read: _IOR
16*4882a593Smuzhiyun	01 - write: _IOW
17*4882a593Smuzhiyun	11 - read/write: _IOWR
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun 29-16	size of arguments
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun 15-8	ascii character supposedly
22*4882a593Smuzhiyun	unique to each driver
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun 7-0	function #
25*4882a593Smuzhiyun ====== ==================================
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun
28*4882a593SmuzhiyunSo for example 0x82187201 is a read with arg length of 0x218,
29*4882a593Smuzhiyuncharacter 'r' function 1. Grepping the source reveals this is::
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun	#define VFAT_IOCTL_READDIR_BOTH         _IOR('r', 1, struct dirent [2])
32