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 userspace) 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'b' 00-FF conflict! bit3 vme host bridge 233 <mailto:natalia@nikhefk.nikhef.nl> 234'b' 00-0F linux/dma-buf.h conflict! 235'c' 00-7F linux/comstats.h conflict! 236'c' 00-7F linux/coda.h conflict! 237'c' 00-1F linux/chio.h conflict! 238'c' 80-9F arch/s390/include/asm/chsc.h conflict! 239'c' A0-AF arch/x86/include/asm/msr.h conflict! 240'd' 00-FF linux/char/drm/drm.h conflict! 241'd' 02-40 pcmcia/ds.h conflict! 242'd' F0-FF linux/digi1.h 243'e' all linux/digi1.h conflict! 244'f' 00-1F linux/ext2_fs.h conflict! 245'f' 00-1F linux/ext3_fs.h conflict! 246'f' 00-0F fs/jfs/jfs_dinode.h conflict! 247'f' 00-0F fs/ext4/ext4.h conflict! 248'f' 00-0F linux/fs.h conflict! 249'f' 00-0F fs/ocfs2/ocfs2_fs.h conflict! 250'f' 13-27 linux/fscrypt.h 251'f' 81-8F linux/fsverity.h 252'g' 00-0F linux/usb/gadgetfs.h 253'g' 20-2F linux/usb/g_printer.h 254'h' 00-7F conflict! Charon filesystem 255 <mailto:zapman@interlan.net> 256'h' 00-1F linux/hpet.h conflict! 257'h' 80-8F fs/hfsplus/ioctl.c 258'i' 00-3F linux/i2o-dev.h conflict! 259'i' 0B-1F linux/ipmi.h conflict! 260'i' 80-8F linux/i8k.h 261'i' 90-9F `linux/iio/*.h` IIO 262'j' 00-3F linux/joystick.h 263'k' 00-0F linux/spi/spidev.h conflict! 264'k' 00-05 video/kyro.h conflict! 265'k' 10-17 linux/hsi/hsi_char.h HSI character device 266'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system 267 <http://web.archive.org/web/%2A/http://mikonos.dia.unisa.it/tcfs> 268'l' 40-7F linux/udf_fs_i.h in development: 269 <https://github.com/pali/udftools> 270'm' 00-09 linux/mmtimer.h conflict! 271'm' all linux/mtio.h conflict! 272'm' all linux/soundcard.h conflict! 273'm' all linux/synclink.h conflict! 274'm' 00-19 drivers/message/fusion/mptctl.h conflict! 275'm' 00 drivers/scsi/megaraid/megaraid_ioctl.h conflict! 276'n' 00-7F linux/ncp_fs.h and fs/ncpfs/ioctl.c 277'n' 80-8F uapi/linux/nilfs2_api.h NILFS2 278'n' E0-FF linux/matroxfb.h matroxfb 279'o' 00-1F fs/ocfs2/ocfs2_fs.h OCFS2 280'o' 00-03 mtd/ubi-user.h conflict! (OCFS2 and UBI overlaps) 281'o' 40-41 mtd/ubi-user.h UBI 282'o' 01-A1 `linux/dvb/*.h` DVB 283'p' 00-0F linux/phantom.h conflict! (OpenHaptics needs this) 284'p' 00-1F linux/rtc.h conflict! 285'p' 40-7F linux/nvram.h 286'p' 80-9F linux/ppdev.h user-space parport 287 <mailto:tim@cyberelk.net> 288'p' A1-A5 linux/pps.h LinuxPPS 289'p' B1-B3 linux/pps_gen.h LinuxPPS 290 <mailto:giometti@linux.it> 291'q' 00-1F linux/serio.h 292'q' 80-FF linux/telephony.h Internet PhoneJACK, Internet LineJACK 293 linux/ixjuser.h <http://web.archive.org/web/%2A/http://www.quicknet.net> 294'r' 00-1F linux/msdos_fs.h and fs/fat/dir.c 295's' all linux/cdk.h 296't' 00-7F linux/ppp-ioctl.h 297't' 80-8F linux/isdn_ppp.h 298't' 90-91 linux/toshiba.h toshiba and toshiba_acpi SMM 299'u' 00-1F linux/smb_fs.h gone 300'u' 00-2F linux/ublk_cmd.h conflict! 301'u' 20-3F linux/uvcvideo.h USB video class host driver 302'u' 40-4f linux/udmabuf.h userspace dma-buf misc device 303'v' 00-1F linux/ext2_fs.h conflict! 304'v' 00-1F linux/fs.h conflict! 305'v' 00-0F linux/sonypi.h conflict! 306'v' 00-0F media/v4l2-subdev.h conflict! 307'v' 20-27 arch/powerpc/include/uapi/asm/vas-api.h VAS API 308'v' C0-FF linux/meye.h conflict! 309'w' all CERN SCI driver 310'y' 00-1F packet based user level communications 311 <mailto:zapman@interlan.net> 312'z' 00-3F CAN bus card conflict! 313 <mailto:hdstich@connectu.ulm.circular.de> 314'z' 40-7F CAN bus card conflict! 315 <mailto:oe@port.de> 316'z' 10-4F drivers/s390/crypto/zcrypt_api.h conflict! 317'|' 00-7F linux/media.h 318'|' 80-9F samples/ Any sample and example drivers 3190x80 00-1F linux/fb.h 3200x81 00-1F linux/vduse.h 3210x89 00-06 arch/x86/include/asm/sockios.h 3220x89 0B-DF linux/sockios.h 3230x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range 3240x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range 3250x8A 00-1F linux/eventpoll.h 3260x8B all linux/wireless.h 3270x8C 00-3F WiNRADiO driver 328 <http://www.winradio.com.au/> 3290x90 00 drivers/cdrom/sbpcd.h 3300x92 00-0F drivers/usb/mon/mon_bin.c 3310x93 60-7F linux/auto_fs.h 3320x94 all fs/btrfs/ioctl.h Btrfs filesystem 333 and linux/fs.h some lifted to vfs/generic 3340x97 00-7F fs/ceph/ioctl.h Ceph file system 3350x99 00-0F 537-Addinboard driver 336 <mailto:buk@buks.ipn.de> 3370x9A 00-0F include/uapi/fwctl/fwctl.h 3380xA0 all linux/sdp/sdp.h Industrial Device Project 339 <mailto:kenji@bitgate.com> 3400xA1 0 linux/vtpm_proxy.h TPM Emulator Proxy Driver 3410xA2 all uapi/linux/acrn.h ACRN hypervisor 3420xA3 80-8F Port ACL in development: 343 <mailto:tlewis@mindspring.com> 3440xA3 90-9F linux/dtlk.h 3450xA4 00-1F uapi/linux/tee.h Generic TEE subsystem 3460xA4 00-1F uapi/asm/sgx.h <mailto:linux-sgx@vger.kernel.org> 3470xA5 01-05 linux/surface_aggregator/cdev.h Microsoft Surface Platform System Aggregator 348 <mailto:luzmaximilian@gmail.com> 3490xA5 20-2F linux/surface_aggregator/dtx.h Microsoft Surface DTX driver 350 <mailto:luzmaximilian@gmail.com> 3510xAA 00-3F linux/uapi/linux/userfaultfd.h 3520xAB 00-1F linux/nbd.h 3530xAC 00-1F linux/raw.h 3540xAD 00 Netfilter device in development: 355 <mailto:rusty@rustcorp.com.au> 3560xAE 00-1F linux/kvm.h Kernel-based Virtual Machine 357 <mailto:kvm@vger.kernel.org> 3580xAE 40-FF linux/kvm.h Kernel-based Virtual Machine 359 <mailto:kvm@vger.kernel.org> 3600xAE 20-3F linux/nitro_enclaves.h Nitro Enclaves 3610xAF 00-1F linux/fsl_hypervisor.h Freescale hypervisor 3620xB0 all RATIO devices in development: 363 <mailto:vgo@ratio.de> 3640xB1 00-1F PPPoX 365 <mailto:mostrows@styx.uwaterloo.ca> 3660xB2 00 arch/powerpc/include/uapi/asm/papr-vpd.h powerpc/pseries VPD API 367 <mailto:linuxppc-dev@lists.ozlabs.org> 3680xB2 01-02 arch/powerpc/include/uapi/asm/papr-sysparm.h powerpc/pseries system parameter API 369 <mailto:linuxppc-dev@lists.ozlabs.org> 3700xB2 03-05 arch/powerpc/include/uapi/asm/papr-indices.h powerpc/pseries indices API 371 <mailto:linuxppc-dev@lists.ozlabs.org> 3720xB2 06-07 arch/powerpc/include/uapi/asm/papr-platform-dump.h powerpc/pseries Platform Dump API 373 <mailto:linuxppc-dev@lists.ozlabs.org> 3740xB2 08 arch/powerpc/include/uapi/asm/papr-physical-attestation.h powerpc/pseries Physical Attestation API 375 <mailto:linuxppc-dev@lists.ozlabs.org> 3760xB2 09 arch/powerpc/include/uapi/asm/papr-hvpipe.h powerpc/pseries HVPIPE API 377 <mailto:linuxppc-dev@lists.ozlabs.org> 3780xB3 00 linux/mmc/ioctl.h 3790xB4 00-0F linux/gpio.h <mailto:linux-gpio@vger.kernel.org> 3800xB5 00-0F uapi/linux/rpmsg.h <mailto:linux-remoteproc@vger.kernel.org> 3810xB6 all linux/fpga-dfl.h 3820xB7 all uapi/linux/remoteproc_cdev.h <mailto:linux-remoteproc@vger.kernel.org> 3830xB7 all uapi/linux/nsfs.h <mailto:Andrei Vagin <avagin@openvz.org>> 3840xB8 01-02 uapi/misc/mrvl_cn10k_dpi.h Marvell CN10K DPI driver 3850xB8 all uapi/linux/mshv.h Microsoft Hyper-V /dev/mshv driver 386 <mailto:linux-hyperv@vger.kernel.org> 3870xBA 00-0F uapi/linux/liveupdate.h Pasha Tatashin 388 <mailto:pasha.tatashin@soleen.com> 3890xC0 00-0F linux/usb/iowarrior.h 3900xCA 00-0F uapi/misc/cxl.h Dead since 6.15 3910xCA 10-2F uapi/misc/ocxl.h 3920xCA 80-BF uapi/scsi/cxlflash_ioctl.h Dead since 6.15 3930xCB 00-1F CBM serial IEC bus in development: 394 <mailto:michael.klein@puffin.lb.shuttle.de> 3950xCC 00-0F drivers/misc/ibmvmc.h pseries VMC driver 3960xCD 01 linux/reiserfs_fs.h Dead since 6.13 3970xCE 01-02 uapi/linux/cxl_mem.h Compute Express Link Memory Devices 3980xCF 02 fs/smb/client/cifs_ioctl.h 3990xDD 00-3F ZFCP device driver see drivers/s390/scsi/ 400 <mailto:aherrman@de.ibm.com> 4010xE5 00-3F linux/fuse.h 4020xEC 00-01 drivers/platform/chrome/cros_ec_dev.h ChromeOS EC driver 4030xEE 00-09 uapi/linux/pfrut.h Platform Firmware Runtime Update and Telemetry 4040xF3 00-3F drivers/usb/misc/sisusbvga/sisusb.h sisfb (in development) 405 <mailto:thomas@winischhofer.net> 4060xF6 all LTTng Linux Trace Toolkit Next Generation 407 <mailto:mathieu.desnoyers@efficios.com> 4080xF8 all arch/x86/include/uapi/asm/amd_hsmp.h AMD HSMP EPYC system management interface driver 409 <mailto:nchatrad@amd.com> 4100xF9 00-0F uapi/misc/amd-apml.h AMD side band system management interface driver 411 <mailto:naveenkrishna.chatradhi@amd.com> 4120xFD all linux/dm-ioctl.h 4130xFE all linux/isst_if.h 414==== ===== ========================================================= ================================================================ 415