diff options
Diffstat (limited to 'Documentation/ioctl')
-rw-r--r-- | Documentation/ioctl/00-INDEX | 10 | ||||
-rw-r--r-- | Documentation/ioctl/ioctl-number.txt | 201 |
2 files changed, 211 insertions, 0 deletions
diff --git a/Documentation/ioctl/00-INDEX b/Documentation/ioctl/00-INDEX new file mode 100644 index 000000000000..d2fe4d4729ef --- /dev/null +++ b/Documentation/ioctl/00-INDEX | |||
@@ -0,0 +1,10 @@ | |||
1 | 00-INDEX | ||
2 | - this file | ||
3 | cdrom.txt | ||
4 | - summary of CDROM ioctl calls | ||
5 | hdio.txt | ||
6 | - summary of HDIO_ ioctl calls | ||
7 | ioctl-decoding.txt | ||
8 | - how to decode the bits of an IOCTL code | ||
9 | ioctl-number.txt | ||
10 | - how to implement and register device/driver ioctl calls | ||
diff --git a/Documentation/ioctl/ioctl-number.txt b/Documentation/ioctl/ioctl-number.txt new file mode 100644 index 000000000000..b880ce5dbd33 --- /dev/null +++ b/Documentation/ioctl/ioctl-number.txt | |||
@@ -0,0 +1,201 @@ | |||
1 | Ioctl Numbers | ||
2 | 19 October 1999 | ||
3 | Michael Elizabeth Chastain | ||
4 | <mec@shout.net> | ||
5 | |||
6 | If you are adding new ioctl's to the kernel, you should use the _IO | ||
7 | macros defined in <linux/ioctl.h>: | ||
8 | |||
9 | _IO an ioctl with no parameters | ||
10 | _IOW an ioctl with write parameters (copy_from_user) | ||
11 | _IOR an ioctl with read parameters (copy_to_user) | ||
12 | _IOWR an ioctl with both write and read parameters. | ||
13 | |||
14 | 'Write' and 'read' are from the user's point of view, just like the | ||
15 | system calls 'write' and 'read'. For example, a SET_FOO ioctl would | ||
16 | be _IOW, although the kernel would actually read data from user space; | ||
17 | a GET_FOO ioctl would be _IOR, although the kernel would actually write | ||
18 | data to user space. | ||
19 | |||
20 | The first argument to _IO, _IOW, _IOR, or _IOWR is an identifying letter | ||
21 | or number from the table below. Because of the large number of drivers, | ||
22 | many drivers share a partial letter with other drivers. | ||
23 | |||
24 | If you are writing a driver for a new device and need a letter, pick an | ||
25 | unused block with enough room for expansion: 32 to 256 ioctl commands. | ||
26 | You can register the block by patching this file and submitting the | ||
27 | patch to Linus Torvalds. Or you can e-mail me at <mec@shout.net> and | ||
28 | I'll register one for you. | ||
29 | |||
30 | The second argument to _IO, _IOW, _IOR, or _IOWR is a sequence number | ||
31 | to distinguish ioctls from each other. The third argument to _IOW, | ||
32 | _IOR, or _IOWR is the type of the data going into the kernel or coming | ||
33 | out of the kernel (e.g. 'int' or 'struct foo'). NOTE! Do NOT use | ||
34 | sizeof(arg) as the third argument as this results in your ioctl thinking | ||
35 | it passes an argument of type size_t. | ||
36 | |||
37 | Some devices use their major number as the identifier; this is OK, as | ||
38 | long as it is unique. Some devices are irregular and don't follow any | ||
39 | convention at all. | ||
40 | |||
41 | Following this convention is good because: | ||
42 | |||
43 | (1) Keeping the ioctl's globally unique helps error checking: | ||
44 | if a program calls an ioctl on the wrong device, it will get an | ||
45 | error rather than some unexpected behaviour. | ||
46 | |||
47 | (2) The 'strace' build procedure automatically finds ioctl numbers | ||
48 | defined with _IO, _IOW, _IOR, or _IOWR. | ||
49 | |||
50 | (3) 'strace' can decode numbers back into useful names when the | ||
51 | numbers are unique. | ||
52 | |||
53 | (4) People looking for ioctls can grep for them more easily when | ||
54 | this convention is used to define the ioctl numbers. | ||
55 | |||
56 | (5) When following the convention, the driver code can use generic | ||
57 | code to copy the parameters between user and kernel space. | ||
58 | |||
59 | This table lists ioctls visible from user land for Linux/i386. It contains | ||
60 | most drivers up to 2.3.14, but I know I am missing some. | ||
61 | |||
62 | Code Seq# Include File Comments | ||
63 | ======================================================== | ||
64 | 0x00 00-1F linux/fs.h conflict! | ||
65 | 0x00 00-1F scsi/scsi_ioctl.h conflict! | ||
66 | 0x00 00-1F linux/fb.h conflict! | ||
67 | 0x00 00-1F linux/wavefront.h conflict! | ||
68 | 0x02 all linux/fd.h | ||
69 | 0x03 all linux/hdreg.h | ||
70 | 0x04 D2-DC linux/umsdos_fs.h Dead since 2.6.11, but don't reuse these. | ||
71 | 0x06 all linux/lp.h | ||
72 | 0x09 all linux/md.h | ||
73 | 0x12 all linux/fs.h | ||
74 | linux/blkpg.h | ||
75 | 0x1b all InfiniBand Subsystem <http://www.openib.org/> | ||
76 | 0x20 all drivers/cdrom/cm206.h | ||
77 | 0x22 all scsi/sg.h | ||
78 | '#' 00-3F IEEE 1394 Subsystem Block for the entire subsystem | ||
79 | '1' 00-1F <linux/timepps.h> PPS kit from Ulrich Windl | ||
80 | <ftp://ftp.de.kernel.org/pub/linux/daemons/ntp/PPS/> | ||
81 | '8' all SNP8023 advanced NIC card | ||
82 | <mailto:mcr@solidum.com> | ||
83 | 'A' 00-1F linux/apm_bios.h | ||
84 | 'B' C0-FF advanced bbus | ||
85 | <mailto:maassen@uni-freiburg.de> | ||
86 | 'C' all linux/soundcard.h | ||
87 | 'D' all asm-s390/dasd.h | ||
88 | 'E' all linux/input.h | ||
89 | 'F' all linux/fb.h | ||
90 | 'H' all linux/hiddev.h | ||
91 | 'I' all linux/isdn.h | ||
92 | 'J' 00-1F drivers/scsi/gdth_ioctl.h | ||
93 | 'K' all linux/kd.h | ||
94 | 'L' 00-1F linux/loop.h | ||
95 | 'L' 20-2F driver/usb/misc/vstusb.h | ||
96 | 'L' E0-FF linux/ppdd.h encrypted disk device driver | ||
97 | <http://linux01.gwdg.de/~alatham/ppdd.html> | ||
98 | 'M' all linux/soundcard.h | ||
99 | 'N' 00-1F drivers/usb/scanner.h | ||
100 | 'P' all linux/soundcard.h | ||
101 | 'Q' all linux/soundcard.h | ||
102 | 'R' 00-1F linux/random.h | ||
103 | 'S' all linux/cdrom.h conflict! | ||
104 | 'S' 80-81 scsi/scsi_ioctl.h conflict! | ||
105 | 'S' 82-FF scsi/scsi.h conflict! | ||
106 | 'T' all linux/soundcard.h conflict! | ||
107 | 'T' all asm-i386/ioctls.h conflict! | ||
108 | 'U' 00-EF linux/drivers/usb/usb.h | ||
109 | 'V' all linux/vt.h | ||
110 | 'W' 00-1F linux/watchdog.h conflict! | ||
111 | 'W' 00-1F linux/wanrouter.h conflict! | ||
112 | 'X' all linux/xfs_fs.h | ||
113 | 'Y' all linux/cyclades.h | ||
114 | '[' 00-07 linux/usb/usbtmc.h USB Test and Measurement Devices | ||
115 | <mailto:gregkh@suse.de> | ||
116 | 'a' all ATM on linux | ||
117 | <http://lrcwww.epfl.ch/linux-atm/magic.html> | ||
118 | 'b' 00-FF bit3 vme host bridge | ||
119 | <mailto:natalia@nikhefk.nikhef.nl> | ||
120 | 'c' 00-7F linux/comstats.h conflict! | ||
121 | 'c' 00-7F linux/coda.h conflict! | ||
122 | 'c' 80-9F asm-s390/chsc.h | ||
123 | 'd' 00-FF linux/char/drm/drm/h conflict! | ||
124 | 'd' 00-DF linux/video_decoder.h conflict! | ||
125 | 'd' F0-FF linux/digi1.h | ||
126 | 'e' all linux/digi1.h conflict! | ||
127 | 'e' 00-1F linux/video_encoder.h conflict! | ||
128 | 'e' 00-1F net/irda/irtty.h conflict! | ||
129 | 'f' 00-1F linux/ext2_fs.h | ||
130 | 'h' 00-7F Charon filesystem | ||
131 | <mailto:zapman@interlan.net> | ||
132 | 'i' 00-3F linux/i2o.h | ||
133 | 'j' 00-3F linux/joystick.h | ||
134 | 'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system | ||
135 | <http://mikonos.dia.unisa.it/tcfs> | ||
136 | 'l' 40-7F linux/udf_fs_i.h in development: | ||
137 | <http://sourceforge.net/projects/linux-udf/> | ||
138 | 'm' all linux/mtio.h conflict! | ||
139 | 'm' all linux/soundcard.h conflict! | ||
140 | 'm' all linux/synclink.h conflict! | ||
141 | 'm' 00-1F net/irda/irmod.h conflict! | ||
142 | 'n' 00-7F linux/ncp_fs.h | ||
143 | 'n' E0-FF video/matrox.h matroxfb | ||
144 | 'o' 00-1F fs/ocfs2/ocfs2_fs.h OCFS2 | ||
145 | 'p' 00-0F linux/phantom.h conflict! (OpenHaptics needs this) | ||
146 | 'p' 00-3F linux/mc146818rtc.h conflict! | ||
147 | 'p' 40-7F linux/nvram.h | ||
148 | 'p' 80-9F user-space parport | ||
149 | <mailto:tim@cyberelk.net> | ||
150 | 'q' 00-1F linux/serio.h | ||
151 | 'q' 80-FF Internet PhoneJACK, Internet LineJACK | ||
152 | <http://www.quicknet.net> | ||
153 | 'r' 00-1F linux/msdos_fs.h | ||
154 | 's' all linux/cdk.h | ||
155 | 't' 00-7F linux/if_ppp.h | ||
156 | 't' 80-8F linux/isdn_ppp.h | ||
157 | 'u' 00-1F linux/smb_fs.h | ||
158 | 'v' 00-1F linux/ext2_fs.h conflict! | ||
159 | 'v' all linux/videodev.h conflict! | ||
160 | 'w' all CERN SCI driver | ||
161 | 'y' 00-1F packet based user level communications | ||
162 | <mailto:zapman@interlan.net> | ||
163 | 'z' 00-3F CAN bus card | ||
164 | <mailto:hdstich@connectu.ulm.circular.de> | ||
165 | 'z' 40-7F CAN bus card | ||
166 | <mailto:oe@port.de> | ||
167 | 0x80 00-1F linux/fb.h | ||
168 | 0x81 00-1F linux/videotext.h | ||
169 | 0x89 00-06 asm-i386/sockios.h | ||
170 | 0x89 0B-DF linux/sockios.h | ||
171 | 0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range | ||
172 | 0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range | ||
173 | 0x8B all linux/wireless.h | ||
174 | 0x8C 00-3F WiNRADiO driver | ||
175 | <http://www.proximity.com.au/~brian/winradio/> | ||
176 | 0x90 00 drivers/cdrom/sbpcd.h | ||
177 | 0x93 60-7F linux/auto_fs.h | ||
178 | 0x99 00-0F 537-Addinboard driver | ||
179 | <mailto:buk@buks.ipn.de> | ||
180 | 0xA0 all linux/sdp/sdp.h Industrial Device Project | ||
181 | <mailto:kenji@bitgate.com> | ||
182 | 0xA3 80-8F Port ACL in development: | ||
183 | <mailto:tlewis@mindspring.com> | ||
184 | 0xA3 90-9F linux/dtlk.h | ||
185 | 0xAB 00-1F linux/nbd.h | ||
186 | 0xAC 00-1F linux/raw.h | ||
187 | 0xAD 00 Netfilter device in development: | ||
188 | <mailto:rusty@rustcorp.com.au> | ||
189 | 0xAE all linux/kvm.h Kernel-based Virtual Machine | ||
190 | <mailto:kvm-devel@lists.sourceforge.net> | ||
191 | 0xB0 all RATIO devices in development: | ||
192 | <mailto:vgo@ratio.de> | ||
193 | 0xB1 00-1F PPPoX <mailto:mostrows@styx.uwaterloo.ca> | ||
194 | 0xCB 00-1F CBM serial IEC bus in development: | ||
195 | <mailto:michael.klein@puffin.lb.shuttle.de> | ||
196 | 0xDD 00-3F ZFCP device driver see drivers/s390/scsi/ | ||
197 | <mailto:aherrman@de.ibm.com> | ||
198 | 0xF3 00-3F video/sisfb.h sisfb (in development) | ||
199 | <mailto:thomas@winischhofer.net> | ||
200 | 0xF4 00-1F video/mbxfb.h mbxfb | ||
201 | <mailto:raph@8d.com> | ||