diff options
Diffstat (limited to 'Documentation/ioctl-number.txt')
-rw-r--r-- | Documentation/ioctl-number.txt | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/Documentation/ioctl-number.txt b/Documentation/ioctl-number.txt new file mode 100644 index 000000000..73ba54c38 --- /dev/null +++ b/Documentation/ioctl-number.txt @@ -0,0 +1,108 @@ +Ioctl Numbers +5 Oct 1996 +Michael Chastain +<mec@duracef.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 (from user's point of view) + _IOR an ioctl with read parameters (from user's point of view) + _IOWR an ioctl with both write and read parameters. + +'Write' and 'read' are from the user's point of view. This is 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. If you are writing a driver for a new +device and need a letter, pick an unused letter. You can register the +letter by patching this file and submitting the patch to Linus Torvalds. +Or you can e-mail me at <mec@duracef.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 is the size +of the structure going into the kernel or coming out of the kernel. + +Some devices use their major number as the identifier; this is not +recommended. Some devices are even more irregular and don't follow +the convention at all. + +Following the 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 + the convention is used to define the ioctl numbers. + +(5) When following the convention, the driver code can use generic + code to call verify_area to validate parameters. + +This table lists ioctls visible from user land for Linux/i386. It is +current to Linux 2.1.1 + +Code Seq# Include File Comments +======================================================== +0x00 01-02 linux/fs.h conflict! +0x00 01-04 scsi/scsi_ioctl.h conflict! +0x02 all linux/fd.h +0x03 all linux/hdreg.h +0x04 all linux/umsdos_fs.h +0x06 all linux/lp.h +0x09 all linux/md.h +0x12 all linux/fs.h +0x20 all linux/cm206.h +0x22 all linux/scc.h conflict! (version 2.01 of z8530drv) +0x22 all scsi/sg.h conflict! +'A' all linux/apm_bios.h +'B' all linux/baycom.h +'C' all linux/soundcard.h +'F' all linux/fb.h +'I' all linux/isdn.h +'K' all linux/kd.h +'L' all linux/loop.h +'M' all linux/soundcard.h +'P' all linux/soundcard.h +'Q' all linux/soundcard.h +'R' all linux/random.h +'S' 00-1F linux/cdrom.h +'S' 20-7F linux/ucdrom.h +'S' 80-81 scsi/scsi_ioctl.h +'S' 82-FF scsi/scsi.h +'T' all linux/soundcard.h conflict! +'T' all asm-i386/ioctls.h conflict! +'V' all linux/vt.h +'W' 00-1F linux/pcwd.h +'Y' all linux/cyclades.h +'Z' all linux/scc.h version 2.2 of z8530drv +'a' all various, see http://lrcwww.epfl.ch/linux-atm/magic.html +'c' all linux/comstats.h +'f' all linux/ext2_fs.h +'m' all linux/mtio.h conflict! +'m' all linux/soundcard.h conflict! +'n' all linux/ncp_fs.h +'p' all linux/mc146818rtc.h +'r' all linux/msdos_fs.h +'s' all linux/cdk.h +'t' 00-7F linux/if_ppp.h +'t' 80-8F linux/isdn_ppp.h +'u' all linux/smb_fs.h +'v' all linux/ext2_fs.h +'w' all CERN SCI driver (in development) +0x89 00-0F asm-i386/sockios.h +0x89 10-FF linux/sockios.h +0x90 00 linux/sbpcd.h +0x99 00-0F 537-Addinboard driver (in development, e-mail contact: + b.kohl@ipn-b.comlink.apc.org) |