ioctl-decoding.rst 830 B

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