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==== ===== ========================================================= ================================================================ 413