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
13 #include <linux/syscalls.h>
14 #include "compat_ioctl.c"
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)
28 mm_segment_t oldfs = get_fs();
34 ret = sys_ioctl(fd, RTC_IRQP_READ, (unsigned long)&val);
37 ret = put_user(val, (unsigned int __user *) arg);
44 case RTC_EPOCH_READ32:
46 ret = sys_ioctl(fd, RTC_EPOCH_READ, (unsigned long) &val);
49 ret = put_user(val, (unsigned int __user *) arg);
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>
66 #include "compat_ioctl.c"
68 /* And these ioctls need translation */
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 */
78 int ioctl_table_size = ARRAY_SIZE(ioctl_start);