aboutsummaryrefslogtreecommitdiffstats
path: root/fs/compat_ioctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/compat_ioctl.c')
-rw-r--r--fs/compat_ioctl.c1025
1 files changed, 1016 insertions, 9 deletions
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c
index c68b055fa26e..d92bc3eb7afc 100644
--- a/fs/compat_ioctl.c
+++ b/fs/compat_ioctl.c
@@ -17,7 +17,6 @@
17#include <linux/compiler.h> 17#include <linux/compiler.h>
18#include <linux/sched.h> 18#include <linux/sched.h>
19#include <linux/smp.h> 19#include <linux/smp.h>
20#include <linux/smp_lock.h>
21#include <linux/ioctl.h> 20#include <linux/ioctl.h>
22#include <linux/if.h> 21#include <linux/if.h>
23#include <linux/if_bridge.h> 22#include <linux/if_bridge.h>
@@ -58,7 +57,6 @@
58#include <linux/serial.h> 57#include <linux/serial.h>
59#include <linux/if_tun.h> 58#include <linux/if_tun.h>
60#include <linux/ctype.h> 59#include <linux/ctype.h>
61#include <linux/ioctl32.h>
62#include <linux/syscalls.h> 60#include <linux/syscalls.h>
63#include <linux/i2c.h> 61#include <linux/i2c.h>
64#include <linux/i2c-dev.h> 62#include <linux/i2c-dev.h>
@@ -66,7 +64,6 @@
66#include <linux/atalk.h> 64#include <linux/atalk.h>
67#include <linux/blktrace_api.h> 65#include <linux/blktrace_api.h>
68 66
69#include <net/sock.h> /* siocdevprivate_ioctl */
70#include <net/bluetooth/bluetooth.h> 67#include <net/bluetooth/bluetooth.h>
71#include <net/bluetooth/hci.h> 68#include <net/bluetooth/hci.h>
72#include <net/bluetooth/rfcomm.h> 69#include <net/bluetooth/rfcomm.h>
@@ -475,7 +472,7 @@ static int bond_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
475 }; 472 };
476} 473}
477 474
478int siocdevprivate_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) 475static int siocdevprivate_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
479{ 476{
480 struct ifreq __user *u_ifreq64; 477 struct ifreq __user *u_ifreq64;
481 struct ifreq32 __user *u_ifreq32 = compat_ptr(arg); 478 struct ifreq32 __user *u_ifreq32 = compat_ptr(arg);
@@ -687,8 +684,10 @@ static int hdio_getgeo(unsigned int fd, unsigned int cmd, unsigned long arg)
687 if (!err) { 684 if (!err) {
688 err = copy_to_user (ugeo, &geo, 4); 685 err = copy_to_user (ugeo, &geo, 4);
689 err |= __put_user (geo.start, &ugeo->start); 686 err |= __put_user (geo.start, &ugeo->start);
687 if (err)
688 err = -EFAULT;
690 } 689 }
691 return err ? -EFAULT : 0; 690 return err;
692} 691}
693 692
694static int hdio_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg) 693static int hdio_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
@@ -2385,6 +2384,16 @@ lp_timeout_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
2385 return sys_ioctl(fd, cmd, (unsigned long)tn); 2384 return sys_ioctl(fd, cmd, (unsigned long)tn);
2386} 2385}
2387 2386
2387
2388typedef int (*ioctl_trans_handler_t)(unsigned int, unsigned int,
2389 unsigned long, struct file *);
2390
2391struct ioctl_trans {
2392 unsigned long cmd;
2393 ioctl_trans_handler_t handler;
2394 struct ioctl_trans *next;
2395};
2396
2388#define HANDLE_IOCTL(cmd,handler) \ 2397#define HANDLE_IOCTL(cmd,handler) \
2389 { (cmd), (ioctl_trans_handler_t)(handler) }, 2398 { (cmd), (ioctl_trans_handler_t)(handler) },
2390 2399
@@ -2396,9 +2405,844 @@ lp_timeout_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
2396#define ULONG_IOCTL(cmd) \ 2405#define ULONG_IOCTL(cmd) \
2397 { (cmd), (ioctl_trans_handler_t)sys_ioctl }, 2406 { (cmd), (ioctl_trans_handler_t)sys_ioctl },
2398 2407
2399 2408/* ioctl should not be warned about even if it's not implemented.
2400struct ioctl_trans ioctl_start[] = { 2409 Valid reasons to use this:
2401#include <linux/compat_ioctl.h> 2410 - It is implemented with ->compat_ioctl on some device, but programs
2411 call it on others too.
2412 - The ioctl is not implemented in the native kernel, but programs
2413 call it commonly anyways.
2414 Most other reasons are not valid. */
2415#define IGNORE_IOCTL(cmd) COMPATIBLE_IOCTL(cmd)
2416
2417static struct ioctl_trans ioctl_start[] = {
2418/* compatible ioctls first */
2419COMPATIBLE_IOCTL(0x4B50) /* KDGHWCLK - not in the kernel, but don't complain */
2420COMPATIBLE_IOCTL(0x4B51) /* KDSHWCLK - not in the kernel, but don't complain */
2421
2422/* Big T */
2423COMPATIBLE_IOCTL(TCGETA)
2424COMPATIBLE_IOCTL(TCSETA)
2425COMPATIBLE_IOCTL(TCSETAW)
2426COMPATIBLE_IOCTL(TCSETAF)
2427COMPATIBLE_IOCTL(TCSBRK)
2428ULONG_IOCTL(TCSBRKP)
2429COMPATIBLE_IOCTL(TCXONC)
2430COMPATIBLE_IOCTL(TCFLSH)
2431COMPATIBLE_IOCTL(TCGETS)
2432COMPATIBLE_IOCTL(TCSETS)
2433COMPATIBLE_IOCTL(TCSETSW)
2434COMPATIBLE_IOCTL(TCSETSF)
2435COMPATIBLE_IOCTL(TIOCLINUX)
2436COMPATIBLE_IOCTL(TIOCSBRK)
2437COMPATIBLE_IOCTL(TIOCCBRK)
2438ULONG_IOCTL(TIOCMIWAIT)
2439COMPATIBLE_IOCTL(TIOCGICOUNT)
2440/* Little t */
2441COMPATIBLE_IOCTL(TIOCGETD)
2442COMPATIBLE_IOCTL(TIOCSETD)
2443COMPATIBLE_IOCTL(TIOCEXCL)
2444COMPATIBLE_IOCTL(TIOCNXCL)
2445COMPATIBLE_IOCTL(TIOCCONS)
2446COMPATIBLE_IOCTL(TIOCGSOFTCAR)
2447COMPATIBLE_IOCTL(TIOCSSOFTCAR)
2448COMPATIBLE_IOCTL(TIOCSWINSZ)
2449COMPATIBLE_IOCTL(TIOCGWINSZ)
2450COMPATIBLE_IOCTL(TIOCMGET)
2451COMPATIBLE_IOCTL(TIOCMBIC)
2452COMPATIBLE_IOCTL(TIOCMBIS)
2453COMPATIBLE_IOCTL(TIOCMSET)
2454COMPATIBLE_IOCTL(TIOCPKT)
2455COMPATIBLE_IOCTL(TIOCNOTTY)
2456COMPATIBLE_IOCTL(TIOCSTI)
2457COMPATIBLE_IOCTL(TIOCOUTQ)
2458COMPATIBLE_IOCTL(TIOCSPGRP)
2459COMPATIBLE_IOCTL(TIOCGPGRP)
2460ULONG_IOCTL(TIOCSCTTY)
2461COMPATIBLE_IOCTL(TIOCGPTN)
2462COMPATIBLE_IOCTL(TIOCSPTLCK)
2463COMPATIBLE_IOCTL(TIOCSERGETLSR)
2464/* Little f */
2465COMPATIBLE_IOCTL(FIOCLEX)
2466COMPATIBLE_IOCTL(FIONCLEX)
2467COMPATIBLE_IOCTL(FIOASYNC)
2468COMPATIBLE_IOCTL(FIONBIO)
2469COMPATIBLE_IOCTL(FIONREAD) /* This is also TIOCINQ */
2470/* 0x00 */
2471COMPATIBLE_IOCTL(FIBMAP)
2472COMPATIBLE_IOCTL(FIGETBSZ)
2473/* 0x03 -- HD/IDE ioctl's used by hdparm and friends.
2474 * Some need translations, these do not.
2475 */
2476COMPATIBLE_IOCTL(HDIO_GET_IDENTITY)
2477COMPATIBLE_IOCTL(HDIO_DRIVE_TASK)
2478COMPATIBLE_IOCTL(HDIO_DRIVE_CMD)
2479ULONG_IOCTL(HDIO_SET_MULTCOUNT)
2480ULONG_IOCTL(HDIO_SET_UNMASKINTR)
2481ULONG_IOCTL(HDIO_SET_KEEPSETTINGS)
2482ULONG_IOCTL(HDIO_SET_32BIT)
2483ULONG_IOCTL(HDIO_SET_NOWERR)
2484ULONG_IOCTL(HDIO_SET_DMA)
2485ULONG_IOCTL(HDIO_SET_PIO_MODE)
2486ULONG_IOCTL(HDIO_SET_NICE)
2487ULONG_IOCTL(HDIO_SET_WCACHE)
2488ULONG_IOCTL(HDIO_SET_ACOUSTIC)
2489ULONG_IOCTL(HDIO_SET_BUSSTATE)
2490ULONG_IOCTL(HDIO_SET_ADDRESS)
2491COMPATIBLE_IOCTL(HDIO_SCAN_HWIF)
2492/* 0x330 is reserved -- it used to be HDIO_GETGEO_BIG */
2493COMPATIBLE_IOCTL(0x330)
2494/* 0x02 -- Floppy ioctls */
2495COMPATIBLE_IOCTL(FDMSGON)
2496COMPATIBLE_IOCTL(FDMSGOFF)
2497COMPATIBLE_IOCTL(FDSETEMSGTRESH)
2498COMPATIBLE_IOCTL(FDFLUSH)
2499COMPATIBLE_IOCTL(FDWERRORCLR)
2500COMPATIBLE_IOCTL(FDSETMAXERRS)
2501COMPATIBLE_IOCTL(FDGETMAXERRS)
2502COMPATIBLE_IOCTL(FDGETDRVTYP)
2503COMPATIBLE_IOCTL(FDEJECT)
2504COMPATIBLE_IOCTL(FDCLRPRM)
2505COMPATIBLE_IOCTL(FDFMTBEG)
2506COMPATIBLE_IOCTL(FDFMTEND)
2507COMPATIBLE_IOCTL(FDRESET)
2508COMPATIBLE_IOCTL(FDTWADDLE)
2509COMPATIBLE_IOCTL(FDFMTTRK)
2510COMPATIBLE_IOCTL(FDRAWCMD)
2511/* 0x12 */
2512#ifdef CONFIG_BLOCK
2513COMPATIBLE_IOCTL(BLKRASET)
2514COMPATIBLE_IOCTL(BLKROSET)
2515COMPATIBLE_IOCTL(BLKROGET)
2516COMPATIBLE_IOCTL(BLKRRPART)
2517COMPATIBLE_IOCTL(BLKFLSBUF)
2518COMPATIBLE_IOCTL(BLKSECTSET)
2519COMPATIBLE_IOCTL(BLKSSZGET)
2520COMPATIBLE_IOCTL(BLKTRACESTART)
2521COMPATIBLE_IOCTL(BLKTRACESTOP)
2522COMPATIBLE_IOCTL(BLKTRACESETUP)
2523COMPATIBLE_IOCTL(BLKTRACETEARDOWN)
2524ULONG_IOCTL(BLKRASET)
2525ULONG_IOCTL(BLKFRASET)
2526#endif
2527/* RAID */
2528COMPATIBLE_IOCTL(RAID_VERSION)
2529COMPATIBLE_IOCTL(GET_ARRAY_INFO)
2530COMPATIBLE_IOCTL(GET_DISK_INFO)
2531COMPATIBLE_IOCTL(PRINT_RAID_DEBUG)
2532COMPATIBLE_IOCTL(RAID_AUTORUN)
2533COMPATIBLE_IOCTL(CLEAR_ARRAY)
2534COMPATIBLE_IOCTL(ADD_NEW_DISK)
2535ULONG_IOCTL(HOT_REMOVE_DISK)
2536COMPATIBLE_IOCTL(SET_ARRAY_INFO)
2537COMPATIBLE_IOCTL(SET_DISK_INFO)
2538COMPATIBLE_IOCTL(WRITE_RAID_INFO)
2539COMPATIBLE_IOCTL(UNPROTECT_ARRAY)
2540COMPATIBLE_IOCTL(PROTECT_ARRAY)
2541ULONG_IOCTL(HOT_ADD_DISK)
2542ULONG_IOCTL(SET_DISK_FAULTY)
2543COMPATIBLE_IOCTL(RUN_ARRAY)
2544COMPATIBLE_IOCTL(STOP_ARRAY)
2545COMPATIBLE_IOCTL(STOP_ARRAY_RO)
2546COMPATIBLE_IOCTL(RESTART_ARRAY_RW)
2547COMPATIBLE_IOCTL(GET_BITMAP_FILE)
2548ULONG_IOCTL(SET_BITMAP_FILE)
2549/* DM */
2550COMPATIBLE_IOCTL(DM_VERSION_32)
2551COMPATIBLE_IOCTL(DM_REMOVE_ALL_32)
2552COMPATIBLE_IOCTL(DM_LIST_DEVICES_32)
2553COMPATIBLE_IOCTL(DM_DEV_CREATE_32)
2554COMPATIBLE_IOCTL(DM_DEV_REMOVE_32)
2555COMPATIBLE_IOCTL(DM_DEV_RENAME_32)
2556COMPATIBLE_IOCTL(DM_DEV_SUSPEND_32)
2557COMPATIBLE_IOCTL(DM_DEV_STATUS_32)
2558COMPATIBLE_IOCTL(DM_DEV_WAIT_32)
2559COMPATIBLE_IOCTL(DM_TABLE_LOAD_32)
2560COMPATIBLE_IOCTL(DM_TABLE_CLEAR_32)
2561COMPATIBLE_IOCTL(DM_TABLE_DEPS_32)
2562COMPATIBLE_IOCTL(DM_TABLE_STATUS_32)
2563COMPATIBLE_IOCTL(DM_LIST_VERSIONS_32)
2564COMPATIBLE_IOCTL(DM_TARGET_MSG_32)
2565COMPATIBLE_IOCTL(DM_DEV_SET_GEOMETRY_32)
2566COMPATIBLE_IOCTL(DM_VERSION)
2567COMPATIBLE_IOCTL(DM_REMOVE_ALL)
2568COMPATIBLE_IOCTL(DM_LIST_DEVICES)
2569COMPATIBLE_IOCTL(DM_DEV_CREATE)
2570COMPATIBLE_IOCTL(DM_DEV_REMOVE)
2571COMPATIBLE_IOCTL(DM_DEV_RENAME)
2572COMPATIBLE_IOCTL(DM_DEV_SUSPEND)
2573COMPATIBLE_IOCTL(DM_DEV_STATUS)
2574COMPATIBLE_IOCTL(DM_DEV_WAIT)
2575COMPATIBLE_IOCTL(DM_TABLE_LOAD)
2576COMPATIBLE_IOCTL(DM_TABLE_CLEAR)
2577COMPATIBLE_IOCTL(DM_TABLE_DEPS)
2578COMPATIBLE_IOCTL(DM_TABLE_STATUS)
2579COMPATIBLE_IOCTL(DM_LIST_VERSIONS)
2580COMPATIBLE_IOCTL(DM_TARGET_MSG)
2581COMPATIBLE_IOCTL(DM_DEV_SET_GEOMETRY)
2582/* Big K */
2583COMPATIBLE_IOCTL(PIO_FONT)
2584COMPATIBLE_IOCTL(GIO_FONT)
2585ULONG_IOCTL(KDSIGACCEPT)
2586COMPATIBLE_IOCTL(KDGETKEYCODE)
2587COMPATIBLE_IOCTL(KDSETKEYCODE)
2588ULONG_IOCTL(KIOCSOUND)
2589ULONG_IOCTL(KDMKTONE)
2590COMPATIBLE_IOCTL(KDGKBTYPE)
2591ULONG_IOCTL(KDSETMODE)
2592COMPATIBLE_IOCTL(KDGETMODE)
2593ULONG_IOCTL(KDSKBMODE)
2594COMPATIBLE_IOCTL(KDGKBMODE)
2595ULONG_IOCTL(KDSKBMETA)
2596COMPATIBLE_IOCTL(KDGKBMETA)
2597COMPATIBLE_IOCTL(KDGKBENT)
2598COMPATIBLE_IOCTL(KDSKBENT)
2599COMPATIBLE_IOCTL(KDGKBSENT)
2600COMPATIBLE_IOCTL(KDSKBSENT)
2601COMPATIBLE_IOCTL(KDGKBDIACR)
2602COMPATIBLE_IOCTL(KDSKBDIACR)
2603COMPATIBLE_IOCTL(KDKBDREP)
2604COMPATIBLE_IOCTL(KDGKBLED)
2605ULONG_IOCTL(KDSKBLED)
2606COMPATIBLE_IOCTL(KDGETLED)
2607ULONG_IOCTL(KDSETLED)
2608COMPATIBLE_IOCTL(GIO_SCRNMAP)
2609COMPATIBLE_IOCTL(PIO_SCRNMAP)
2610COMPATIBLE_IOCTL(GIO_UNISCRNMAP)
2611COMPATIBLE_IOCTL(PIO_UNISCRNMAP)
2612COMPATIBLE_IOCTL(PIO_FONTRESET)
2613COMPATIBLE_IOCTL(PIO_UNIMAPCLR)
2614/* Big S */
2615COMPATIBLE_IOCTL(SCSI_IOCTL_GET_IDLUN)
2616COMPATIBLE_IOCTL(SCSI_IOCTL_DOORLOCK)
2617COMPATIBLE_IOCTL(SCSI_IOCTL_DOORUNLOCK)
2618COMPATIBLE_IOCTL(SCSI_IOCTL_TEST_UNIT_READY)
2619COMPATIBLE_IOCTL(SCSI_IOCTL_GET_BUS_NUMBER)
2620COMPATIBLE_IOCTL(SCSI_IOCTL_SEND_COMMAND)
2621COMPATIBLE_IOCTL(SCSI_IOCTL_PROBE_HOST)
2622COMPATIBLE_IOCTL(SCSI_IOCTL_GET_PCI)
2623/* Big T */
2624COMPATIBLE_IOCTL(TUNSETNOCSUM)
2625COMPATIBLE_IOCTL(TUNSETDEBUG)
2626COMPATIBLE_IOCTL(TUNSETPERSIST)
2627COMPATIBLE_IOCTL(TUNSETOWNER)
2628/* Big V */
2629COMPATIBLE_IOCTL(VT_SETMODE)
2630COMPATIBLE_IOCTL(VT_GETMODE)
2631COMPATIBLE_IOCTL(VT_GETSTATE)
2632COMPATIBLE_IOCTL(VT_OPENQRY)
2633ULONG_IOCTL(VT_ACTIVATE)
2634ULONG_IOCTL(VT_WAITACTIVE)
2635ULONG_IOCTL(VT_RELDISP)
2636ULONG_IOCTL(VT_DISALLOCATE)
2637COMPATIBLE_IOCTL(VT_RESIZE)
2638COMPATIBLE_IOCTL(VT_RESIZEX)
2639COMPATIBLE_IOCTL(VT_LOCKSWITCH)
2640COMPATIBLE_IOCTL(VT_UNLOCKSWITCH)
2641COMPATIBLE_IOCTL(VT_GETHIFONTMASK)
2642/* Little p (/dev/rtc, /dev/envctrl, etc.) */
2643COMPATIBLE_IOCTL(RTC_AIE_ON)
2644COMPATIBLE_IOCTL(RTC_AIE_OFF)
2645COMPATIBLE_IOCTL(RTC_UIE_ON)
2646COMPATIBLE_IOCTL(RTC_UIE_OFF)
2647COMPATIBLE_IOCTL(RTC_PIE_ON)
2648COMPATIBLE_IOCTL(RTC_PIE_OFF)
2649COMPATIBLE_IOCTL(RTC_WIE_ON)
2650COMPATIBLE_IOCTL(RTC_WIE_OFF)
2651COMPATIBLE_IOCTL(RTC_ALM_SET)
2652COMPATIBLE_IOCTL(RTC_ALM_READ)
2653COMPATIBLE_IOCTL(RTC_RD_TIME)
2654COMPATIBLE_IOCTL(RTC_SET_TIME)
2655COMPATIBLE_IOCTL(RTC_WKALM_SET)
2656COMPATIBLE_IOCTL(RTC_WKALM_RD)
2657/*
2658 * These two are only for the sbus rtc driver, but
2659 * hwclock tries them on every rtc device first when
2660 * running on sparc. On other architectures the entries
2661 * are useless but harmless.
2662 */
2663COMPATIBLE_IOCTL(_IOR('p', 20, int[7])) /* RTCGET */
2664COMPATIBLE_IOCTL(_IOW('p', 21, int[7])) /* RTCSET */
2665/* Little m */
2666COMPATIBLE_IOCTL(MTIOCTOP)
2667/* Socket level stuff */
2668COMPATIBLE_IOCTL(FIOQSIZE)
2669COMPATIBLE_IOCTL(FIOSETOWN)
2670COMPATIBLE_IOCTL(SIOCSPGRP)
2671COMPATIBLE_IOCTL(FIOGETOWN)
2672COMPATIBLE_IOCTL(SIOCGPGRP)
2673COMPATIBLE_IOCTL(SIOCATMARK)
2674COMPATIBLE_IOCTL(SIOCSIFLINK)
2675COMPATIBLE_IOCTL(SIOCSIFENCAP)
2676COMPATIBLE_IOCTL(SIOCGIFENCAP)
2677COMPATIBLE_IOCTL(SIOCSIFNAME)
2678COMPATIBLE_IOCTL(SIOCSARP)
2679COMPATIBLE_IOCTL(SIOCGARP)
2680COMPATIBLE_IOCTL(SIOCDARP)
2681COMPATIBLE_IOCTL(SIOCSRARP)
2682COMPATIBLE_IOCTL(SIOCGRARP)
2683COMPATIBLE_IOCTL(SIOCDRARP)
2684COMPATIBLE_IOCTL(SIOCADDDLCI)
2685COMPATIBLE_IOCTL(SIOCDELDLCI)
2686COMPATIBLE_IOCTL(SIOCGMIIPHY)
2687COMPATIBLE_IOCTL(SIOCGMIIREG)
2688COMPATIBLE_IOCTL(SIOCSMIIREG)
2689COMPATIBLE_IOCTL(SIOCGIFVLAN)
2690COMPATIBLE_IOCTL(SIOCSIFVLAN)
2691COMPATIBLE_IOCTL(SIOCBRADDBR)
2692COMPATIBLE_IOCTL(SIOCBRDELBR)
2693/* SG stuff */
2694COMPATIBLE_IOCTL(SG_SET_TIMEOUT)
2695COMPATIBLE_IOCTL(SG_GET_TIMEOUT)
2696COMPATIBLE_IOCTL(SG_EMULATED_HOST)
2697ULONG_IOCTL(SG_SET_TRANSFORM)
2698COMPATIBLE_IOCTL(SG_GET_TRANSFORM)
2699COMPATIBLE_IOCTL(SG_SET_RESERVED_SIZE)
2700COMPATIBLE_IOCTL(SG_GET_RESERVED_SIZE)
2701COMPATIBLE_IOCTL(SG_GET_SCSI_ID)
2702COMPATIBLE_IOCTL(SG_SET_FORCE_LOW_DMA)
2703COMPATIBLE_IOCTL(SG_GET_LOW_DMA)
2704COMPATIBLE_IOCTL(SG_SET_FORCE_PACK_ID)
2705COMPATIBLE_IOCTL(SG_GET_PACK_ID)
2706COMPATIBLE_IOCTL(SG_GET_NUM_WAITING)
2707COMPATIBLE_IOCTL(SG_SET_DEBUG)
2708COMPATIBLE_IOCTL(SG_GET_SG_TABLESIZE)
2709COMPATIBLE_IOCTL(SG_GET_COMMAND_Q)
2710COMPATIBLE_IOCTL(SG_SET_COMMAND_Q)
2711COMPATIBLE_IOCTL(SG_GET_VERSION_NUM)
2712COMPATIBLE_IOCTL(SG_NEXT_CMD_LEN)
2713COMPATIBLE_IOCTL(SG_SCSI_RESET)
2714COMPATIBLE_IOCTL(SG_GET_REQUEST_TABLE)
2715COMPATIBLE_IOCTL(SG_SET_KEEP_ORPHAN)
2716COMPATIBLE_IOCTL(SG_GET_KEEP_ORPHAN)
2717/* PPP stuff */
2718COMPATIBLE_IOCTL(PPPIOCGFLAGS)
2719COMPATIBLE_IOCTL(PPPIOCSFLAGS)
2720COMPATIBLE_IOCTL(PPPIOCGASYNCMAP)
2721COMPATIBLE_IOCTL(PPPIOCSASYNCMAP)
2722COMPATIBLE_IOCTL(PPPIOCGUNIT)
2723COMPATIBLE_IOCTL(PPPIOCGRASYNCMAP)
2724COMPATIBLE_IOCTL(PPPIOCSRASYNCMAP)
2725COMPATIBLE_IOCTL(PPPIOCGMRU)
2726COMPATIBLE_IOCTL(PPPIOCSMRU)
2727COMPATIBLE_IOCTL(PPPIOCSMAXCID)
2728COMPATIBLE_IOCTL(PPPIOCGXASYNCMAP)
2729COMPATIBLE_IOCTL(PPPIOCSXASYNCMAP)
2730COMPATIBLE_IOCTL(PPPIOCXFERUNIT)
2731/* PPPIOCSCOMPRESS is translated */
2732COMPATIBLE_IOCTL(PPPIOCGNPMODE)
2733COMPATIBLE_IOCTL(PPPIOCSNPMODE)
2734COMPATIBLE_IOCTL(PPPIOCGDEBUG)
2735COMPATIBLE_IOCTL(PPPIOCSDEBUG)
2736/* PPPIOCSPASS is translated */
2737/* PPPIOCSACTIVE is translated */
2738/* PPPIOCGIDLE is translated */
2739COMPATIBLE_IOCTL(PPPIOCNEWUNIT)
2740COMPATIBLE_IOCTL(PPPIOCATTACH)
2741COMPATIBLE_IOCTL(PPPIOCDETACH)
2742COMPATIBLE_IOCTL(PPPIOCSMRRU)
2743COMPATIBLE_IOCTL(PPPIOCCONNECT)
2744COMPATIBLE_IOCTL(PPPIOCDISCONN)
2745COMPATIBLE_IOCTL(PPPIOCATTCHAN)
2746COMPATIBLE_IOCTL(PPPIOCGCHAN)
2747/* PPPOX */
2748COMPATIBLE_IOCTL(PPPOEIOCSFWD)
2749COMPATIBLE_IOCTL(PPPOEIOCDFWD)
2750/* LP */
2751COMPATIBLE_IOCTL(LPGETSTATUS)
2752/* ppdev */
2753COMPATIBLE_IOCTL(PPSETMODE)
2754COMPATIBLE_IOCTL(PPRSTATUS)
2755COMPATIBLE_IOCTL(PPRCONTROL)
2756COMPATIBLE_IOCTL(PPWCONTROL)
2757COMPATIBLE_IOCTL(PPFCONTROL)
2758COMPATIBLE_IOCTL(PPRDATA)
2759COMPATIBLE_IOCTL(PPWDATA)
2760COMPATIBLE_IOCTL(PPCLAIM)
2761COMPATIBLE_IOCTL(PPRELEASE)
2762COMPATIBLE_IOCTL(PPYIELD)
2763COMPATIBLE_IOCTL(PPEXCL)
2764COMPATIBLE_IOCTL(PPDATADIR)
2765COMPATIBLE_IOCTL(PPNEGOT)
2766COMPATIBLE_IOCTL(PPWCTLONIRQ)
2767COMPATIBLE_IOCTL(PPCLRIRQ)
2768COMPATIBLE_IOCTL(PPSETPHASE)
2769COMPATIBLE_IOCTL(PPGETMODES)
2770COMPATIBLE_IOCTL(PPGETMODE)
2771COMPATIBLE_IOCTL(PPGETPHASE)
2772COMPATIBLE_IOCTL(PPGETFLAGS)
2773COMPATIBLE_IOCTL(PPSETFLAGS)
2774/* CDROM stuff */
2775COMPATIBLE_IOCTL(CDROMPAUSE)
2776COMPATIBLE_IOCTL(CDROMRESUME)
2777COMPATIBLE_IOCTL(CDROMPLAYMSF)
2778COMPATIBLE_IOCTL(CDROMPLAYTRKIND)
2779COMPATIBLE_IOCTL(CDROMREADTOCHDR)
2780COMPATIBLE_IOCTL(CDROMREADTOCENTRY)
2781COMPATIBLE_IOCTL(CDROMSTOP)
2782COMPATIBLE_IOCTL(CDROMSTART)
2783COMPATIBLE_IOCTL(CDROMEJECT)
2784COMPATIBLE_IOCTL(CDROMVOLCTRL)
2785COMPATIBLE_IOCTL(CDROMSUBCHNL)
2786ULONG_IOCTL(CDROMEJECT_SW)
2787COMPATIBLE_IOCTL(CDROMMULTISESSION)
2788COMPATIBLE_IOCTL(CDROM_GET_MCN)
2789COMPATIBLE_IOCTL(CDROMRESET)
2790COMPATIBLE_IOCTL(CDROMVOLREAD)
2791COMPATIBLE_IOCTL(CDROMSEEK)
2792COMPATIBLE_IOCTL(CDROMPLAYBLK)
2793COMPATIBLE_IOCTL(CDROMCLOSETRAY)
2794ULONG_IOCTL(CDROM_SET_OPTIONS)
2795ULONG_IOCTL(CDROM_CLEAR_OPTIONS)
2796ULONG_IOCTL(CDROM_SELECT_SPEED)
2797ULONG_IOCTL(CDROM_SELECT_DISC)
2798ULONG_IOCTL(CDROM_MEDIA_CHANGED)
2799ULONG_IOCTL(CDROM_DRIVE_STATUS)
2800COMPATIBLE_IOCTL(CDROM_DISC_STATUS)
2801COMPATIBLE_IOCTL(CDROM_CHANGER_NSLOTS)
2802ULONG_IOCTL(CDROM_LOCKDOOR)
2803ULONG_IOCTL(CDROM_DEBUG)
2804COMPATIBLE_IOCTL(CDROM_GET_CAPABILITY)
2805/* Ignore cdrom.h about these next 5 ioctls, they absolutely do
2806 * not take a struct cdrom_read, instead they take a struct cdrom_msf
2807 * which is compatible.
2808 */
2809COMPATIBLE_IOCTL(CDROMREADMODE2)
2810COMPATIBLE_IOCTL(CDROMREADMODE1)
2811COMPATIBLE_IOCTL(CDROMREADRAW)
2812COMPATIBLE_IOCTL(CDROMREADCOOKED)
2813COMPATIBLE_IOCTL(CDROMREADALL)
2814/* DVD ioctls */
2815COMPATIBLE_IOCTL(DVD_READ_STRUCT)
2816COMPATIBLE_IOCTL(DVD_WRITE_STRUCT)
2817COMPATIBLE_IOCTL(DVD_AUTH)
2818/* pktcdvd */
2819COMPATIBLE_IOCTL(PACKET_CTRL_CMD)
2820/* Big A */
2821/* sparc only */
2822/* Big Q for sound/OSS */
2823COMPATIBLE_IOCTL(SNDCTL_SEQ_RESET)
2824COMPATIBLE_IOCTL(SNDCTL_SEQ_SYNC)
2825COMPATIBLE_IOCTL(SNDCTL_SYNTH_INFO)
2826COMPATIBLE_IOCTL(SNDCTL_SEQ_CTRLRATE)
2827COMPATIBLE_IOCTL(SNDCTL_SEQ_GETOUTCOUNT)
2828COMPATIBLE_IOCTL(SNDCTL_SEQ_GETINCOUNT)
2829COMPATIBLE_IOCTL(SNDCTL_SEQ_PERCMODE)
2830COMPATIBLE_IOCTL(SNDCTL_FM_LOAD_INSTR)
2831COMPATIBLE_IOCTL(SNDCTL_SEQ_TESTMIDI)
2832COMPATIBLE_IOCTL(SNDCTL_SEQ_RESETSAMPLES)
2833COMPATIBLE_IOCTL(SNDCTL_SEQ_NRSYNTHS)
2834COMPATIBLE_IOCTL(SNDCTL_SEQ_NRMIDIS)
2835COMPATIBLE_IOCTL(SNDCTL_MIDI_INFO)
2836COMPATIBLE_IOCTL(SNDCTL_SEQ_THRESHOLD)
2837COMPATIBLE_IOCTL(SNDCTL_SYNTH_MEMAVL)
2838COMPATIBLE_IOCTL(SNDCTL_FM_4OP_ENABLE)
2839COMPATIBLE_IOCTL(SNDCTL_SEQ_PANIC)
2840COMPATIBLE_IOCTL(SNDCTL_SEQ_OUTOFBAND)
2841COMPATIBLE_IOCTL(SNDCTL_SEQ_GETTIME)
2842COMPATIBLE_IOCTL(SNDCTL_SYNTH_ID)
2843COMPATIBLE_IOCTL(SNDCTL_SYNTH_CONTROL)
2844COMPATIBLE_IOCTL(SNDCTL_SYNTH_REMOVESAMPLE)
2845/* Big T for sound/OSS */
2846COMPATIBLE_IOCTL(SNDCTL_TMR_TIMEBASE)
2847COMPATIBLE_IOCTL(SNDCTL_TMR_START)
2848COMPATIBLE_IOCTL(SNDCTL_TMR_STOP)
2849COMPATIBLE_IOCTL(SNDCTL_TMR_CONTINUE)
2850COMPATIBLE_IOCTL(SNDCTL_TMR_TEMPO)
2851COMPATIBLE_IOCTL(SNDCTL_TMR_SOURCE)
2852COMPATIBLE_IOCTL(SNDCTL_TMR_METRONOME)
2853COMPATIBLE_IOCTL(SNDCTL_TMR_SELECT)
2854/* Little m for sound/OSS */
2855COMPATIBLE_IOCTL(SNDCTL_MIDI_PRETIME)
2856COMPATIBLE_IOCTL(SNDCTL_MIDI_MPUMODE)
2857COMPATIBLE_IOCTL(SNDCTL_MIDI_MPUCMD)
2858/* Big P for sound/OSS */
2859COMPATIBLE_IOCTL(SNDCTL_DSP_RESET)
2860COMPATIBLE_IOCTL(SNDCTL_DSP_SYNC)
2861COMPATIBLE_IOCTL(SNDCTL_DSP_SPEED)
2862COMPATIBLE_IOCTL(SNDCTL_DSP_STEREO)
2863COMPATIBLE_IOCTL(SNDCTL_DSP_GETBLKSIZE)
2864COMPATIBLE_IOCTL(SNDCTL_DSP_CHANNELS)
2865COMPATIBLE_IOCTL(SOUND_PCM_WRITE_FILTER)
2866COMPATIBLE_IOCTL(SNDCTL_DSP_POST)
2867COMPATIBLE_IOCTL(SNDCTL_DSP_SUBDIVIDE)
2868COMPATIBLE_IOCTL(SNDCTL_DSP_SETFRAGMENT)
2869COMPATIBLE_IOCTL(SNDCTL_DSP_GETFMTS)
2870COMPATIBLE_IOCTL(SNDCTL_DSP_SETFMT)
2871COMPATIBLE_IOCTL(SNDCTL_DSP_GETOSPACE)
2872COMPATIBLE_IOCTL(SNDCTL_DSP_GETISPACE)
2873COMPATIBLE_IOCTL(SNDCTL_DSP_NONBLOCK)
2874COMPATIBLE_IOCTL(SNDCTL_DSP_GETCAPS)
2875COMPATIBLE_IOCTL(SNDCTL_DSP_GETTRIGGER)
2876COMPATIBLE_IOCTL(SNDCTL_DSP_SETTRIGGER)
2877COMPATIBLE_IOCTL(SNDCTL_DSP_GETIPTR)
2878COMPATIBLE_IOCTL(SNDCTL_DSP_GETOPTR)
2879/* SNDCTL_DSP_MAPINBUF, XXX needs translation */
2880/* SNDCTL_DSP_MAPOUTBUF, XXX needs translation */
2881COMPATIBLE_IOCTL(SNDCTL_DSP_SETSYNCRO)
2882COMPATIBLE_IOCTL(SNDCTL_DSP_SETDUPLEX)
2883COMPATIBLE_IOCTL(SNDCTL_DSP_GETODELAY)
2884COMPATIBLE_IOCTL(SNDCTL_DSP_PROFILE)
2885COMPATIBLE_IOCTL(SOUND_PCM_READ_RATE)
2886COMPATIBLE_IOCTL(SOUND_PCM_READ_CHANNELS)
2887COMPATIBLE_IOCTL(SOUND_PCM_READ_BITS)
2888COMPATIBLE_IOCTL(SOUND_PCM_READ_FILTER)
2889/* Big C for sound/OSS */
2890COMPATIBLE_IOCTL(SNDCTL_COPR_RESET)
2891COMPATIBLE_IOCTL(SNDCTL_COPR_LOAD)
2892COMPATIBLE_IOCTL(SNDCTL_COPR_RDATA)
2893COMPATIBLE_IOCTL(SNDCTL_COPR_RCODE)
2894COMPATIBLE_IOCTL(SNDCTL_COPR_WDATA)
2895COMPATIBLE_IOCTL(SNDCTL_COPR_WCODE)
2896COMPATIBLE_IOCTL(SNDCTL_COPR_RUN)
2897COMPATIBLE_IOCTL(SNDCTL_COPR_HALT)
2898COMPATIBLE_IOCTL(SNDCTL_COPR_SENDMSG)
2899COMPATIBLE_IOCTL(SNDCTL_COPR_RCVMSG)
2900/* Big M for sound/OSS */
2901COMPATIBLE_IOCTL(SOUND_MIXER_READ_VOLUME)
2902COMPATIBLE_IOCTL(SOUND_MIXER_READ_BASS)
2903COMPATIBLE_IOCTL(SOUND_MIXER_READ_TREBLE)
2904COMPATIBLE_IOCTL(SOUND_MIXER_READ_SYNTH)
2905COMPATIBLE_IOCTL(SOUND_MIXER_READ_PCM)
2906COMPATIBLE_IOCTL(SOUND_MIXER_READ_SPEAKER)
2907COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE)
2908COMPATIBLE_IOCTL(SOUND_MIXER_READ_MIC)
2909COMPATIBLE_IOCTL(SOUND_MIXER_READ_CD)
2910COMPATIBLE_IOCTL(SOUND_MIXER_READ_IMIX)
2911COMPATIBLE_IOCTL(SOUND_MIXER_READ_ALTPCM)
2912COMPATIBLE_IOCTL(SOUND_MIXER_READ_RECLEV)
2913COMPATIBLE_IOCTL(SOUND_MIXER_READ_IGAIN)
2914COMPATIBLE_IOCTL(SOUND_MIXER_READ_OGAIN)
2915COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE1)
2916COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE2)
2917COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE3)
2918COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_DIGITAL1))
2919COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_DIGITAL2))
2920COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_DIGITAL3))
2921COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_PHONEIN))
2922COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_PHONEOUT))
2923COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_VIDEO))
2924COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_RADIO))
2925COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_MONITOR))
2926COMPATIBLE_IOCTL(SOUND_MIXER_READ_MUTE)
2927/* SOUND_MIXER_READ_ENHANCE, same value as READ_MUTE */
2928/* SOUND_MIXER_READ_LOUD, same value as READ_MUTE */
2929COMPATIBLE_IOCTL(SOUND_MIXER_READ_RECSRC)
2930COMPATIBLE_IOCTL(SOUND_MIXER_READ_DEVMASK)
2931COMPATIBLE_IOCTL(SOUND_MIXER_READ_RECMASK)
2932COMPATIBLE_IOCTL(SOUND_MIXER_READ_STEREODEVS)
2933COMPATIBLE_IOCTL(SOUND_MIXER_READ_CAPS)
2934COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_VOLUME)
2935COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_BASS)
2936COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_TREBLE)
2937COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_SYNTH)
2938COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_PCM)
2939COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_SPEAKER)
2940COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE)
2941COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_MIC)
2942COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_CD)
2943COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_IMIX)
2944COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_ALTPCM)
2945COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_RECLEV)
2946COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_IGAIN)
2947COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_OGAIN)
2948COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE1)
2949COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE2)
2950COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE3)
2951COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_DIGITAL1))
2952COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_DIGITAL2))
2953COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_DIGITAL3))
2954COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_PHONEIN))
2955COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_PHONEOUT))
2956COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_VIDEO))
2957COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_RADIO))
2958COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_MONITOR))
2959COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_MUTE)
2960/* SOUND_MIXER_WRITE_ENHANCE, same value as WRITE_MUTE */
2961/* SOUND_MIXER_WRITE_LOUD, same value as WRITE_MUTE */
2962COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_RECSRC)
2963COMPATIBLE_IOCTL(SOUND_MIXER_INFO)
2964COMPATIBLE_IOCTL(SOUND_OLD_MIXER_INFO)
2965COMPATIBLE_IOCTL(SOUND_MIXER_ACCESS)
2966COMPATIBLE_IOCTL(SOUND_MIXER_AGC)
2967COMPATIBLE_IOCTL(SOUND_MIXER_3DSE)
2968COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE1)
2969COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE2)
2970COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE3)
2971COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE4)
2972COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE5)
2973COMPATIBLE_IOCTL(SOUND_MIXER_GETLEVELS)
2974COMPATIBLE_IOCTL(SOUND_MIXER_SETLEVELS)
2975COMPATIBLE_IOCTL(OSS_GETVERSION)
2976/* AUTOFS */
2977ULONG_IOCTL(AUTOFS_IOC_READY)
2978ULONG_IOCTL(AUTOFS_IOC_FAIL)
2979COMPATIBLE_IOCTL(AUTOFS_IOC_CATATONIC)
2980COMPATIBLE_IOCTL(AUTOFS_IOC_PROTOVER)
2981COMPATIBLE_IOCTL(AUTOFS_IOC_EXPIRE)
2982COMPATIBLE_IOCTL(AUTOFS_IOC_EXPIRE_MULTI)
2983COMPATIBLE_IOCTL(AUTOFS_IOC_PROTOSUBVER)
2984COMPATIBLE_IOCTL(AUTOFS_IOC_ASKREGHOST)
2985COMPATIBLE_IOCTL(AUTOFS_IOC_TOGGLEREGHOST)
2986COMPATIBLE_IOCTL(AUTOFS_IOC_ASKUMOUNT)
2987/* Raw devices */
2988COMPATIBLE_IOCTL(RAW_SETBIND)
2989COMPATIBLE_IOCTL(RAW_GETBIND)
2990/* SMB ioctls which do not need any translations */
2991COMPATIBLE_IOCTL(SMB_IOC_NEWCONN)
2992/* Little a */
2993COMPATIBLE_IOCTL(ATMSIGD_CTRL)
2994COMPATIBLE_IOCTL(ATMARPD_CTRL)
2995COMPATIBLE_IOCTL(ATMLEC_CTRL)
2996COMPATIBLE_IOCTL(ATMLEC_MCAST)
2997COMPATIBLE_IOCTL(ATMLEC_DATA)
2998COMPATIBLE_IOCTL(ATM_SETSC)
2999COMPATIBLE_IOCTL(SIOCSIFATMTCP)
3000COMPATIBLE_IOCTL(SIOCMKCLIP)
3001COMPATIBLE_IOCTL(ATMARP_MKIP)
3002COMPATIBLE_IOCTL(ATMARP_SETENTRY)
3003COMPATIBLE_IOCTL(ATMARP_ENCAP)
3004COMPATIBLE_IOCTL(ATMTCP_CREATE)
3005COMPATIBLE_IOCTL(ATMTCP_REMOVE)
3006COMPATIBLE_IOCTL(ATMMPC_CTRL)
3007COMPATIBLE_IOCTL(ATMMPC_DATA)
3008/* Watchdog */
3009COMPATIBLE_IOCTL(WDIOC_GETSUPPORT)
3010COMPATIBLE_IOCTL(WDIOC_GETSTATUS)
3011COMPATIBLE_IOCTL(WDIOC_GETBOOTSTATUS)
3012COMPATIBLE_IOCTL(WDIOC_GETTEMP)
3013COMPATIBLE_IOCTL(WDIOC_SETOPTIONS)
3014COMPATIBLE_IOCTL(WDIOC_KEEPALIVE)
3015COMPATIBLE_IOCTL(WDIOC_SETTIMEOUT)
3016COMPATIBLE_IOCTL(WDIOC_GETTIMEOUT)
3017/* Big R */
3018COMPATIBLE_IOCTL(RNDGETENTCNT)
3019COMPATIBLE_IOCTL(RNDADDTOENTCNT)
3020COMPATIBLE_IOCTL(RNDGETPOOL)
3021COMPATIBLE_IOCTL(RNDADDENTROPY)
3022COMPATIBLE_IOCTL(RNDZAPENTCNT)
3023COMPATIBLE_IOCTL(RNDCLEARPOOL)
3024/* Bluetooth */
3025COMPATIBLE_IOCTL(HCIDEVUP)
3026COMPATIBLE_IOCTL(HCIDEVDOWN)
3027COMPATIBLE_IOCTL(HCIDEVRESET)
3028COMPATIBLE_IOCTL(HCIDEVRESTAT)
3029COMPATIBLE_IOCTL(HCIGETDEVLIST)
3030COMPATIBLE_IOCTL(HCIGETDEVINFO)
3031COMPATIBLE_IOCTL(HCIGETCONNLIST)
3032COMPATIBLE_IOCTL(HCIGETCONNINFO)
3033COMPATIBLE_IOCTL(HCISETRAW)
3034COMPATIBLE_IOCTL(HCISETSCAN)
3035COMPATIBLE_IOCTL(HCISETAUTH)
3036COMPATIBLE_IOCTL(HCISETENCRYPT)
3037COMPATIBLE_IOCTL(HCISETPTYPE)
3038COMPATIBLE_IOCTL(HCISETLINKPOL)
3039COMPATIBLE_IOCTL(HCISETLINKMODE)
3040COMPATIBLE_IOCTL(HCISETACLMTU)
3041COMPATIBLE_IOCTL(HCISETSCOMTU)
3042COMPATIBLE_IOCTL(HCIINQUIRY)
3043COMPATIBLE_IOCTL(HCIUARTSETPROTO)
3044COMPATIBLE_IOCTL(HCIUARTGETPROTO)
3045COMPATIBLE_IOCTL(RFCOMMCREATEDEV)
3046COMPATIBLE_IOCTL(RFCOMMRELEASEDEV)
3047COMPATIBLE_IOCTL(RFCOMMGETDEVLIST)
3048COMPATIBLE_IOCTL(RFCOMMGETDEVINFO)
3049COMPATIBLE_IOCTL(RFCOMMSTEALDLC)
3050COMPATIBLE_IOCTL(BNEPCONNADD)
3051COMPATIBLE_IOCTL(BNEPCONNDEL)
3052COMPATIBLE_IOCTL(BNEPGETCONNLIST)
3053COMPATIBLE_IOCTL(BNEPGETCONNINFO)
3054COMPATIBLE_IOCTL(CMTPCONNADD)
3055COMPATIBLE_IOCTL(CMTPCONNDEL)
3056COMPATIBLE_IOCTL(CMTPGETCONNLIST)
3057COMPATIBLE_IOCTL(CMTPGETCONNINFO)
3058COMPATIBLE_IOCTL(HIDPCONNADD)
3059COMPATIBLE_IOCTL(HIDPCONNDEL)
3060COMPATIBLE_IOCTL(HIDPGETCONNLIST)
3061COMPATIBLE_IOCTL(HIDPGETCONNINFO)
3062/* CAPI */
3063COMPATIBLE_IOCTL(CAPI_REGISTER)
3064COMPATIBLE_IOCTL(CAPI_GET_MANUFACTURER)
3065COMPATIBLE_IOCTL(CAPI_GET_VERSION)
3066COMPATIBLE_IOCTL(CAPI_GET_SERIAL)
3067COMPATIBLE_IOCTL(CAPI_GET_PROFILE)
3068COMPATIBLE_IOCTL(CAPI_MANUFACTURER_CMD)
3069COMPATIBLE_IOCTL(CAPI_GET_ERRCODE)
3070COMPATIBLE_IOCTL(CAPI_INSTALLED)
3071COMPATIBLE_IOCTL(CAPI_GET_FLAGS)
3072COMPATIBLE_IOCTL(CAPI_SET_FLAGS)
3073COMPATIBLE_IOCTL(CAPI_CLR_FLAGS)
3074COMPATIBLE_IOCTL(CAPI_NCCI_OPENCOUNT)
3075COMPATIBLE_IOCTL(CAPI_NCCI_GETUNIT)
3076/* Siemens Gigaset */
3077COMPATIBLE_IOCTL(GIGASET_REDIR)
3078COMPATIBLE_IOCTL(GIGASET_CONFIG)
3079COMPATIBLE_IOCTL(GIGASET_BRKCHARS)
3080COMPATIBLE_IOCTL(GIGASET_VERSION)
3081/* Misc. */
3082COMPATIBLE_IOCTL(0x41545900) /* ATYIO_CLKR */
3083COMPATIBLE_IOCTL(0x41545901) /* ATYIO_CLKW */
3084COMPATIBLE_IOCTL(PCIIOC_CONTROLLER)
3085COMPATIBLE_IOCTL(PCIIOC_MMAP_IS_IO)
3086COMPATIBLE_IOCTL(PCIIOC_MMAP_IS_MEM)
3087COMPATIBLE_IOCTL(PCIIOC_WRITE_COMBINE)
3088/* USB */
3089COMPATIBLE_IOCTL(USBDEVFS_RESETEP)
3090COMPATIBLE_IOCTL(USBDEVFS_SETINTERFACE)
3091COMPATIBLE_IOCTL(USBDEVFS_SETCONFIGURATION)
3092COMPATIBLE_IOCTL(USBDEVFS_GETDRIVER)
3093COMPATIBLE_IOCTL(USBDEVFS_DISCARDURB)
3094COMPATIBLE_IOCTL(USBDEVFS_CLAIMINTERFACE)
3095COMPATIBLE_IOCTL(USBDEVFS_RELEASEINTERFACE)
3096COMPATIBLE_IOCTL(USBDEVFS_CONNECTINFO)
3097COMPATIBLE_IOCTL(USBDEVFS_HUB_PORTINFO)
3098COMPATIBLE_IOCTL(USBDEVFS_RESET)
3099COMPATIBLE_IOCTL(USBDEVFS_SUBMITURB32)
3100COMPATIBLE_IOCTL(USBDEVFS_REAPURB32)
3101COMPATIBLE_IOCTL(USBDEVFS_REAPURBNDELAY32)
3102COMPATIBLE_IOCTL(USBDEVFS_CLEAR_HALT)
3103/* MTD */
3104COMPATIBLE_IOCTL(MEMGETINFO)
3105COMPATIBLE_IOCTL(MEMERASE)
3106COMPATIBLE_IOCTL(MEMLOCK)
3107COMPATIBLE_IOCTL(MEMUNLOCK)
3108COMPATIBLE_IOCTL(MEMGETREGIONCOUNT)
3109COMPATIBLE_IOCTL(MEMGETREGIONINFO)
3110COMPATIBLE_IOCTL(MEMGETBADBLOCK)
3111COMPATIBLE_IOCTL(MEMSETBADBLOCK)
3112/* NBD */
3113ULONG_IOCTL(NBD_SET_SOCK)
3114ULONG_IOCTL(NBD_SET_BLKSIZE)
3115ULONG_IOCTL(NBD_SET_SIZE)
3116COMPATIBLE_IOCTL(NBD_DO_IT)
3117COMPATIBLE_IOCTL(NBD_CLEAR_SOCK)
3118COMPATIBLE_IOCTL(NBD_CLEAR_QUE)
3119COMPATIBLE_IOCTL(NBD_PRINT_DEBUG)
3120ULONG_IOCTL(NBD_SET_SIZE_BLOCKS)
3121COMPATIBLE_IOCTL(NBD_DISCONNECT)
3122/* i2c */
3123COMPATIBLE_IOCTL(I2C_SLAVE)
3124COMPATIBLE_IOCTL(I2C_SLAVE_FORCE)
3125COMPATIBLE_IOCTL(I2C_TENBIT)
3126COMPATIBLE_IOCTL(I2C_PEC)
3127COMPATIBLE_IOCTL(I2C_RETRIES)
3128COMPATIBLE_IOCTL(I2C_TIMEOUT)
3129/* wireless */
3130COMPATIBLE_IOCTL(SIOCSIWCOMMIT)
3131COMPATIBLE_IOCTL(SIOCGIWNAME)
3132COMPATIBLE_IOCTL(SIOCSIWNWID)
3133COMPATIBLE_IOCTL(SIOCGIWNWID)
3134COMPATIBLE_IOCTL(SIOCSIWFREQ)
3135COMPATIBLE_IOCTL(SIOCGIWFREQ)
3136COMPATIBLE_IOCTL(SIOCSIWMODE)
3137COMPATIBLE_IOCTL(SIOCGIWMODE)
3138COMPATIBLE_IOCTL(SIOCSIWSENS)
3139COMPATIBLE_IOCTL(SIOCGIWSENS)
3140COMPATIBLE_IOCTL(SIOCSIWRANGE)
3141COMPATIBLE_IOCTL(SIOCSIWPRIV)
3142COMPATIBLE_IOCTL(SIOCGIWPRIV)
3143COMPATIBLE_IOCTL(SIOCSIWSTATS)
3144COMPATIBLE_IOCTL(SIOCGIWSTATS)
3145COMPATIBLE_IOCTL(SIOCSIWAP)
3146COMPATIBLE_IOCTL(SIOCGIWAP)
3147COMPATIBLE_IOCTL(SIOCSIWSCAN)
3148COMPATIBLE_IOCTL(SIOCSIWRATE)
3149COMPATIBLE_IOCTL(SIOCGIWRATE)
3150COMPATIBLE_IOCTL(SIOCSIWRTS)
3151COMPATIBLE_IOCTL(SIOCGIWRTS)
3152COMPATIBLE_IOCTL(SIOCSIWFRAG)
3153COMPATIBLE_IOCTL(SIOCGIWFRAG)
3154COMPATIBLE_IOCTL(SIOCSIWTXPOW)
3155COMPATIBLE_IOCTL(SIOCGIWTXPOW)
3156COMPATIBLE_IOCTL(SIOCSIWRETRY)
3157COMPATIBLE_IOCTL(SIOCGIWRETRY)
3158COMPATIBLE_IOCTL(SIOCSIWPOWER)
3159COMPATIBLE_IOCTL(SIOCGIWPOWER)
3160/* hiddev */
3161COMPATIBLE_IOCTL(HIDIOCGVERSION)
3162COMPATIBLE_IOCTL(HIDIOCAPPLICATION)
3163COMPATIBLE_IOCTL(HIDIOCGDEVINFO)
3164COMPATIBLE_IOCTL(HIDIOCGSTRING)
3165COMPATIBLE_IOCTL(HIDIOCINITREPORT)
3166COMPATIBLE_IOCTL(HIDIOCGREPORT)
3167COMPATIBLE_IOCTL(HIDIOCSREPORT)
3168COMPATIBLE_IOCTL(HIDIOCGREPORTINFO)
3169COMPATIBLE_IOCTL(HIDIOCGFIELDINFO)
3170COMPATIBLE_IOCTL(HIDIOCGUSAGE)
3171COMPATIBLE_IOCTL(HIDIOCSUSAGE)
3172COMPATIBLE_IOCTL(HIDIOCGUCODE)
3173COMPATIBLE_IOCTL(HIDIOCGFLAG)
3174COMPATIBLE_IOCTL(HIDIOCSFLAG)
3175COMPATIBLE_IOCTL(HIDIOCGCOLLECTIONINDEX)
3176COMPATIBLE_IOCTL(HIDIOCGCOLLECTIONINFO)
3177/* dvb */
3178COMPATIBLE_IOCTL(AUDIO_STOP)
3179COMPATIBLE_IOCTL(AUDIO_PLAY)
3180COMPATIBLE_IOCTL(AUDIO_PAUSE)
3181COMPATIBLE_IOCTL(AUDIO_CONTINUE)
3182COMPATIBLE_IOCTL(AUDIO_SELECT_SOURCE)
3183COMPATIBLE_IOCTL(AUDIO_SET_MUTE)
3184COMPATIBLE_IOCTL(AUDIO_SET_AV_SYNC)
3185COMPATIBLE_IOCTL(AUDIO_SET_BYPASS_MODE)
3186COMPATIBLE_IOCTL(AUDIO_CHANNEL_SELECT)
3187COMPATIBLE_IOCTL(AUDIO_GET_STATUS)
3188COMPATIBLE_IOCTL(AUDIO_GET_CAPABILITIES)
3189COMPATIBLE_IOCTL(AUDIO_CLEAR_BUFFER)
3190COMPATIBLE_IOCTL(AUDIO_SET_ID)
3191COMPATIBLE_IOCTL(AUDIO_SET_MIXER)
3192COMPATIBLE_IOCTL(AUDIO_SET_STREAMTYPE)
3193COMPATIBLE_IOCTL(AUDIO_SET_EXT_ID)
3194COMPATIBLE_IOCTL(AUDIO_SET_ATTRIBUTES)
3195COMPATIBLE_IOCTL(AUDIO_SET_KARAOKE)
3196COMPATIBLE_IOCTL(DMX_START)
3197COMPATIBLE_IOCTL(DMX_STOP)
3198COMPATIBLE_IOCTL(DMX_SET_FILTER)
3199COMPATIBLE_IOCTL(DMX_SET_PES_FILTER)
3200COMPATIBLE_IOCTL(DMX_SET_BUFFER_SIZE)
3201COMPATIBLE_IOCTL(DMX_GET_PES_PIDS)
3202COMPATIBLE_IOCTL(DMX_GET_CAPS)
3203COMPATIBLE_IOCTL(DMX_SET_SOURCE)
3204COMPATIBLE_IOCTL(DMX_GET_STC)
3205COMPATIBLE_IOCTL(FE_GET_INFO)
3206COMPATIBLE_IOCTL(FE_DISEQC_RESET_OVERLOAD)
3207COMPATIBLE_IOCTL(FE_DISEQC_SEND_MASTER_CMD)
3208COMPATIBLE_IOCTL(FE_DISEQC_RECV_SLAVE_REPLY)
3209COMPATIBLE_IOCTL(FE_DISEQC_SEND_BURST)
3210COMPATIBLE_IOCTL(FE_SET_TONE)
3211COMPATIBLE_IOCTL(FE_SET_VOLTAGE)
3212COMPATIBLE_IOCTL(FE_ENABLE_HIGH_LNB_VOLTAGE)
3213COMPATIBLE_IOCTL(FE_READ_STATUS)
3214COMPATIBLE_IOCTL(FE_READ_BER)
3215COMPATIBLE_IOCTL(FE_READ_SIGNAL_STRENGTH)
3216COMPATIBLE_IOCTL(FE_READ_SNR)
3217COMPATIBLE_IOCTL(FE_READ_UNCORRECTED_BLOCKS)
3218COMPATIBLE_IOCTL(FE_SET_FRONTEND)
3219COMPATIBLE_IOCTL(FE_GET_FRONTEND)
3220COMPATIBLE_IOCTL(FE_GET_EVENT)
3221COMPATIBLE_IOCTL(FE_DISHNETWORK_SEND_LEGACY_CMD)
3222COMPATIBLE_IOCTL(VIDEO_STOP)
3223COMPATIBLE_IOCTL(VIDEO_PLAY)
3224COMPATIBLE_IOCTL(VIDEO_FREEZE)
3225COMPATIBLE_IOCTL(VIDEO_CONTINUE)
3226COMPATIBLE_IOCTL(VIDEO_SELECT_SOURCE)
3227COMPATIBLE_IOCTL(VIDEO_SET_BLANK)
3228COMPATIBLE_IOCTL(VIDEO_GET_STATUS)
3229COMPATIBLE_IOCTL(VIDEO_SET_DISPLAY_FORMAT)
3230COMPATIBLE_IOCTL(VIDEO_FAST_FORWARD)
3231COMPATIBLE_IOCTL(VIDEO_SLOWMOTION)
3232COMPATIBLE_IOCTL(VIDEO_GET_CAPABILITIES)
3233COMPATIBLE_IOCTL(VIDEO_CLEAR_BUFFER)
3234COMPATIBLE_IOCTL(VIDEO_SET_ID)
3235COMPATIBLE_IOCTL(VIDEO_SET_STREAMTYPE)
3236COMPATIBLE_IOCTL(VIDEO_SET_FORMAT)
3237COMPATIBLE_IOCTL(VIDEO_SET_SYSTEM)
3238COMPATIBLE_IOCTL(VIDEO_SET_HIGHLIGHT)
3239COMPATIBLE_IOCTL(VIDEO_SET_SPU)
3240COMPATIBLE_IOCTL(VIDEO_GET_NAVI)
3241COMPATIBLE_IOCTL(VIDEO_SET_ATTRIBUTES)
3242COMPATIBLE_IOCTL(VIDEO_GET_SIZE)
3243COMPATIBLE_IOCTL(VIDEO_GET_FRAME_RATE)
3244
3245/* now things that need handlers */
2402HANDLE_IOCTL(MEMREADOOB32, mtd_rw_oob) 3246HANDLE_IOCTL(MEMREADOOB32, mtd_rw_oob)
2403HANDLE_IOCTL(MEMWRITEOOB32, mtd_rw_oob) 3247HANDLE_IOCTL(MEMWRITEOOB32, mtd_rw_oob)
2404#ifdef CONFIG_NET 3248#ifdef CONFIG_NET
@@ -2594,6 +3438,8 @@ HANDLE_IOCTL(SIOCGIWENCODEEXT, do_wireless_ioctl)
2594HANDLE_IOCTL(SIOCSIWPMKSA, do_wireless_ioctl) 3438HANDLE_IOCTL(SIOCSIWPMKSA, do_wireless_ioctl)
2595HANDLE_IOCTL(SIOCSIFBR, old_bridge_ioctl) 3439HANDLE_IOCTL(SIOCSIFBR, old_bridge_ioctl)
2596HANDLE_IOCTL(SIOCGIFBR, old_bridge_ioctl) 3440HANDLE_IOCTL(SIOCGIFBR, old_bridge_ioctl)
3441/* Not implemented in the native kernel */
3442IGNORE_IOCTL(SIOCGIFCOUNT)
2597HANDLE_IOCTL(RTC_IRQP_READ32, rtc_ioctl) 3443HANDLE_IOCTL(RTC_IRQP_READ32, rtc_ioctl)
2598HANDLE_IOCTL(RTC_IRQP_SET32, rtc_ioctl) 3444HANDLE_IOCTL(RTC_IRQP_SET32, rtc_ioctl)
2599HANDLE_IOCTL(RTC_EPOCH_READ32, rtc_ioctl) 3445HANDLE_IOCTL(RTC_EPOCH_READ32, rtc_ioctl)
@@ -2617,6 +3463,167 @@ COMPATIBLE_IOCTL(LPRESET)
2617/*LPGETSTATS not implemented, but no kernels seem to compile it in anyways*/ 3463/*LPGETSTATS not implemented, but no kernels seem to compile it in anyways*/
2618COMPATIBLE_IOCTL(LPGETFLAGS) 3464COMPATIBLE_IOCTL(LPGETFLAGS)
2619HANDLE_IOCTL(LPSETTIMEOUT, lp_timeout_trans) 3465HANDLE_IOCTL(LPSETTIMEOUT, lp_timeout_trans)
3466
3467/* fat 'r' ioctls. These are handled by fat with ->compat_ioctl,
3468 but we don't want warnings on other file systems. So declare
3469 them as compatible here. */
3470#define VFAT_IOCTL_READDIR_BOTH32 _IOR('r', 1, struct compat_dirent[2])
3471#define VFAT_IOCTL_READDIR_SHORT32 _IOR('r', 2, struct compat_dirent[2])
3472
3473IGNORE_IOCTL(VFAT_IOCTL_READDIR_BOTH32)
3474IGNORE_IOCTL(VFAT_IOCTL_READDIR_SHORT32)
2620}; 3475};
2621 3476
2622int ioctl_table_size = ARRAY_SIZE(ioctl_start); 3477#define IOCTL_HASHSIZE 256
3478static struct ioctl_trans *ioctl32_hash_table[IOCTL_HASHSIZE];
3479
3480static inline unsigned long ioctl32_hash(unsigned long cmd)
3481{
3482 return (((cmd >> 6) ^ (cmd >> 4) ^ cmd)) % IOCTL_HASHSIZE;
3483}
3484
3485static void compat_ioctl_error(struct file *filp, unsigned int fd,
3486 unsigned int cmd, unsigned long arg)
3487{
3488 char buf[10];
3489 char *fn = "?";
3490 char *path;
3491
3492 /* find the name of the device. */
3493 path = (char *)__get_free_page(GFP_KERNEL);
3494 if (path) {
3495 fn = d_path(filp->f_path.dentry, filp->f_path.mnt, path, PAGE_SIZE);
3496 if (IS_ERR(fn))
3497 fn = "?";
3498 }
3499
3500 sprintf(buf,"'%c'", (cmd>>_IOC_TYPESHIFT) & _IOC_TYPEMASK);
3501 if (!isprint(buf[1]))
3502 sprintf(buf, "%02x", buf[1]);
3503 compat_printk("ioctl32(%s:%d): Unknown cmd fd(%d) "
3504 "cmd(%08x){t:%s;sz:%u} arg(%08x) on %s\n",
3505 current->comm, current->pid,
3506 (int)fd, (unsigned int)cmd, buf,
3507 (cmd >> _IOC_SIZESHIFT) & _IOC_SIZEMASK,
3508 (unsigned int)arg, fn);
3509
3510 if (path)
3511 free_page((unsigned long)path);
3512}
3513
3514asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,
3515 unsigned long arg)
3516{
3517 struct file *filp;
3518 int error = -EBADF;
3519 struct ioctl_trans *t;
3520 int fput_needed;
3521
3522 filp = fget_light(fd, &fput_needed);
3523 if (!filp)
3524 goto out;
3525
3526 /* RED-PEN how should LSM module know it's handling 32bit? */
3527 error = security_file_ioctl(filp, cmd, arg);
3528 if (error)
3529 goto out_fput;
3530
3531 /*
3532 * To allow the compat_ioctl handlers to be self contained
3533 * we need to check the common ioctls here first.
3534 * Just handle them with the standard handlers below.
3535 */
3536 switch (cmd) {
3537 case FIOCLEX:
3538 case FIONCLEX:
3539 case FIONBIO:
3540 case FIOASYNC:
3541 case FIOQSIZE:
3542 break;
3543
3544 case FIBMAP:
3545 case FIGETBSZ:
3546 case FIONREAD:
3547 if (S_ISREG(filp->f_path.dentry->d_inode->i_mode))
3548 break;
3549 /*FALL THROUGH*/
3550
3551 default:
3552 if (filp->f_op && filp->f_op->compat_ioctl) {
3553 error = filp->f_op->compat_ioctl(filp, cmd, arg);
3554 if (error != -ENOIOCTLCMD)
3555 goto out_fput;
3556 }
3557
3558 if (!filp->f_op ||
3559 (!filp->f_op->ioctl && !filp->f_op->unlocked_ioctl))
3560 goto do_ioctl;
3561 break;
3562 }
3563
3564 for (t = ioctl32_hash_table[ioctl32_hash(cmd)]; t; t = t->next) {
3565 if (t->cmd == cmd)
3566 goto found_handler;
3567 }
3568
3569 if (S_ISSOCK(filp->f_path.dentry->d_inode->i_mode) &&
3570 cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) {
3571 error = siocdevprivate_ioctl(fd, cmd, arg);
3572 } else {
3573 static int count;
3574
3575 if (++count <= 50)
3576 compat_ioctl_error(filp, fd, cmd, arg);
3577 error = -EINVAL;
3578 }
3579
3580 goto out_fput;
3581
3582 found_handler:
3583 if (t->handler) {
3584 lock_kernel();
3585 error = t->handler(fd, cmd, arg, filp);
3586 unlock_kernel();
3587 goto out_fput;
3588 }
3589
3590 do_ioctl:
3591 error = vfs_ioctl(filp, fd, cmd, arg);
3592 out_fput:
3593 fput_light(filp, fput_needed);
3594 out:
3595 return error;
3596}
3597
3598static void ioctl32_insert_translation(struct ioctl_trans *trans)
3599{
3600 unsigned long hash;
3601 struct ioctl_trans *t;
3602
3603 hash = ioctl32_hash (trans->cmd);
3604 if (!ioctl32_hash_table[hash])
3605 ioctl32_hash_table[hash] = trans;
3606 else {
3607 t = ioctl32_hash_table[hash];
3608 while (t->next)
3609 t = t->next;
3610 trans->next = NULL;
3611 t->next = trans;
3612 }
3613}
3614
3615static int __init init_sys32_ioctl(void)
3616{
3617 int i;
3618
3619 for (i = 0; i < ARRAY_SIZE(ioctl_start); i++) {
3620 if (ioctl_start[i].next != 0) {
3621 printk("ioctl translation %d bad\n",i);
3622 return -1;
3623 }
3624
3625 ioctl32_insert_translation(&ioctl_start[i]);
3626 }
3627 return 0;
3628}
3629__initcall(init_sys32_ioctl);