powerpc: Merge spinlock.h
[linux-2.6/zen-sources.git] / arch / x86_64 / ia32 / ia32_ioctl.c
blobe335bd0b637d705a4c73e28f6c773340617da072
1 /* $Id: ia32_ioctl.c,v 1.25 2002/10/11 07:17:06 ak Exp $
2 * ioctl32.c: Conversion between 32bit and 64bit native ioctls.
4 * Copyright (C) 1997-2000 Jakub Jelinek (jakub@redhat.com)
5 * Copyright (C) 1998 Eddie C. Dost (ecd@skynet.be)
6 * Copyright (C) 2001,2002 Andi Kleen, SuSE Labs
8 * These routines maintain argument size conversion between 32bit and 64bit
9 * ioctls.
12 #define INCLUDES
13 #include <linux/syscalls.h>
14 #include "compat_ioctl.c"
15 #include <asm/ia32.h>
17 #define CODE
18 #include "compat_ioctl.c"
20 #define RTC_IRQP_READ32 _IOR('p', 0x0b, unsigned int) /* Read IRQ rate */
21 #define RTC_IRQP_SET32 _IOW('p', 0x0c, unsigned int) /* Set IRQ rate */
22 #define RTC_EPOCH_READ32 _IOR('p', 0x0d, unsigned) /* Read epoch */
23 #define RTC_EPOCH_SET32 _IOW('p', 0x0e, unsigned) /* Set epoch */
25 static int rtc32_ioctl(unsigned fd, unsigned cmd, unsigned long arg)
27 unsigned long val;
28 mm_segment_t oldfs = get_fs();
29 int ret;
31 switch (cmd) {
32 case RTC_IRQP_READ32:
33 set_fs(KERNEL_DS);
34 ret = sys_ioctl(fd, RTC_IRQP_READ, (unsigned long)&val);
35 set_fs(oldfs);
36 if (!ret)
37 ret = put_user(val, (unsigned int __user *) arg);
38 return ret;
40 case RTC_IRQP_SET32:
41 cmd = RTC_IRQP_SET;
42 break;
44 case RTC_EPOCH_READ32:
45 set_fs(KERNEL_DS);
46 ret = sys_ioctl(fd, RTC_EPOCH_READ, (unsigned long) &val);
47 set_fs(oldfs);
48 if (!ret)
49 ret = put_user(val, (unsigned int __user *) arg);
50 return ret;
52 case RTC_EPOCH_SET32:
53 cmd = RTC_EPOCH_SET;
54 break;
56 return sys_ioctl(fd,cmd,arg);
60 #define HANDLE_IOCTL(cmd,handler) { (cmd), (ioctl_trans_handler_t)(handler) },
61 #define COMPATIBLE_IOCTL(cmd) HANDLE_IOCTL(cmd,sys_ioctl)
63 struct ioctl_trans ioctl_start[] = {
64 #include <linux/compat_ioctl.h>
65 #define DECLARES
66 #include "compat_ioctl.c"
68 /* And these ioctls need translation */
69 /* realtime device */
70 HANDLE_IOCTL(RTC_IRQP_READ, rtc32_ioctl)
71 HANDLE_IOCTL(RTC_IRQP_READ32,rtc32_ioctl)
72 HANDLE_IOCTL(RTC_IRQP_SET32, rtc32_ioctl)
73 HANDLE_IOCTL(RTC_EPOCH_READ32, rtc32_ioctl)
74 HANDLE_IOCTL(RTC_EPOCH_SET32, rtc32_ioctl)
75 /* take care of sizeof(sizeof()) breakage */
76 };
78 int ioctl_table_size = ARRAY_SIZE(ioctl_start);