Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1=============
2Ioctl Numbers
3=============
4
519 October 1999
6
7Michael Elizabeth Chastain
8<mec@shout.net>
9
10If you are adding new ioctl's to the kernel, you should use the _IO
11macros defined in <linux/ioctl.h>:
12
13 ====== ===========================
14 macro parameters
15 ====== ===========================
16 _IO none
17 _IOW write (read from userspace)
18 _IOR read (write to userpace)
19 _IOWR write and read
20 ====== ===========================
21
22'Write' and 'read' are from the user's point of view, just like the
23system calls 'write' and 'read'. For example, a SET_FOO ioctl would
24be _IOW, although the kernel would actually read data from user space;
25a GET_FOO ioctl would be _IOR, although the kernel would actually write
26data to user space.
27
28The first argument to the macros is an identifying letter or number from
29the table below. Because of the large number of drivers, many drivers
30share a partial letter with other drivers.
31
32If you are writing a driver for a new device and need a letter, pick an
33unused block with enough room for expansion: 32 to 256 ioctl commands
34should suffice. You can register the block by patching this file and
35submitting the patch through :doc:`usual patch submission process
36</process/submitting-patches>`.
37
38The second argument is a sequence number to distinguish ioctls from each
39other. The third argument (not applicable to _IO) is the type of the data
40going into the kernel or coming out of the kernel (e.g. 'int' or
41'struct foo').
42
43.. note::
44 Do NOT use sizeof(arg) as the third argument as this results in your
45 ioctl thinking it passes an argument of type size_t.
46
47Some devices use their major number as the identifier; this is OK, as
48long as it is unique. Some devices are irregular and don't follow any
49convention at all.
50
51Following this convention is good because:
52
53(1) Keeping the ioctl's globally unique helps error checking:
54 if a program calls an ioctl on the wrong device, it will get an
55 error rather than some unexpected behaviour.
56
57(2) The 'strace' build procedure automatically finds ioctl numbers
58 defined with the macros.
59
60(3) 'strace' can decode numbers back into useful names when the
61 numbers are unique.
62
63(4) People looking for ioctls can grep for them more easily when
64 this convention is used to define the ioctl numbers.
65
66(5) When following the convention, the driver code can use generic
67 code to copy the parameters between user and kernel space.
68
69This table lists ioctls visible from userland, excluding ones from
70drivers/staging/.
71
72==== ===== ========================================================= ================================================================
73Code Seq# Include File Comments
74 (hex)
75==== ===== ========================================================= ================================================================
760x00 00-1F linux/fs.h conflict!
770x00 00-1F scsi/scsi_ioctl.h conflict!
780x00 00-1F linux/fb.h conflict!
790x00 00-1F linux/wavefront.h conflict!
800x02 all linux/fd.h
810x03 all linux/hdreg.h
820x04 D2-DC linux/umsdos_fs.h Dead since 2.6.11, but don't reuse these.
830x06 all linux/lp.h
840x07 9F-D0 linux/vmw_vmci_defs.h, uapi/linux/vm_sockets.h
850x09 all linux/raid/md_u.h
860x10 00-0F drivers/char/s390/vmcp.h
870x10 10-1F arch/s390/include/uapi/sclp_ctl.h
880x10 20-2F arch/s390/include/uapi/asm/hypfs.h
890x12 all linux/fs.h BLK* ioctls
90 linux/blkpg.h
91 linux/blkzoned.h
92 linux/blk-crypto.h
930x15 all linux/fs.h FS_IOC_* ioctls
940x1b all InfiniBand Subsystem
95 <http://infiniband.sourceforge.net/>
960x20 all drivers/cdrom/cm206.h
970x22 all scsi/sg.h
980x3E 00-0F linux/counter.h <mailto:linux-iio@vger.kernel.org>
99'!' 00-1F uapi/linux/seccomp.h
100'#' 00-3F IEEE 1394 Subsystem
101 Block for the entire subsystem
102'$' 00-0F linux/perf_counter.h, linux/perf_event.h
103'%' 00-0F include/uapi/linux/stm.h System Trace Module subsystem
104 <mailto:alexander.shishkin@linux.intel.com>
105'&' 00-07 drivers/firewire/nosy-user.h
106'*' 00-1F uapi/linux/user_events.h User Events Subsystem
107 <mailto:linux-trace-kernel@vger.kernel.org>
108'1' 00-1F linux/timepps.h PPS kit from Ulrich Windl
109 <ftp://ftp.de.kernel.org/pub/linux/daemons/ntp/PPS/>
110'2' 01-04 linux/i2o.h
111'3' 00-0F drivers/s390/char/raw3270.h conflict!
112'3' 00-1F linux/suspend_ioctls.h, conflict!
113 kernel/power/user.c
114'8' all SNP8023 advanced NIC card
115 <mailto:mcr@solidum.com>
116';' 64-7F linux/vfio.h
117';' 80-FF linux/iommufd.h
118'=' 00-3f uapi/linux/ptp_clock.h <mailto:richardcochran@gmail.com>
119'@' 00-0F linux/radeonfb.h conflict!
120'@' 00-0F drivers/video/aty/aty128fb.c conflict!
121'A' 00-1F linux/apm_bios.h conflict!
122'A' 00-0F linux/agpgart.h, conflict!
123 drivers/char/agp/compat_ioctl.h
124'A' 00-7F sound/asound.h conflict!
125'B' 00-1F linux/cciss_ioctl.h conflict!
126'B' 00-0F include/linux/pmu.h conflict!
127'B' C0-FF advanced bbus <mailto:maassen@uni-freiburg.de>
128'B' 00-0F xen/xenbus_dev.h conflict!
129'C' all linux/soundcard.h conflict!
130'C' 01-2F linux/capi.h conflict!
131'C' F0-FF drivers/net/wan/cosa.h conflict!
132'D' all arch/s390/include/asm/dasd.h
133'D' 40-5F drivers/scsi/dpt/dtpi_ioctl.h Dead since 2022
134'D' 05 drivers/scsi/pmcraid.h
135'E' all linux/input.h conflict!
136'E' 00-0F xen/evtchn.h conflict!
137'F' all linux/fb.h conflict!
138'F' 01-02 drivers/scsi/pmcraid.h conflict!
139'F' 20 drivers/video/fsl-diu-fb.h conflict!
140'F' 20 linux/ivtvfb.h conflict!
141'F' 20 linux/matroxfb.h conflict!
142'F' 20 drivers/video/aty/atyfb_base.c conflict!
143'F' 00-0F video/da8xx-fb.h conflict!
144'F' 80-8F linux/arcfb.h conflict!
145'F' DD video/sstfb.h conflict!
146'G' 00-3F drivers/misc/sgi-gru/grulib.h conflict!
147'G' 00-0F xen/gntalloc.h, xen/gntdev.h conflict!
148'H' 00-7F linux/hiddev.h conflict!
149'H' 00-0F linux/hidraw.h conflict!
150'H' 01 linux/mei.h conflict!
151'H' 02 linux/mei.h conflict!
152'H' 03 linux/mei.h conflict!
153'H' 00-0F sound/asound.h conflict!
154'H' 20-40 sound/asound_fm.h conflict!
155'H' 80-8F sound/sfnt_info.h conflict!
156'H' 10-8F sound/emu10k1.h conflict!
157'H' 10-1F sound/sb16_csp.h conflict!
158'H' 10-1F sound/hda_hwdep.h conflict!
159'H' 40-4F sound/hdspm.h conflict!
160'H' 40-4F sound/hdsp.h conflict!
161'H' 90 sound/usb/usx2y/usb_stream.h
162'H' 00-0F uapi/misc/habanalabs.h conflict!
163'H' A0 uapi/linux/usb/cdc-wdm.h
164'H' C0-F0 net/bluetooth/hci.h conflict!
165'H' C0-DF net/bluetooth/hidp/hidp.h conflict!
166'H' C0-DF net/bluetooth/cmtp/cmtp.h conflict!
167'H' C0-DF net/bluetooth/bnep/bnep.h conflict!
168'H' F1 linux/hid-roccat.h <mailto:erazor_de@users.sourceforge.net>
169'H' F8-FA sound/firewire.h
170'I' all linux/isdn.h conflict!
171'I' 00-0F drivers/isdn/divert/isdn_divert.h conflict!
172'I' 40-4F linux/mISDNif.h conflict!
173'K' all linux/kd.h
174'L' 00-1F linux/loop.h conflict!
175'L' 10-1F drivers/scsi/mpt3sas/mpt3sas_ctl.h conflict!
176'L' E0-FF linux/ppdd.h encrypted disk device driver
177 <http://linux01.gwdg.de/~alatham/ppdd.html>
178'M' all linux/soundcard.h conflict!
179'M' 01-16 mtd/mtd-abi.h conflict!
180 and drivers/mtd/mtdchar.c
181'M' 01-03 drivers/scsi/megaraid/megaraid_sas.h
182'M' 00-0F drivers/video/fsl-diu-fb.h conflict!
183'N' 00-1F drivers/usb/scanner.h
184'N' 40-7F drivers/block/nvme.c
185'N' 80-8F uapi/linux/ntsync.h NT synchronization primitives
186 <mailto:wine-devel@winehq.org>
187'O' 00-06 mtd/ubi-user.h UBI
188'P' all linux/soundcard.h conflict!
189'P' 60-6F sound/sscape_ioctl.h conflict!
190'P' 00-0F drivers/usb/class/usblp.c conflict!
191'P' 01-09 drivers/misc/pci_endpoint_test.c conflict!
192'P' 00-0F xen/privcmd.h conflict!
193'P' 00-05 linux/tps6594_pfsm.h conflict!
194'Q' all linux/soundcard.h
195'R' 00-1F linux/random.h conflict!
196'R' 01 linux/rfkill.h conflict!
197'R' 20-2F linux/trace_mmap.h
198'R' C0-DF net/bluetooth/rfcomm.h
199'R' E0 uapi/linux/fsl_mc.h
200'S' all linux/cdrom.h conflict!
201'S' 80-81 scsi/scsi_ioctl.h conflict!
202'S' 82-FF scsi/scsi.h conflict!
203'S' 00-7F sound/asequencer.h conflict!
204'T' all linux/soundcard.h conflict!
205'T' 00-AF sound/asound.h conflict!
206'T' all arch/x86/include/asm/ioctls.h conflict!
207'T' C0-DF linux/if_tun.h conflict!
208'U' all sound/asound.h conflict!
209'U' 00-CF linux/uinput.h conflict!
210'U' 00-EF linux/usbdevice_fs.h
211'U' C0-CF drivers/bluetooth/hci_uart.h
212'V' all linux/vt.h conflict!
213'V' all linux/videodev2.h conflict!
214'V' C0 linux/ivtvfb.h conflict!
215'V' C0 linux/ivtv.h conflict!
216'V' C0 media/si4713.h conflict!
217'W' 00-1F linux/watchdog.h conflict!
218'W' 00-1F linux/wanrouter.h conflict! (pre 3.9)
219'W' 00-3F sound/asound.h conflict!
220'W' 40-5F drivers/pci/switch/switchtec.c
221'W' 60-61 linux/watch_queue.h
222'X' all fs/xfs/xfs_fs.h, conflict!
223 fs/xfs/linux-2.6/xfs_ioctl32.h,
224 include/linux/falloc.h,
225 linux/fs.h,
226'X' all fs/ocfs2/ocfs_fs.h conflict!
227'Z' 14-15 drivers/message/fusion/mptctl.h
228'[' 00-3F linux/usb/tmc.h USB Test and Measurement Devices
229 <mailto:gregkh@linuxfoundation.org>
230'a' all linux/atm*.h, linux/sonet.h ATM on linux
231 <http://lrcwww.epfl.ch/>
232'a' 00-0F drivers/crypto/qat/qat_common/adf_cfg_common.h conflict! qat driver
233'b' 00-FF conflict! bit3 vme host bridge
234 <mailto:natalia@nikhefk.nikhef.nl>
235'b' 00-0F linux/dma-buf.h conflict!
236'c' 00-7F linux/comstats.h conflict!
237'c' 00-7F linux/coda.h conflict!
238'c' 00-1F linux/chio.h conflict!
239'c' 80-9F arch/s390/include/asm/chsc.h conflict!
240'c' A0-AF arch/x86/include/asm/msr.h conflict!
241'd' 00-FF linux/char/drm/drm.h conflict!
242'd' 02-40 pcmcia/ds.h conflict!
243'd' F0-FF linux/digi1.h
244'e' all linux/digi1.h conflict!
245'f' 00-1F linux/ext2_fs.h conflict!
246'f' 00-1F linux/ext3_fs.h conflict!
247'f' 00-0F fs/jfs/jfs_dinode.h conflict!
248'f' 00-0F fs/ext4/ext4.h conflict!
249'f' 00-0F linux/fs.h conflict!
250'f' 00-0F fs/ocfs2/ocfs2_fs.h conflict!
251'f' 13-27 linux/fscrypt.h
252'f' 81-8F linux/fsverity.h
253'g' 00-0F linux/usb/gadgetfs.h
254'g' 20-2F linux/usb/g_printer.h
255'h' 00-7F conflict! Charon filesystem
256 <mailto:zapman@interlan.net>
257'h' 00-1F linux/hpet.h conflict!
258'h' 80-8F fs/hfsplus/ioctl.c
259'i' 00-3F linux/i2o-dev.h conflict!
260'i' 0B-1F linux/ipmi.h conflict!
261'i' 80-8F linux/i8k.h
262'i' 90-9F `linux/iio/*.h` IIO
263'j' 00-3F linux/joystick.h
264'k' 00-0F linux/spi/spidev.h conflict!
265'k' 00-05 video/kyro.h conflict!
266'k' 10-17 linux/hsi/hsi_char.h HSI character device
267'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system
268 <http://web.archive.org/web/%2A/http://mikonos.dia.unisa.it/tcfs>
269'l' 40-7F linux/udf_fs_i.h in development:
270 <https://github.com/pali/udftools>
271'm' 00-09 linux/mmtimer.h conflict!
272'm' all linux/mtio.h conflict!
273'm' all linux/soundcard.h conflict!
274'm' all linux/synclink.h conflict!
275'm' 00-19 drivers/message/fusion/mptctl.h conflict!
276'm' 00 drivers/scsi/megaraid/megaraid_ioctl.h conflict!
277'n' 00-7F linux/ncp_fs.h and fs/ncpfs/ioctl.c
278'n' 80-8F uapi/linux/nilfs2_api.h NILFS2
279'n' E0-FF linux/matroxfb.h matroxfb
280'o' 00-1F fs/ocfs2/ocfs2_fs.h OCFS2
281'o' 00-03 mtd/ubi-user.h conflict! (OCFS2 and UBI overlaps)
282'o' 40-41 mtd/ubi-user.h UBI
283'o' 01-A1 `linux/dvb/*.h` DVB
284'p' 00-0F linux/phantom.h conflict! (OpenHaptics needs this)
285'p' 00-1F linux/rtc.h conflict!
286'p' 40-7F linux/nvram.h
287'p' 80-9F linux/ppdev.h user-space parport
288 <mailto:tim@cyberelk.net>
289'p' A1-A5 linux/pps.h LinuxPPS
290'p' B1-B3 linux/pps_gen.h LinuxPPS
291 <mailto:giometti@linux.it>
292'q' 00-1F linux/serio.h
293'q' 80-FF linux/telephony.h Internet PhoneJACK, Internet LineJACK
294 linux/ixjuser.h <http://web.archive.org/web/%2A/http://www.quicknet.net>
295'r' 00-1F linux/msdos_fs.h and fs/fat/dir.c
296's' all linux/cdk.h
297't' 00-7F linux/ppp-ioctl.h
298't' 80-8F linux/isdn_ppp.h
299't' 90-91 linux/toshiba.h toshiba and toshiba_acpi SMM
300'u' 00-1F linux/smb_fs.h gone
301'u' 00-2F linux/ublk_cmd.h conflict!
302'u' 20-3F linux/uvcvideo.h USB video class host driver
303'u' 40-4f linux/udmabuf.h userspace dma-buf misc device
304'v' 00-1F linux/ext2_fs.h conflict!
305'v' 00-1F linux/fs.h conflict!
306'v' 00-0F linux/sonypi.h conflict!
307'v' 00-0F media/v4l2-subdev.h conflict!
308'v' 20-27 arch/powerpc/include/uapi/asm/vas-api.h VAS API
309'v' C0-FF linux/meye.h conflict!
310'w' all CERN SCI driver
311'y' 00-1F packet based user level communications
312 <mailto:zapman@interlan.net>
313'z' 00-3F CAN bus card conflict!
314 <mailto:hdstich@connectu.ulm.circular.de>
315'z' 40-7F CAN bus card conflict!
316 <mailto:oe@port.de>
317'z' 10-4F drivers/s390/crypto/zcrypt_api.h conflict!
318'|' 00-7F linux/media.h
319'|' 80-9F samples/ Any sample and example drivers
3200x80 00-1F linux/fb.h
3210x81 00-1F linux/vduse.h
3220x89 00-06 arch/x86/include/asm/sockios.h
3230x89 0B-DF linux/sockios.h
3240x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range
3250x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range
3260x8A 00-1F linux/eventpoll.h
3270x8B all linux/wireless.h
3280x8C 00-3F WiNRADiO driver
329 <http://www.winradio.com.au/>
3300x90 00 drivers/cdrom/sbpcd.h
3310x92 00-0F drivers/usb/mon/mon_bin.c
3320x93 60-7F linux/auto_fs.h
3330x94 all fs/btrfs/ioctl.h Btrfs filesystem
334 and linux/fs.h some lifted to vfs/generic
3350x97 00-7F fs/ceph/ioctl.h Ceph file system
3360x99 00-0F 537-Addinboard driver
337 <mailto:buk@buks.ipn.de>
3380x9A 00-0F include/uapi/fwctl/fwctl.h
3390xA0 all linux/sdp/sdp.h Industrial Device Project
340 <mailto:kenji@bitgate.com>
3410xA1 0 linux/vtpm_proxy.h TPM Emulator Proxy Driver
3420xA2 all uapi/linux/acrn.h ACRN hypervisor
3430xA3 80-8F Port ACL in development:
344 <mailto:tlewis@mindspring.com>
3450xA3 90-9F linux/dtlk.h
3460xA4 00-1F uapi/linux/tee.h Generic TEE subsystem
3470xA4 00-1F uapi/asm/sgx.h <mailto:linux-sgx@vger.kernel.org>
3480xA5 01-05 linux/surface_aggregator/cdev.h Microsoft Surface Platform System Aggregator
349 <mailto:luzmaximilian@gmail.com>
3500xA5 20-2F linux/surface_aggregator/dtx.h Microsoft Surface DTX driver
351 <mailto:luzmaximilian@gmail.com>
3520xAA 00-3F linux/uapi/linux/userfaultfd.h
3530xAB 00-1F linux/nbd.h
3540xAC 00-1F linux/raw.h
3550xAD 00 Netfilter device in development:
356 <mailto:rusty@rustcorp.com.au>
3570xAE 00-1F linux/kvm.h Kernel-based Virtual Machine
358 <mailto:kvm@vger.kernel.org>
3590xAE 40-FF linux/kvm.h Kernel-based Virtual Machine
360 <mailto:kvm@vger.kernel.org>
3610xAE 20-3F linux/nitro_enclaves.h Nitro Enclaves
3620xAF 00-1F linux/fsl_hypervisor.h Freescale hypervisor
3630xB0 all RATIO devices in development:
364 <mailto:vgo@ratio.de>
3650xB1 00-1F PPPoX
366 <mailto:mostrows@styx.uwaterloo.ca>
3670xB2 00 arch/powerpc/include/uapi/asm/papr-vpd.h powerpc/pseries VPD API
368 <mailto:linuxppc-dev@lists.ozlabs.org>
3690xB2 01-02 arch/powerpc/include/uapi/asm/papr-sysparm.h powerpc/pseries system parameter API
370 <mailto:linuxppc-dev@lists.ozlabs.org>
3710xB2 03-05 arch/powerpc/include/uapi/asm/papr-indices.h powerpc/pseries indices API
372 <mailto:linuxppc-dev@lists.ozlabs.org>
3730xB2 06-07 arch/powerpc/include/uapi/asm/papr-platform-dump.h powerpc/pseries Platform Dump API
374 <mailto:linuxppc-dev@lists.ozlabs.org>
3750xB2 08 arch/powerpc/include/uapi/asm/papr-physical-attestation.h powerpc/pseries Physical Attestation API
376 <mailto:linuxppc-dev@lists.ozlabs.org>
3770xB3 00 linux/mmc/ioctl.h
3780xB4 00-0F linux/gpio.h <mailto:linux-gpio@vger.kernel.org>
3790xB5 00-0F uapi/linux/rpmsg.h <mailto:linux-remoteproc@vger.kernel.org>
3800xB6 all linux/fpga-dfl.h
3810xB7 all uapi/linux/remoteproc_cdev.h <mailto:linux-remoteproc@vger.kernel.org>
3820xB7 all uapi/linux/nsfs.h <mailto:Andrei Vagin <avagin@openvz.org>>
3830xB8 01-02 uapi/misc/mrvl_cn10k_dpi.h Marvell CN10K DPI driver
3840xB8 all uapi/linux/mshv.h Microsoft Hyper-V /dev/mshv driver
385 <mailto:linux-hyperv@vger.kernel.org>
3860xC0 00-0F linux/usb/iowarrior.h
3870xCA 00-0F uapi/misc/cxl.h Dead since 6.15
3880xCA 10-2F uapi/misc/ocxl.h
3890xCA 80-BF uapi/scsi/cxlflash_ioctl.h Dead since 6.15
3900xCB 00-1F CBM serial IEC bus in development:
391 <mailto:michael.klein@puffin.lb.shuttle.de>
3920xCC 00-0F drivers/misc/ibmvmc.h pseries VMC driver
3930xCD 01 linux/reiserfs_fs.h Dead since 6.13
3940xCE 01-02 uapi/linux/cxl_mem.h Compute Express Link Memory Devices
3950xCF 02 fs/smb/client/cifs_ioctl.h
3960xDB 00-0F drivers/char/mwave/mwavepub.h
3970xDD 00-3F ZFCP device driver see drivers/s390/scsi/
398 <mailto:aherrman@de.ibm.com>
3990xE5 00-3F linux/fuse.h
4000xEC 00-01 drivers/platform/chrome/cros_ec_dev.h ChromeOS EC driver
4010xEE 00-09 uapi/linux/pfrut.h Platform Firmware Runtime Update and Telemetry
4020xF3 00-3F drivers/usb/misc/sisusbvga/sisusb.h sisfb (in development)
403 <mailto:thomas@winischhofer.net>
4040xF6 all LTTng Linux Trace Toolkit Next Generation
405 <mailto:mathieu.desnoyers@efficios.com>
4060xF8 all arch/x86/include/uapi/asm/amd_hsmp.h AMD HSMP EPYC system management interface driver
407 <mailto:nchatrad@amd.com>
4080xF9 00-0F uapi/misc/amd-apml.h AMD side band system management interface driver
409 <mailto:naveenkrishna.chatradhi@amd.com>
4100xFD all linux/dm-ioctl.h
4110xFE all linux/isst_if.h
412==== ===== ========================================================= ================================================================