File: ioctl-decoding.rst

package info (click to toggle)
linux 6.18.2-1~exp1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 1,741,768 kB
  • sloc: ansic: 26,779,080; asm: 272,079; sh: 148,745; python: 79,237; makefile: 57,736; perl: 36,527; xml: 19,542; cpp: 5,911; yacc: 4,939; lex: 2,950; awk: 1,607; sed: 30; ruby: 25
file content (31 lines) | stat: -rw-r--r-- 830 bytes parent folder | download | duplicates (34)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
==============================
Decoding an IOCTL Magic Number
==============================

To decode a hex IOCTL code:

Most architectures use this generic format, but check
include/ARCH/ioctl.h for specifics, e.g. powerpc
uses 3 bits to encode read/write and 13 bits for size.

 ====== ==================================
 bits   meaning
 ====== ==================================
 31-30	00 - no parameters: uses _IO macro
	10 - read: _IOR
	01 - write: _IOW
	11 - read/write: _IOWR

 29-16	size of arguments

 15-8	ascii character supposedly
	unique to each driver

 7-0	function #
 ====== ==================================


So for example 0x82187201 is a read with arg length of 0x218,
character 'r' function 1. Grepping the source reveals this is::

	#define VFAT_IOCTL_READDIR_BOTH         _IOR('r', 1, struct dirent [2])