ia32_ioctl.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * IA32 Architecture-specific ioctl shim code
  3. *
  4. * Copyright (C) 2000 VA Linux Co
  5. * Copyright (C) 2000 Don Dugger <n0ano@valinux.com>
  6. * Copyright (C) 2001-2003 Hewlett-Packard Co
  7. * David Mosberger-Tang <davidm@hpl.hp.com>
  8. */
  9. #include <linux/signal.h> /* argh, msdos_fs.h isn't self-contained... */
  10. #include <linux/syscalls.h>
  11. #include "ia32priv.h"
  12. #define INCLUDES
  13. #include "compat_ioctl.c"
  14. #include <asm/ioctl32.h>
  15. #define IOCTL_NR(a) ((a) & ~(_IOC_SIZEMASK << _IOC_SIZESHIFT))
  16. #define DO_IOCTL(fd, cmd, arg) ({ \
  17. int _ret; \
  18. mm_segment_t _old_fs = get_fs(); \
  19. \
  20. set_fs(KERNEL_DS); \
  21. _ret = sys_ioctl(fd, cmd, (unsigned long)arg); \
  22. set_fs(_old_fs); \
  23. _ret; \
  24. })
  25. #define CODE
  26. #include "compat_ioctl.c"
  27. typedef int (* ioctl32_handler_t)(unsigned int, unsigned int, unsigned long, struct file *);
  28. #define COMPATIBLE_IOCTL(cmd) HANDLE_IOCTL((cmd),sys_ioctl)
  29. #define HANDLE_IOCTL(cmd,handler) { (cmd), (ioctl32_handler_t)(handler), NULL },
  30. #define IOCTL_TABLE_START \
  31. struct ioctl_trans ioctl_start[] = {
  32. #define IOCTL_TABLE_END \
  33. };
  34. IOCTL_TABLE_START
  35. #define DECLARES
  36. #include "compat_ioctl.c"
  37. #include <linux/compat_ioctl.h>
  38. IOCTL_TABLE_END
  39. int ioctl_table_size = ARRAY_SIZE(ioctl_start);