The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/include/asm-i386/ioctl.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* $Id: ioctl.h,v 1.5 1993/07/19 21:53:50 root Exp root $
    2  *
    3  * linux/ioctl.h for Linux by H.H. Bergman.
    4  */
    5 
    6 #ifndef _ASMI386_IOCTL_H
    7 #define _ASMI386_IOCTL_H
    8 
    9 /* ioctl command encoding: 32 bits total, command in lower 16 bits,
   10  * size of the parameter structure in the lower 14 bits of the
   11  * upper 16 bits.
   12  * Encoding the size of the parameter structure in the ioctl request
   13  * is useful for catching programs compiled with old versions
   14  * and to avoid overwriting user space outside the user buffer area.
   15  * The highest 2 bits are reserved for indicating the ``access mode''.
   16  * NOTE: This limits the max parameter size to 16kB -1 !
   17  */
   18 
   19 /*
   20  * The following is for compatibility across the various Linux
   21  * platforms.  The i386 ioctl numbering scheme doesn't really enforce
   22  * a type field.  De facto, however, the top 8 bits of the lower 16
   23  * bits are indeed used as a type field, so we might just as well make
   24  * this explicit here.  Please be sure to use the decoding macros
   25  * below from now on.
   26  */
   27 #define _IOC_NRBITS     8
   28 #define _IOC_TYPEBITS   8
   29 #define _IOC_SIZEBITS   14
   30 #define _IOC_DIRBITS    2
   31 
   32 #define _IOC_NRMASK     ((1 << _IOC_NRBITS)-1)
   33 #define _IOC_TYPEMASK   ((1 << _IOC_TYPEBITS)-1)
   34 #define _IOC_SIZEMASK   ((1 << _IOC_SIZEBITS)-1)
   35 #define _IOC_DIRMASK    ((1 << _IOC_DIRBITS)-1)
   36 
   37 #define _IOC_NRSHIFT    0
   38 #define _IOC_TYPESHIFT  (_IOC_NRSHIFT+_IOC_NRBITS)
   39 #define _IOC_SIZESHIFT  (_IOC_TYPESHIFT+_IOC_TYPEBITS)
   40 #define _IOC_DIRSHIFT   (_IOC_SIZESHIFT+_IOC_SIZEBITS)
   41 
   42 /*
   43  * Direction bits.
   44  */
   45 #define _IOC_NONE       0U
   46 #define _IOC_WRITE      1U
   47 #define _IOC_READ       2U
   48 
   49 #define _IOC(dir,type,nr,size) \
   50         (((dir)  << _IOC_DIRSHIFT) | \
   51          ((type) << _IOC_TYPESHIFT) | \
   52          ((nr)   << _IOC_NRSHIFT) | \
   53          ((size) << _IOC_SIZESHIFT))
   54 
   55 /* used to create numbers */
   56 #define _IO(type,nr)            _IOC(_IOC_NONE,(type),(nr),0)
   57 #define _IOR(type,nr,size)      _IOC(_IOC_READ,(type),(nr),sizeof(size))
   58 #define _IOW(type,nr,size)      _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
   59 #define _IOWR(type,nr,size)     _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
   60 
   61 /* used to decode ioctl numbers.. */
   62 #define _IOC_DIR(nr)            (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
   63 #define _IOC_TYPE(nr)           (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
   64 #define _IOC_NR(nr)             (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
   65 #define _IOC_SIZE(nr)           (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
   66 
   67 /* ...and for the drivers/sound files... */
   68 
   69 #define IOC_IN          (_IOC_WRITE << _IOC_DIRSHIFT)
   70 #define IOC_OUT         (_IOC_READ << _IOC_DIRSHIFT)
   71 #define IOC_INOUT       ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
   72 #define IOCSIZE_MASK    (_IOC_SIZEMASK << _IOC_SIZESHIFT)
   73 #define IOCSIZE_SHIFT   (_IOC_SIZESHIFT)
   74 
   75 #endif /* _ASMI386_IOCTL_H */

Cache object: 717c6588f708b9a888d0635b59154ff0


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.