Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 | ||
cb5a8b2c RD |
59 | This table lists ioctls visible from user land for Linux/x86. It contains |
60 | most drivers up to 2.6.31, but I know I am missing some. There has been | |
61 | no attempt to list non-X86 architectures or ioctls from drivers/staging/. | |
1da177e4 | 62 | |
cb5a8b2c | 63 | Code Seq#(hex) Include File Comments |
1da177e4 LT |
64 | ======================================================== |
65 | 0x00 00-1F linux/fs.h conflict! | |
66 | 0x00 00-1F scsi/scsi_ioctl.h conflict! | |
67 | 0x00 00-1F linux/fb.h conflict! | |
68 | 0x00 00-1F linux/wavefront.h conflict! | |
69 | 0x02 all linux/fd.h | |
70 | 0x03 all linux/hdreg.h | |
d5298802 | 71 | 0x04 D2-DC linux/umsdos_fs.h Dead since 2.6.11, but don't reuse these. |
1da177e4 | 72 | 0x06 all linux/lp.h |
cb5a8b2c RD |
73 | 0x09 all linux/raid/md_u.h |
74 | 0x10 00-0F drivers/char/s390/vmcp.h | |
d475f942 | 75 | 0x10 10-1F arch/s390/include/uapi/sclp_ctl.h |
1da177e4 LT |
76 | 0x12 all linux/fs.h |
77 | linux/blkpg.h | |
0ea6e611 | 78 | 0x1b all InfiniBand Subsystem <http://infiniband.sourceforge.net/> |
1da177e4 LT |
79 | 0x20 all drivers/cdrom/cm206.h |
80 | 0x22 all scsi/sg.h | |
81 | '#' 00-3F IEEE 1394 Subsystem Block for the entire subsystem | |
cb5a8b2c | 82 | '$' 00-0F linux/perf_counter.h, linux/perf_event.h |
aed69d2b | 83 | '&' 00-07 drivers/firewire/nosy-user.h |
1da177e4 LT |
84 | '1' 00-1F <linux/timepps.h> PPS kit from Ulrich Windl |
85 | <ftp://ftp.de.kernel.org/pub/linux/daemons/ntp/PPS/> | |
cb5a8b2c RD |
86 | '2' 01-04 linux/i2o.h |
87 | '3' 00-0F drivers/s390/char/raw3270.h conflict! | |
88 | '3' 00-1F linux/suspend_ioctls.h conflict! | |
89 | and kernel/power/user.c | |
1da177e4 LT |
90 | '8' all SNP8023 advanced NIC card |
91 | <mailto:mcr@solidum.com> | |
cba3345c | 92 | ';' 64-7F linux/vfio.h |
cb5a8b2c RD |
93 | '@' 00-0F linux/radeonfb.h conflict! |
94 | '@' 00-0F drivers/video/aty/aty128fb.c conflict! | |
95 | 'A' 00-1F linux/apm_bios.h conflict! | |
96 | 'A' 00-0F linux/agpgart.h conflict! | |
97 | and drivers/char/agp/compat_ioctl.h | |
98 | 'A' 00-7F sound/asound.h conflict! | |
99 | 'B' 00-1F linux/cciss_ioctl.h conflict! | |
100 | 'B' 00-0F include/linux/pmu.h conflict! | |
1da177e4 LT |
101 | 'B' C0-FF advanced bbus |
102 | <mailto:maassen@uni-freiburg.de> | |
cb5a8b2c RD |
103 | 'C' all linux/soundcard.h conflict! |
104 | 'C' 01-2F linux/capi.h conflict! | |
105 | 'C' F0-FF drivers/net/wan/cosa.h conflict! | |
07983f0e | 106 | 'D' all arch/s390/include/asm/dasd.h |
cb5a8b2c RD |
107 | 'D' 40-5F drivers/scsi/dpt/dtpi_ioctl.h |
108 | 'D' 05 drivers/scsi/pmcraid.h | |
109 | 'E' all linux/input.h conflict! | |
110 | 'E' 00-0F xen/evtchn.h conflict! | |
111 | 'F' all linux/fb.h conflict! | |
112 | 'F' 01-02 drivers/scsi/pmcraid.h conflict! | |
113 | 'F' 20 drivers/video/fsl-diu-fb.h conflict! | |
114 | 'F' 20 drivers/video/intelfb/intelfb.h conflict! | |
115 | 'F' 20 linux/ivtvfb.h conflict! | |
116 | 'F' 20 linux/matroxfb.h conflict! | |
117 | 'F' 20 drivers/video/aty/atyfb_base.c conflict! | |
118 | 'F' 00-0F video/da8xx-fb.h conflict! | |
119 | 'F' 80-8F linux/arcfb.h conflict! | |
120 | 'F' DD video/sstfb.h conflict! | |
121 | 'G' 00-3F drivers/misc/sgi-gru/grulib.h conflict! | |
122 | 'G' 00-0F linux/gigaset_dev.h conflict! | |
123 | 'H' 00-7F linux/hiddev.h conflict! | |
124 | 'H' 00-0F linux/hidraw.h conflict! | |
4cd7a7e7 | 125 | 'H' 01 linux/mei.h conflict! |
cb5a8b2c RD |
126 | 'H' 00-0F sound/asound.h conflict! |
127 | 'H' 20-40 sound/asound_fm.h conflict! | |
128 | 'H' 80-8F sound/sfnt_info.h conflict! | |
129 | 'H' 10-8F sound/emu10k1.h conflict! | |
130 | 'H' 10-1F sound/sb16_csp.h conflict! | |
131 | 'H' 10-1F sound/hda_hwdep.h conflict! | |
132 | 'H' 40-4F sound/hdspm.h conflict! | |
133 | 'H' 40-4F sound/hdsp.h conflict! | |
134 | 'H' 90 sound/usb/usx2y/usb_stream.h | |
3edce1cf | 135 | 'H' A0 uapi/linux/usb/cdc-wdm.h |
cb5a8b2c RD |
136 | 'H' C0-F0 net/bluetooth/hci.h conflict! |
137 | 'H' C0-DF net/bluetooth/hidp/hidp.h conflict! | |
138 | 'H' C0-DF net/bluetooth/cmtp/cmtp.h conflict! | |
139 | 'H' C0-DF net/bluetooth/bnep/bnep.h conflict! | |
5dc0c983 | 140 | 'H' F1 linux/hid-roccat.h <mailto:erazor_de@users.sourceforge.net> |
82fbb4f7 | 141 | 'H' F8-FA sound/firewire.h |
cb5a8b2c RD |
142 | 'I' all linux/isdn.h conflict! |
143 | 'I' 00-0F drivers/isdn/divert/isdn_divert.h conflict! | |
144 | 'I' 40-4F linux/mISDNif.h conflict! | |
1da177e4 LT |
145 | 'J' 00-1F drivers/scsi/gdth_ioctl.h |
146 | 'K' all linux/kd.h | |
cb5a8b2c RD |
147 | 'L' 00-1F linux/loop.h conflict! |
148 | 'L' 10-1F drivers/scsi/mpt2sas/mpt2sas_ctl.h conflict! | |
1da177e4 LT |
149 | 'L' E0-FF linux/ppdd.h encrypted disk device driver |
150 | <http://linux01.gwdg.de/~alatham/ppdd.html> | |
cb5a8b2c RD |
151 | 'M' all linux/soundcard.h conflict! |
152 | 'M' 01-16 mtd/mtd-abi.h conflict! | |
153 | and drivers/mtd/mtdchar.c | |
154 | 'M' 01-03 drivers/scsi/megaraid/megaraid_sas.h | |
155 | 'M' 00-0F drivers/video/fsl-diu-fb.h conflict! | |
1da177e4 | 156 | 'N' 00-1F drivers/usb/scanner.h |
b60503ba | 157 | 'N' 40-7F drivers/block/nvme.c |
cb5a8b2c RD |
158 | 'O' 00-06 mtd/ubi-user.h UBI |
159 | 'P' all linux/soundcard.h conflict! | |
160 | 'P' 60-6F sound/sscape_ioctl.h conflict! | |
161 | 'P' 00-0F drivers/usb/class/usblp.c conflict! | |
1da177e4 | 162 | 'Q' all linux/soundcard.h |
cb5a8b2c RD |
163 | 'R' 00-1F linux/random.h conflict! |
164 | 'R' 01 linux/rfkill.h conflict! | |
cb5a8b2c | 165 | 'R' C0-DF net/bluetooth/rfcomm.h |
1da177e4 LT |
166 | 'S' all linux/cdrom.h conflict! |
167 | 'S' 80-81 scsi/scsi_ioctl.h conflict! | |
168 | 'S' 82-FF scsi/scsi.h conflict! | |
cb5a8b2c | 169 | 'S' 00-7F sound/asequencer.h conflict! |
1da177e4 | 170 | 'T' all linux/soundcard.h conflict! |
cb5a8b2c | 171 | 'T' 00-AF sound/asound.h conflict! |
07983f0e | 172 | 'T' all arch/x86/include/asm/ioctls.h conflict! |
cb5a8b2c RD |
173 | 'T' C0-DF linux/if_tun.h conflict! |
174 | 'U' all sound/asound.h conflict! | |
cb5a8b2c RD |
175 | 'U' 00-CF linux/uinput.h conflict! |
176 | 'U' 00-EF linux/usbdevice_fs.h | |
177 | 'U' C0-CF drivers/bluetooth/hci_uart.h | |
178 | 'V' all linux/vt.h conflict! | |
179 | 'V' all linux/videodev2.h conflict! | |
180 | 'V' C0 linux/ivtvfb.h conflict! | |
181 | 'V' C0 linux/ivtv.h conflict! | |
182 | 'V' C0 media/davinci/vpfe_capture.h conflict! | |
183 | 'V' C0 media/si4713.h conflict! | |
1da177e4 | 184 | 'W' 00-1F linux/watchdog.h conflict! |
a786a7c0 | 185 | 'W' 00-1F linux/wanrouter.h conflict! (pre 3.9) |
cb5a8b2c RD |
186 | 'W' 00-3F sound/asound.h conflict! |
187 | 'X' all fs/xfs/xfs_fs.h conflict! | |
188 | and fs/xfs/linux-2.6/xfs_ioctl32.h | |
189 | and include/linux/falloc.h | |
190 | and linux/fs.h | |
191 | 'X' all fs/ocfs2/ocfs_fs.h conflict! | |
192 | 'X' 01 linux/pktcdvd.h conflict! | |
1da177e4 | 193 | 'Y' all linux/cyclades.h |
cb5a8b2c RD |
194 | 'Z' 14-15 drivers/message/fusion/mptctl.h |
195 | '[' 00-07 linux/usb/tmc.h USB Test and Measurement Devices | |
bc5bca53 | 196 | <mailto:gregkh@linuxfoundation.org> |
cb5a8b2c | 197 | 'a' all linux/atm*.h, linux/sonet.h ATM on linux |
0ea6e611 | 198 | <http://lrcwww.epfl.ch/> |
cb5a8b2c | 199 | 'b' 00-FF conflict! bit3 vme host bridge |
1da177e4 | 200 | <mailto:natalia@nikhefk.nikhef.nl> |
cb5a8b2c | 201 | 'c' all linux/cm4000_cs.h conflict! |
1da177e4 LT |
202 | 'c' 00-7F linux/comstats.h conflict! |
203 | 'c' 00-7F linux/coda.h conflict! | |
cb5a8b2c RD |
204 | 'c' 00-1F linux/chio.h conflict! |
205 | 'c' 80-9F arch/s390/include/asm/chsc.h conflict! | |
206 | 'c' A0-AF arch/x86/include/asm/msr.h conflict! | |
1da177e4 | 207 | 'd' 00-FF linux/char/drm/drm/h conflict! |
cb5a8b2c | 208 | 'd' 02-40 pcmcia/ds.h conflict! |
1da177e4 LT |
209 | 'd' F0-FF linux/digi1.h |
210 | 'e' all linux/digi1.h conflict! | |
cb5a8b2c RD |
211 | 'e' 00-1F drivers/net/irda/irtty-sir.h conflict! |
212 | 'f' 00-1F linux/ext2_fs.h conflict! | |
213 | 'f' 00-1F linux/ext3_fs.h conflict! | |
214 | 'f' 00-0F fs/jfs/jfs_dinode.h conflict! | |
215 | 'f' 00-0F fs/ext4/ext4.h conflict! | |
216 | 'f' 00-0F linux/fs.h conflict! | |
217 | 'f' 00-0F fs/ocfs2/ocfs2_fs.h conflict! | |
218 | 'g' 00-0F linux/usb/gadgetfs.h | |
219 | 'g' 20-2F linux/usb/g_printer.h | |
220 | 'h' 00-7F conflict! Charon filesystem | |
1da177e4 | 221 | <mailto:zapman@interlan.net> |
cb5a8b2c | 222 | 'h' 00-1F linux/hpet.h conflict! |
a051f71c | 223 | 'h' 80-8F fs/hfsplus/ioctl.c |
cb5a8b2c RD |
224 | 'i' 00-3F linux/i2o-dev.h conflict! |
225 | 'i' 0B-1F linux/ipmi.h conflict! | |
226 | 'i' 80-8F linux/i8k.h | |
1da177e4 | 227 | 'j' 00-3F linux/joystick.h |
cb5a8b2c RD |
228 | 'k' 00-0F linux/spi/spidev.h conflict! |
229 | 'k' 00-05 video/kyro.h conflict! | |
43139a61 | 230 | 'k' 10-17 linux/hsi/hsi_char.h HSI character device |
1da177e4 | 231 | 'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system |
0ea6e611 | 232 | <http://web.archive.org/web/*/http://mikonos.dia.unisa.it/tcfs> |
1da177e4 | 233 | 'l' 40-7F linux/udf_fs_i.h in development: |
98766fbe | 234 | <http://sourceforge.net/projects/linux-udf/> |
cb5a8b2c | 235 | 'm' 00-09 linux/mmtimer.h conflict! |
1da177e4 LT |
236 | 'm' all linux/mtio.h conflict! |
237 | 'm' all linux/soundcard.h conflict! | |
238 | 'm' all linux/synclink.h conflict! | |
cb5a8b2c RD |
239 | 'm' 00-19 drivers/message/fusion/mptctl.h conflict! |
240 | 'm' 00 drivers/scsi/megaraid/megaraid_ioctl.h conflict! | |
1da177e4 | 241 | 'm' 00-1F net/irda/irmod.h conflict! |
cb5a8b2c | 242 | 'n' 00-7F linux/ncp_fs.h and fs/ncpfs/ioctl.c |
1392e3b3 | 243 | 'n' 80-8F linux/nilfs2_fs.h NILFS2 |
cb5a8b2c | 244 | 'n' E0-FF linux/matroxfb.h matroxfb |
7f68fc28 | 245 | 'o' 00-1F fs/ocfs2/ocfs2_fs.h OCFS2 |
cb5a8b2c RD |
246 | 'o' 00-03 mtd/ubi-user.h conflict! (OCFS2 and UBI overlaps) |
247 | 'o' 40-41 mtd/ubi-user.h UBI | |
248 | 'o' 01-A1 linux/dvb/*.h DVB | |
cef2cf07 | 249 | 'p' 00-0F linux/phantom.h conflict! (OpenHaptics needs this) |
cb5a8b2c | 250 | 'p' 00-1F linux/rtc.h conflict! |
cef2cf07 | 251 | 'p' 00-3F linux/mc146818rtc.h conflict! |
1da177e4 | 252 | 'p' 40-7F linux/nvram.h |
cb5a8b2c | 253 | 'p' 80-9F linux/ppdev.h user-space parport |
1da177e4 | 254 | <mailto:tim@cyberelk.net> |
717c0336 | 255 | 'p' A1-A5 linux/pps.h LinuxPPS |
eae9d2ba | 256 | <mailto:giometti@linux.it> |
1da177e4 | 257 | 'q' 00-1F linux/serio.h |
cb5a8b2c | 258 | 'q' 80-FF linux/telephony.h Internet PhoneJACK, Internet LineJACK |
0ea6e611 | 259 | linux/ixjuser.h <http://web.archive.org/web/*/http://www.quicknet.net> |
cb5a8b2c | 260 | 'r' 00-1F linux/msdos_fs.h and fs/fat/dir.c |
1da177e4 | 261 | 's' all linux/cdk.h |
bf7daebb | 262 | 't' 00-7F linux/ppp-ioctl.h |
1da177e4 | 263 | 't' 80-8F linux/isdn_ppp.h |
cb5a8b2c | 264 | 't' 90 linux/toshiba.h |
2116b7a4 | 265 | 'u' 00-1F linux/smb_fs.h gone |
5f708812 | 266 | 'u' 20-3F linux/uvcvideo.h USB video class host driver |
cb5a8b2c RD |
267 | 'v' 00-1F linux/ext2_fs.h conflict! |
268 | 'v' 00-1F linux/fs.h conflict! | |
269 | 'v' 00-0F linux/sonypi.h conflict! | |
cb5a8b2c | 270 | 'v' C0-FF linux/meye.h conflict! |
1da177e4 LT |
271 | 'w' all CERN SCI driver |
272 | 'y' 00-1F packet based user level communications | |
273 | <mailto:zapman@interlan.net> | |
cb5a8b2c | 274 | 'z' 00-3F CAN bus card conflict! |
1da177e4 | 275 | <mailto:hdstich@connectu.ulm.circular.de> |
cb5a8b2c | 276 | 'z' 40-7F CAN bus card conflict! |
1da177e4 | 277 | <mailto:oe@port.de> |
cb5a8b2c | 278 | 'z' 10-4F drivers/s390/crypto/zcrypt_api.h conflict! |
474966ee | 279 | '|' 00-7F linux/media.h |
1da177e4 | 280 | 0x80 00-1F linux/fb.h |
07983f0e | 281 | 0x89 00-06 arch/x86/include/asm/sockios.h |
1da177e4 LT |
282 | 0x89 0B-DF linux/sockios.h |
283 | 0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range | |
cb5a8b2c | 284 | 0x89 E0-EF linux/dn.h PROTOPRIVATE range |
1da177e4 LT |
285 | 0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range |
286 | 0x8B all linux/wireless.h | |
287 | 0x8C 00-3F WiNRADiO driver | |
0ea6e611 | 288 | <http://www.winradio.com.au/> |
1da177e4 | 289 | 0x90 00 drivers/cdrom/sbpcd.h |
cb5a8b2c | 290 | 0x92 00-0F drivers/usb/mon/mon_bin.c |
1da177e4 | 291 | 0x93 60-7F linux/auto_fs.h |
cb5a8b2c | 292 | 0x94 all fs/btrfs/ioctl.h |
fc7f99cf | 293 | 0x97 00-7F fs/ceph/ioctl.h Ceph file system |
1da177e4 LT |
294 | 0x99 00-0F 537-Addinboard driver |
295 | <mailto:buk@buks.ipn.de> | |
296 | 0xA0 all linux/sdp/sdp.h Industrial Device Project | |
297 | <mailto:kenji@bitgate.com> | |
ea41b1e5 | 298 | 0xA2 00-0F arch/tile/include/asm/hardwall.h |
1da177e4 LT |
299 | 0xA3 80-8F Port ACL in development: |
300 | <mailto:tlewis@mindspring.com> | |
301 | 0xA3 90-9F linux/dtlk.h | |
302 | 0xAB 00-1F linux/nbd.h | |
303 | 0xAC 00-1F linux/raw.h | |
304 | 0xAD 00 Netfilter device in development: | |
cb5a8b2c | 305 | <mailto:rusty@rustcorp.com.au> |
258ac8e0 | 306 | 0xAE all linux/kvm.h Kernel-based Virtual Machine |
0aaeb3b1 | 307 | <mailto:kvm@vger.kernel.org> |
6db71994 | 308 | 0xAF 00-1F linux/fsl_hypervisor.h Freescale hypervisor |
1da177e4 LT |
309 | 0xB0 all RATIO devices in development: |
310 | <mailto:vgo@ratio.de> | |
311 | 0xB1 00-1F PPPoX <mailto:mostrows@styx.uwaterloo.ca> | |
cb87ea28 | 312 | 0xB3 00 linux/mmc/ioctl.h |
cb5a8b2c | 313 | 0xC0 00-0F linux/usb/iowarrior.h |
1da177e4 LT |
314 | 0xCB 00-1F CBM serial IEC bus in development: |
315 | <mailto:michael.klein@puffin.lb.shuttle.de> | |
cb5a8b2c RD |
316 | 0xCD 01 linux/reiserfs_fs.h |
317 | 0xCF 02 fs/cifs/ioctl.c | |
318 | 0xDB 00-0F drivers/char/mwave/mwavepub.h | |
1da177e4 LT |
319 | 0xDD 00-3F ZFCP device driver see drivers/s390/scsi/ |
320 | <mailto:aherrman@de.ibm.com> | |
cb5a8b2c | 321 | 0xF3 00-3F drivers/usb/misc/sisusbvga/sisusb.h sisfb (in development) |
1da177e4 | 322 | <mailto:thomas@winischhofer.net> |
1ce4d390 RA |
323 | 0xF4 00-1F video/mbxfb.h mbxfb |
324 | <mailto:raph@8d.com> | |
14d01ff5 MD |
325 | 0xF6 all LTTng Linux Trace Toolkit Next Generation |
326 | <mailto:mathieu.desnoyers@efficios.com> | |
cb5a8b2c | 327 | 0xFD all linux/dm-ioctl.h |