patch-1.3.41 linux/include/asm-i386/ioctl.h
Next file: linux/include/asm-i386/irq.h
Previous file: linux/include/asm-alpha/system.h
Back to the patch index
Back to the overall index
- Lines: 79
- Date:
Sat Nov 11 17:44:36 1995
- Orig file:
v1.3.40/linux/include/asm-i386/ioctl.h
- Orig date:
Fri Oct 6 14:35:16 1995
diff -u --recursive --new-file v1.3.40/linux/include/asm-i386/ioctl.h linux/include/asm-i386/ioctl.h
@@ -6,8 +6,6 @@
#ifndef _ASMI386_IOCTL_H
#define _ASMI386_IOCTL_H
-#include <asm/page.h> /* for PAGE_SIZE */
-
/* ioctl command encoding: 32 bits total, command in lower 16 bits,
* size of the parameter structure in the lower 14 bits of the
* upper 16 bits.
@@ -18,38 +16,6 @@
* NOTE: This limits the max parameter size to 16kB -1 !
*/
-#define IOC_VOID 0x00000000 /* param in size field */
-#define IOC_IN 0x40000000 /* user --> kernel */
-#define IOC_OUT 0x80000000 /* kernel --> user */
-#define IOC_INOUT (IOC_IN | IOC_OUT) /* both */
-#define IOCSIZE_MASK 0x3fff0000 /* size (max 16k-1 bytes) */
-#define IOCSIZE_SHIFT 16 /* how to get the size */
-#define IOCSIZE_MAX ((PAGE_SIZE-1)&(IOCSIZE_MASK >> IOCSIZE_SHIFT))
-#define IOCCMD_MASK 0x0000ffff /* command code */
-#define IOCCMD_SHIFT 0
-#define IOCPARM_MASK IOCCMD_MASK
-#define IOCPARM_SHIFT IOCCMD_SHIFT
-
-#define IOC_SIZE(cmd) (((cmd) & IOCSIZE_MASK) >> IOCSIZE_SHIFT)
-#define IOCBASECMD(cmd) ((cmd) & ~IOCPARM_MASK)
-#define IOCGROUP(cmd) (((cmd) >> 8) & 0xFF)
-
-/* _IO(magic, subcode); size field is zero and the
- * subcode determines the command.
- */
-#define _IO(c,d) (IOC_VOID | ((c)<<8) | (d)) /* param encoded */
-
-/* _IOXX(magic, subcode, arg_t); where arg_t is the type of the
- * (last) argument field in the ioctl call, if present.
- */
-#define _IOW(c,d,t) (IOC_IN | ((sizeof(t)<<16) & IOCSIZE_MASK) | \
- ((c)<<8) | (d))
-#define _IOR(c,d,t) (IOC_OUT | ((sizeof(t)<<16) & IOCSIZE_MASK) | \
- ((c)<<8) | (d))
-/* WR rather than RW to avoid conflict with stdio.h */
-#define _IOWR(c,d,t) (IOC_INOUT | ((sizeof(t)<<16) & IOCSIZE_MASK) | \
- ((c)<<8) | (d))
-
/*
* The following is for compatibility across the various Linux
* platforms. The i386 ioctl numbering scheme doesn't really enforce
@@ -80,10 +46,30 @@
#define _IOC_READ 1U
#define _IOC_WRITE 2U
+#define _IOC(dir,type,nr,size) \
+ (((dir) << _IOC_DIRSHIFT) | \
+ ((type) << _IOC_TYPESHIFT) | \
+ ((nr) << _IOC_NRSHIFT) | \
+ ((size) << _IOC_SIZESHIFT))
+
+/* used to create numbers */
+#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
+#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
+#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
+#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
+
/* used to decode ioctl numbers.. */
#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
+
+/* ...and for the drivers/sound files... */
+
+#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT)
+#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT)
+#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
+#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT)
+#define IOCSIZE_SHIFT (_IOC_SIZESHIFT)
#endif /* _ASMI386_IOCTL_H */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov
with Sam's (original) version of this