drm: fix issues with systems with no MTRR
[pandora-kernel.git] / arch / x86_64 / ia32 / ia32_ioctl.c
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.
3  *
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 
7  *
8  * These routines maintain argument size conversion between 32bit and 64bit
9  * ioctls.
10  */
11
12 #define INCLUDES
13 #include <linux/syscalls.h>
14 #include "compat_ioctl.c"
15 #include <asm/ia32.h>
16
17 #define CODE
18 #include "compat_ioctl.c"
19   
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       */
24
25 static int rtc32_ioctl(unsigned fd, unsigned cmd, unsigned long arg) 
26
27         unsigned long val;
28         mm_segment_t oldfs = get_fs(); 
29         int ret; 
30         
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; 
39
40         case RTC_IRQP_SET32: 
41                 cmd = RTC_IRQP_SET; 
42                 break; 
43
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; 
51
52         case RTC_EPOCH_SET32:
53                 cmd = RTC_EPOCH_SET; 
54                 break; 
55         } 
56         return sys_ioctl(fd,cmd,arg); 
57
58
59
60 #define HANDLE_IOCTL(cmd,handler) { (cmd), (ioctl_trans_handler_t)(handler) }, 
61 #define COMPATIBLE_IOCTL(cmd) HANDLE_IOCTL(cmd,sys_ioctl)
62
63 struct ioctl_trans ioctl_start[] = { 
64 #include <linux/compat_ioctl.h>
65 #define DECLARES
66 #include "compat_ioctl.c"
67
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 }; 
77
78 int ioctl_table_size = ARRAY_SIZE(ioctl_start);
79