0001 =============
0002 Ioctl Numbers
0003 =============
0004
0005 19 October 1999
0006
0007 Michael Elizabeth Chastain
0008 <mec@shout.net>
0009
0010 If you are adding new ioctl's to the kernel, you should use the _IO
0011 macros defined in <linux/ioctl.h>:
0012
0013 ====== == ============================================
0014 _IO an ioctl with no parameters
0015 _IOW an ioctl with write parameters (copy_from_user)
0016 _IOR an ioctl with read parameters (copy_to_user)
0017 _IOWR an ioctl with both write and read parameters.
0018 ====== == ============================================
0019
0020 'Write' and 'read' are from the user's point of view, just like the
0021 system calls 'write' and 'read'. For example, a SET_FOO ioctl would
0022 be _IOW, although the kernel would actually read data from user space;
0023 a GET_FOO ioctl would be _IOR, although the kernel would actually write
0024 data to user space.
0025
0026 The first argument to _IO, _IOW, _IOR, or _IOWR is an identifying letter
0027 or number from the table below. Because of the large number of drivers,
0028 many drivers share a partial letter with other drivers.
0029
0030 If you are writing a driver for a new device and need a letter, pick an
0031 unused block with enough room for expansion: 32 to 256 ioctl commands.
0032 You can register the block by patching this file and submitting the
0033 patch to Linus Torvalds. Or you can e-mail me at <mec@shout.net> and
0034 I'll register one for you.
0035
0036 The second argument to _IO, _IOW, _IOR, or _IOWR is a sequence number
0037 to distinguish ioctls from each other. The third argument to _IOW,
0038 _IOR, or _IOWR is the type of the data going into the kernel or coming
0039 out of the kernel (e.g. 'int' or 'struct foo'). NOTE! Do NOT use
0040 sizeof(arg) as the third argument as this results in your ioctl thinking
0041 it passes an argument of type size_t.
0042
0043 Some devices use their major number as the identifier; this is OK, as
0044 long as it is unique. Some devices are irregular and don't follow any
0045 convention at all.
0046
0047 Following this convention is good because:
0048
0049 (1) Keeping the ioctl's globally unique helps error checking:
0050 if a program calls an ioctl on the wrong device, it will get an
0051 error rather than some unexpected behaviour.
0052
0053 (2) The 'strace' build procedure automatically finds ioctl numbers
0054 defined with _IO, _IOW, _IOR, or _IOWR.
0055
0056 (3) 'strace' can decode numbers back into useful names when the
0057 numbers are unique.
0058
0059 (4) People looking for ioctls can grep for them more easily when
0060 this convention is used to define the ioctl numbers.
0061
0062 (5) When following the convention, the driver code can use generic
0063 code to copy the parameters between user and kernel space.
0064
0065 This table lists ioctls visible from user land for Linux/x86. It contains
0066 most drivers up to 2.6.31, but I know I am missing some. There has been
0067 no attempt to list non-X86 architectures or ioctls from drivers/staging/.
0068
0069 ==== ===== ======================================================= ================================================================
0070 Code Seq# Include File Comments
0071 (hex)
0072 ==== ===== ======================================================= ================================================================
0073 0x00 00-1F linux/fs.h conflict!
0074 0x00 00-1F scsi/scsi_ioctl.h conflict!
0075 0x00 00-1F linux/fb.h conflict!
0076 0x00 00-1F linux/wavefront.h conflict!
0077 0x02 all linux/fd.h
0078 0x03 all linux/hdreg.h
0079 0x04 D2-DC linux/umsdos_fs.h Dead since 2.6.11, but don't reuse these.
0080 0x06 all linux/lp.h
0081 0x09 all linux/raid/md_u.h
0082 0x10 00-0F drivers/char/s390/vmcp.h
0083 0x10 10-1F arch/s390/include/uapi/sclp_ctl.h
0084 0x10 20-2F arch/s390/include/uapi/asm/hypfs.h
0085 0x12 all linux/fs.h
0086 linux/blkpg.h
0087 0x1b all InfiniBand Subsystem
0088 <http://infiniband.sourceforge.net/>
0089 0x20 all drivers/cdrom/cm206.h
0090 0x22 all scsi/sg.h
0091 0x3E 00-0F linux/counter.h <mailto:linux-iio@vger.kernel.org>
0092 '!' 00-1F uapi/linux/seccomp.h
0093 '#' 00-3F IEEE 1394 Subsystem
0094 Block for the entire subsystem
0095 '$' 00-0F linux/perf_counter.h, linux/perf_event.h
0096 '%' 00-0F include/uapi/linux/stm.h System Trace Module subsystem
0097 <mailto:alexander.shishkin@linux.intel.com>
0098 '&' 00-07 drivers/firewire/nosy-user.h
0099 '1' 00-1F linux/timepps.h PPS kit from Ulrich Windl
0100 <ftp://ftp.de.kernel.org/pub/linux/daemons/ntp/PPS/>
0101 '2' 01-04 linux/i2o.h
0102 '3' 00-0F drivers/s390/char/raw3270.h conflict!
0103 '3' 00-1F linux/suspend_ioctls.h, conflict!
0104 kernel/power/user.c
0105 '8' all SNP8023 advanced NIC card
0106 <mailto:mcr@solidum.com>
0107 ';' 64-7F linux/vfio.h
0108 '=' 00-3f uapi/linux/ptp_clock.h <mailto:richardcochran@gmail.com>
0109 '@' 00-0F linux/radeonfb.h conflict!
0110 '@' 00-0F drivers/video/aty/aty128fb.c conflict!
0111 'A' 00-1F linux/apm_bios.h conflict!
0112 'A' 00-0F linux/agpgart.h, conflict!
0113 drivers/char/agp/compat_ioctl.h
0114 'A' 00-7F sound/asound.h conflict!
0115 'B' 00-1F linux/cciss_ioctl.h conflict!
0116 'B' 00-0F include/linux/pmu.h conflict!
0117 'B' C0-FF advanced bbus <mailto:maassen@uni-freiburg.de>
0118 'B' 00-0F xen/xenbus_dev.h conflict!
0119 'C' all linux/soundcard.h conflict!
0120 'C' 01-2F linux/capi.h conflict!
0121 'C' F0-FF drivers/net/wan/cosa.h conflict!
0122 'D' all arch/s390/include/asm/dasd.h
0123 'D' 40-5F drivers/scsi/dpt/dtpi_ioctl.h Dead since 2022
0124 'D' 05 drivers/scsi/pmcraid.h
0125 'E' all linux/input.h conflict!
0126 'E' 00-0F xen/evtchn.h conflict!
0127 'F' all linux/fb.h conflict!
0128 'F' 01-02 drivers/scsi/pmcraid.h conflict!
0129 'F' 20 drivers/video/fsl-diu-fb.h conflict!
0130 'F' 20 drivers/video/intelfb/intelfb.h conflict!
0131 'F' 20 linux/ivtvfb.h conflict!
0132 'F' 20 linux/matroxfb.h conflict!
0133 'F' 20 drivers/video/aty/atyfb_base.c conflict!
0134 'F' 00-0F video/da8xx-fb.h conflict!
0135 'F' 80-8F linux/arcfb.h conflict!
0136 'F' DD video/sstfb.h conflict!
0137 'G' 00-3F drivers/misc/sgi-gru/grulib.h conflict!
0138 'G' 00-0F xen/gntalloc.h, xen/gntdev.h conflict!
0139 'H' 00-7F linux/hiddev.h conflict!
0140 'H' 00-0F linux/hidraw.h conflict!
0141 'H' 01 linux/mei.h conflict!
0142 'H' 02 linux/mei.h conflict!
0143 'H' 03 linux/mei.h conflict!
0144 'H' 00-0F sound/asound.h conflict!
0145 'H' 20-40 sound/asound_fm.h conflict!
0146 'H' 80-8F sound/sfnt_info.h conflict!
0147 'H' 10-8F sound/emu10k1.h conflict!
0148 'H' 10-1F sound/sb16_csp.h conflict!
0149 'H' 10-1F sound/hda_hwdep.h conflict!
0150 'H' 40-4F sound/hdspm.h conflict!
0151 'H' 40-4F sound/hdsp.h conflict!
0152 'H' 90 sound/usb/usx2y/usb_stream.h
0153 'H' 00-0F uapi/misc/habanalabs.h conflict!
0154 'H' A0 uapi/linux/usb/cdc-wdm.h
0155 'H' C0-F0 net/bluetooth/hci.h conflict!
0156 'H' C0-DF net/bluetooth/hidp/hidp.h conflict!
0157 'H' C0-DF net/bluetooth/cmtp/cmtp.h conflict!
0158 'H' C0-DF net/bluetooth/bnep/bnep.h conflict!
0159 'H' F1 linux/hid-roccat.h <mailto:erazor_de@users.sourceforge.net>
0160 'H' F8-FA sound/firewire.h
0161 'I' all linux/isdn.h conflict!
0162 'I' 00-0F drivers/isdn/divert/isdn_divert.h conflict!
0163 'I' 40-4F linux/mISDNif.h conflict!
0164 'K' all linux/kd.h
0165 'L' 00-1F linux/loop.h conflict!
0166 'L' 10-1F drivers/scsi/mpt3sas/mpt3sas_ctl.h conflict!
0167 'L' E0-FF linux/ppdd.h encrypted disk device driver
0168 <http://linux01.gwdg.de/~alatham/ppdd.html>
0169 'M' all linux/soundcard.h conflict!
0170 'M' 01-16 mtd/mtd-abi.h conflict!
0171 and drivers/mtd/mtdchar.c
0172 'M' 01-03 drivers/scsi/megaraid/megaraid_sas.h
0173 'M' 00-0F drivers/video/fsl-diu-fb.h conflict!
0174 'N' 00-1F drivers/usb/scanner.h
0175 'N' 40-7F drivers/block/nvme.c
0176 'O' 00-06 mtd/ubi-user.h UBI
0177 'P' all linux/soundcard.h conflict!
0178 'P' 60-6F sound/sscape_ioctl.h conflict!
0179 'P' 00-0F drivers/usb/class/usblp.c conflict!
0180 'P' 01-09 drivers/misc/pci_endpoint_test.c conflict!
0181 'P' 00-0F xen/privcmd.h conflict!
0182 'Q' all linux/soundcard.h
0183 'R' 00-1F linux/random.h conflict!
0184 'R' 01 linux/rfkill.h conflict!
0185 'R' C0-DF net/bluetooth/rfcomm.h
0186 'R' E0 uapi/linux/fsl_mc.h
0187 'S' all linux/cdrom.h conflict!
0188 'S' 80-81 scsi/scsi_ioctl.h conflict!
0189 'S' 82-FF scsi/scsi.h conflict!
0190 'S' 00-7F sound/asequencer.h conflict!
0191 'T' all linux/soundcard.h conflict!
0192 'T' 00-AF sound/asound.h conflict!
0193 'T' all arch/x86/include/asm/ioctls.h conflict!
0194 'T' C0-DF linux/if_tun.h conflict!
0195 'U' all sound/asound.h conflict!
0196 'U' 00-CF linux/uinput.h conflict!
0197 'U' 00-EF linux/usbdevice_fs.h
0198 'U' C0-CF drivers/bluetooth/hci_uart.h
0199 'V' all linux/vt.h conflict!
0200 'V' all linux/videodev2.h conflict!
0201 'V' C0 linux/ivtvfb.h conflict!
0202 'V' C0 linux/ivtv.h conflict!
0203 'V' C0 media/davinci/vpfe_capture.h conflict!
0204 'V' C0 media/si4713.h conflict!
0205 'W' 00-1F linux/watchdog.h conflict!
0206 'W' 00-1F linux/wanrouter.h conflict! (pre 3.9)
0207 'W' 00-3F sound/asound.h conflict!
0208 'W' 40-5F drivers/pci/switch/switchtec.c
0209 'W' 60-61 linux/watch_queue.h
0210 'X' all fs/xfs/xfs_fs.h, conflict!
0211 fs/xfs/linux-2.6/xfs_ioctl32.h,
0212 include/linux/falloc.h,
0213 linux/fs.h,
0214 'X' all fs/ocfs2/ocfs_fs.h conflict!
0215 'X' 01 linux/pktcdvd.h conflict!
0216 'Z' 14-15 drivers/message/fusion/mptctl.h
0217 '[' 00-3F linux/usb/tmc.h USB Test and Measurement Devices
0218 <mailto:gregkh@linuxfoundation.org>
0219 'a' all linux/atm*.h, linux/sonet.h ATM on linux
0220 <http://lrcwww.epfl.ch/>
0221 'a' 00-0F drivers/crypto/qat/qat_common/adf_cfg_common.h conflict! qat driver
0222 'b' 00-FF conflict! bit3 vme host bridge
0223 <mailto:natalia@nikhefk.nikhef.nl>
0224 'c' all linux/cm4000_cs.h conflict!
0225 'c' 00-7F linux/comstats.h conflict!
0226 'c' 00-7F linux/coda.h conflict!
0227 'c' 00-1F linux/chio.h conflict!
0228 'c' 80-9F arch/s390/include/asm/chsc.h conflict!
0229 'c' A0-AF arch/x86/include/asm/msr.h conflict!
0230 'd' 00-FF linux/char/drm/drm.h conflict!
0231 'd' 02-40 pcmcia/ds.h conflict!
0232 'd' F0-FF linux/digi1.h
0233 'e' all linux/digi1.h conflict!
0234 'f' 00-1F linux/ext2_fs.h conflict!
0235 'f' 00-1F linux/ext3_fs.h conflict!
0236 'f' 00-0F fs/jfs/jfs_dinode.h conflict!
0237 'f' 00-0F fs/ext4/ext4.h conflict!
0238 'f' 00-0F linux/fs.h conflict!
0239 'f' 00-0F fs/ocfs2/ocfs2_fs.h conflict!
0240 'f' 13-27 linux/fscrypt.h
0241 'f' 81-8F linux/fsverity.h
0242 'g' 00-0F linux/usb/gadgetfs.h
0243 'g' 20-2F linux/usb/g_printer.h
0244 'h' 00-7F conflict! Charon filesystem
0245 <mailto:zapman@interlan.net>
0246 'h' 00-1F linux/hpet.h conflict!
0247 'h' 80-8F fs/hfsplus/ioctl.c
0248 'i' 00-3F linux/i2o-dev.h conflict!
0249 'i' 0B-1F linux/ipmi.h conflict!
0250 'i' 80-8F linux/i8k.h
0251 'i' 90-9F `linux/iio/*.h` IIO
0252 'j' 00-3F linux/joystick.h
0253 'k' 00-0F linux/spi/spidev.h conflict!
0254 'k' 00-05 video/kyro.h conflict!
0255 'k' 10-17 linux/hsi/hsi_char.h HSI character device
0256 'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system
0257 <http://web.archive.org/web/%2A/http://mikonos.dia.unisa.it/tcfs>
0258 'l' 40-7F linux/udf_fs_i.h in development:
0259 <https://github.com/pali/udftools>
0260 'm' 00-09 linux/mmtimer.h conflict!
0261 'm' all linux/mtio.h conflict!
0262 'm' all linux/soundcard.h conflict!
0263 'm' all linux/synclink.h conflict!
0264 'm' 00-19 drivers/message/fusion/mptctl.h conflict!
0265 'm' 00 drivers/scsi/megaraid/megaraid_ioctl.h conflict!
0266 'n' 00-7F linux/ncp_fs.h and fs/ncpfs/ioctl.c
0267 'n' 80-8F uapi/linux/nilfs2_api.h NILFS2
0268 'n' E0-FF linux/matroxfb.h matroxfb
0269 'o' 00-1F fs/ocfs2/ocfs2_fs.h OCFS2
0270 'o' 00-03 mtd/ubi-user.h conflict! (OCFS2 and UBI overlaps)
0271 'o' 40-41 mtd/ubi-user.h UBI
0272 'o' 01-A1 `linux/dvb/*.h` DVB
0273 'p' 00-0F linux/phantom.h conflict! (OpenHaptics needs this)
0274 'p' 00-1F linux/rtc.h conflict!
0275 'p' 40-7F linux/nvram.h
0276 'p' 80-9F linux/ppdev.h user-space parport
0277 <mailto:tim@cyberelk.net>
0278 'p' A1-A5 linux/pps.h LinuxPPS
0279 <mailto:giometti@linux.it>
0280 'q' 00-1F linux/serio.h
0281 'q' 80-FF linux/telephony.h Internet PhoneJACK, Internet LineJACK
0282 linux/ixjuser.h <http://web.archive.org/web/%2A/http://www.quicknet.net>
0283 'r' 00-1F linux/msdos_fs.h and fs/fat/dir.c
0284 's' all linux/cdk.h
0285 't' 00-7F linux/ppp-ioctl.h
0286 't' 80-8F linux/isdn_ppp.h
0287 't' 90-91 linux/toshiba.h toshiba and toshiba_acpi SMM
0288 'u' 00-1F linux/smb_fs.h gone
0289 'u' 20-3F linux/uvcvideo.h USB video class host driver
0290 'u' 40-4f linux/udmabuf.h userspace dma-buf misc device
0291 'v' 00-1F linux/ext2_fs.h conflict!
0292 'v' 00-1F linux/fs.h conflict!
0293 'v' 00-0F linux/sonypi.h conflict!
0294 'v' 00-0F media/v4l2-subdev.h conflict!
0295 'v' 20-27 arch/powerpc/include/uapi/asm/vas-api.h VAS API
0296 'v' C0-FF linux/meye.h conflict!
0297 'w' all CERN SCI driver
0298 'y' 00-1F packet based user level communications
0299 <mailto:zapman@interlan.net>
0300 'z' 00-3F CAN bus card conflict!
0301 <mailto:hdstich@connectu.ulm.circular.de>
0302 'z' 40-7F CAN bus card conflict!
0303 <mailto:oe@port.de>
0304 'z' 10-4F drivers/s390/crypto/zcrypt_api.h conflict!
0305 '|' 00-7F linux/media.h
0306 0x80 00-1F linux/fb.h
0307 0x81 00-1F linux/vduse.h
0308 0x89 00-06 arch/x86/include/asm/sockios.h
0309 0x89 0B-DF linux/sockios.h
0310 0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range
0311 0x89 E0-EF linux/dn.h PROTOPRIVATE range
0312 0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range
0313 0x8B all linux/wireless.h
0314 0x8C 00-3F WiNRADiO driver
0315 <http://www.winradio.com.au/>
0316 0x90 00 drivers/cdrom/sbpcd.h
0317 0x92 00-0F drivers/usb/mon/mon_bin.c
0318 0x93 60-7F linux/auto_fs.h
0319 0x94 all fs/btrfs/ioctl.h Btrfs filesystem
0320 and linux/fs.h some lifted to vfs/generic
0321 0x97 00-7F fs/ceph/ioctl.h Ceph file system
0322 0x99 00-0F 537-Addinboard driver
0323 <mailto:buk@buks.ipn.de>
0324 0xA0 all linux/sdp/sdp.h Industrial Device Project
0325 <mailto:kenji@bitgate.com>
0326 0xA1 0 linux/vtpm_proxy.h TPM Emulator Proxy Driver
0327 0xA2 all uapi/linux/acrn.h ACRN hypervisor
0328 0xA3 80-8F Port ACL in development:
0329 <mailto:tlewis@mindspring.com>
0330 0xA3 90-9F linux/dtlk.h
0331 0xA4 00-1F uapi/linux/tee.h Generic TEE subsystem
0332 0xA4 00-1F uapi/asm/sgx.h <mailto:linux-sgx@vger.kernel.org>
0333 0xA5 01-05 linux/surface_aggregator/cdev.h Microsoft Surface Platform System Aggregator
0334 <mailto:luzmaximilian@gmail.com>
0335 0xA5 20-2F linux/surface_aggregator/dtx.h Microsoft Surface DTX driver
0336 <mailto:luzmaximilian@gmail.com>
0337 0xAA 00-3F linux/uapi/linux/userfaultfd.h
0338 0xAB 00-1F linux/nbd.h
0339 0xAC 00-1F linux/raw.h
0340 0xAD 00 Netfilter device in development:
0341 <mailto:rusty@rustcorp.com.au>
0342 0xAE 00-1F linux/kvm.h Kernel-based Virtual Machine
0343 <mailto:kvm@vger.kernel.org>
0344 0xAE 40-FF linux/kvm.h Kernel-based Virtual Machine
0345 <mailto:kvm@vger.kernel.org>
0346 0xAE 20-3F linux/nitro_enclaves.h Nitro Enclaves
0347 0xAF 00-1F linux/fsl_hypervisor.h Freescale hypervisor
0348 0xB0 all RATIO devices in development:
0349 <mailto:vgo@ratio.de>
0350 0xB1 00-1F PPPoX
0351 <mailto:mostrows@styx.uwaterloo.ca>
0352 0xB3 00 linux/mmc/ioctl.h
0353 0xB4 00-0F linux/gpio.h <mailto:linux-gpio@vger.kernel.org>
0354 0xB5 00-0F uapi/linux/rpmsg.h <mailto:linux-remoteproc@vger.kernel.org>
0355 0xB6 all linux/fpga-dfl.h
0356 0xB7 all uapi/linux/remoteproc_cdev.h <mailto:linux-remoteproc@vger.kernel.org>
0357 0xB7 all uapi/linux/nsfs.h <mailto:Andrei Vagin <avagin@openvz.org>>
0358 0xC0 00-0F linux/usb/iowarrior.h
0359 0xCA 00-0F uapi/misc/cxl.h
0360 0xCA 10-2F uapi/misc/ocxl.h
0361 0xCA 80-BF uapi/scsi/cxlflash_ioctl.h
0362 0xCB 00-1F CBM serial IEC bus in development:
0363 <mailto:michael.klein@puffin.lb.shuttle.de>
0364 0xCC 00-0F drivers/misc/ibmvmc.h pseries VMC driver
0365 0xCD 01 linux/reiserfs_fs.h
0366 0xCE 01-02 uapi/linux/cxl_mem.h Compute Express Link Memory Devices
0367 0xCF 02 fs/cifs/ioctl.c
0368 0xDB 00-0F drivers/char/mwave/mwavepub.h
0369 0xDD 00-3F ZFCP device driver see drivers/s390/scsi/
0370 <mailto:aherrman@de.ibm.com>
0371 0xE5 00-3F linux/fuse.h
0372 0xEC 00-01 drivers/platform/chrome/cros_ec_dev.h ChromeOS EC driver
0373 0xEE 00-09 uapi/linux/pfrut.h Platform Firmware Runtime Update and Telemetry
0374 0xF3 00-3F drivers/usb/misc/sisusbvga/sisusb.h sisfb (in development)
0375 <mailto:thomas@winischhofer.net>
0376 0xF6 all LTTng Linux Trace Toolkit Next Generation
0377 <mailto:mathieu.desnoyers@efficios.com>
0378 0xF8 all arch/x86/include/uapi/asm/amd_hsmp.h AMD HSMP EPYC system management interface driver
0379 <mailto:nchatrad@amd.com>
0380 0xFD all linux/dm-ioctl.h
0381 0xFE all linux/isst_if.h
0382 ==== ===== ======================================================= ================================================================