48 строки
1.2 KiB
C
48 строки
1.2 KiB
C
/*
|
|
* IA32 Architecture-specific ioctl shim code
|
|
*
|
|
* Copyright (C) 2000 VA Linux Co
|
|
* Copyright (C) 2000 Don Dugger <n0ano@valinux.com>
|
|
* Copyright (C) 2001-2003 Hewlett-Packard Co
|
|
* David Mosberger-Tang <davidm@hpl.hp.com>
|
|
*/
|
|
|
|
#include <linux/signal.h> /* argh, msdos_fs.h isn't self-contained... */
|
|
#include <linux/syscalls.h>
|
|
#include "ia32priv.h"
|
|
|
|
#define INCLUDES
|
|
#include "compat_ioctl.c"
|
|
|
|
#define IOCTL_NR(a) ((a) & ~(_IOC_SIZEMASK << _IOC_SIZESHIFT))
|
|
|
|
#define DO_IOCTL(fd, cmd, arg) ({ \
|
|
int _ret; \
|
|
mm_segment_t _old_fs = get_fs(); \
|
|
\
|
|
set_fs(KERNEL_DS); \
|
|
_ret = sys_ioctl(fd, cmd, (unsigned long)arg); \
|
|
set_fs(_old_fs); \
|
|
_ret; \
|
|
})
|
|
|
|
#define CODE
|
|
#include "compat_ioctl.c"
|
|
|
|
typedef int (* ioctl32_handler_t)(unsigned int, unsigned int, unsigned long, struct file *);
|
|
|
|
#define COMPATIBLE_IOCTL(cmd) HANDLE_IOCTL((cmd),sys_ioctl)
|
|
#define HANDLE_IOCTL(cmd,handler) { (cmd), (ioctl32_handler_t)(handler), NULL },
|
|
#define IOCTL_TABLE_START \
|
|
struct ioctl_trans ioctl_start[] = {
|
|
#define IOCTL_TABLE_END \
|
|
};
|
|
|
|
IOCTL_TABLE_START
|
|
#define DECLARES
|
|
#include "compat_ioctl.c"
|
|
#include <linux/compat_ioctl.h>
|
|
IOCTL_TABLE_END
|
|
|
|
int ioctl_table_size = ARRAY_SIZE(ioctl_start);
|