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