home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-parisc / ioctl.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.6 KB  |  94 lines

  1. /*
  2.  *    Linux/PA-RISC Project (http://www.parisc-linux.org/)
  3.  *    Copyright (C) 1999,2003 Matthew Wilcox < willy at debian . org >
  4.  *    portions from "linux/ioctl.h for Linux" by H.H. Bergman.
  5.  *
  6.  *    This program is free software; you can redistribute it and/or modify
  7.  *    it under the terms of the GNU General Public License as published by
  8.  *    the Free Software Foundation; either version 2 of the License, or
  9.  *    (at your option) any later version.
  10.  *
  11.  *    This program is distributed in the hope that it will be useful,
  12.  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  *    GNU General Public License for more details.
  15.  *
  16.  *    You should have received a copy of the GNU General Public License
  17.  *    along with this program; if not, write to the Free Software
  18.  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19.  */
  20.  
  21.  
  22. #ifndef _ASM_PARISC_IOCTL_H
  23. #define _ASM_PARISC_IOCTL_H
  24.  
  25. /* ioctl command encoding: 32 bits total, command in lower 16 bits,
  26.  * size of the parameter structure in the lower 14 bits of the
  27.  * upper 16 bits.
  28.  * Encoding the size of the parameter structure in the ioctl request
  29.  * is useful for catching programs compiled with old versions
  30.  * and to avoid overwriting user space outside the user buffer area.
  31.  * The highest 2 bits are reserved for indicating the ``access mode''.
  32.  * NOTE: This limits the max parameter size to 16kB -1 !
  33.  */
  34.  
  35. #define _IOC_NRBITS    8
  36. #define _IOC_TYPEBITS    8
  37. #define _IOC_SIZEBITS    14
  38. #define _IOC_DIRBITS    2
  39.  
  40. #define _IOC_NRMASK    ((1 << _IOC_NRBITS)-1)
  41. #define _IOC_TYPEMASK    ((1 << _IOC_TYPEBITS)-1)
  42. #define _IOC_SIZEMASK    ((1 << _IOC_SIZEBITS)-1)
  43. #define _IOC_DIRMASK    ((1 << _IOC_DIRBITS)-1)
  44.  
  45. #define _IOC_NRSHIFT    0
  46. #define _IOC_TYPESHIFT    (_IOC_NRSHIFT+_IOC_NRBITS)
  47. #define _IOC_SIZESHIFT    (_IOC_TYPESHIFT+_IOC_TYPEBITS)
  48. #define _IOC_DIRSHIFT    (_IOC_SIZESHIFT+_IOC_SIZEBITS)
  49.  
  50. /*
  51.  * Direction bits.
  52.  */
  53. #define _IOC_NONE    0U
  54. #define _IOC_WRITE    2U
  55. #define _IOC_READ    1U
  56.  
  57. #define _IOC(dir,type,nr,size) \
  58.     (((dir)  << _IOC_DIRSHIFT) | \
  59.      ((type) << _IOC_TYPESHIFT) | \
  60.      ((nr)   << _IOC_NRSHIFT) | \
  61.      ((size) << _IOC_SIZESHIFT))
  62.  
  63. /* provoke compile error for invalid uses of size argument */
  64. extern unsigned int __invalid_size_argument_for_IOC;
  65. #define _IOC_TYPECHECK(t) \
  66.     ((sizeof(t) == sizeof(t[1]) && \
  67.       sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
  68.       sizeof(t) : __invalid_size_argument_for_IOC)
  69.  
  70. /* used to create numbers */
  71. #define _IO(type,nr)        _IOC(_IOC_NONE,(type),(nr),0)
  72. #define _IOR(type,nr,size)    _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
  73. #define _IOW(type,nr,size)    _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
  74. #define _IOWR(type,nr,size)    _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
  75. #define _IOR_BAD(type,nr,size)    _IOC(_IOC_READ,(type),(nr),sizeof(size))
  76. #define _IOW_BAD(type,nr,size)    _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
  77. #define _IOWR_BAD(type,nr,size)    _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
  78.  
  79. /* used to decode ioctl numbers.. */
  80. #define _IOC_DIR(nr)        (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
  81. #define _IOC_TYPE(nr)        (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
  82. #define _IOC_NR(nr)        (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
  83. #define _IOC_SIZE(nr)        (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
  84.  
  85. /* ...and for the drivers/sound files... */
  86.  
  87. #define IOC_IN        (_IOC_WRITE << _IOC_DIRSHIFT)
  88. #define IOC_OUT        (_IOC_READ << _IOC_DIRSHIFT)
  89. #define IOC_INOUT    ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
  90. #define IOCSIZE_MASK    (_IOC_SIZEMASK << _IOC_SIZESHIFT)
  91. #define IOCSIZE_SHIFT    (_IOC_SIZESHIFT)
  92.  
  93. #endif /* _ASM_PARISC_IOCTL_H */
  94.