162306a36Sopenharmony_ci============================== 262306a36Sopenharmony_ciDecoding an IOCTL Magic Number 362306a36Sopenharmony_ci============================== 462306a36Sopenharmony_ci 562306a36Sopenharmony_ciTo decode a hex IOCTL code: 662306a36Sopenharmony_ci 762306a36Sopenharmony_ciMost architectures use this generic format, but check 862306a36Sopenharmony_ciinclude/ARCH/ioctl.h for specifics, e.g. powerpc 962306a36Sopenharmony_ciuses 3 bits to encode read/write and 13 bits for size. 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci ====== ================================== 1262306a36Sopenharmony_ci bits meaning 1362306a36Sopenharmony_ci ====== ================================== 1462306a36Sopenharmony_ci 31-30 00 - no parameters: uses _IO macro 1562306a36Sopenharmony_ci 10 - read: _IOR 1662306a36Sopenharmony_ci 01 - write: _IOW 1762306a36Sopenharmony_ci 11 - read/write: _IOWR 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci 29-16 size of arguments 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci 15-8 ascii character supposedly 2262306a36Sopenharmony_ci unique to each driver 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci 7-0 function # 2562306a36Sopenharmony_ci ====== ================================== 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ciSo for example 0x82187201 is a read with arg length of 0x218, 2962306a36Sopenharmony_cicharacter 'r' function 1. Grepping the source reveals this is:: 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci #define VFAT_IOCTL_READDIR_BOTH _IOR('r', 1, struct dirent [2]) 32