ia32_ioctl.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. #define IOCTL_NR(a) ((a) & ~(_IOC_SIZEMASK << _IOC_SIZESHIFT))
  15. #define DO_IOCTL(fd, cmd, arg) ({ \
  16. int _ret; \
  17. mm_segment_t _old_fs = get_fs(); \
  18. \
  19. set_fs(KERNEL_DS); \
  20. _ret = sys_ioctl(fd, cmd, (unsigned long)arg); \
  21. set_fs(_old_fs); \
  22. _ret; \
  23. })
  24. #define CODE
  25. #include "compat_ioctl.c"
  26. typedef int (* ioctl32_handler_t)(unsigned int, unsigned int, unsigned long, struct file *);
  27. #define COMPATIBLE_IOCTL(cmd) HANDLE_IOCTL((cmd),sys_ioctl)
  28. #define HANDLE_IOCTL(cmd,handler) { (cmd), (ioctl32_handler_t)(handler), NULL },
  29. #define IOCTL_TABLE_START \
  30. struct ioctl_trans ioctl_start[] = {
  31. #define IOCTL_TABLE_END \
  32. };
  33. IOCTL_TABLE_START
  34. #define DECLARES
  35. #include "compat_ioctl.c"
  36. #include <linux/compat_ioctl.h>
  37. IOCTL_TABLE_END
  38. int ioctl_table_size = ARRAY_SIZE(ioctl_start);