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