123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- Ioctl Numbers
- 19 October 1999
- Michael Elizabeth Chastain
- <mec@shout.net>
- If you are adding new ioctl's to the kernel, you should use the _IO
- macros defined in <linux/ioctl.h>:
- _IO an ioctl with no parameters
- _IOW an ioctl with write parameters (copy_from_user)
- _IOR an ioctl with read parameters (copy_to_user)
- _IOWR an ioctl with both write and read parameters.
- 'Write' and 'read' are from the user's point of view, just like the
- system calls 'write' and 'read'. For example, a SET_FOO ioctl would
- be _IOW, although the kernel would actually read data from user space;
- a GET_FOO ioctl would be _IOR, although the kernel would actually write
- data to user space.
- The first argument to _IO, _IOW, _IOR, or _IOWR is an identifying letter
- or number from the table below. Because of the large number of drivers,
- many drivers share a partial letter with other drivers.
- If you are writing a driver for a new device and need a letter, pick an
- unused block with enough room for expansion: 32 to 256 ioctl commands.
- You can register the block by patching this file and submitting the
- patch to Linus Torvalds. Or you can e-mail me at <mec@shout.net> and
- I'll register one for you.
- The second argument to _IO, _IOW, _IOR, or _IOWR is a sequence number
- to distinguish ioctls from each other. The third argument to _IOW,
- _IOR, or _IOWR is the type of the data going into the kernel or coming
- out of the kernel (e.g. 'int' or 'struct foo'). NOTE! Do NOT use
- sizeof(arg) as the third argument as this results in your ioctl thinking
- it passes an argument of type size_t.
- Some devices use their major number as the identifier; this is OK, as
- long as it is unique. Some devices are irregular and don't follow any
- convention at all.
- Following this convention is good because:
- (1) Keeping the ioctl's globally unique helps error checking:
- if a program calls an ioctl on the wrong device, it will get an
- error rather than some unexpected behaviour.
- (2) The 'strace' build procedure automatically finds ioctl numbers
- defined with _IO, _IOW, _IOR, or _IOWR.
- (3) 'strace' can decode numbers back into useful names when the
- numbers are unique.
- (4) People looking for ioctls can grep for them more easily when
- this convention is used to define the ioctl numbers.
- (5) When following the convention, the driver code can use generic
- code to copy the parameters between user and kernel space.
- This table lists ioctls visible from user land for Linux/x86. It contains
- most drivers up to 2.6.31, but I know I am missing some. There has been
- no attempt to list non-X86 architectures or ioctls from drivers/staging/.
- Code Seq#(hex) Include File Comments
- ========================================================
- 0x00 00-1F linux/fs.h conflict!
- 0x00 00-1F scsi/scsi_ioctl.h conflict!
- 0x00 00-1F linux/fb.h conflict!
- 0x00 00-1F linux/wavefront.h conflict!
- 0x02 all linux/fd.h
- 0x03 all linux/hdreg.h
- 0x04 D2-DC linux/umsdos_fs.h Dead since 2.6.11, but don't reuse these.
- 0x06 all linux/lp.h
- 0x09 all linux/raid/md_u.h
- 0x10 00-0F drivers/char/s390/vmcp.h
- 0x10 10-1F arch/s390/include/uapi/sclp_ctl.h
- 0x10 20-2F arch/s390/include/uapi/asm/hypfs.h
- 0x12 all linux/fs.h
- linux/blkpg.h
- 0x1b all InfiniBand Subsystem <http://infiniband.sourceforge.net/>
- 0x20 all drivers/cdrom/cm206.h
- 0x22 all scsi/sg.h
- '#' 00-3F IEEE 1394 Subsystem Block for the entire subsystem
- '$' 00-0F linux/perf_counter.h, linux/perf_event.h
- '%' 00-0F include/uapi/linux/stm.h
- System Trace Module subsystem
- <mailto:alexander.shishkin@linux.intel.com>
- '&' 00-07 drivers/firewire/nosy-user.h
- '1' 00-1F <linux/timepps.h> PPS kit from Ulrich Windl
- <ftp://ftp.de.kernel.org/pub/linux/daemons/ntp/PPS/>
- '2' 01-04 linux/i2o.h
- '3' 00-0F drivers/s390/char/raw3270.h conflict!
- '3' 00-1F linux/suspend_ioctls.h conflict!
- and kernel/power/user.c
- '8' all SNP8023 advanced NIC card
- <mailto:mcr@solidum.com>
- ';' 64-7F linux/vfio.h
- '@' 00-0F linux/radeonfb.h conflict!
- '@' 00-0F drivers/video/aty/aty128fb.c conflict!
- 'A' 00-1F linux/apm_bios.h conflict!
- 'A' 00-0F linux/agpgart.h conflict!
- and drivers/char/agp/compat_ioctl.h
- 'A' 00-7F sound/asound.h conflict!
- 'B' 00-1F linux/cciss_ioctl.h conflict!
- 'B' 00-0F include/linux/pmu.h conflict!
- 'B' C0-FF advanced bbus
- <mailto:maassen@uni-freiburg.de>
- 'C' all linux/soundcard.h conflict!
- 'C' 01-2F linux/capi.h conflict!
- 'C' F0-FF drivers/net/wan/cosa.h conflict!
- 'D' all arch/s390/include/asm/dasd.h
- 'D' 40-5F drivers/scsi/dpt/dtpi_ioctl.h
- 'D' 05 drivers/scsi/pmcraid.h
- 'E' all linux/input.h conflict!
- 'E' 00-0F xen/evtchn.h conflict!
- 'F' all linux/fb.h conflict!
- 'F' 01-02 drivers/scsi/pmcraid.h conflict!
- 'F' 20 drivers/video/fsl-diu-fb.h conflict!
- 'F' 20 drivers/video/intelfb/intelfb.h conflict!
- 'F' 20 linux/ivtvfb.h conflict!
- 'F' 20 linux/matroxfb.h conflict!
- 'F' 20 drivers/video/aty/atyfb_base.c conflict!
- 'F' 00-0F video/da8xx-fb.h conflict!
- 'F' 80-8F linux/arcfb.h conflict!
- 'F' DD video/sstfb.h conflict!
- 'G' 00-3F drivers/misc/sgi-gru/grulib.h conflict!
- 'G' 00-0F linux/gigaset_dev.h conflict!
- 'H' 00-7F linux/hiddev.h conflict!
- 'H' 00-0F linux/hidraw.h conflict!
- 'H' 01 linux/mei.h conflict!
- 'H' 02 linux/mei.h conflict!
- 'H' 03 linux/mei.h conflict!
- 'H' 00-0F sound/asound.h conflict!
- 'H' 20-40 sound/asound_fm.h conflict!
- 'H' 80-8F sound/sfnt_info.h conflict!
- 'H' 10-8F sound/emu10k1.h conflict!
- 'H' 10-1F sound/sb16_csp.h conflict!
- 'H' 10-1F sound/hda_hwdep.h conflict!
- 'H' 40-4F sound/hdspm.h conflict!
- 'H' 40-4F sound/hdsp.h conflict!
- 'H' 90 sound/usb/usx2y/usb_stream.h
- 'H' A0 uapi/linux/usb/cdc-wdm.h
- 'H' C0-F0 net/bluetooth/hci.h conflict!
- 'H' C0-DF net/bluetooth/hidp/hidp.h conflict!
- 'H' C0-DF net/bluetooth/cmtp/cmtp.h conflict!
- 'H' C0-DF net/bluetooth/bnep/bnep.h conflict!
- 'H' F1 linux/hid-roccat.h <mailto:erazor_de@users.sourceforge.net>
- 'H' F8-FA sound/firewire.h
- 'I' all linux/isdn.h conflict!
- 'I' 00-0F drivers/isdn/divert/isdn_divert.h conflict!
- 'I' 40-4F linux/mISDNif.h conflict!
- 'J' 00-1F drivers/scsi/gdth_ioctl.h
- 'K' all linux/kd.h
- 'L' 00-1F linux/loop.h conflict!
- 'L' 10-1F drivers/scsi/mpt2sas/mpt2sas_ctl.h conflict!
- 'L' 20-2F linux/lightnvm.h
- 'L' E0-FF linux/ppdd.h encrypted disk device driver
- <http://linux01.gwdg.de/~alatham/ppdd.html>
- 'M' all linux/soundcard.h conflict!
- 'M' 01-16 mtd/mtd-abi.h conflict!
- and drivers/mtd/mtdchar.c
- 'M' 01-03 drivers/scsi/megaraid/megaraid_sas.h
- 'M' 00-0F drivers/video/fsl-diu-fb.h conflict!
- 'N' 00-1F drivers/usb/scanner.h
- 'N' 40-7F drivers/block/nvme.c
- 'O' 00-06 mtd/ubi-user.h UBI
- 'P' all linux/soundcard.h conflict!
- 'P' 60-6F sound/sscape_ioctl.h conflict!
- 'P' 00-0F drivers/usb/class/usblp.c conflict!
- 'Q' all linux/soundcard.h
- 'R' 00-1F linux/random.h conflict!
- 'R' 01 linux/rfkill.h conflict!
- 'R' C0-DF net/bluetooth/rfcomm.h
- 'S' all linux/cdrom.h conflict!
- 'S' 80-81 scsi/scsi_ioctl.h conflict!
- 'S' 82-FF scsi/scsi.h conflict!
- 'S' 00-7F sound/asequencer.h conflict!
- 'T' all linux/soundcard.h conflict!
- 'T' 00-AF sound/asound.h conflict!
- 'T' all arch/x86/include/asm/ioctls.h conflict!
- 'T' C0-DF linux/if_tun.h conflict!
- 'U' all sound/asound.h conflict!
- 'U' 00-CF linux/uinput.h conflict!
- 'U' 00-EF linux/usbdevice_fs.h
- 'U' C0-CF drivers/bluetooth/hci_uart.h
- 'V' all linux/vt.h conflict!
- 'V' all linux/videodev2.h conflict!
- 'V' C0 linux/ivtvfb.h conflict!
- 'V' C0 linux/ivtv.h conflict!
- 'V' C0 media/davinci/vpfe_capture.h conflict!
- 'V' C0 media/si4713.h conflict!
- 'W' 00-1F linux/watchdog.h conflict!
- 'W' 00-1F linux/wanrouter.h conflict! (pre 3.9)
- 'W' 00-3F sound/asound.h conflict!
- 'X' all fs/xfs/xfs_fs.h conflict!
- and fs/xfs/linux-2.6/xfs_ioctl32.h
- and include/linux/falloc.h
- and linux/fs.h
- 'X' all fs/ocfs2/ocfs_fs.h conflict!
- 'X' 01 linux/pktcdvd.h conflict!
- 'Y' all linux/cyclades.h
- 'Z' 14-15 drivers/message/fusion/mptctl.h
- '[' 00-07 linux/usb/tmc.h USB Test and Measurement Devices
- <mailto:gregkh@linuxfoundation.org>
- 'a' all linux/atm*.h, linux/sonet.h ATM on linux
- <http://lrcwww.epfl.ch/>
- 'a' 00-0F drivers/crypto/qat/qat_common/adf_cfg_common.h conflict! qat driver
- 'b' 00-FF conflict! bit3 vme host bridge
- <mailto:natalia@nikhefk.nikhef.nl>
- 'c' all linux/cm4000_cs.h conflict!
- 'c' 00-7F linux/comstats.h conflict!
- 'c' 00-7F linux/coda.h conflict!
- 'c' 00-1F linux/chio.h conflict!
- 'c' 80-9F arch/s390/include/asm/chsc.h conflict!
- 'c' A0-AF arch/x86/include/asm/msr.h conflict!
- 'd' 00-FF linux/char/drm/drm/h conflict!
- 'd' 02-40 pcmcia/ds.h conflict!
- 'd' F0-FF linux/digi1.h
- 'e' all linux/digi1.h conflict!
- 'e' 00-1F drivers/net/irda/irtty-sir.h conflict!
- 'f' 00-1F linux/ext2_fs.h conflict!
- 'f' 00-1F linux/ext3_fs.h conflict!
- 'f' 00-0F fs/jfs/jfs_dinode.h conflict!
- 'f' 00-0F fs/ext4/ext4.h conflict!
- 'f' 00-0F linux/fs.h conflict!
- 'f' 00-0F fs/ocfs2/ocfs2_fs.h conflict!
- 'g' 00-0F linux/usb/gadgetfs.h
- 'g' 20-2F linux/usb/g_printer.h
- 'h' 00-7F conflict! Charon filesystem
- <mailto:zapman@interlan.net>
- 'h' 00-1F linux/hpet.h conflict!
- 'h' 80-8F fs/hfsplus/ioctl.c
- 'i' 00-3F linux/i2o-dev.h conflict!
- 'i' 0B-1F linux/ipmi.h conflict!
- 'i' 80-8F linux/i8k.h
- 'j' 00-3F linux/joystick.h
- 'k' 00-0F linux/spi/spidev.h conflict!
- 'k' 00-05 video/kyro.h conflict!
- 'k' 10-17 linux/hsi/hsi_char.h HSI character device
- 'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system
- <http://web.archive.org/web/*/http://mikonos.dia.unisa.it/tcfs>
- 'l' 40-7F linux/udf_fs_i.h in development:
- <http://sourceforge.net/projects/linux-udf/>
- 'm' 00-09 linux/mmtimer.h conflict!
- 'm' all linux/mtio.h conflict!
- 'm' all linux/soundcard.h conflict!
- 'm' all linux/synclink.h conflict!
- 'm' 00-19 drivers/message/fusion/mptctl.h conflict!
- 'm' 00 drivers/scsi/megaraid/megaraid_ioctl.h conflict!
- 'm' 00-1F net/irda/irmod.h conflict!
- 'n' 00-7F linux/ncp_fs.h and fs/ncpfs/ioctl.c
- 'n' 80-8F linux/nilfs2_fs.h NILFS2
- 'n' E0-FF linux/matroxfb.h matroxfb
- 'o' 00-1F fs/ocfs2/ocfs2_fs.h OCFS2
- 'o' 00-03 mtd/ubi-user.h conflict! (OCFS2 and UBI overlaps)
- 'o' 40-41 mtd/ubi-user.h UBI
- 'o' 01-A1 linux/dvb/*.h DVB
- 'p' 00-0F linux/phantom.h conflict! (OpenHaptics needs this)
- 'p' 00-1F linux/rtc.h conflict!
- 'p' 00-3F linux/mc146818rtc.h conflict!
- 'p' 40-7F linux/nvram.h
- 'p' 80-9F linux/ppdev.h user-space parport
- <mailto:tim@cyberelk.net>
- 'p' A1-A5 linux/pps.h LinuxPPS
- <mailto:giometti@linux.it>
- 'q' 00-1F linux/serio.h
- 'q' 80-FF linux/telephony.h Internet PhoneJACK, Internet LineJACK
- linux/ixjuser.h <http://web.archive.org/web/*/http://www.quicknet.net>
- 'r' 00-1F linux/msdos_fs.h and fs/fat/dir.c
- 's' all linux/cdk.h
- 't' 00-7F linux/ppp-ioctl.h
- 't' 80-8F linux/isdn_ppp.h
- 't' 90-91 linux/toshiba.h toshiba and toshiba_acpi SMM
- 'u' 00-1F linux/smb_fs.h gone
- 'u' 20-3F linux/uvcvideo.h USB video class host driver
- 'v' 00-1F linux/ext2_fs.h conflict!
- 'v' 00-1F linux/fs.h conflict!
- 'v' 00-0F linux/sonypi.h conflict!
- 'v' C0-FF linux/meye.h conflict!
- 'w' all CERN SCI driver
- 'y' 00-1F packet based user level communications
- <mailto:zapman@interlan.net>
- 'z' 00-3F CAN bus card conflict!
- <mailto:hdstich@connectu.ulm.circular.de>
- 'z' 40-7F CAN bus card conflict!
- <mailto:oe@port.de>
- 'z' 10-4F drivers/s390/crypto/zcrypt_api.h conflict!
- '|' 00-7F linux/media.h
- 0x80 00-1F linux/fb.h
- 0x89 00-06 arch/x86/include/asm/sockios.h
- 0x89 0B-DF linux/sockios.h
- 0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range
- 0x89 E0-EF linux/dn.h PROTOPRIVATE range
- 0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range
- 0x8B all linux/wireless.h
- 0x8C 00-3F WiNRADiO driver
- <http://www.winradio.com.au/>
- 0x90 00 drivers/cdrom/sbpcd.h
- 0x92 00-0F drivers/usb/mon/mon_bin.c
- 0x93 60-7F linux/auto_fs.h
- 0x94 all fs/btrfs/ioctl.h
- 0x97 00-7F fs/ceph/ioctl.h Ceph file system
- 0x99 00-0F 537-Addinboard driver
- <mailto:buk@buks.ipn.de>
- 0xA0 all linux/sdp/sdp.h Industrial Device Project
- <mailto:kenji@bitgate.com>
- 0xA2 00-0F arch/tile/include/asm/hardwall.h
- 0xA3 80-8F Port ACL in development:
- <mailto:tlewis@mindspring.com>
- 0xA3 90-9F linux/dtlk.h
- 0xAA 00-3F linux/uapi/linux/userfaultfd.h
- 0xAB 00-1F linux/nbd.h
- 0xAC 00-1F linux/raw.h
- 0xAD 00 Netfilter device in development:
- <mailto:rusty@rustcorp.com.au>
- 0xAE all linux/kvm.h Kernel-based Virtual Machine
- <mailto:kvm@vger.kernel.org>
- 0xAF 00-1F linux/fsl_hypervisor.h Freescale hypervisor
- 0xB0 all RATIO devices in development:
- <mailto:vgo@ratio.de>
- 0xB1 00-1F PPPoX <mailto:mostrows@styx.uwaterloo.ca>
- 0xB3 00 linux/mmc/ioctl.h
- 0xC0 00-0F linux/usb/iowarrior.h
- 0xCA 00-0F uapi/misc/cxl.h
- 0xCA 80-8F uapi/scsi/cxlflash_ioctl.h
- 0xCB 00-1F CBM serial IEC bus in development:
- <mailto:michael.klein@puffin.lb.shuttle.de>
- 0xCD 01 linux/reiserfs_fs.h
- 0xCF 02 fs/cifs/ioctl.c
- 0xDB 00-0F drivers/char/mwave/mwavepub.h
- 0xDD 00-3F ZFCP device driver see drivers/s390/scsi/
- <mailto:aherrman@de.ibm.com>
- 0xE5 00-3F linux/fuse.h
- 0xEC 00-01 drivers/platform/chrome/cros_ec_dev.h ChromeOS EC driver
- 0xF3 00-3F drivers/usb/misc/sisusbvga/sisusb.h sisfb (in development)
- <mailto:thomas@winischhofer.net>
- 0xF4 00-1F video/mbxfb.h mbxfb
- <mailto:raph@8d.com>
- 0xF6 all LTTng Linux Trace Toolkit Next Generation
- <mailto:mathieu.desnoyers@efficios.com>
- 0xFD all linux/dm-ioctl.h
|