File: /usr/src/linux/arch/ia64/ia32/ia32_ioctl.c
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 */
7
8 #include <linux/types.h>
9 #include <linux/dirent.h>
10 #include <linux/msdos_fs.h>
11 #include <linux/mtio.h>
12 #include <linux/ncp_fs.h>
13 #include <linux/capi.h>
14 #include <linux/videodev.h>
15 #include <linux/synclink.h>
16 #include <linux/atmdev.h>
17 #include <linux/atm_eni.h>
18 #include <linux/atm_nicstar.h>
19 #include <linux/atm_zatm.h>
20 #include <linux/atm_idt77105.h>
21 #include <linux/ppp_defs.h>
22 #include <linux/if_ppp.h>
23 #include <linux/ixjuser.h>
24 #include <linux/i2o-dev.h>
25 #include <../drivers/char/drm/drm.h>
26
27 #define IOCTL_NR(a) ((a) & ~(_IOC_SIZEMASK << _IOC_SIZESHIFT))
28
29 #define DO_IOCTL(fd, cmd, arg) ({ \
30 int _ret; \
31 mm_segment_t _old_fs = get_fs(); \
32 \
33 set_fs(KERNEL_DS); \
34 _ret = sys_ioctl(fd, cmd, (unsigned long)arg); \
35 set_fs(_old_fs); \
36 _ret; \
37 })
38
39 #define P(i) ((void *)(long)(i))
40
41
42 asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
43
44 asmlinkage long ia32_ioctl(unsigned int fd, unsigned int cmd, unsigned int arg)
45 {
46 long ret;
47
48 switch (IOCTL_NR(cmd)) {
49
50 case IOCTL_NR(DRM_IOCTL_VERSION):
51 {
52 drm_version_t ver;
53 struct {
54 int version_major;
55 int version_minor;
56 int version_patchlevel;
57 unsigned int name_len;
58 unsigned int name; /* pointer */
59 unsigned int date_len;
60 unsigned int date; /* pointer */
61 unsigned int desc_len;
62 unsigned int desc; /* pointer */
63 } ver32;
64
65 if (copy_from_user(&ver32, P(arg), sizeof(ver32)))
66 return -EFAULT;
67 ver.name_len = ver32.name_len;
68 ver.name = P(ver32.name);
69 ver.date_len = ver32.date_len;
70 ver.date = P(ver32.date);
71 ver.desc_len = ver32.desc_len;
72 ver.desc = P(ver32.desc);
73 ret = DO_IOCTL(fd, cmd, &ver);
74 if (ret >= 0) {
75 ver32.version_major = ver.version_major;
76 ver32.version_minor = ver.version_minor;
77 ver32.version_patchlevel = ver.version_patchlevel;
78 ver32.name_len = ver.name_len;
79 ver32.date_len = ver.date_len;
80 ver32.desc_len = ver.desc_len;
81 if (copy_to_user(P(arg), &ver32, sizeof(ver32)))
82 return -EFAULT;
83 }
84 return(ret);
85 }
86
87 case IOCTL_NR(DRM_IOCTL_GET_UNIQUE):
88 {
89 drm_unique_t un;
90 struct {
91 unsigned int unique_len;
92 unsigned int unique;
93 } un32;
94
95 if (copy_from_user(&un32, P(arg), sizeof(un32)))
96 return -EFAULT;
97 un.unique_len = un32.unique_len;
98 un.unique = P(un32.unique);
99 ret = DO_IOCTL(fd, cmd, &un);
100 if (ret >= 0) {
101 un32.unique_len = un.unique_len;
102 if (copy_to_user(P(arg), &un32, sizeof(un32)))
103 return -EFAULT;
104 }
105 return(ret);
106 }
107 case IOCTL_NR(DRM_IOCTL_SET_UNIQUE):
108 case IOCTL_NR(DRM_IOCTL_ADD_MAP):
109 case IOCTL_NR(DRM_IOCTL_ADD_BUFS):
110 case IOCTL_NR(DRM_IOCTL_MARK_BUFS):
111 case IOCTL_NR(DRM_IOCTL_INFO_BUFS):
112 case IOCTL_NR(DRM_IOCTL_MAP_BUFS):
113 case IOCTL_NR(DRM_IOCTL_FREE_BUFS):
114 case IOCTL_NR(DRM_IOCTL_ADD_CTX):
115 case IOCTL_NR(DRM_IOCTL_RM_CTX):
116 case IOCTL_NR(DRM_IOCTL_MOD_CTX):
117 case IOCTL_NR(DRM_IOCTL_GET_CTX):
118 case IOCTL_NR(DRM_IOCTL_SWITCH_CTX):
119 case IOCTL_NR(DRM_IOCTL_NEW_CTX):
120 case IOCTL_NR(DRM_IOCTL_RES_CTX):
121
122 case IOCTL_NR(DRM_IOCTL_AGP_ACQUIRE):
123 case IOCTL_NR(DRM_IOCTL_AGP_RELEASE):
124 case IOCTL_NR(DRM_IOCTL_AGP_ENABLE):
125 case IOCTL_NR(DRM_IOCTL_AGP_INFO):
126 case IOCTL_NR(DRM_IOCTL_AGP_ALLOC):
127 case IOCTL_NR(DRM_IOCTL_AGP_FREE):
128 case IOCTL_NR(DRM_IOCTL_AGP_BIND):
129 case IOCTL_NR(DRM_IOCTL_AGP_UNBIND):
130
131 /* Mga specific ioctls */
132
133 case IOCTL_NR(DRM_IOCTL_MGA_INIT):
134
135 /* I810 specific ioctls */
136
137 case IOCTL_NR(DRM_IOCTL_I810_GETBUF):
138 case IOCTL_NR(DRM_IOCTL_I810_COPY):
139
140 /* Rage 128 specific ioctls */
141
142 case IOCTL_NR(DRM_IOCTL_R128_PACKET):
143
144 case IOCTL_NR(VFAT_IOCTL_READDIR_BOTH):
145 case IOCTL_NR(VFAT_IOCTL_READDIR_SHORT):
146 case IOCTL_NR(MTIOCGET):
147 case IOCTL_NR(MTIOCPOS):
148 case IOCTL_NR(MTIOCGETCONFIG):
149 case IOCTL_NR(MTIOCSETCONFIG):
150 case IOCTL_NR(PPPIOCSCOMPRESS):
151 case IOCTL_NR(PPPIOCGIDLE):
152 case IOCTL_NR(NCP_IOC_GET_FS_INFO_V2):
153 case IOCTL_NR(NCP_IOC_GETOBJECTNAME):
154 case IOCTL_NR(NCP_IOC_SETOBJECTNAME):
155 case IOCTL_NR(NCP_IOC_GETPRIVATEDATA):
156 case IOCTL_NR(NCP_IOC_SETPRIVATEDATA):
157 case IOCTL_NR(NCP_IOC_GETMOUNTUID2):
158 case IOCTL_NR(CAPI_MANUFACTURER_CMD):
159 case IOCTL_NR(VIDIOCGTUNER):
160 case IOCTL_NR(VIDIOCSTUNER):
161 case IOCTL_NR(VIDIOCGWIN):
162 case IOCTL_NR(VIDIOCSWIN):
163 case IOCTL_NR(VIDIOCGFBUF):
164 case IOCTL_NR(VIDIOCSFBUF):
165 case IOCTL_NR(MGSL_IOCSPARAMS):
166 case IOCTL_NR(MGSL_IOCGPARAMS):
167 case IOCTL_NR(ATM_GETNAMES):
168 case IOCTL_NR(ATM_GETLINKRATE):
169 case IOCTL_NR(ATM_GETTYPE):
170 case IOCTL_NR(ATM_GETESI):
171 case IOCTL_NR(ATM_GETADDR):
172 case IOCTL_NR(ATM_RSTADDR):
173 case IOCTL_NR(ATM_ADDADDR):
174 case IOCTL_NR(ATM_DELADDR):
175 case IOCTL_NR(ATM_GETCIRANGE):
176 case IOCTL_NR(ATM_SETCIRANGE):
177 case IOCTL_NR(ATM_SETESI):
178 case IOCTL_NR(ATM_SETESIF):
179 case IOCTL_NR(ATM_GETSTAT):
180 case IOCTL_NR(ATM_GETSTATZ):
181 case IOCTL_NR(ATM_GETLOOP):
182 case IOCTL_NR(ATM_SETLOOP):
183 case IOCTL_NR(ATM_QUERYLOOP):
184 case IOCTL_NR(ENI_SETMULT):
185 case IOCTL_NR(NS_GETPSTAT):
186 /* case IOCTL_NR(NS_SETBUFLEV): This is a duplicate case with ZATM_GETPOOLZ */
187 case IOCTL_NR(ZATM_GETPOOLZ):
188 case IOCTL_NR(ZATM_GETPOOL):
189 case IOCTL_NR(ZATM_SETPOOL):
190 case IOCTL_NR(ZATM_GETTHIST):
191 case IOCTL_NR(IDT77105_GETSTAT):
192 case IOCTL_NR(IDT77105_GETSTATZ):
193 case IOCTL_NR(IXJCTL_TONE_CADENCE):
194 case IOCTL_NR(IXJCTL_FRAMES_READ):
195 case IOCTL_NR(IXJCTL_FRAMES_WRITTEN):
196 case IOCTL_NR(IXJCTL_READ_WAIT):
197 case IOCTL_NR(IXJCTL_WRITE_WAIT):
198 case IOCTL_NR(IXJCTL_DRYBUFFER_READ):
199 case IOCTL_NR(I2OHRTGET):
200 case IOCTL_NR(I2OLCTGET):
201 case IOCTL_NR(I2OPARMSET):
202 case IOCTL_NR(I2OPARMGET):
203 case IOCTL_NR(I2OSWDL):
204 case IOCTL_NR(I2OSWUL):
205 case IOCTL_NR(I2OSWDEL):
206 case IOCTL_NR(I2OHTML):
207 break;
208 default:
209 return(sys_ioctl(fd, cmd, (unsigned long)arg));
210
211 }
212 printk("%x:unimplemented IA32 ioctl system call\n", cmd);
213 return(-EINVAL);
214 }
215