1 /* $Id: ioctl32.c,v 1.81 2000/03/12 04:02:07 davem 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)
7 * These routines maintain argument size conversion between 32bit and 64bit
11 #include <linux/types.h>
12 #include <linux/kernel.h>
13 #include <linux/sched.h>
14 #include <linux/smp.h>
15 #include <linux/smp_lock.h>
16 #include <linux/ioctl.h>
18 #include <linux/malloc.h>
19 #include <linux/hdreg.h>
20 #if 0 /* New RAID code is half-merged... -DaveM */
24 #include <linux/route.h>
25 #include <linux/skbuff.h>
26 #include <linux/netlink.h>
29 #include <linux/file.h>
31 #include <linux/ppp_defs.h>
32 #include <linux/if_ppp.h>
33 #include <linux/mtio.h>
34 #include <linux/cdrom.h>
35 #include <linux/loop.h>
36 #include <linux/auto_fs.h>
37 #include <linux/devfs_fs.h>
38 #include <linux/tty.h>
39 #include <linux/vt_kern.h>
41 #include <linux/ext2_fs.h>
42 #include <linux/videodev.h>
43 #include <linux/netdevice.h>
44 #include <linux/raw.h>
45 #include <linux/smb_fs.h>
46 #include <linux/blkpg.h>
48 #include <scsi/scsi.h>
51 #include <scsi/scsi_ioctl.h>
55 #include <asm/types.h>
56 #include <asm/uaccess.h>
59 #include <asm/vuid_event.h>
61 #include <asm/openpromio.h>
62 #include <asm/envctrl.h>
63 #include <asm/audioio.h>
64 #include <asm/ethtool.h>
66 #include <linux/soundcard.h>
68 #include <linux/atm.h>
69 #include <linux/atmarp.h>
70 #include <linux/atmclip.h>
71 #include <linux/atmdev.h>
72 #include <linux/atmioc.h>
73 #include <linux/atmlec.h>
74 #include <linux/atmmpc.h>
75 #include <linux/atmsvc.h>
76 #include <linux/atm_tcp.h>
77 #include <linux/sonet.h>
78 #include <linux/atm_suni.h>
80 /* Use this to get at 32-bit user passed pointers.
81 See sys_sparc32.c for description about these. */
82 #define A(__x) ((unsigned long)(__x))
84 ({ unsigned long __ret; \
85 __asm__ ("srl %0, 0, %0" \
91 /* Aiee. Someone does not find a difference between int and long */
92 #define EXT2_IOC32_GETFLAGS _IOR('f', 1, int)
93 #define EXT2_IOC32_SETFLAGS _IOW('f', 2, int)
94 #define EXT2_IOC32_GETVERSION _IOR('v', 1, int)
95 #define EXT2_IOC32_SETVERSION _IOW('v', 2, int)
97 extern asmlinkage
int sys_ioctl(unsigned int fd
, unsigned int cmd
, unsigned long arg
);
99 static int w_long(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
101 mm_segment_t old_fs
= get_fs();
106 err
= sys_ioctl(fd
, cmd
, (unsigned long)&val
);
108 if (!err
&& put_user(val
, (u32
*)arg
))
113 static int rw_long(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
115 mm_segment_t old_fs
= get_fs();
119 if(get_user(val
, (u32
*)arg
))
122 err
= sys_ioctl(fd
, cmd
, (unsigned long)&val
);
124 if (!err
&& put_user(val
, (u32
*)arg
))
129 static int do_ext2_ioctl(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
131 /* These are just misnamed, they actually get/put from/to user an int */
133 case EXT2_IOC32_GETFLAGS
: cmd
= EXT2_IOC_GETFLAGS
; break;
134 case EXT2_IOC32_SETFLAGS
: cmd
= EXT2_IOC_SETFLAGS
; break;
135 case EXT2_IOC32_GETVERSION
: cmd
= EXT2_IOC_GETVERSION
; break;
136 case EXT2_IOC32_SETVERSION
: cmd
= EXT2_IOC_SETVERSION
; break;
138 return sys_ioctl(fd
, cmd
, arg
);
141 struct video_tuner32
{
144 u32 rangelow
, rangehigh
;
149 static int get_video_tuner32(struct video_tuner
*kp
, struct video_tuner32
*up
)
153 if(get_user(kp
->tuner
, &up
->tuner
))
155 for(i
= 0; i
< 32; i
++)
156 __get_user(kp
->name
[i
], &up
->name
[i
]);
157 __get_user(kp
->rangelow
, &up
->rangelow
);
158 __get_user(kp
->rangehigh
, &up
->rangehigh
);
159 __get_user(kp
->flags
, &up
->flags
);
160 __get_user(kp
->mode
, &up
->mode
);
161 __get_user(kp
->signal
, &up
->signal
);
165 static int put_video_tuner32(struct video_tuner
*kp
, struct video_tuner32
*up
)
169 if(put_user(kp
->tuner
, &up
->tuner
))
171 for(i
= 0; i
< 32; i
++)
172 __put_user(kp
->name
[i
], &up
->name
[i
]);
173 __put_user(kp
->rangelow
, &up
->rangelow
);
174 __put_user(kp
->rangehigh
, &up
->rangehigh
);
175 __put_user(kp
->flags
, &up
->flags
);
176 __put_user(kp
->mode
, &up
->mode
);
177 __put_user(kp
->signal
, &up
->signal
);
181 struct video_buffer32
{
182 /* void * */ u32 base
;
183 s32 height
, width
, depth
, bytesperline
;
186 static int get_video_buffer32(struct video_buffer
*kp
, struct video_buffer32
*up
)
190 if(get_user(tmp
, &up
->base
))
192 kp
->base
= (void *) ((unsigned long)tmp
);
193 __get_user(kp
->height
, &up
->height
);
194 __get_user(kp
->width
, &up
->width
);
195 __get_user(kp
->depth
, &up
->depth
);
196 __get_user(kp
->bytesperline
, &up
->bytesperline
);
200 static int put_video_buffer32(struct video_buffer
*kp
, struct video_buffer32
*up
)
202 u32 tmp
= (u32
)((unsigned long)kp
->base
);
204 if(put_user(tmp
, &up
->base
))
206 __put_user(kp
->height
, &up
->height
);
207 __put_user(kp
->width
, &up
->width
);
208 __put_user(kp
->depth
, &up
->depth
);
209 __put_user(kp
->bytesperline
, &up
->bytesperline
);
213 struct video_clip32
{
214 s32 x
, y
, width
, height
;
215 /* struct video_clip32 * */ u32 next
;
218 struct video_window32
{
219 u32 x
, y
, width
, height
, chromakey
, flags
;
220 /* struct video_clip32 * */ u32 clips
;
224 static void free_kvideo_clips(struct video_window
*kp
)
226 struct video_clip
*cp
;
233 static int get_video_window32(struct video_window
*kp
, struct video_window32
*up
)
235 struct video_clip32
*ucp
;
236 struct video_clip
*kcp
;
240 if(get_user(kp
->x
, &up
->x
))
242 __get_user(kp
->y
, &up
->y
);
243 __get_user(kp
->width
, &up
->width
);
244 __get_user(kp
->height
, &up
->height
);
245 __get_user(kp
->chromakey
, &up
->chromakey
);
246 __get_user(kp
->flags
, &up
->flags
);
247 __get_user(kp
->clipcount
, &up
->clipcount
);
248 __get_user(tmp
, &up
->clips
);
249 ucp
= (struct video_clip32
*)A(tmp
);
252 nclips
= kp
->clipcount
;
259 /* Peculiar interface... */
261 nclips
= VIDEO_CLIPMAP_SIZE
;
263 kcp
= kmalloc(nclips
* sizeof(struct video_clip
), GFP_KERNEL
);
266 goto cleanup_and_err
;
269 for(i
= 0; i
< nclips
; i
++) {
270 __get_user(kcp
[i
].x
, &ucp
[i
].x
);
271 __get_user(kcp
[i
].y
, &ucp
[i
].y
);
272 __get_user(kcp
[i
].width
, &ucp
[i
].width
);
273 __get_user(kcp
[i
].height
, &ucp
[i
].height
);
274 kcp
[nclips
].next
= NULL
;
280 free_kvideo_clips(kp
);
284 /* You get back everything except the clips... */
285 static int put_video_window32(struct video_window
*kp
, struct video_window32
*up
)
287 if(put_user(kp
->x
, &up
->x
))
289 __put_user(kp
->y
, &up
->y
);
290 __put_user(kp
->width
, &up
->width
);
291 __put_user(kp
->height
, &up
->height
);
292 __put_user(kp
->chromakey
, &up
->chromakey
);
293 __put_user(kp
->flags
, &up
->flags
);
294 __put_user(kp
->clipcount
, &up
->clipcount
);
298 #define VIDIOCGTUNER32 _IOWR('v',4, struct video_tuner32)
299 #define VIDIOCSTUNER32 _IOW('v',5, struct video_tuner32)
300 #define VIDIOCGWIN32 _IOR('v',9, struct video_window32)
301 #define VIDIOCSWIN32 _IOW('v',10, struct video_window32)
302 #define VIDIOCGFBUF32 _IOR('v',11, struct video_buffer32)
303 #define VIDIOCSFBUF32 _IOW('v',12, struct video_buffer32)
304 #define VIDIOCGFREQ32 _IOR('v',14, u32)
305 #define VIDIOCSFREQ32 _IOW('v',15, u32)
307 static int do_video_ioctl(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
310 struct video_tuner vt
;
311 struct video_buffer vb
;
312 struct video_window vw
;
315 mm_segment_t old_fs
= get_fs();
316 void *up
= (void *)arg
;
319 /* First, convert the command. */
321 case VIDIOCGTUNER32
: cmd
= VIDIOCGTUNER
; break;
322 case VIDIOCSTUNER32
: cmd
= VIDIOCSTUNER
; break;
323 case VIDIOCGWIN32
: cmd
= VIDIOCGWIN
; break;
324 case VIDIOCSWIN32
: cmd
= VIDIOCSWIN
; break;
325 case VIDIOCGFBUF32
: cmd
= VIDIOCGFBUF
; break;
326 case VIDIOCSFBUF32
: cmd
= VIDIOCSFBUF
; break;
327 case VIDIOCGFREQ32
: cmd
= VIDIOCGFREQ
; break;
328 case VIDIOCSFREQ32
: cmd
= VIDIOCSFREQ
; break;
334 err
= get_video_tuner32(&karg
.vt
, up
);
338 err
= get_video_window32(&karg
.vw
, up
);
342 err
= get_video_buffer32(&karg
.vb
, up
);
346 err
= get_user(karg
.vx
, (u32
*)up
);
353 err
= sys_ioctl(fd
, cmd
, (unsigned long)&karg
);
356 if(cmd
== VIDIOCSWIN
)
357 free_kvideo_clips(&karg
.vw
);
362 err
= put_video_tuner32(&karg
.vt
, up
);
366 err
= put_video_window32(&karg
.vw
, up
);
370 err
= put_video_buffer32(&karg
.vb
, up
);
374 err
= put_user(((u32
)karg
.vx
), (u32
*)up
);
387 static int do_siocgstamp(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
389 struct timeval32
*up
= (struct timeval32
*)arg
;
391 mm_segment_t old_fs
= get_fs();
395 err
= sys_ioctl(fd
, cmd
, (unsigned long)&ktv
);
398 err
= put_user(ktv
.tv_sec
, &up
->tv_sec
);
399 err
|= __put_user(ktv
.tv_usec
, &up
->tv_usec
);
407 unsigned short base_addr
;
414 #define IFHWADDRLEN 6
417 char ifrn_name
[IFNAMSIZ
]; /* if name, e.g. "en0" */
420 struct sockaddr ifru_addr
;
421 struct sockaddr ifru_dstaddr
;
422 struct sockaddr ifru_broadaddr
;
423 struct sockaddr ifru_netmask
;
424 struct sockaddr ifru_hwaddr
;
428 struct ifmap32 ifru_map
;
429 char ifru_slave
[IFNAMSIZ
]; /* Just fits the size */
430 char ifru_newname
[IFNAMSIZ
];
431 __kernel_caddr_t32 ifru_data
;
436 int ifc_len
; /* size of buffer */
437 __kernel_caddr_t32 ifcbuf
;
440 static int dev_ifname32(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
442 struct net_device
*dev
;
443 struct ifreq32 ifr32
;
446 if (copy_from_user(&ifr32
, (struct ifreq32
*)arg
, sizeof(struct ifreq32
)))
449 dev
= dev_get_by_index(ifr32
.ifr_ifindex
);
453 strcpy(ifr32
.ifr_name
, dev
->name
);
455 err
= copy_to_user((struct ifreq32
*)arg
, &ifr32
, sizeof(struct ifreq32
));
456 return (err
? -EFAULT
: 0);
459 static inline int dev_ifconf(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
461 struct ifconf32 ifc32
;
463 struct ifreq32
*ifr32
;
469 if (copy_from_user(&ifc32
, (struct ifconf32
*)arg
, sizeof(struct ifconf32
)))
472 if(ifc32
.ifcbuf
== 0) {
477 ifc
.ifc_len
= ((ifc32
.ifc_len
/ sizeof (struct ifreq32
)) + 1) *
478 sizeof (struct ifreq
);
479 ifc
.ifc_buf
= kmalloc (ifc
.ifc_len
, GFP_KERNEL
);
484 ifr32
= (struct ifreq32
*)A(ifc32
.ifcbuf
);
485 for (i
= 0; i
< ifc32
.ifc_len
; i
+= sizeof (struct ifreq32
)) {
486 if (copy_from_user(ifr
++, ifr32
++, sizeof (struct ifreq32
))) {
491 old_fs
= get_fs(); set_fs (KERNEL_DS
);
492 err
= sys_ioctl (fd
, SIOCGIFCONF
, (unsigned long)&ifc
);
496 ifr32
= (struct ifreq32
*)A(ifc32
.ifcbuf
);
497 for (i
= 0, j
= 0; i
< ifc32
.ifc_len
&& j
< ifc
.ifc_len
;
498 i
+= sizeof (struct ifreq32
), j
+= sizeof (struct ifreq
)) {
499 if (copy_to_user(ifr32
++, ifr
++, sizeof (struct ifreq32
))) {
505 if (i
<= ifc32
.ifc_len
)
508 ifc32
.ifc_len
= i
- sizeof (struct ifreq32
);
509 if (copy_to_user((struct ifconf32
*)arg
, &ifc32
, sizeof(struct ifconf32
)))
513 if(ifc
.ifc_buf
!= NULL
)
518 static inline int dev_ifsioc(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
526 err
= copy_from_user(&ifr
, (struct ifreq32
*)arg
, sizeof(ifr
.ifr_name
));
527 err
|= __get_user(ifr
.ifr_map
.mem_start
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_map
.mem_start
));
528 err
|= __get_user(ifr
.ifr_map
.mem_end
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_map
.mem_end
));
529 err
|= __get_user(ifr
.ifr_map
.base_addr
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_map
.base_addr
));
530 err
|= __get_user(ifr
.ifr_map
.irq
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_map
.irq
));
531 err
|= __get_user(ifr
.ifr_map
.dma
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_map
.dma
));
532 err
|= __get_user(ifr
.ifr_map
.port
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_map
.port
));
540 if (copy_from_user(&ifr
, (struct ifreq32
*)arg
, sizeof(struct ifreq32
)))
542 ifr
.ifr_data
= (__kernel_caddr_t
)get_free_page(GFP_KERNEL
);
545 if(cmd
== SIOCETHTOOL
) {
548 __get_user(data
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_data
));
549 if(copy_from_user(ifr
.ifr_data
,
551 sizeof(struct ethtool_cmd
))) {
552 free_page((unsigned long)ifr
.ifr_data
);
558 if (copy_from_user(&ifr
, (struct ifreq32
*)arg
, sizeof(struct ifreq32
)))
564 err
= sys_ioctl (fd
, cmd
, (unsigned long)&ifr
);
579 if (copy_to_user((struct ifreq32
*)arg
, &ifr
, sizeof(struct ifreq32
)))
590 __get_user(data
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_data
));
591 if(cmd
== SIOCETHTOOL
)
592 len
= sizeof(struct ethtool_cmd
);
593 if(cmd
== SIOCGPPPVER
)
594 len
= strlen((char *)ifr
.ifr_data
) + 1;
595 else if(cmd
== SIOCGPPPCSTATS
)
596 len
= sizeof(struct ppp_comp_stats
);
598 len
= sizeof(struct ppp_stats
);
600 len
= copy_to_user((char *)A(data
), ifr
.ifr_data
, len
);
601 free_page((unsigned long)ifr
.ifr_data
);
607 err
= copy_to_user((struct ifreq32
*)arg
, &ifr
, sizeof(ifr
.ifr_name
));
608 err
|= __put_user(ifr
.ifr_map
.mem_start
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_map
.mem_start
));
609 err
|= __put_user(ifr
.ifr_map
.mem_end
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_map
.mem_end
));
610 err
|= __put_user(ifr
.ifr_map
.base_addr
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_map
.base_addr
));
611 err
|= __put_user(ifr
.ifr_map
.irq
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_map
.irq
));
612 err
|= __put_user(ifr
.ifr_map
.dma
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_map
.dma
));
613 err
|= __put_user(ifr
.ifr_map
.port
, &(((struct ifreq32
*)arg
)->ifr_ifru
.ifru_map
.port
));
624 struct sockaddr rt_dst
; /* target address */
625 struct sockaddr rt_gateway
; /* gateway addr (RTF_GATEWAY) */
626 struct sockaddr rt_genmask
; /* target network mask (IP) */
627 unsigned short rt_flags
;
630 unsigned char rt_tos
;
631 unsigned char rt_class
;
633 short rt_metric
; /* +1 for binary compatibility! */
634 /* char * */ u32 rt_dev
; /* forcing the device at add */
635 u32 rt_mtu
; /* per route MTU/Window */
636 u32 rt_window
; /* Window clamping */
637 unsigned short rt_irtt
; /* Initial RTT */
641 static inline int routing_ioctl(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
647 mm_segment_t old_fs
= get_fs();
649 ret
= copy_from_user (&r
.rt_dst
, &(((struct rtentry32
*)arg
)->rt_dst
), 3 * sizeof(struct sockaddr
));
650 ret
|= __get_user (r
.rt_flags
, &(((struct rtentry32
*)arg
)->rt_flags
));
651 ret
|= __get_user (r
.rt_metric
, &(((struct rtentry32
*)arg
)->rt_metric
));
652 ret
|= __get_user (r
.rt_mtu
, &(((struct rtentry32
*)arg
)->rt_mtu
));
653 ret
|= __get_user (r
.rt_window
, &(((struct rtentry32
*)arg
)->rt_window
));
654 ret
|= __get_user (r
.rt_irtt
, &(((struct rtentry32
*)arg
)->rt_irtt
));
655 ret
|= __get_user (rtdev
, &(((struct rtentry32
*)arg
)->rt_dev
));
657 ret
|= copy_from_user (devname
, (char *)A(rtdev
), 15);
658 r
.rt_dev
= devname
; devname
[15] = 0;
664 ret
= sys_ioctl (fd
, cmd
, (long)&r
);
669 struct hd_geometry32
{
671 unsigned char sectors
;
672 unsigned short cylinders
;
676 static inline int hdio_getgeo(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
678 mm_segment_t old_fs
= get_fs();
679 struct hd_geometry geo
;
683 err
= sys_ioctl(fd
, HDIO_GETGEO
, (unsigned long)&geo
);
686 err
= copy_to_user ((struct hd_geometry32
*)arg
, &geo
, 4);
687 err
|= __put_user (geo
.start
, &(((struct hd_geometry32
*)arg
)->start
));
689 return err
? -EFAULT
: 0;
693 int index
; /* first element (0 origin) */
700 #define FBIOPUTCMAP32 _IOW('F', 3, struct fbcmap32)
701 #define FBIOGETCMAP32 _IOW('F', 4, struct fbcmap32)
703 static inline int fbiogetputcmap(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
707 char red
[256], green
[256], blue
[256];
709 mm_segment_t old_fs
= get_fs();
711 ret
= get_user(f
.index
, &(((struct fbcmap32
*)arg
)->index
));
712 ret
|= __get_user(f
.count
, &(((struct fbcmap32
*)arg
)->count
));
713 ret
|= __get_user(r
, &(((struct fbcmap32
*)arg
)->red
));
714 ret
|= __get_user(g
, &(((struct fbcmap32
*)arg
)->green
));
715 ret
|= __get_user(b
, &(((struct fbcmap32
*)arg
)->blue
));
718 if ((f
.index
< 0) || (f
.index
> 255)) return -EINVAL
;
719 if (f
.index
+ f
.count
> 256)
720 f
.count
= 256 - f
.index
;
721 if (cmd
== FBIOPUTCMAP32
) {
722 ret
= copy_from_user (red
, (char *)A(r
), f
.count
);
723 ret
|= copy_from_user (green
, (char *)A(g
), f
.count
);
724 ret
|= copy_from_user (blue
, (char *)A(b
), f
.count
);
728 f
.red
= red
; f
.green
= green
; f
.blue
= blue
;
730 ret
= sys_ioctl (fd
, (cmd
== FBIOPUTCMAP32
) ? FBIOPUTCMAP_SPARC
: FBIOGETCMAP_SPARC
, (long)&f
);
732 if (!ret
&& cmd
== FBIOGETCMAP32
) {
733 ret
= copy_to_user ((char *)A(r
), red
, f
.count
);
734 ret
|= copy_to_user ((char *)A(g
), green
, f
.count
);
735 ret
|= copy_to_user ((char *)A(b
), blue
, f
.count
);
737 return ret
? -EFAULT
: 0;
741 short set
; /* what to set, choose from the list above */
742 short enable
; /* cursor on/off */
743 struct fbcurpos pos
; /* cursor position */
744 struct fbcurpos hot
; /* cursor hot spot */
745 struct fbcmap32 cmap
; /* color map info */
746 struct fbcurpos size
; /* cursor bit map size */
747 u32 image
; /* cursor image bits */
748 u32 mask
; /* cursor mask bits */
751 #define FBIOSCURSOR32 _IOW('F', 24, struct fbcursor32)
752 #define FBIOGCURSOR32 _IOW('F', 25, struct fbcursor32)
754 static inline int fbiogscursor(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
758 char red
[2], green
[2], blue
[2];
759 char image
[128], mask
[128];
762 mm_segment_t old_fs
= get_fs();
764 ret
= copy_from_user (&f
, (struct fbcursor32
*)arg
, 2 * sizeof (short) + 2 * sizeof(struct fbcurpos
));
765 ret
|= __get_user(f
.size
.fbx
, &(((struct fbcursor32
*)arg
)->size
.fbx
));
766 ret
|= __get_user(f
.size
.fby
, &(((struct fbcursor32
*)arg
)->size
.fby
));
767 ret
|= __get_user(f
.cmap
.index
, &(((struct fbcursor32
*)arg
)->cmap
.index
));
768 ret
|= __get_user(f
.cmap
.count
, &(((struct fbcursor32
*)arg
)->cmap
.count
));
769 ret
|= __get_user(r
, &(((struct fbcursor32
*)arg
)->cmap
.red
));
770 ret
|= __get_user(g
, &(((struct fbcursor32
*)arg
)->cmap
.green
));
771 ret
|= __get_user(b
, &(((struct fbcursor32
*)arg
)->cmap
.blue
));
772 ret
|= __get_user(m
, &(((struct fbcursor32
*)arg
)->mask
));
773 ret
|= __get_user(i
, &(((struct fbcursor32
*)arg
)->image
));
776 if (f
.set
& FB_CUR_SETCMAP
) {
777 if ((uint
) f
.size
.fby
> 32)
779 ret
= copy_from_user (mask
, (char *)A(m
), f
.size
.fby
* 4);
780 ret
|= copy_from_user (image
, (char *)A(i
), f
.size
.fby
* 4);
783 f
.image
= image
; f
.mask
= mask
;
785 if (f
.set
& FB_CUR_SETCMAP
) {
786 ret
= copy_from_user (red
, (char *)A(r
), 2);
787 ret
|= copy_from_user (green
, (char *)A(g
), 2);
788 ret
|= copy_from_user (blue
, (char *)A(b
), 2);
791 f
.cmap
.red
= red
; f
.cmap
.green
= green
; f
.cmap
.blue
= blue
;
794 ret
= sys_ioctl (fd
, FBIOSCURSOR
, (long)&f
);
799 struct fb_fix_screeninfo32
{
801 __kernel_caddr_t32 smem_start
;
810 __kernel_caddr_t32 mmio_start
;
819 __kernel_caddr_t32 red
;
820 __kernel_caddr_t32 green
;
821 __kernel_caddr_t32 blue
;
822 __kernel_caddr_t32 transp
;
825 static int fb_ioctl_trans(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
827 mm_segment_t old_fs
= get_fs();
828 u32 red
= 0, green
= 0, blue
= 0, transp
= 0;
829 struct fb_fix_screeninfo fix
;
834 memset(&cmap
, 0, sizeof(cmap
));
836 case FBIOGET_FSCREENINFO
:
842 err
= __get_user(cmap
.start
, &((struct fb_cmap32
*)arg
)->start
);
843 err
|= __get_user(cmap
.len
, &((struct fb_cmap32
*)arg
)->len
);
844 err
|= __get_user(red
, &((struct fb_cmap32
*)arg
)->red
);
845 err
|= __get_user(green
, &((struct fb_cmap32
*)arg
)->green
);
846 err
|= __get_user(blue
, &((struct fb_cmap32
*)arg
)->blue
);
847 err
|= __get_user(transp
, &((struct fb_cmap32
*)arg
)->transp
);
853 cmap
.red
= kmalloc(cmap
.len
* sizeof(__u16
), GFP_KERNEL
);
856 cmap
.green
= kmalloc(cmap
.len
* sizeof(__u16
), GFP_KERNEL
);
859 cmap
.blue
= kmalloc(cmap
.len
* sizeof(__u16
), GFP_KERNEL
);
863 cmap
.transp
= kmalloc(cmap
.len
* sizeof(__u16
), GFP_KERNEL
);
868 if (cmd
== FBIOGETCMAP
)
871 err
= __copy_from_user(cmap
.red
, (char *)A(red
), cmap
.len
* sizeof(__u16
));
872 err
|= __copy_from_user(cmap
.green
, (char *)A(green
), cmap
.len
* sizeof(__u16
));
873 err
|= __copy_from_user(cmap
.blue
, (char *)A(blue
), cmap
.len
* sizeof(__u16
));
874 if (cmap
.transp
) err
|= __copy_from_user(cmap
.transp
, (char *)A(transp
), cmap
.len
* sizeof(__u16
));
882 static int count
= 0;
884 printk("%s: Unknown fb ioctl cmd fd(%d) "
885 "cmd(%08x) arg(%08lx)\n",
886 __FUNCTION__
, fd
, cmd
, arg
);
891 err
= sys_ioctl(fd
, cmd
, (unsigned long)karg
);
896 case FBIOGET_FSCREENINFO
:
897 err
= __copy_to_user((char *)((struct fb_fix_screeninfo32
*)arg
)->id
, (char *)fix
.id
, sizeof(fix
.id
));
898 err
|= __put_user((__u32
)(unsigned long)fix
.smem_start
, &((struct fb_fix_screeninfo32
*)arg
)->smem_start
);
899 err
|= __put_user(fix
.smem_len
, &((struct fb_fix_screeninfo32
*)arg
)->smem_len
);
900 err
|= __put_user(fix
.type
, &((struct fb_fix_screeninfo32
*)arg
)->type
);
901 err
|= __put_user(fix
.type_aux
, &((struct fb_fix_screeninfo32
*)arg
)->type_aux
);
902 err
|= __put_user(fix
.visual
, &((struct fb_fix_screeninfo32
*)arg
)->visual
);
903 err
|= __put_user(fix
.xpanstep
, &((struct fb_fix_screeninfo32
*)arg
)->xpanstep
);
904 err
|= __put_user(fix
.ypanstep
, &((struct fb_fix_screeninfo32
*)arg
)->ypanstep
);
905 err
|= __put_user(fix
.ywrapstep
, &((struct fb_fix_screeninfo32
*)arg
)->ywrapstep
);
906 err
|= __put_user(fix
.line_length
, &((struct fb_fix_screeninfo32
*)arg
)->line_length
);
907 err
|= __put_user((__u32
)(unsigned long)fix
.mmio_start
, &((struct fb_fix_screeninfo32
*)arg
)->mmio_start
);
908 err
|= __put_user(fix
.mmio_len
, &((struct fb_fix_screeninfo32
*)arg
)->mmio_len
);
909 err
|= __put_user(fix
.accel
, &((struct fb_fix_screeninfo32
*)arg
)->accel
);
910 err
|= __copy_to_user((char *)((struct fb_fix_screeninfo32
*)arg
)->reserved
, (char *)fix
.reserved
, sizeof(fix
.reserved
));
913 err
= __copy_to_user((char *)A(red
), cmap
.red
, cmap
.len
* sizeof(__u16
));
914 err
|= __copy_to_user((char *)A(green
), cmap
.blue
, cmap
.len
* sizeof(__u16
));
915 err
|= __copy_to_user((char *)A(blue
), cmap
.blue
, cmap
.len
* sizeof(__u16
));
917 err
|= __copy_to_user((char *)A(transp
), cmap
.transp
, cmap
.len
* sizeof(__u16
));
925 out
: if (cmap
.red
) kfree(cmap
.red
);
926 if (cmap
.green
) kfree(cmap
.green
);
927 if (cmap
.blue
) kfree(cmap
.blue
);
928 if (cmap
.transp
) kfree(cmap
.transp
);
932 static int hdio_ioctl_trans(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
934 mm_segment_t old_fs
= get_fs();
940 error
= sys_ioctl(fd
, cmd
, (long)&kval
);
944 uvp
= (unsigned int *)arg
;
945 if(put_user(kval
, uvp
))
951 struct floppy_struct32
{
956 unsigned int stretch
;
960 unsigned char fmt_gap
;
961 const __kernel_caddr_t32 name
;
964 struct floppy_drive_params32
{
972 unsigned char spindown_offset
;
973 unsigned char select_delay
;
975 unsigned char tracks
;
977 unsigned char interleave_sect
;
978 struct floppy_max_errors max_errors
;
986 struct floppy_drive_struct32
{
1000 __kernel_caddr_t32 dmabuf
;
1004 struct floppy_fdc_state32
{
1008 unsigned char version
;
1011 unsigned int rawcmd
:2;
1012 unsigned int reset
:1;
1013 unsigned int need_configure
:1;
1014 unsigned int perp_mode
:2;
1015 unsigned int has_fifo
:1;
1016 unsigned int driver_version
;
1017 unsigned char track
[4];
1020 struct floppy_write_errors32
{
1021 unsigned int write_errors
;
1022 u32 first_error_sector
;
1023 int first_error_generation
;
1024 u32 last_error_sector
;
1025 int last_error_generation
;
1026 unsigned int badness
;
1029 #define FDSETPRM32 _IOW(2, 0x42, struct floppy_struct32)
1030 #define FDDEFPRM32 _IOW(2, 0x43, struct floppy_struct32)
1031 #define FDGETPRM32 _IOR(2, 0x04, struct floppy_struct32)
1032 #define FDSETDRVPRM32 _IOW(2, 0x90, struct floppy_drive_params32)
1033 #define FDGETDRVPRM32 _IOR(2, 0x11, struct floppy_drive_params32)
1034 #define FDGETDRVSTAT32 _IOR(2, 0x12, struct floppy_drive_struct32)
1035 #define FDPOLLDRVSTAT32 _IOR(2, 0x13, struct floppy_drive_struct32)
1036 #define FDGETFDCSTAT32 _IOR(2, 0x15, struct floppy_fdc_state32)
1037 #define FDWERRORGET32 _IOR(2, 0x17, struct floppy_write_errors32)
1042 } fd_ioctl_trans_table
[] = {
1043 { FDSETPRM32
, FDSETPRM
},
1044 { FDDEFPRM32
, FDDEFPRM
},
1045 { FDGETPRM32
, FDGETPRM
},
1046 { FDSETDRVPRM32
, FDSETDRVPRM
},
1047 { FDGETDRVPRM32
, FDGETDRVPRM
},
1048 { FDGETDRVSTAT32
, FDGETDRVSTAT
},
1049 { FDPOLLDRVSTAT32
, FDPOLLDRVSTAT
},
1050 { FDGETFDCSTAT32
, FDGETFDCSTAT
},
1051 { FDWERRORGET32
, FDWERRORGET
}
1054 #define NR_FD_IOCTL_TRANS (sizeof(fd_ioctl_trans_table)/sizeof(fd_ioctl_trans_table[0]))
1056 static int fd_ioctl_trans(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
1058 mm_segment_t old_fs
= get_fs();
1060 unsigned int kcmd
= 0;
1063 for (i
= 0; i
< NR_FD_IOCTL_TRANS
; i
++)
1064 if (cmd
== fd_ioctl_trans_table
[i
].cmd32
) {
1065 kcmd
= fd_ioctl_trans_table
[i
].cmd
;
1076 struct floppy_struct
*f
;
1078 f
= karg
= kmalloc(GFP_KERNEL
, sizeof(struct floppy_struct
));
1081 if (cmd
== FDGETPRM32
)
1083 err
= __get_user(f
->size
, &((struct floppy_struct32
*)arg
)->size
);
1084 err
|= __get_user(f
->sect
, &((struct floppy_struct32
*)arg
)->sect
);
1085 err
|= __get_user(f
->head
, &((struct floppy_struct32
*)arg
)->head
);
1086 err
|= __get_user(f
->track
, &((struct floppy_struct32
*)arg
)->track
);
1087 err
|= __get_user(f
->stretch
, &((struct floppy_struct32
*)arg
)->stretch
);
1088 err
|= __get_user(f
->gap
, &((struct floppy_struct32
*)arg
)->gap
);
1089 err
|= __get_user(f
->rate
, &((struct floppy_struct32
*)arg
)->rate
);
1090 err
|= __get_user(f
->spec1
, &((struct floppy_struct32
*)arg
)->spec1
);
1091 err
|= __get_user(f
->fmt_gap
, &((struct floppy_struct32
*)arg
)->fmt_gap
);
1092 err
|= __get_user((u64
)f
->name
, &((struct floppy_struct32
*)arg
)->name
);
1102 struct floppy_drive_params
*f
;
1104 f
= karg
= kmalloc(GFP_KERNEL
, sizeof(struct floppy_drive_params
));
1107 if (cmd
== FDGETDRVPRM32
)
1109 err
= __get_user(f
->cmos
, &((struct floppy_drive_params32
*)arg
)->cmos
);
1110 err
|= __get_user(f
->max_dtr
, &((struct floppy_drive_params32
*)arg
)->max_dtr
);
1111 err
|= __get_user(f
->hlt
, &((struct floppy_drive_params32
*)arg
)->hlt
);
1112 err
|= __get_user(f
->hut
, &((struct floppy_drive_params32
*)arg
)->hut
);
1113 err
|= __get_user(f
->srt
, &((struct floppy_drive_params32
*)arg
)->srt
);
1114 err
|= __get_user(f
->spinup
, &((struct floppy_drive_params32
*)arg
)->spinup
);
1115 err
|= __get_user(f
->spindown
, &((struct floppy_drive_params32
*)arg
)->spindown
);
1116 err
|= __get_user(f
->spindown_offset
, &((struct floppy_drive_params32
*)arg
)->spindown_offset
);
1117 err
|= __get_user(f
->select_delay
, &((struct floppy_drive_params32
*)arg
)->select_delay
);
1118 err
|= __get_user(f
->rps
, &((struct floppy_drive_params32
*)arg
)->rps
);
1119 err
|= __get_user(f
->tracks
, &((struct floppy_drive_params32
*)arg
)->tracks
);
1120 err
|= __get_user(f
->timeout
, &((struct floppy_drive_params32
*)arg
)->timeout
);
1121 err
|= __get_user(f
->interleave_sect
, &((struct floppy_drive_params32
*)arg
)->interleave_sect
);
1122 err
|= __copy_from_user(&f
->max_errors
, &((struct floppy_drive_params32
*)arg
)->max_errors
, sizeof(f
->max_errors
));
1123 err
|= __get_user(f
->flags
, &((struct floppy_drive_params32
*)arg
)->flags
);
1124 err
|= __get_user(f
->read_track
, &((struct floppy_drive_params32
*)arg
)->read_track
);
1125 err
|= __copy_from_user(f
->autodetect
, ((struct floppy_drive_params32
*)arg
)->autodetect
, sizeof(f
->autodetect
));
1126 err
|= __get_user(f
->checkfreq
, &((struct floppy_drive_params32
*)arg
)->checkfreq
);
1127 err
|= __get_user(f
->native_format
, &((struct floppy_drive_params32
*)arg
)->native_format
);
1134 case FDGETDRVSTAT32
:
1135 case FDPOLLDRVSTAT32
:
1136 karg
= kmalloc(GFP_KERNEL
, sizeof(struct floppy_drive_struct
));
1140 case FDGETFDCSTAT32
:
1141 karg
= kmalloc(GFP_KERNEL
, sizeof(struct floppy_fdc_state
));
1146 karg
= kmalloc(GFP_KERNEL
, sizeof(struct floppy_write_errors
));
1154 err
= sys_ioctl (fd
, kcmd
, (unsigned long)karg
);
1161 struct floppy_struct
*f
= karg
;
1163 err
= __put_user(f
->size
, &((struct floppy_struct32
*)arg
)->size
);
1164 err
|= __put_user(f
->sect
, &((struct floppy_struct32
*)arg
)->sect
);
1165 err
|= __put_user(f
->head
, &((struct floppy_struct32
*)arg
)->head
);
1166 err
|= __put_user(f
->track
, &((struct floppy_struct32
*)arg
)->track
);
1167 err
|= __put_user(f
->stretch
, &((struct floppy_struct32
*)arg
)->stretch
);
1168 err
|= __put_user(f
->gap
, &((struct floppy_struct32
*)arg
)->gap
);
1169 err
|= __put_user(f
->rate
, &((struct floppy_struct32
*)arg
)->rate
);
1170 err
|= __put_user(f
->spec1
, &((struct floppy_struct32
*)arg
)->spec1
);
1171 err
|= __put_user(f
->fmt_gap
, &((struct floppy_struct32
*)arg
)->fmt_gap
);
1172 err
|= __put_user((u64
)f
->name
, &((struct floppy_struct32
*)arg
)->name
);
1177 struct floppy_drive_params
*f
= karg
;
1179 err
= __put_user(f
->cmos
, &((struct floppy_drive_params32
*)arg
)->cmos
);
1180 err
|= __put_user(f
->max_dtr
, &((struct floppy_drive_params32
*)arg
)->max_dtr
);
1181 err
|= __put_user(f
->hlt
, &((struct floppy_drive_params32
*)arg
)->hlt
);
1182 err
|= __put_user(f
->hut
, &((struct floppy_drive_params32
*)arg
)->hut
);
1183 err
|= __put_user(f
->srt
, &((struct floppy_drive_params32
*)arg
)->srt
);
1184 err
|= __put_user(f
->spinup
, &((struct floppy_drive_params32
*)arg
)->spinup
);
1185 err
|= __put_user(f
->spindown
, &((struct floppy_drive_params32
*)arg
)->spindown
);
1186 err
|= __put_user(f
->spindown_offset
, &((struct floppy_drive_params32
*)arg
)->spindown_offset
);
1187 err
|= __put_user(f
->select_delay
, &((struct floppy_drive_params32
*)arg
)->select_delay
);
1188 err
|= __put_user(f
->rps
, &((struct floppy_drive_params32
*)arg
)->rps
);
1189 err
|= __put_user(f
->tracks
, &((struct floppy_drive_params32
*)arg
)->tracks
);
1190 err
|= __put_user(f
->timeout
, &((struct floppy_drive_params32
*)arg
)->timeout
);
1191 err
|= __put_user(f
->interleave_sect
, &((struct floppy_drive_params32
*)arg
)->interleave_sect
);
1192 err
|= __copy_to_user(&((struct floppy_drive_params32
*)arg
)->max_errors
, &f
->max_errors
, sizeof(f
->max_errors
));
1193 err
|= __put_user(f
->flags
, &((struct floppy_drive_params32
*)arg
)->flags
);
1194 err
|= __put_user(f
->read_track
, &((struct floppy_drive_params32
*)arg
)->read_track
);
1195 err
|= __copy_to_user(((struct floppy_drive_params32
*)arg
)->autodetect
, f
->autodetect
, sizeof(f
->autodetect
));
1196 err
|= __put_user(f
->checkfreq
, &((struct floppy_drive_params32
*)arg
)->checkfreq
);
1197 err
|= __put_user(f
->native_format
, &((struct floppy_drive_params32
*)arg
)->native_format
);
1200 case FDGETDRVSTAT32
:
1201 case FDPOLLDRVSTAT32
:
1203 struct floppy_drive_struct
*f
= karg
;
1205 err
= __put_user(f
->flags
, &((struct floppy_drive_struct32
*)arg
)->flags
);
1206 err
|= __put_user(f
->spinup_date
, &((struct floppy_drive_struct32
*)arg
)->spinup_date
);
1207 err
|= __put_user(f
->select_date
, &((struct floppy_drive_struct32
*)arg
)->select_date
);
1208 err
|= __put_user(f
->first_read_date
, &((struct floppy_drive_struct32
*)arg
)->first_read_date
);
1209 err
|= __put_user(f
->probed_format
, &((struct floppy_drive_struct32
*)arg
)->probed_format
);
1210 err
|= __put_user(f
->track
, &((struct floppy_drive_struct32
*)arg
)->track
);
1211 err
|= __put_user(f
->maxblock
, &((struct floppy_drive_struct32
*)arg
)->maxblock
);
1212 err
|= __put_user(f
->maxtrack
, &((struct floppy_drive_struct32
*)arg
)->maxtrack
);
1213 err
|= __put_user(f
->generation
, &((struct floppy_drive_struct32
*)arg
)->generation
);
1214 err
|= __put_user(f
->keep_data
, &((struct floppy_drive_struct32
*)arg
)->keep_data
);
1215 err
|= __put_user(f
->fd_ref
, &((struct floppy_drive_struct32
*)arg
)->fd_ref
);
1216 err
|= __put_user(f
->fd_device
, &((struct floppy_drive_struct32
*)arg
)->fd_device
);
1217 err
|= __put_user(f
->last_checked
, &((struct floppy_drive_struct32
*)arg
)->last_checked
);
1218 err
|= __put_user((u64
)f
->dmabuf
, &((struct floppy_drive_struct32
*)arg
)->dmabuf
);
1219 err
|= __put_user((u64
)f
->bufblocks
, &((struct floppy_drive_struct32
*)arg
)->bufblocks
);
1222 case FDGETFDCSTAT32
:
1224 struct floppy_fdc_state
*f
= karg
;
1226 err
= __put_user(f
->spec1
, &((struct floppy_fdc_state32
*)arg
)->spec1
);
1227 err
|= __put_user(f
->spec2
, &((struct floppy_fdc_state32
*)arg
)->spec2
);
1228 err
|= __put_user(f
->dtr
, &((struct floppy_fdc_state32
*)arg
)->dtr
);
1229 err
|= __put_user(f
->version
, &((struct floppy_fdc_state32
*)arg
)->version
);
1230 err
|= __put_user(f
->dor
, &((struct floppy_fdc_state32
*)arg
)->dor
);
1231 err
|= __put_user(f
->address
, &((struct floppy_fdc_state32
*)arg
)->address
);
1232 err
|= __copy_to_user((char *)&((struct floppy_fdc_state32
*)arg
)->address
1233 + sizeof(((struct floppy_fdc_state32
*)arg
)->address
),
1234 (char *)&f
->address
+ sizeof(f
->address
), sizeof(int));
1235 err
|= __put_user(f
->driver_version
, &((struct floppy_fdc_state32
*)arg
)->driver_version
);
1236 err
|= __copy_to_user(((struct floppy_fdc_state32
*)arg
)->track
, f
->track
, sizeof(f
->track
));
1241 struct floppy_write_errors
*f
= karg
;
1243 err
= __put_user(f
->write_errors
, &((struct floppy_write_errors32
*)arg
)->write_errors
);
1244 err
|= __put_user(f
->first_error_sector
, &((struct floppy_write_errors32
*)arg
)->first_error_sector
);
1245 err
|= __put_user(f
->first_error_generation
, &((struct floppy_write_errors32
*)arg
)->first_error_generation
);
1246 err
|= __put_user(f
->last_error_sector
, &((struct floppy_write_errors32
*)arg
)->last_error_sector
);
1247 err
|= __put_user(f
->last_error_generation
, &((struct floppy_write_errors32
*)arg
)->last_error_generation
);
1248 err
|= __put_user(f
->badness
, &((struct floppy_write_errors32
*)arg
)->badness
);
1257 out
: if (karg
) kfree(karg
);
1261 struct ppp_option_data32
{
1262 __kernel_caddr_t32 ptr
;
1266 #define PPPIOCSCOMPRESS32 _IOW('t', 77, struct ppp_option_data32)
1269 __kernel_time_t32 xmit_idle
;
1270 __kernel_time_t32 recv_idle
;
1272 #define PPPIOCGIDLE32 _IOR('t', 63, struct ppp_idle32)
1274 static int ppp_ioctl_trans(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
1276 mm_segment_t old_fs
= get_fs();
1277 struct ppp_option_data32 data32
;
1278 struct ppp_option_data data
;
1279 struct ppp_idle32 idle32
;
1280 struct ppp_idle idle
;
1290 case PPPIOCSCOMPRESS32
:
1291 if (copy_from_user(&data32
, (struct ppp_option_data32
*)arg
, sizeof(struct ppp_option_data32
)))
1293 data
.ptr
= kmalloc (data32
.length
, GFP_KERNEL
);
1296 if (copy_from_user(data
.ptr
, (__u8
*)A(data32
.ptr
), data32
.length
)) {
1300 data
.length
= data32
.length
;
1301 data
.transmit
= data32
.transmit
;
1302 kcmd
= PPPIOCSCOMPRESS
;
1307 static int count
= 0;
1309 printk("ppp_ioctl: Unknown cmd fd(%d) "
1310 "cmd(%08x) arg(%08x)\n",
1311 (int)fd
, (unsigned int)cmd
, (unsigned int)arg
);
1316 err
= sys_ioctl (fd
, kcmd
, (unsigned long)karg
);
1322 idle32
.xmit_idle
= idle
.xmit_idle
;
1323 idle32
.recv_idle
= idle
.recv_idle
;
1324 if (copy_to_user((struct ppp_idle32
*)arg
, &idle32
, sizeof(struct ppp_idle32
)))
1327 case PPPIOCSCOMPRESS32
:
1343 __kernel_daddr_t32 mt_fileno
;
1344 __kernel_daddr_t32 mt_blkno
;
1346 #define MTIOCGET32 _IOR('m', 2, struct mtget32)
1351 #define MTIOCPOS32 _IOR('m', 3, struct mtpos32)
1353 struct mtconfiginfo32
{
1374 #define MTIOCGETCONFIG32 _IOR('m', 4, struct mtconfiginfo32)
1375 #define MTIOCSETCONFIG32 _IOW('m', 5, struct mtconfiginfo32)
1377 static int mt_ioctl_trans(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
1379 mm_segment_t old_fs
= get_fs();
1380 struct mtconfiginfo info
;
1396 case MTIOCGETCONFIG32
:
1397 kcmd
= MTIOCGETCONFIG
;
1400 case MTIOCSETCONFIG32
:
1401 kcmd
= MTIOCSETCONFIG
;
1403 err
= __get_user(info
.mt_type
, &((struct mtconfiginfo32
*)arg
)->mt_type
);
1404 err
|= __get_user(info
.ifc_type
, &((struct mtconfiginfo32
*)arg
)->ifc_type
);
1405 err
|= __get_user(info
.irqnr
, &((struct mtconfiginfo32
*)arg
)->irqnr
);
1406 err
|= __get_user(info
.dmanr
, &((struct mtconfiginfo32
*)arg
)->dmanr
);
1407 err
|= __get_user(info
.port
, &((struct mtconfiginfo32
*)arg
)->port
);
1408 err
|= __get_user(info
.debug
, &((struct mtconfiginfo32
*)arg
)->debug
);
1409 err
|= __copy_from_user((char *)&info
.debug
+ sizeof(info
.debug
),
1410 (char *)&((struct mtconfiginfo32
*)arg
)->debug
1411 + sizeof(((struct mtconfiginfo32
*)arg
)->debug
), sizeof(__u32
));
1417 static int count
= 0;
1419 printk("mt_ioctl: Unknown cmd fd(%d) "
1420 "cmd(%08x) arg(%08x)\n",
1421 (int)fd
, (unsigned int)cmd
, (unsigned int)arg
);
1426 err
= sys_ioctl (fd
, kcmd
, (unsigned long)karg
);
1432 err
= __put_user(pos
.mt_blkno
, &((struct mtpos32
*)arg
)->mt_blkno
);
1435 err
= __put_user(get
.mt_type
, &((struct mtget32
*)arg
)->mt_type
);
1436 err
|= __put_user(get
.mt_resid
, &((struct mtget32
*)arg
)->mt_resid
);
1437 err
|= __put_user(get
.mt_dsreg
, &((struct mtget32
*)arg
)->mt_dsreg
);
1438 err
|= __put_user(get
.mt_gstat
, &((struct mtget32
*)arg
)->mt_gstat
);
1439 err
|= __put_user(get
.mt_erreg
, &((struct mtget32
*)arg
)->mt_erreg
);
1440 err
|= __put_user(get
.mt_fileno
, &((struct mtget32
*)arg
)->mt_fileno
);
1441 err
|= __put_user(get
.mt_blkno
, &((struct mtget32
*)arg
)->mt_blkno
);
1443 case MTIOCGETCONFIG32
:
1444 err
= __put_user(info
.mt_type
, &((struct mtconfiginfo32
*)arg
)->mt_type
);
1445 err
|= __put_user(info
.ifc_type
, &((struct mtconfiginfo32
*)arg
)->ifc_type
);
1446 err
|= __put_user(info
.irqnr
, &((struct mtconfiginfo32
*)arg
)->irqnr
);
1447 err
|= __put_user(info
.dmanr
, &((struct mtconfiginfo32
*)arg
)->dmanr
);
1448 err
|= __put_user(info
.port
, &((struct mtconfiginfo32
*)arg
)->port
);
1449 err
|= __put_user(info
.debug
, &((struct mtconfiginfo32
*)arg
)->debug
);
1450 err
|= __copy_to_user((char *)&((struct mtconfiginfo32
*)arg
)->debug
1451 + sizeof(((struct mtconfiginfo32
*)arg
)->debug
),
1452 (char *)&info
.debug
+ sizeof(info
.debug
), sizeof(__u32
));
1454 case MTIOCSETCONFIG32
:
1457 return err
? -EFAULT
: 0;
1460 struct cdrom_read32
{
1462 __kernel_caddr_t32 cdread_bufaddr
;
1466 struct cdrom_read_audio32
{
1467 union cdrom_addr addr
;
1470 __kernel_caddr_t32 buf
;
1473 struct cdrom_generic_command32
{
1474 unsigned char cmd
[CDROM_PACKET_SIZE
];
1475 __kernel_caddr_t32 buffer
;
1476 unsigned int buflen
;
1478 __kernel_caddr_t32 sense
;
1479 __kernel_caddr_t32 reserved
[3];
1482 static int cdrom_ioctl_trans(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
1484 mm_segment_t old_fs
= get_fs();
1485 struct cdrom_read cdread
;
1486 struct cdrom_read_audio cdreadaudio
;
1487 struct cdrom_generic_command cgc
;
1488 __kernel_caddr_t32 addr
;
1494 case CDROMREADMODE2
:
1495 case CDROMREADMODE1
:
1497 case CDROMREADCOOKED
:
1499 err
= __get_user(cdread
.cdread_lba
, &((struct cdrom_read32
*)arg
)->cdread_lba
);
1500 err
|= __get_user(addr
, &((struct cdrom_read32
*)arg
)->cdread_bufaddr
);
1501 err
|= __get_user(cdread
.cdread_buflen
, &((struct cdrom_read32
*)arg
)->cdread_buflen
);
1504 data
= kmalloc(cdread
.cdread_buflen
, GFP_KERNEL
);
1507 cdread
.cdread_bufaddr
= data
;
1509 case CDROMREADAUDIO
:
1510 karg
= &cdreadaudio
;
1511 err
= copy_from_user(&cdreadaudio
.addr
, &((struct cdrom_read_audio32
*)arg
)->addr
, sizeof(cdreadaudio
.addr
));
1512 err
|= __get_user(cdreadaudio
.addr_format
, &((struct cdrom_read_audio32
*)arg
)->addr_format
);
1513 err
|= __get_user(cdreadaudio
.nframes
, &((struct cdrom_read_audio32
*)arg
)->nframes
);
1514 err
|= __get_user(addr
, &((struct cdrom_read_audio32
*)arg
)->buf
);
1517 data
= kmalloc(cdreadaudio
.nframes
* 2352, GFP_KERNEL
);
1520 cdreadaudio
.buf
= data
;
1522 case CDROM_SEND_PACKET
:
1524 err
= copy_from_user(cgc
.cmd
, &((struct cdrom_generic_command32
*)arg
)->cmd
, sizeof(cgc
.cmd
));
1525 err
|= __get_user(addr
, &((struct cdrom_generic_command32
*)arg
)->buffer
);
1526 err
|= __get_user(cgc
.buflen
, &((struct cdrom_generic_command32
*)arg
)->buflen
);
1529 if ((data
= kmalloc(cgc
.buflen
, GFP_KERNEL
)) == NULL
)
1535 static int count
= 0;
1537 printk("cdrom_ioctl: Unknown cmd fd(%d) "
1538 "cmd(%08x) arg(%08x)\n",
1539 (int)fd
, (unsigned int)cmd
, (unsigned int)arg
);
1544 err
= sys_ioctl (fd
, cmd
, (unsigned long)karg
);
1549 case CDROMREADMODE2
:
1550 case CDROMREADMODE1
:
1552 case CDROMREADCOOKED
:
1553 err
= copy_to_user((char *)A(addr
), data
, cdread
.cdread_buflen
);
1555 case CDROMREADAUDIO
:
1556 err
= copy_to_user((char *)A(addr
), data
, cdreadaudio
.nframes
* 2352);
1558 case CDROM_SEND_PACKET
:
1559 err
= copy_to_user((char *)A(addr
), data
, cgc
.buflen
);
1566 return err
? -EFAULT
: 0;
1569 struct loop_info32
{
1570 int lo_number
; /* ioctl r/o */
1571 __kernel_dev_t32 lo_device
; /* ioctl r/o */
1572 unsigned int lo_inode
; /* ioctl r/o */
1573 __kernel_dev_t32 lo_rdevice
; /* ioctl r/o */
1575 int lo_encrypt_type
;
1576 int lo_encrypt_key_size
; /* ioctl w/o */
1577 int lo_flags
; /* ioctl r/o */
1578 char lo_name
[LO_NAME_SIZE
];
1579 unsigned char lo_encrypt_key
[LO_KEY_SIZE
]; /* ioctl w/o */
1580 unsigned int lo_init
[2];
1584 static int loop_status(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
1586 mm_segment_t old_fs
= get_fs();
1591 case LOOP_SET_STATUS
:
1592 err
= get_user(l
.lo_number
, &((struct loop_info32
*)arg
)->lo_number
);
1593 err
|= __get_user(l
.lo_device
, &((struct loop_info32
*)arg
)->lo_device
);
1594 err
|= __get_user(l
.lo_inode
, &((struct loop_info32
*)arg
)->lo_inode
);
1595 err
|= __get_user(l
.lo_rdevice
, &((struct loop_info32
*)arg
)->lo_rdevice
);
1596 err
|= __copy_from_user((char *)&l
.lo_offset
, (char *)&((struct loop_info32
*)arg
)->lo_offset
,
1597 8 + (unsigned long)l
.lo_init
- (unsigned long)&l
.lo_offset
);
1601 err
= sys_ioctl (fd
, cmd
, (unsigned long)&l
);
1604 case LOOP_GET_STATUS
:
1606 err
= sys_ioctl (fd
, cmd
, (unsigned long)&l
);
1609 err
= put_user(l
.lo_number
, &((struct loop_info32
*)arg
)->lo_number
);
1610 err
|= __put_user(l
.lo_device
, &((struct loop_info32
*)arg
)->lo_device
);
1611 err
|= __put_user(l
.lo_inode
, &((struct loop_info32
*)arg
)->lo_inode
);
1612 err
|= __put_user(l
.lo_rdevice
, &((struct loop_info32
*)arg
)->lo_rdevice
);
1613 err
|= __copy_to_user((char *)&((struct loop_info32
*)arg
)->lo_offset
,
1614 (char *)&l
.lo_offset
, (unsigned long)l
.lo_init
- (unsigned long)&l
.lo_offset
);
1618 return err
? -EFAULT
: 0;
1621 extern int tty_ioctl(struct inode
* inode
, struct file
* file
, unsigned int cmd
, unsigned long arg
);
1623 static int vt_check(struct file
*file
)
1625 struct tty_struct
*tty
;
1626 struct inode
*inode
= file
->f_dentry
->d_inode
;
1628 if (file
->f_op
->ioctl
!= tty_ioctl
)
1631 tty
= (struct tty_struct
*)file
->private_data
;
1632 if (tty_paranoia_check(tty
, inode
->i_rdev
, "tty_ioctl"))
1635 if (tty
->driver
.ioctl
!= vt_ioctl
)
1639 * To have permissions to do most of the vt ioctls, we either have
1640 * to be the owner of the tty, or super-user.
1642 if (current
->tty
== tty
|| suser())
1647 struct consolefontdesc32
{
1648 unsigned short charcount
; /* characters in font (256 or 512) */
1649 unsigned short charheight
; /* scan lines per character (1-32) */
1650 u32 chardata
; /* font data in expanded form */
1653 static int do_fontx_ioctl(unsigned int fd
, int cmd
, struct consolefontdesc32
*user_cfd
, struct file
*file
)
1655 struct consolefontdesc cfdarg
;
1656 struct console_font_op op
;
1659 perm
= vt_check(file
);
1660 if (perm
< 0) return perm
;
1662 if (copy_from_user(&cfdarg
, user_cfd
, sizeof(struct consolefontdesc32
)))
1665 cfdarg
.chardata
= (unsigned char *)A(((struct consolefontdesc32
*)&cfdarg
)->chardata
);
1671 op
.op
= KD_FONT_OP_SET
;
1674 op
.height
= cfdarg
.charheight
;
1675 op
.charcount
= cfdarg
.charcount
;
1676 op
.data
= cfdarg
.chardata
;
1677 return con_font_op(fg_console
, &op
);
1679 if (!cfdarg
.chardata
)
1681 op
.op
= KD_FONT_OP_GET
;
1684 op
.height
= cfdarg
.charheight
;
1685 op
.charcount
= cfdarg
.charcount
;
1686 op
.data
= cfdarg
.chardata
;
1687 i
= con_font_op(fg_console
, &op
);
1690 cfdarg
.charheight
= op
.height
;
1691 cfdarg
.charcount
= op
.charcount
;
1692 ((struct consolefontdesc32
*)&cfdarg
)->chardata
= (unsigned long)cfdarg
.chardata
;
1693 if (copy_to_user(user_cfd
, &cfdarg
, sizeof(struct consolefontdesc32
)))
1700 struct console_font_op32
{
1701 unsigned int op
; /* operation code KD_FONT_OP_* */
1702 unsigned int flags
; /* KD_FONT_FLAG_* */
1703 unsigned int width
, height
; /* font size */
1704 unsigned int charcount
;
1705 u32 data
; /* font data with height fixed to 32 */
1708 static int do_kdfontop_ioctl(unsigned int fd
, unsigned int cmd
, struct console_font_op32
*fontop
, struct file
*file
)
1710 struct console_font_op op
;
1711 int perm
= vt_check(file
), i
;
1712 struct vt_struct
*vt
;
1714 if (perm
< 0) return perm
;
1716 if (copy_from_user(&op
, (void *) fontop
, sizeof(struct console_font_op32
)))
1718 if (!perm
&& op
.op
!= KD_FONT_OP_GET
)
1720 op
.data
= (unsigned char *)A(((struct console_font_op32
*)&op
)->data
);
1721 op
.flags
|= KD_FONT_FLAG_OLD
;
1722 vt
= (struct vt_struct
*)((struct tty_struct
*)file
->private_data
)->driver_data
;
1723 i
= con_font_op(vt
->vc_num
, &op
);
1725 ((struct console_font_op32
*)&op
)->data
= (unsigned long)op
.data
;
1726 if (copy_to_user((void *) fontop
, &op
, sizeof(struct console_font_op32
)))
1731 struct unimapdesc32
{
1732 unsigned short entry_ct
;
1736 static int do_unimap_ioctl(unsigned int fd
, unsigned int cmd
, struct unimapdesc32
*user_ud
, struct file
*file
)
1738 struct unimapdesc32 tmp
;
1739 int perm
= vt_check(file
);
1741 if (perm
< 0) return perm
;
1742 if (copy_from_user(&tmp
, user_ud
, sizeof tmp
))
1746 if (!perm
) return -EPERM
;
1747 return con_set_unimap(fg_console
, tmp
.entry_ct
, (struct unipair
*)A(tmp
.entries
));
1749 return con_get_unimap(fg_console
, tmp
.entry_ct
, &(user_ud
->entry_ct
), (struct unipair
*)A(tmp
.entries
));
1754 static int do_smb_getmountuid(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
1756 mm_segment_t old_fs
= get_fs();
1757 __kernel_uid_t kuid
;
1760 cmd
= SMB_IOC_GETMOUNTUID
;
1763 err
= sys_ioctl(fd
, cmd
, (unsigned long)&kuid
);
1767 err
= put_user(kuid
, (__kernel_uid_t32
*)arg
);
1772 struct atmif_sioc32
{
1775 __kernel_caddr_t32 arg
;
1778 struct atm_iobuf32
{
1780 __kernel_caddr_t32 buffer
;
1783 #define ATM_GETLINKRATE32 _IOW('a', ATMIOC_ITF+1, struct atmif_sioc32)
1784 #define ATM_GETNAMES32 _IOW('a', ATMIOC_ITF+3, struct atm_iobuf32)
1785 #define ATM_GETTYPE32 _IOW('a', ATMIOC_ITF+4, struct atmif_sioc32)
1786 #define ATM_GETESI32 _IOW('a', ATMIOC_ITF+5, struct atmif_sioc32)
1787 #define ATM_GETADDR32 _IOW('a', ATMIOC_ITF+6, struct atmif_sioc32)
1788 #define ATM_RSTADDR32 _IOW('a', ATMIOC_ITF+7, struct atmif_sioc32)
1789 #define ATM_ADDADDR32 _IOW('a', ATMIOC_ITF+8, struct atmif_sioc32)
1790 #define ATM_DELADDR32 _IOW('a', ATMIOC_ITF+9, struct atmif_sioc32)
1791 #define ATM_GETCIRANGE32 _IOW('a', ATMIOC_ITF+10, struct atmif_sioc32)
1792 #define ATM_SETCIRANGE32 _IOW('a', ATMIOC_ITF+11, struct atmif_sioc32)
1793 #define ATM_SETESI32 _IOW('a', ATMIOC_ITF+12, struct atmif_sioc32)
1794 #define ATM_SETESIF32 _IOW('a', ATMIOC_ITF+13, struct atmif_sioc32)
1795 #define ATM_GETSTAT32 _IOW('a', ATMIOC_SARCOM+0, struct atmif_sioc32)
1796 #define ATM_GETSTATZ32 _IOW('a', ATMIOC_SARCOM+1, struct atmif_sioc32)
1801 } atm_ioctl_map
[] = {
1802 { ATM_GETLINKRATE32
, ATM_GETLINKRATE
},
1803 { ATM_GETNAMES32
, ATM_GETNAMES
},
1804 { ATM_GETTYPE32
, ATM_GETTYPE
},
1805 { ATM_GETESI32
, ATM_GETESI
},
1806 { ATM_GETADDR32
, ATM_GETADDR
},
1807 { ATM_RSTADDR32
, ATM_RSTADDR
},
1808 { ATM_ADDADDR32
, ATM_ADDADDR
},
1809 { ATM_DELADDR32
, ATM_DELADDR
},
1810 { ATM_GETCIRANGE32
, ATM_GETCIRANGE
},
1811 { ATM_SETCIRANGE32
, ATM_SETCIRANGE
},
1812 { ATM_SETESI32
, ATM_SETESI
},
1813 { ATM_SETESIF32
, ATM_SETESIF
},
1814 { ATM_GETSTAT32
, ATM_GETSTAT
},
1815 { ATM_GETSTATZ32
, ATM_GETSTATZ
}
1818 #define NR_ATM_IOCTL (sizeof(atm_ioctl_map)/sizeof(atm_ioctl_map[0]))
1821 static int do_atm_iobuf(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
1823 struct atm_iobuf32 iobuf32
;
1824 struct atm_iobuf iobuf
= { 0, NULL
};
1825 mm_segment_t old_fs
;
1828 err
= copy_from_user(&iobuf32
, (struct atm_iobuf32
*)arg
,
1829 sizeof(struct atm_iobuf32
));
1833 iobuf
.length
= iobuf32
.length
;
1835 if (iobuf32
.buffer
== (__kernel_caddr_t32
) NULL
|| iobuf32
.length
== 0) {
1836 iobuf
.buffer
= (void*)(unsigned long)iobuf32
.buffer
;
1838 iobuf
.buffer
= kmalloc(iobuf
.length
, GFP_KERNEL
);
1839 if (iobuf
.buffer
== NULL
) {
1844 err
= copy_from_user(iobuf
.buffer
, A(iobuf32
.buffer
), iobuf
.length
);
1851 old_fs
= get_fs(); set_fs (KERNEL_DS
);
1852 err
= sys_ioctl (fd
, cmd
, (unsigned long)&iobuf
);
1857 if(iobuf
.buffer
&& iobuf
.length
> 0) {
1858 err
= copy_to_user(A(iobuf32
.buffer
), iobuf
.buffer
, iobuf
.length
);
1864 err
= __put_user(iobuf
.length
, &(((struct atm_iobuf32
*)arg
)->length
));
1867 if(iobuf32
.buffer
&& iobuf32
.length
> 0)
1868 kfree(iobuf
.buffer
);
1874 static int do_atmif_sioc(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
1876 struct atmif_sioc32 sioc32
;
1877 struct atmif_sioc sioc
= { 0, 0, NULL
};
1878 mm_segment_t old_fs
;
1881 err
= copy_from_user(&sioc32
, (struct atmif_sioc32
*)arg
,
1882 sizeof(struct atmif_sioc32
));
1886 sioc
.number
= sioc32
.number
;
1887 sioc
.length
= sioc32
.length
;
1889 if (sioc32
.arg
== (__kernel_caddr_t32
) NULL
|| sioc32
.length
== 0) {
1890 sioc
.arg
= (void*)(unsigned long)sioc32
.arg
;
1892 sioc
.arg
= kmalloc(sioc
.length
, GFP_KERNEL
);
1893 if (sioc
.arg
== NULL
) {
1898 err
= copy_from_user(sioc
.arg
, A(sioc32
.arg
), sioc32
.length
);
1905 old_fs
= get_fs(); set_fs (KERNEL_DS
);
1906 err
= sys_ioctl (fd
, cmd
, (unsigned long)&sioc
);
1912 if(sioc
.arg
&& sioc
.length
> 0) {
1913 err
= copy_to_user(A(sioc32
.arg
), sioc
.arg
, sioc
.length
);
1919 err
= __put_user(sioc
.length
, &(((struct atmif_sioc32
*)arg
)->length
));
1922 if(sioc32
.arg
&& sioc32
.length
> 0)
1929 static int do_atm_ioctl(unsigned int fd
, unsigned int cmd32
, unsigned long arg
)
1932 unsigned int cmd
= 0;
1938 case SONET_GETSTATZ
:
1942 case SONET_SETFRAMING
:
1943 case SONET_GETFRAMING
:
1944 case SONET_GETFRSENSE
:
1945 return do_atmif_sioc(fd
, cmd32
, arg
);
1949 for (i
= 0; i
< NR_ATM_IOCTL
; i
++) {
1950 if (cmd32
== atm_ioctl_map
[i
].cmd32
) {
1951 cmd
= atm_ioctl_map
[i
].cmd
;
1955 if (i
== NR_ATM_IOCTL
) {
1962 return do_atm_iobuf(fd
, cmd
, arg
);
1964 case ATM_GETLINKRATE
:
1971 case ATM_GETCIRANGE
:
1972 case ATM_SETCIRANGE
:
1977 return do_atmif_sioc(fd
, cmd
, arg
);
1983 static int ret_einval(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
1988 static int broken_blkgetsize(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
1990 /* The mkswap binary hard codes it to Intel value :-((( */
1991 return w_long(fd
, BLKGETSIZE
, arg
);
1994 struct blkpg_ioctl_arg32
{
2001 static int blkpg_ioctl_trans(unsigned int fd
, unsigned int cmd
, struct blkpg_ioctl_arg32
*arg
)
2003 struct blkpg_ioctl_arg a
;
2004 struct blkpg_partition p
;
2006 mm_segment_t old_fs
= get_fs();
2008 err
= get_user(a
.op
, &arg
->op
);
2009 err
|= __get_user(a
.flags
, &arg
->flags
);
2010 err
|= __get_user(a
.datalen
, &arg
->datalen
);
2011 err
|= __get_user((long)a
.data
, &arg
->data
);
2012 if (err
) return err
;
2014 case BLKPG_ADD_PARTITION
:
2015 case BLKPG_DEL_PARTITION
:
2016 if (a
.datalen
< sizeof(struct blkpg_partition
))
2018 if (copy_from_user(&p
, a
.data
, sizeof(struct blkpg_partition
)))
2022 err
= sys_ioctl(fd
, cmd
, (unsigned long)&a
);
2030 static int ioc_settimeout(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
2032 return rw_long(fd
, AUTOFS_IOC_SETTIMEOUT
, arg
);
2035 struct ioctl_trans
{
2037 unsigned int handler
;
2041 #define COMPATIBLE_IOCTL(cmd) asm volatile(".word %0, sys_ioctl, 0" : : "i" (cmd));
2042 #define HANDLE_IOCTL(cmd,handler) asm volatile(".word %0, %1, 0" : : "i" (cmd), "i" (handler));
2043 #define IOCTL_TABLE_START void ioctl32_foo(void) { asm volatile(".data\nioctl_translations:");
2044 #define IOCTL_TABLE_END asm volatile("\nioctl_translations_end:\n\t.previous"); }
2047 /* List here exlicitly which ioctl's are known to have
2048 * compatable types passed or none at all...
2051 COMPATIBLE_IOCTL(TCGETA
)
2052 COMPATIBLE_IOCTL(TCSETA
)
2053 COMPATIBLE_IOCTL(TCSETAW
)
2054 COMPATIBLE_IOCTL(TCSETAF
)
2055 COMPATIBLE_IOCTL(TCSBRK
)
2056 COMPATIBLE_IOCTL(TCXONC
)
2057 COMPATIBLE_IOCTL(TCFLSH
)
2058 COMPATIBLE_IOCTL(TCGETS
)
2059 COMPATIBLE_IOCTL(TCSETS
)
2060 COMPATIBLE_IOCTL(TCSETSW
)
2061 COMPATIBLE_IOCTL(TCSETSF
)
2062 COMPATIBLE_IOCTL(TIOCLINUX
)
2064 COMPATIBLE_IOCTL(TIOCGETD
)
2065 COMPATIBLE_IOCTL(TIOCSETD
)
2066 COMPATIBLE_IOCTL(TIOCEXCL
)
2067 COMPATIBLE_IOCTL(TIOCNXCL
)
2068 COMPATIBLE_IOCTL(TIOCCONS
)
2069 COMPATIBLE_IOCTL(TIOCGSOFTCAR
)
2070 COMPATIBLE_IOCTL(TIOCSSOFTCAR
)
2071 COMPATIBLE_IOCTL(TIOCSWINSZ
)
2072 COMPATIBLE_IOCTL(TIOCGWINSZ
)
2073 COMPATIBLE_IOCTL(TIOCMGET
)
2074 COMPATIBLE_IOCTL(TIOCMBIC
)
2075 COMPATIBLE_IOCTL(TIOCMBIS
)
2076 COMPATIBLE_IOCTL(TIOCMSET
)
2077 COMPATIBLE_IOCTL(TIOCPKT
)
2078 COMPATIBLE_IOCTL(TIOCNOTTY
)
2079 COMPATIBLE_IOCTL(TIOCSTI
)
2080 COMPATIBLE_IOCTL(TIOCOUTQ
)
2081 COMPATIBLE_IOCTL(TIOCSPGRP
)
2082 COMPATIBLE_IOCTL(TIOCGPGRP
)
2083 COMPATIBLE_IOCTL(TIOCSCTTY
)
2084 COMPATIBLE_IOCTL(TIOCGPTN
)
2085 COMPATIBLE_IOCTL(TIOCSPTLCK
)
2086 COMPATIBLE_IOCTL(TIOCGSERIAL
)
2087 COMPATIBLE_IOCTL(TIOCSSERIAL
)
2088 COMPATIBLE_IOCTL(TIOCSERGETLSR
)
2090 COMPATIBLE_IOCTL(FBIOGTYPE
)
2091 COMPATIBLE_IOCTL(FBIOSATTR
)
2092 COMPATIBLE_IOCTL(FBIOGATTR
)
2093 COMPATIBLE_IOCTL(FBIOSVIDEO
)
2094 COMPATIBLE_IOCTL(FBIOGVIDEO
)
2095 COMPATIBLE_IOCTL(FBIOGCURSOR32
) /* This is not implemented yet. Later it should be converted... */
2096 COMPATIBLE_IOCTL(FBIOSCURPOS
)
2097 COMPATIBLE_IOCTL(FBIOGCURPOS
)
2098 COMPATIBLE_IOCTL(FBIOGCURMAX
)
2099 COMPATIBLE_IOCTL(FBIOGET_VSCREENINFO
)
2100 COMPATIBLE_IOCTL(FBIOPUT_VSCREENINFO
)
2101 COMPATIBLE_IOCTL(FBIOPAN_DISPLAY
)
2102 COMPATIBLE_IOCTL(FBIOGET_FCURSORINFO
)
2103 COMPATIBLE_IOCTL(FBIOGET_VCURSORINFO
)
2104 COMPATIBLE_IOCTL(FBIOPUT_VCURSORINFO
)
2105 COMPATIBLE_IOCTL(FBIOGET_CURSORSTATE
)
2106 COMPATIBLE_IOCTL(FBIOPUT_CURSORSTATE
)
2107 COMPATIBLE_IOCTL(FBIOGET_CON2FBMAP
)
2108 COMPATIBLE_IOCTL(FBIOPUT_CON2FBMAP
)
2110 COMPATIBLE_IOCTL(FIOCLEX
)
2111 COMPATIBLE_IOCTL(FIONCLEX
)
2112 COMPATIBLE_IOCTL(FIOASYNC
)
2113 COMPATIBLE_IOCTL(FIONBIO
)
2114 COMPATIBLE_IOCTL(FIONREAD
) /* This is also TIOCINQ */
2116 COMPATIBLE_IOCTL(FIBMAP
)
2117 COMPATIBLE_IOCTL(FIGETBSZ
)
2118 /* 0x03 -- HD/IDE ioctl's used by hdparm and friends.
2119 * Some need translations, these do not.
2121 COMPATIBLE_IOCTL(HDIO_GET_IDENTITY
)
2122 COMPATIBLE_IOCTL(HDIO_SET_DMA
)
2123 COMPATIBLE_IOCTL(HDIO_SET_KEEPSETTINGS
)
2124 COMPATIBLE_IOCTL(HDIO_SET_UNMASKINTR
)
2125 COMPATIBLE_IOCTL(HDIO_SET_NOWERR
)
2126 COMPATIBLE_IOCTL(HDIO_SET_32BIT
)
2127 COMPATIBLE_IOCTL(HDIO_SET_MULTCOUNT
)
2128 COMPATIBLE_IOCTL(HDIO_DRIVE_CMD
)
2129 COMPATIBLE_IOCTL(HDIO_SET_PIO_MODE
)
2130 COMPATIBLE_IOCTL(HDIO_SCAN_HWIF
)
2131 COMPATIBLE_IOCTL(HDIO_SET_NICE
)
2132 /* 0x02 -- Floppy ioctls */
2133 COMPATIBLE_IOCTL(FDMSGON
)
2134 COMPATIBLE_IOCTL(FDMSGOFF
)
2135 COMPATIBLE_IOCTL(FDSETEMSGTRESH
)
2136 COMPATIBLE_IOCTL(FDFLUSH
)
2137 COMPATIBLE_IOCTL(FDWERRORCLR
)
2138 COMPATIBLE_IOCTL(FDSETMAXERRS
)
2139 COMPATIBLE_IOCTL(FDGETMAXERRS
)
2140 COMPATIBLE_IOCTL(FDGETDRVTYP
)
2141 COMPATIBLE_IOCTL(FDEJECT
)
2142 COMPATIBLE_IOCTL(FDCLRPRM
)
2143 COMPATIBLE_IOCTL(FDFMTBEG
)
2144 COMPATIBLE_IOCTL(FDFMTEND
)
2145 COMPATIBLE_IOCTL(FDRESET
)
2146 COMPATIBLE_IOCTL(FDTWADDLE
)
2147 COMPATIBLE_IOCTL(FDFMTTRK
)
2148 COMPATIBLE_IOCTL(FDRAWCMD
)
2150 COMPATIBLE_IOCTL(BLKROSET
)
2151 COMPATIBLE_IOCTL(BLKROGET
)
2152 COMPATIBLE_IOCTL(BLKRRPART
)
2153 COMPATIBLE_IOCTL(BLKFLSBUF
)
2154 COMPATIBLE_IOCTL(BLKRASET
)
2155 COMPATIBLE_IOCTL(BLKFRASET
)
2156 COMPATIBLE_IOCTL(BLKSECTSET
)
2157 COMPATIBLE_IOCTL(BLKSSZGET
)
2160 #if 0 /* New RAID code is being merged, fix up to handle
2161 * new RAID ioctls when fully merged in 2.3.x -DaveM
2164 COMPATIBLE_IOCTL(REGISTER_DEV
)
2165 COMPATIBLE_IOCTL(REGISTER_DEV_NEW
)
2166 COMPATIBLE_IOCTL(START_MD
)
2167 COMPATIBLE_IOCTL(STOP_MD
)
2171 COMPATIBLE_IOCTL(PIO_FONT
)
2172 COMPATIBLE_IOCTL(GIO_FONT
)
2173 COMPATIBLE_IOCTL(KDSIGACCEPT
)
2174 COMPATIBLE_IOCTL(KDGETKEYCODE
)
2175 COMPATIBLE_IOCTL(KDSETKEYCODE
)
2176 COMPATIBLE_IOCTL(KIOCSOUND
)
2177 COMPATIBLE_IOCTL(KDMKTONE
)
2178 COMPATIBLE_IOCTL(KDGKBTYPE
)
2179 COMPATIBLE_IOCTL(KDSETMODE
)
2180 COMPATIBLE_IOCTL(KDGETMODE
)
2181 COMPATIBLE_IOCTL(KDSKBMODE
)
2182 COMPATIBLE_IOCTL(KDGKBMODE
)
2183 COMPATIBLE_IOCTL(KDSKBMETA
)
2184 COMPATIBLE_IOCTL(KDGKBMETA
)
2185 COMPATIBLE_IOCTL(KDGKBENT
)
2186 COMPATIBLE_IOCTL(KDSKBENT
)
2187 COMPATIBLE_IOCTL(KDGKBSENT
)
2188 COMPATIBLE_IOCTL(KDSKBSENT
)
2189 COMPATIBLE_IOCTL(KDGKBDIACR
)
2190 COMPATIBLE_IOCTL(KDSKBDIACR
)
2191 COMPATIBLE_IOCTL(KDGKBLED
)
2192 COMPATIBLE_IOCTL(KDSKBLED
)
2193 COMPATIBLE_IOCTL(KDGETLED
)
2194 COMPATIBLE_IOCTL(KDSETLED
)
2195 COMPATIBLE_IOCTL(GIO_SCRNMAP
)
2196 COMPATIBLE_IOCTL(PIO_SCRNMAP
)
2197 COMPATIBLE_IOCTL(GIO_UNISCRNMAP
)
2198 COMPATIBLE_IOCTL(PIO_UNISCRNMAP
)
2199 COMPATIBLE_IOCTL(PIO_FONTRESET
)
2200 COMPATIBLE_IOCTL(PIO_UNIMAPCLR
)
2202 COMPATIBLE_IOCTL(KIOCTYPE
)
2203 COMPATIBLE_IOCTL(KIOCLAYOUT
)
2204 COMPATIBLE_IOCTL(KIOCGTRANS
)
2205 COMPATIBLE_IOCTL(KIOCTRANS
)
2206 COMPATIBLE_IOCTL(KIOCCMD
)
2207 COMPATIBLE_IOCTL(KIOCSDIRECT
)
2208 COMPATIBLE_IOCTL(KIOCSLED
)
2209 COMPATIBLE_IOCTL(KIOCGLED
)
2210 COMPATIBLE_IOCTL(KIOCSRATE
)
2211 COMPATIBLE_IOCTL(KIOCGRATE
)
2213 COMPATIBLE_IOCTL(SCSI_IOCTL_GET_IDLUN
)
2214 COMPATIBLE_IOCTL(SCSI_IOCTL_DOORLOCK
)
2215 COMPATIBLE_IOCTL(SCSI_IOCTL_DOORUNLOCK
)
2216 COMPATIBLE_IOCTL(SCSI_IOCTL_TEST_UNIT_READY
)
2217 COMPATIBLE_IOCTL(SCSI_IOCTL_TAGGED_ENABLE
)
2218 COMPATIBLE_IOCTL(SCSI_IOCTL_TAGGED_DISABLE
)
2219 COMPATIBLE_IOCTL(SCSI_IOCTL_GET_BUS_NUMBER
)
2220 COMPATIBLE_IOCTL(SCSI_IOCTL_SEND_COMMAND
)
2222 COMPATIBLE_IOCTL(VT_SETMODE
)
2223 COMPATIBLE_IOCTL(VT_GETMODE
)
2224 COMPATIBLE_IOCTL(VT_GETSTATE
)
2225 COMPATIBLE_IOCTL(VT_OPENQRY
)
2226 COMPATIBLE_IOCTL(VT_ACTIVATE
)
2227 COMPATIBLE_IOCTL(VT_WAITACTIVE
)
2228 COMPATIBLE_IOCTL(VT_RELDISP
)
2229 COMPATIBLE_IOCTL(VT_DISALLOCATE
)
2230 COMPATIBLE_IOCTL(VT_RESIZE
)
2231 COMPATIBLE_IOCTL(VT_RESIZEX
)
2232 COMPATIBLE_IOCTL(VT_LOCKSWITCH
)
2233 COMPATIBLE_IOCTL(VT_UNLOCKSWITCH
)
2235 COMPATIBLE_IOCTL(VUIDSFORMAT
)
2236 COMPATIBLE_IOCTL(VUIDGFORMAT
)
2237 /* Little v, the video4linux ioctls */
2238 COMPATIBLE_IOCTL(VIDIOCGCAP
)
2239 COMPATIBLE_IOCTL(VIDIOCGCHAN
)
2240 COMPATIBLE_IOCTL(VIDIOCSCHAN
)
2241 COMPATIBLE_IOCTL(VIDIOCGPICT
)
2242 COMPATIBLE_IOCTL(VIDIOCSPICT
)
2243 COMPATIBLE_IOCTL(VIDIOCCAPTURE
)
2244 COMPATIBLE_IOCTL(VIDIOCKEY
)
2245 COMPATIBLE_IOCTL(VIDIOCGAUDIO
)
2246 COMPATIBLE_IOCTL(VIDIOCSAUDIO
)
2247 COMPATIBLE_IOCTL(VIDIOCSYNC
)
2248 COMPATIBLE_IOCTL(VIDIOCMCAPTURE
)
2249 COMPATIBLE_IOCTL(VIDIOCGMBUF
)
2250 COMPATIBLE_IOCTL(VIDIOCGUNIT
)
2251 COMPATIBLE_IOCTL(VIDIOCGCAPTURE
)
2252 COMPATIBLE_IOCTL(VIDIOCSCAPTURE
)
2253 /* BTTV specific... */
2254 COMPATIBLE_IOCTL(_IOW('v', BASE_VIDIOCPRIVATE
+0, char [256]))
2255 COMPATIBLE_IOCTL(_IOR('v', BASE_VIDIOCPRIVATE
+1, char [256]))
2256 COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE
+2, unsigned int))
2257 COMPATIBLE_IOCTL(_IOW('v' , BASE_VIDIOCPRIVATE
+3, char [16])) /* struct bttv_pll_info */
2258 COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE
+4, int))
2259 COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE
+5, int))
2260 COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE
+6, int))
2261 COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE
+7, int))
2262 /* Little p (/dev/rtc, /dev/envctrl, etc.) */
2263 COMPATIBLE_IOCTL(RTCGET
)
2264 COMPATIBLE_IOCTL(RTCSET
)
2265 COMPATIBLE_IOCTL(I2CIOCSADR
)
2266 COMPATIBLE_IOCTL(I2CIOCGADR
)
2268 COMPATIBLE_IOCTL(MTIOCTOP
)
2269 /* OPENPROMIO, SunOS/Solaris only, the NetBSD one's have
2270 * embedded pointers in the arg which we'd need to clean up...
2272 COMPATIBLE_IOCTL(OPROMGETOPT
)
2273 COMPATIBLE_IOCTL(OPROMSETOPT
)
2274 COMPATIBLE_IOCTL(OPROMNXTOPT
)
2275 COMPATIBLE_IOCTL(OPROMSETOPT2
)
2276 COMPATIBLE_IOCTL(OPROMNEXT
)
2277 COMPATIBLE_IOCTL(OPROMCHILD
)
2278 COMPATIBLE_IOCTL(OPROMGETPROP
)
2279 COMPATIBLE_IOCTL(OPROMNXTPROP
)
2280 COMPATIBLE_IOCTL(OPROMU2P
)
2281 COMPATIBLE_IOCTL(OPROMGETCONS
)
2282 COMPATIBLE_IOCTL(OPROMGETFBNAME
)
2283 COMPATIBLE_IOCTL(OPROMGETBOOTARGS
)
2284 COMPATIBLE_IOCTL(OPROMSETCUR
)
2285 COMPATIBLE_IOCTL(OPROMPCI2NODE
)
2286 COMPATIBLE_IOCTL(OPROMPATH2NODE
)
2287 /* Socket level stuff */
2288 COMPATIBLE_IOCTL(FIOSETOWN
)
2289 COMPATIBLE_IOCTL(SIOCSPGRP
)
2290 COMPATIBLE_IOCTL(FIOGETOWN
)
2291 COMPATIBLE_IOCTL(SIOCGPGRP
)
2292 COMPATIBLE_IOCTL(SIOCATMARK
)
2293 COMPATIBLE_IOCTL(SIOCSIFLINK
)
2294 COMPATIBLE_IOCTL(SIOCSIFENCAP
)
2295 COMPATIBLE_IOCTL(SIOCGIFENCAP
)
2296 COMPATIBLE_IOCTL(SIOCSIFBR
)
2297 COMPATIBLE_IOCTL(SIOCGIFBR
)
2298 COMPATIBLE_IOCTL(SIOCSARP
)
2299 COMPATIBLE_IOCTL(SIOCGARP
)
2300 COMPATIBLE_IOCTL(SIOCDARP
)
2301 #if 0 /* XXX No longer exist in new routing code. XXX */
2302 COMPATIBLE_IOCTL(OLD_SIOCSARP
)
2303 COMPATIBLE_IOCTL(OLD_SIOCGARP
)
2304 COMPATIBLE_IOCTL(OLD_SIOCDARP
)
2306 COMPATIBLE_IOCTL(SIOCSRARP
)
2307 COMPATIBLE_IOCTL(SIOCGRARP
)
2308 COMPATIBLE_IOCTL(SIOCDRARP
)
2309 COMPATIBLE_IOCTL(SIOCADDDLCI
)
2310 COMPATIBLE_IOCTL(SIOCDELDLCI
)
2312 COMPATIBLE_IOCTL(SG_SET_TIMEOUT
)
2313 COMPATIBLE_IOCTL(SG_GET_TIMEOUT
)
2314 COMPATIBLE_IOCTL(SG_EMULATED_HOST
)
2315 COMPATIBLE_IOCTL(SG_SET_TRANSFORM
)
2316 COMPATIBLE_IOCTL(SG_GET_TRANSFORM
)
2318 COMPATIBLE_IOCTL(PPPIOCGFLAGS
)
2319 COMPATIBLE_IOCTL(PPPIOCSFLAGS
)
2320 COMPATIBLE_IOCTL(PPPIOCGASYNCMAP
)
2321 COMPATIBLE_IOCTL(PPPIOCSASYNCMAP
)
2322 COMPATIBLE_IOCTL(PPPIOCGUNIT
)
2323 COMPATIBLE_IOCTL(PPPIOCGRASYNCMAP
)
2324 COMPATIBLE_IOCTL(PPPIOCSRASYNCMAP
)
2325 COMPATIBLE_IOCTL(PPPIOCGMRU
)
2326 COMPATIBLE_IOCTL(PPPIOCSMRU
)
2327 COMPATIBLE_IOCTL(PPPIOCSMAXCID
)
2328 COMPATIBLE_IOCTL(PPPIOCGXASYNCMAP
)
2329 COMPATIBLE_IOCTL(PPPIOCSXASYNCMAP
)
2330 COMPATIBLE_IOCTL(PPPIOCXFERUNIT
)
2331 COMPATIBLE_IOCTL(PPPIOCGNPMODE
)
2332 COMPATIBLE_IOCTL(PPPIOCSNPMODE
)
2333 COMPATIBLE_IOCTL(PPPIOCGDEBUG
)
2334 COMPATIBLE_IOCTL(PPPIOCSDEBUG
)
2335 COMPATIBLE_IOCTL(PPPIOCNEWUNIT
)
2336 COMPATIBLE_IOCTL(PPPIOCATTACH
)
2337 COMPATIBLE_IOCTL(PPPIOCDETACH
)
2339 COMPATIBLE_IOCTL(CDROMPAUSE
)
2340 COMPATIBLE_IOCTL(CDROMRESUME
)
2341 COMPATIBLE_IOCTL(CDROMPLAYMSF
)
2342 COMPATIBLE_IOCTL(CDROMPLAYTRKIND
)
2343 COMPATIBLE_IOCTL(CDROMREADTOCHDR
)
2344 COMPATIBLE_IOCTL(CDROMREADTOCENTRY
)
2345 COMPATIBLE_IOCTL(CDROMSTOP
)
2346 COMPATIBLE_IOCTL(CDROMSTART
)
2347 COMPATIBLE_IOCTL(CDROMEJECT
)
2348 COMPATIBLE_IOCTL(CDROMVOLCTRL
)
2349 COMPATIBLE_IOCTL(CDROMSUBCHNL
)
2350 COMPATIBLE_IOCTL(CDROMEJECT_SW
)
2351 COMPATIBLE_IOCTL(CDROMMULTISESSION
)
2352 COMPATIBLE_IOCTL(CDROM_GET_MCN
)
2353 COMPATIBLE_IOCTL(CDROMRESET
)
2354 COMPATIBLE_IOCTL(CDROMVOLREAD
)
2355 COMPATIBLE_IOCTL(CDROMSEEK
)
2356 COMPATIBLE_IOCTL(CDROMPLAYBLK
)
2357 COMPATIBLE_IOCTL(CDROMCLOSETRAY
)
2358 COMPATIBLE_IOCTL(CDROM_SET_OPTIONS
)
2359 COMPATIBLE_IOCTL(CDROM_CLEAR_OPTIONS
)
2360 COMPATIBLE_IOCTL(CDROM_SELECT_SPEED
)
2361 COMPATIBLE_IOCTL(CDROM_SELECT_DISC
)
2362 COMPATIBLE_IOCTL(CDROM_MEDIA_CHANGED
)
2363 COMPATIBLE_IOCTL(CDROM_DRIVE_STATUS
)
2364 COMPATIBLE_IOCTL(CDROM_DISC_STATUS
)
2365 COMPATIBLE_IOCTL(CDROM_CHANGER_NSLOTS
)
2366 COMPATIBLE_IOCTL(CDROM_LOCKDOOR
)
2367 COMPATIBLE_IOCTL(CDROM_DEBUG
)
2368 COMPATIBLE_IOCTL(CDROM_GET_CAPABILITY
)
2370 COMPATIBLE_IOCTL(LOOP_SET_FD
)
2371 COMPATIBLE_IOCTL(LOOP_CLR_FD
)
2373 COMPATIBLE_IOCTL(AUDIO_GETINFO
)
2374 COMPATIBLE_IOCTL(AUDIO_SETINFO
)
2375 COMPATIBLE_IOCTL(AUDIO_DRAIN
)
2376 COMPATIBLE_IOCTL(AUDIO_GETDEV
)
2377 COMPATIBLE_IOCTL(AUDIO_GETDEV_SUNOS
)
2378 COMPATIBLE_IOCTL(AUDIO_FLUSH
)
2379 /* Big Q for sound/OSS */
2380 COMPATIBLE_IOCTL(SNDCTL_SEQ_RESET
)
2381 COMPATIBLE_IOCTL(SNDCTL_SEQ_SYNC
)
2382 COMPATIBLE_IOCTL(SNDCTL_SYNTH_INFO
)
2383 COMPATIBLE_IOCTL(SNDCTL_SEQ_CTRLRATE
)
2384 COMPATIBLE_IOCTL(SNDCTL_SEQ_GETOUTCOUNT
)
2385 COMPATIBLE_IOCTL(SNDCTL_SEQ_GETINCOUNT
)
2386 COMPATIBLE_IOCTL(SNDCTL_SEQ_PERCMODE
)
2387 COMPATIBLE_IOCTL(SNDCTL_FM_LOAD_INSTR
)
2388 COMPATIBLE_IOCTL(SNDCTL_SEQ_TESTMIDI
)
2389 COMPATIBLE_IOCTL(SNDCTL_SEQ_RESETSAMPLES
)
2390 COMPATIBLE_IOCTL(SNDCTL_SEQ_NRSYNTHS
)
2391 COMPATIBLE_IOCTL(SNDCTL_SEQ_NRMIDIS
)
2392 COMPATIBLE_IOCTL(SNDCTL_MIDI_INFO
)
2393 COMPATIBLE_IOCTL(SNDCTL_SEQ_THRESHOLD
)
2394 COMPATIBLE_IOCTL(SNDCTL_SYNTH_MEMAVL
)
2395 COMPATIBLE_IOCTL(SNDCTL_FM_4OP_ENABLE
)
2396 COMPATIBLE_IOCTL(SNDCTL_SEQ_PANIC
)
2397 COMPATIBLE_IOCTL(SNDCTL_SEQ_OUTOFBAND
)
2398 COMPATIBLE_IOCTL(SNDCTL_SEQ_GETTIME
)
2399 COMPATIBLE_IOCTL(SNDCTL_SYNTH_ID
)
2400 COMPATIBLE_IOCTL(SNDCTL_SYNTH_CONTROL
)
2401 COMPATIBLE_IOCTL(SNDCTL_SYNTH_REMOVESAMPLE
)
2402 /* Big T for sound/OSS */
2403 COMPATIBLE_IOCTL(SNDCTL_TMR_TIMEBASE
)
2404 COMPATIBLE_IOCTL(SNDCTL_TMR_START
)
2405 COMPATIBLE_IOCTL(SNDCTL_TMR_STOP
)
2406 COMPATIBLE_IOCTL(SNDCTL_TMR_CONTINUE
)
2407 COMPATIBLE_IOCTL(SNDCTL_TMR_TEMPO
)
2408 COMPATIBLE_IOCTL(SNDCTL_TMR_SOURCE
)
2409 COMPATIBLE_IOCTL(SNDCTL_TMR_METRONOME
)
2410 COMPATIBLE_IOCTL(SNDCTL_TMR_SELECT
)
2411 /* Little m for sound/OSS */
2412 COMPATIBLE_IOCTL(SNDCTL_MIDI_PRETIME
)
2413 COMPATIBLE_IOCTL(SNDCTL_MIDI_MPUMODE
)
2414 COMPATIBLE_IOCTL(SNDCTL_MIDI_MPUCMD
)
2415 /* Big P for sound/OSS */
2416 COMPATIBLE_IOCTL(SNDCTL_DSP_RESET
)
2417 COMPATIBLE_IOCTL(SNDCTL_DSP_SYNC
)
2418 COMPATIBLE_IOCTL(SNDCTL_DSP_SPEED
)
2419 COMPATIBLE_IOCTL(SNDCTL_DSP_STEREO
)
2420 COMPATIBLE_IOCTL(SNDCTL_DSP_GETBLKSIZE
)
2421 COMPATIBLE_IOCTL(SNDCTL_DSP_CHANNELS
)
2422 COMPATIBLE_IOCTL(SOUND_PCM_WRITE_FILTER
)
2423 COMPATIBLE_IOCTL(SNDCTL_DSP_POST
)
2424 COMPATIBLE_IOCTL(SNDCTL_DSP_SUBDIVIDE
)
2425 COMPATIBLE_IOCTL(SNDCTL_DSP_SETFRAGMENT
)
2426 COMPATIBLE_IOCTL(SNDCTL_DSP_GETFMTS
)
2427 COMPATIBLE_IOCTL(SNDCTL_DSP_SETFMT
)
2428 COMPATIBLE_IOCTL(SNDCTL_DSP_GETOSPACE
)
2429 COMPATIBLE_IOCTL(SNDCTL_DSP_GETISPACE
)
2430 COMPATIBLE_IOCTL(SNDCTL_DSP_NONBLOCK
)
2431 COMPATIBLE_IOCTL(SNDCTL_DSP_GETCAPS
)
2432 COMPATIBLE_IOCTL(SNDCTL_DSP_GETTRIGGER
)
2433 COMPATIBLE_IOCTL(SNDCTL_DSP_SETTRIGGER
)
2434 COMPATIBLE_IOCTL(SNDCTL_DSP_GETIPTR
)
2435 COMPATIBLE_IOCTL(SNDCTL_DSP_GETOPTR
)
2436 /* SNDCTL_DSP_MAPINBUF, XXX needs translation */
2437 /* SNDCTL_DSP_MAPOUTBUF, XXX needs translation */
2438 COMPATIBLE_IOCTL(SNDCTL_DSP_SETSYNCRO
)
2439 COMPATIBLE_IOCTL(SNDCTL_DSP_SETDUPLEX
)
2440 COMPATIBLE_IOCTL(SNDCTL_DSP_GETODELAY
)
2441 COMPATIBLE_IOCTL(SNDCTL_DSP_PROFILE
)
2442 COMPATIBLE_IOCTL(SOUND_PCM_READ_RATE
)
2443 COMPATIBLE_IOCTL(SOUND_PCM_READ_CHANNELS
)
2444 COMPATIBLE_IOCTL(SOUND_PCM_READ_BITS
)
2445 COMPATIBLE_IOCTL(SOUND_PCM_READ_FILTER
)
2446 /* Big C for sound/OSS */
2447 COMPATIBLE_IOCTL(SNDCTL_COPR_RESET
)
2448 COMPATIBLE_IOCTL(SNDCTL_COPR_LOAD
)
2449 COMPATIBLE_IOCTL(SNDCTL_COPR_RDATA
)
2450 COMPATIBLE_IOCTL(SNDCTL_COPR_RCODE
)
2451 COMPATIBLE_IOCTL(SNDCTL_COPR_WDATA
)
2452 COMPATIBLE_IOCTL(SNDCTL_COPR_WCODE
)
2453 COMPATIBLE_IOCTL(SNDCTL_COPR_RUN
)
2454 COMPATIBLE_IOCTL(SNDCTL_COPR_HALT
)
2455 COMPATIBLE_IOCTL(SNDCTL_COPR_SENDMSG
)
2456 COMPATIBLE_IOCTL(SNDCTL_COPR_RCVMSG
)
2457 /* Big M for sound/OSS */
2458 COMPATIBLE_IOCTL(SOUND_MIXER_READ_VOLUME
)
2459 COMPATIBLE_IOCTL(SOUND_MIXER_READ_BASS
)
2460 COMPATIBLE_IOCTL(SOUND_MIXER_READ_TREBLE
)
2461 COMPATIBLE_IOCTL(SOUND_MIXER_READ_SYNTH
)
2462 COMPATIBLE_IOCTL(SOUND_MIXER_READ_PCM
)
2463 COMPATIBLE_IOCTL(SOUND_MIXER_READ_SPEAKER
)
2464 COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE
)
2465 COMPATIBLE_IOCTL(SOUND_MIXER_READ_MIC
)
2466 COMPATIBLE_IOCTL(SOUND_MIXER_READ_CD
)
2467 COMPATIBLE_IOCTL(SOUND_MIXER_READ_IMIX
)
2468 COMPATIBLE_IOCTL(SOUND_MIXER_READ_ALTPCM
)
2469 COMPATIBLE_IOCTL(SOUND_MIXER_READ_RECLEV
)
2470 COMPATIBLE_IOCTL(SOUND_MIXER_READ_IGAIN
)
2471 COMPATIBLE_IOCTL(SOUND_MIXER_READ_OGAIN
)
2472 COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE1
)
2473 COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE2
)
2474 COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE3
)
2475 COMPATIBLE_IOCTL(SOUND_MIXER_READ_MUTE
)
2476 /* SOUND_MIXER_READ_ENHANCE, same value as READ_MUTE */
2477 /* SOUND_MIXER_READ_LOUD, same value as READ_MUTE */
2478 COMPATIBLE_IOCTL(SOUND_MIXER_READ_RECSRC
)
2479 COMPATIBLE_IOCTL(SOUND_MIXER_READ_DEVMASK
)
2480 COMPATIBLE_IOCTL(SOUND_MIXER_READ_RECMASK
)
2481 COMPATIBLE_IOCTL(SOUND_MIXER_READ_STEREODEVS
)
2482 COMPATIBLE_IOCTL(SOUND_MIXER_READ_CAPS
)
2483 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_VOLUME
)
2484 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_BASS
)
2485 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_TREBLE
)
2486 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_SYNTH
)
2487 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_PCM
)
2488 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_SPEAKER
)
2489 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE
)
2490 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_MIC
)
2491 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_CD
)
2492 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_IMIX
)
2493 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_ALTPCM
)
2494 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_RECLEV
)
2495 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_IGAIN
)
2496 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_OGAIN
)
2497 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE1
)
2498 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE2
)
2499 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE3
)
2500 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_MUTE
)
2501 /* SOUND_MIXER_WRITE_ENHANCE, same value as WRITE_MUTE */
2502 /* SOUND_MIXER_WRITE_LOUD, same value as WRITE_MUTE */
2503 COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_RECSRC
)
2504 COMPATIBLE_IOCTL(SOUND_MIXER_INFO
)
2505 COMPATIBLE_IOCTL(SOUND_OLD_MIXER_INFO
)
2506 COMPATIBLE_IOCTL(SOUND_MIXER_ACCESS
)
2507 COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE1
)
2508 COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE2
)
2509 COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE3
)
2510 COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE4
)
2511 COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE5
)
2512 COMPATIBLE_IOCTL(SOUND_MIXER_GETLEVELS
)
2513 COMPATIBLE_IOCTL(SOUND_MIXER_SETLEVELS
)
2514 COMPATIBLE_IOCTL(OSS_GETVERSION
)
2516 COMPATIBLE_IOCTL(AUTOFS_IOC_READY
)
2517 COMPATIBLE_IOCTL(AUTOFS_IOC_FAIL
)
2518 COMPATIBLE_IOCTL(AUTOFS_IOC_CATATONIC
)
2519 COMPATIBLE_IOCTL(AUTOFS_IOC_PROTOVER
)
2520 COMPATIBLE_IOCTL(AUTOFS_IOC_EXPIRE
)
2522 COMPATIBLE_IOCTL(DEVFSDIOC_GET_PROTO_REV
)
2523 COMPATIBLE_IOCTL(DEVFSDIOC_SET_EVENT_MASK
)
2524 COMPATIBLE_IOCTL(DEVFSDIOC_RELEASE_EVENT_QUEUE
)
2525 COMPATIBLE_IOCTL(DEVFSDIOC_SET_DEBUG_MASK
)
2527 COMPATIBLE_IOCTL(RAW_SETBIND
)
2528 COMPATIBLE_IOCTL(RAW_GETBIND
)
2529 /* SMB ioctls which do not need any translations */
2530 COMPATIBLE_IOCTL(SMB_IOC_NEWCONN
)
2532 COMPATIBLE_IOCTL(ATMSIGD_CTRL
)
2533 COMPATIBLE_IOCTL(ATMARPD_CTRL
)
2534 COMPATIBLE_IOCTL(ATMLEC_CTRL
)
2535 COMPATIBLE_IOCTL(ATMLEC_MCAST
)
2536 COMPATIBLE_IOCTL(ATMLEC_DATA
)
2537 COMPATIBLE_IOCTL(ATM_SETSC
)
2538 COMPATIBLE_IOCTL(SIOCSIFATMTCP
)
2539 COMPATIBLE_IOCTL(SIOCMKCLIP
)
2540 COMPATIBLE_IOCTL(ATMARP_MKIP
)
2541 COMPATIBLE_IOCTL(ATMARP_SETENTRY
)
2542 COMPATIBLE_IOCTL(ATMARP_ENCAP
)
2543 COMPATIBLE_IOCTL(ATMTCP_CREATE
)
2544 COMPATIBLE_IOCTL(ATMTCP_REMOVE
)
2545 COMPATIBLE_IOCTL(ATMMPC_CTRL
)
2546 COMPATIBLE_IOCTL(ATMMPC_DATA
)
2547 /* And these ioctls need translation */
2548 HANDLE_IOCTL(SIOCGIFNAME
, dev_ifname32
)
2549 HANDLE_IOCTL(SIOCGIFCONF
, dev_ifconf
)
2550 HANDLE_IOCTL(SIOCGIFFLAGS
, dev_ifsioc
)
2551 HANDLE_IOCTL(SIOCSIFFLAGS
, dev_ifsioc
)
2552 HANDLE_IOCTL(SIOCGIFMETRIC
, dev_ifsioc
)
2553 HANDLE_IOCTL(SIOCSIFMETRIC
, dev_ifsioc
)
2554 HANDLE_IOCTL(SIOCGIFMTU
, dev_ifsioc
)
2555 HANDLE_IOCTL(SIOCSIFMTU
, dev_ifsioc
)
2556 HANDLE_IOCTL(SIOCGIFMEM
, dev_ifsioc
)
2557 HANDLE_IOCTL(SIOCSIFMEM
, dev_ifsioc
)
2558 HANDLE_IOCTL(SIOCGIFHWADDR
, dev_ifsioc
)
2559 HANDLE_IOCTL(SIOCSIFHWADDR
, dev_ifsioc
)
2560 HANDLE_IOCTL(SIOCADDMULTI
, dev_ifsioc
)
2561 HANDLE_IOCTL(SIOCDELMULTI
, dev_ifsioc
)
2562 HANDLE_IOCTL(SIOCGIFINDEX
, dev_ifsioc
)
2563 HANDLE_IOCTL(SIOCGIFMAP
, dev_ifsioc
)
2564 HANDLE_IOCTL(SIOCSIFMAP
, dev_ifsioc
)
2565 HANDLE_IOCTL(SIOCGIFADDR
, dev_ifsioc
)
2566 HANDLE_IOCTL(SIOCSIFADDR
, dev_ifsioc
)
2567 HANDLE_IOCTL(SIOCGIFBRDADDR
, dev_ifsioc
)
2568 HANDLE_IOCTL(SIOCSIFBRDADDR
, dev_ifsioc
)
2569 HANDLE_IOCTL(SIOCGIFDSTADDR
, dev_ifsioc
)
2570 HANDLE_IOCTL(SIOCSIFDSTADDR
, dev_ifsioc
)
2571 HANDLE_IOCTL(SIOCGIFNETMASK
, dev_ifsioc
)
2572 HANDLE_IOCTL(SIOCSIFNETMASK
, dev_ifsioc
)
2573 HANDLE_IOCTL(SIOCSIFPFLAGS
, dev_ifsioc
)
2574 HANDLE_IOCTL(SIOCGIFPFLAGS
, dev_ifsioc
)
2575 HANDLE_IOCTL(SIOCGPPPSTATS
, dev_ifsioc
)
2576 HANDLE_IOCTL(SIOCGPPPCSTATS
, dev_ifsioc
)
2577 HANDLE_IOCTL(SIOCGPPPVER
, dev_ifsioc
)
2578 HANDLE_IOCTL(SIOCGIFTXQLEN
, dev_ifsioc
)
2579 HANDLE_IOCTL(SIOCSIFTXQLEN
, dev_ifsioc
)
2580 HANDLE_IOCTL(SIOCETHTOOL
, dev_ifsioc
)
2581 HANDLE_IOCTL(SIOCADDRT
, routing_ioctl
)
2582 HANDLE_IOCTL(SIOCDELRT
, routing_ioctl
)
2583 /* Note SIOCRTMSG is no longer, so this is safe and * the user would have seen just an -EINVAL anyways. */
2584 HANDLE_IOCTL(SIOCRTMSG
, ret_einval
)
2585 HANDLE_IOCTL(SIOCGSTAMP
, do_siocgstamp
)
2586 HANDLE_IOCTL(HDIO_GETGEO
, hdio_getgeo
)
2587 HANDLE_IOCTL(BLKRAGET
, w_long
)
2588 HANDLE_IOCTL(BLKGETSIZE
, w_long
)
2589 HANDLE_IOCTL(0x1260, broken_blkgetsize
)
2590 HANDLE_IOCTL(BLKFRAGET
, w_long
)
2591 HANDLE_IOCTL(BLKSECTGET
, w_long
)
2592 HANDLE_IOCTL(BLKPG
, blkpg_ioctl_trans
)
2593 HANDLE_IOCTL(FBIOPUTCMAP32
, fbiogetputcmap
)
2594 HANDLE_IOCTL(FBIOGETCMAP32
, fbiogetputcmap
)
2595 HANDLE_IOCTL(FBIOSCURSOR32
, fbiogscursor
)
2596 HANDLE_IOCTL(FBIOGET_FSCREENINFO
, fb_ioctl_trans
)
2597 HANDLE_IOCTL(FBIOGETCMAP
, fb_ioctl_trans
)
2598 HANDLE_IOCTL(FBIOPUTCMAP
, fb_ioctl_trans
)
2599 HANDLE_IOCTL(HDIO_GET_KEEPSETTINGS
, hdio_ioctl_trans
)
2600 HANDLE_IOCTL(HDIO_GET_UNMASKINTR
, hdio_ioctl_trans
)
2601 HANDLE_IOCTL(HDIO_GET_DMA
, hdio_ioctl_trans
)
2602 HANDLE_IOCTL(HDIO_GET_32BIT
, hdio_ioctl_trans
)
2603 HANDLE_IOCTL(HDIO_GET_MULTCOUNT
, hdio_ioctl_trans
)
2604 HANDLE_IOCTL(HDIO_GET_NOWERR
, hdio_ioctl_trans
)
2605 HANDLE_IOCTL(HDIO_GET_NICE
, hdio_ioctl_trans
)
2606 HANDLE_IOCTL(FDSETPRM32
, fd_ioctl_trans
)
2607 HANDLE_IOCTL(FDDEFPRM32
, fd_ioctl_trans
)
2608 HANDLE_IOCTL(FDGETPRM32
, fd_ioctl_trans
)
2609 HANDLE_IOCTL(FDSETDRVPRM32
, fd_ioctl_trans
)
2610 HANDLE_IOCTL(FDGETDRVPRM32
, fd_ioctl_trans
)
2611 HANDLE_IOCTL(FDGETDRVSTAT32
, fd_ioctl_trans
)
2612 HANDLE_IOCTL(FDPOLLDRVSTAT32
, fd_ioctl_trans
)
2613 HANDLE_IOCTL(FDGETFDCSTAT32
, fd_ioctl_trans
)
2614 HANDLE_IOCTL(FDWERRORGET32
, fd_ioctl_trans
)
2615 HANDLE_IOCTL(PPPIOCGIDLE32
, ppp_ioctl_trans
)
2616 HANDLE_IOCTL(PPPIOCSCOMPRESS32
, ppp_ioctl_trans
)
2617 HANDLE_IOCTL(MTIOCGET32
, mt_ioctl_trans
)
2618 HANDLE_IOCTL(MTIOCPOS32
, mt_ioctl_trans
)
2619 HANDLE_IOCTL(MTIOCGETCONFIG32
, mt_ioctl_trans
)
2620 HANDLE_IOCTL(MTIOCSETCONFIG32
, mt_ioctl_trans
)
2621 HANDLE_IOCTL(CDROMREADMODE2
, cdrom_ioctl_trans
)
2622 HANDLE_IOCTL(CDROMREADMODE1
, cdrom_ioctl_trans
)
2623 HANDLE_IOCTL(CDROMREADRAW
, cdrom_ioctl_trans
)
2624 HANDLE_IOCTL(CDROMREADCOOKED
, cdrom_ioctl_trans
)
2625 HANDLE_IOCTL(CDROMREADAUDIO
, cdrom_ioctl_trans
)
2626 HANDLE_IOCTL(CDROMREADALL
, cdrom_ioctl_trans
)
2627 HANDLE_IOCTL(CDROM_SEND_PACKET
, cdrom_ioctl_trans
)
2628 HANDLE_IOCTL(LOOP_SET_STATUS
, loop_status
)
2629 HANDLE_IOCTL(LOOP_GET_STATUS
, loop_status
)
2630 #define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,unsigned int)
2631 HANDLE_IOCTL(AUTOFS_IOC_SETTIMEOUT32
, ioc_settimeout
)
2632 HANDLE_IOCTL(PIO_FONTX
, do_fontx_ioctl
)
2633 HANDLE_IOCTL(GIO_FONTX
, do_fontx_ioctl
)
2634 HANDLE_IOCTL(PIO_UNIMAP
, do_unimap_ioctl
)
2635 HANDLE_IOCTL(GIO_UNIMAP
, do_unimap_ioctl
)
2636 HANDLE_IOCTL(KDFONTOP
, do_kdfontop_ioctl
)
2637 HANDLE_IOCTL(EXT2_IOC32_GETFLAGS
, do_ext2_ioctl
)
2638 HANDLE_IOCTL(EXT2_IOC32_SETFLAGS
, do_ext2_ioctl
)
2639 HANDLE_IOCTL(EXT2_IOC32_GETVERSION
, do_ext2_ioctl
)
2640 HANDLE_IOCTL(EXT2_IOC32_SETVERSION
, do_ext2_ioctl
)
2641 HANDLE_IOCTL(VIDIOCGTUNER32
, do_video_ioctl
)
2642 HANDLE_IOCTL(VIDIOCSTUNER32
, do_video_ioctl
)
2643 HANDLE_IOCTL(VIDIOCGWIN32
, do_video_ioctl
)
2644 HANDLE_IOCTL(VIDIOCSWIN32
, do_video_ioctl
)
2645 HANDLE_IOCTL(VIDIOCGFBUF32
, do_video_ioctl
)
2646 HANDLE_IOCTL(VIDIOCSFBUF32
, do_video_ioctl
)
2647 HANDLE_IOCTL(VIDIOCGFREQ32
, do_video_ioctl
)
2648 HANDLE_IOCTL(VIDIOCSFREQ32
, do_video_ioctl
)
2649 /* One SMB ioctl needs translations. */
2650 #define SMB_IOC_GETMOUNTUID_32 _IOR('u', 1, __kernel_uid_t32)
2651 HANDLE_IOCTL(SMB_IOC_GETMOUNTUID_32
, do_smb_getmountuid
)
2652 HANDLE_IOCTL(ATM_GETLINKRATE32
, do_atm_ioctl
)
2653 HANDLE_IOCTL(ATM_GETNAMES32
, do_atm_ioctl
)
2654 HANDLE_IOCTL(ATM_GETTYPE32
, do_atm_ioctl
)
2655 HANDLE_IOCTL(ATM_GETESI32
, do_atm_ioctl
)
2656 HANDLE_IOCTL(ATM_GETADDR32
, do_atm_ioctl
)
2657 HANDLE_IOCTL(ATM_RSTADDR32
, do_atm_ioctl
)
2658 HANDLE_IOCTL(ATM_ADDADDR32
, do_atm_ioctl
)
2659 HANDLE_IOCTL(ATM_DELADDR32
, do_atm_ioctl
)
2660 HANDLE_IOCTL(ATM_GETCIRANGE32
, do_atm_ioctl
)
2661 HANDLE_IOCTL(ATM_SETCIRANGE32
, do_atm_ioctl
)
2662 HANDLE_IOCTL(ATM_SETESI32
, do_atm_ioctl
)
2663 HANDLE_IOCTL(ATM_SETESIF32
, do_atm_ioctl
)
2664 HANDLE_IOCTL(ATM_GETSTAT32
, do_atm_ioctl
)
2665 HANDLE_IOCTL(ATM_GETSTATZ32
, do_atm_ioctl
)
2666 HANDLE_IOCTL(SUNI_GETLOOP
, do_atm_ioctl
)
2667 HANDLE_IOCTL(SUNI_SETLOOP
, do_atm_ioctl
)
2668 HANDLE_IOCTL(SONET_GETSTAT
, do_atm_ioctl
)
2669 HANDLE_IOCTL(SONET_GETSTATZ
, do_atm_ioctl
)
2670 HANDLE_IOCTL(SONET_GETDIAG
, do_atm_ioctl
)
2671 HANDLE_IOCTL(SONET_SETDIAG
, do_atm_ioctl
)
2672 HANDLE_IOCTL(SONET_CLRDIAG
, do_atm_ioctl
)
2673 HANDLE_IOCTL(SONET_SETFRAMING
, do_atm_ioctl
)
2674 HANDLE_IOCTL(SONET_GETFRAMING
, do_atm_ioctl
)
2675 HANDLE_IOCTL(SONET_GETFRSENSE
, do_atm_ioctl
)
2678 unsigned int ioctl32_hash_table
[1024];
2680 extern inline unsigned long ioctl32_hash(unsigned long cmd
)
2682 return ((cmd
>> 6) ^ (cmd
>> 4) ^ cmd
) & 0x3ff;
2685 static void ioctl32_insert_translation(struct ioctl_trans
*trans
)
2688 struct ioctl_trans
*t
;
2690 hash
= ioctl32_hash (trans
->cmd
);
2691 if (!ioctl32_hash_table
[hash
])
2692 ioctl32_hash_table
[hash
] = (u32
)(long)trans
;
2694 t
= (struct ioctl_trans
*)(long)ioctl32_hash_table
[hash
];
2696 t
= (struct ioctl_trans
*)(long)t
->next
;
2698 t
->next
= (u32
)(long)trans
;
2702 static int __init
init_sys32_ioctl(void)
2705 extern struct ioctl_trans ioctl_translations
[], ioctl_translations_end
[];
2707 for (i
= 0; &ioctl_translations
[i
] < &ioctl_translations_end
[0]; i
++)
2708 ioctl32_insert_translation(&ioctl_translations
[i
]);
2712 __initcall(init_sys32_ioctl
);
2714 static struct ioctl_trans
*additional_ioctls
;
2716 /* Always call these with kernel lock held! */
2718 int register_ioctl32_conversion(unsigned int cmd
, int (*handler
)(unsigned int, unsigned int, unsigned long, struct file
*))
2721 if (!additional_ioctls
) {
2722 additional_ioctls
= module_map(PAGE_SIZE
);
2723 if (!additional_ioctls
) return -ENOMEM
;
2725 for (i
= 0; i
< PAGE_SIZE
/sizeof(struct ioctl_trans
); i
++)
2726 if (!additional_ioctls
[i
].cmd
)
2728 if (i
== PAGE_SIZE
/sizeof(struct ioctl_trans
))
2730 additional_ioctls
[i
].cmd
= cmd
;
2732 additional_ioctls
[i
].handler
= (u32
)(long)sys_ioctl
;
2734 additional_ioctls
[i
].handler
= (u32
)(long)handler
;
2735 ioctl32_insert_translation(&additional_ioctls
[i
]);
2739 int unregister_ioctl32_conversion(unsigned int cmd
)
2741 unsigned long hash
= ioctl32_hash(cmd
);
2742 struct ioctl_trans
*t
, *t1
;
2744 t
= (struct ioctl_trans
*)(long)ioctl32_hash_table
[hash
];
2745 if (!t
) return -EINVAL
;
2746 if (t
->cmd
== cmd
&& t
>= additional_ioctls
&&
2747 (unsigned long)t
< ((unsigned long)additional_ioctls
) + PAGE_SIZE
) {
2748 ioctl32_hash_table
[hash
] = t
->next
;
2751 } else while (t
->next
) {
2752 t1
= (struct ioctl_trans
*)(long)t
->next
;
2753 if (t1
->cmd
== cmd
&& t1
>= additional_ioctls
&&
2754 (unsigned long)t1
< ((unsigned long)additional_ioctls
) + PAGE_SIZE
) {
2764 asmlinkage
int sys32_ioctl(unsigned int fd
, unsigned int cmd
, unsigned long arg
)
2768 int (*handler
)(unsigned int, unsigned int, unsigned long, struct file
* filp
);
2769 struct ioctl_trans
*t
;
2776 if (!filp
->f_op
|| !filp
->f_op
->ioctl
) {
2777 error
= sys_ioctl (fd
, cmd
, arg
);
2781 t
= (struct ioctl_trans
*)(long)ioctl32_hash_table
[ioctl32_hash (cmd
)];
2783 while (t
&& t
->cmd
!= cmd
)
2784 t
= (struct ioctl_trans
*)(long)t
->next
;
2786 handler
= (void *)(long)t
->handler
;
2787 error
= handler(fd
, cmd
, arg
, filp
);
2789 static int count
= 0;
2791 printk("sys32_ioctl: Unknown cmd fd(%d) "
2792 "cmd(%08x) arg(%08x)\n",
2793 (int)fd
, (unsigned int)cmd
, (unsigned int)arg
);