diff options
-rw-r--r-- | linux-user/ioctls.h | 10 | ||||
-rw-r--r-- | linux-user/syscall.c | 1 | ||||
-rw-r--r-- | linux-user/syscall_defs.h | 8 | ||||
-rw-r--r-- | linux-user/syscall_types.h | 29 |
4 files changed, 48 insertions, 0 deletions
diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h index dae3efaa97..c1ca2d528d 100644 --- a/linux-user/ioctls.h +++ b/linux-user/ioctls.h @@ -300,3 +300,13 @@ IOCTL(VFAT_IOCTL_READDIR_BOTH, IOC_R, MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_dirent), 2))) IOCTL(VFAT_IOCTL_READDIR_SHORT, IOC_R, MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_dirent), 2))) + + IOCTL(LOOP_SET_FD, 0, TYPE_INT) + IOCTL(LOOP_CLR_FD, 0, TYPE_INT) + IOCTL(LOOP_SET_STATUS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info))) + IOCTL(LOOP_GET_STATUS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info))) +#if 0 /* These have some problems - not fully tested */ + IOCTL(LOOP_SET_STATUS64, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info64))) + IOCTL(LOOP_GET_STATUS64, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info64))) +#endif + IOCTL(LOOP_CHANGE_FD, 0, TYPE_INT) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 3946d61b67..a62bd9bd6b 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -68,6 +68,7 @@ #include <linux/soundcard.h> #include <linux/dirent.h> #include <linux/kd.h> +#include <linux/loop.h> #include "qemu.h" diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h index 73e54dede2..d2810f27cb 100644 --- a/linux-user/syscall_defs.h +++ b/linux-user/syscall_defs.h @@ -830,6 +830,14 @@ struct target_pollfd { #define TARGET_HDIO_SET_DMA 0x0326 /* change use-dma flag */ #define TARGET_HDIO_SET_PIO_MODE 0x0327 /* reconfig interface to new speed */ +/* loop ioctls */ +#define TARGET_LOOP_SET_FD 0x4C00 +#define TARGET_LOOP_CLR_FD 0x4C01 +#define TARGET_LOOP_SET_STATUS 0x4C02 +#define TARGET_LOOP_GET_STATUS 0x4C03 +#define TARGET_LOOP_SET_STATUS64 0x4C04 +#define TARGET_LOOP_GET_STATUS64 0x4C05 +#define TARGET_LOOP_CHANGE_FD 0x4C06 /* from asm/termbits.h */ diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h index f73aabc1d8..bb4fb4e3d3 100644 --- a/linux-user/syscall_types.h +++ b/linux-user/syscall_types.h @@ -79,3 +79,32 @@ STRUCT(count_info, STRUCT(mixer_info, MK_ARRAY(TYPE_CHAR, 16), MK_ARRAY(TYPE_CHAR, 32), TYPE_INT, MK_ARRAY(TYPE_INT, 10)) + +/* loop device ioctls */ +STRUCT(loop_info, + TYPE_INT, /* lo_number */ + TYPE_SHORT, /* lo_device */ + TYPE_ULONG, /* lo_inode */ + TYPE_SHORT, /* lo_rdevice */ + TYPE_INT, /* lo_offset */ + TYPE_INT, /* lo_encrypt_type */ + TYPE_INT, /* lo_encrypt_key_size */ + TYPE_INT, /* lo_flags */ + MK_ARRAY(TYPE_CHAR, 64), /* lo_name */ + MK_ARRAY(TYPE_CHAR, 32), /* lo_encrypt_key */ + MK_ARRAY(TYPE_ULONG, 2), /* lo_init */ + MK_ARRAY(TYPE_CHAR, 4)) /* reserved */ + +STRUCT(loop_info64, + TYPE_ULONGLONG, /* lo_device */ + TYPE_ULONGLONG, /* lo_inode */ + TYPE_ULONGLONG, /* lo_rdevice */ + TYPE_ULONGLONG, /* lo_offset */ + TYPE_ULONG, /* lo_number */ + TYPE_ULONG, /* lo_encrypt_type */ + TYPE_ULONG, /* lo_encrypt_key_size */ + TYPE_ULONG, /* lo_flags */ + MK_ARRAY(TYPE_CHAR, 64), /* lo_name */ + MK_ARRAY(TYPE_CHAR, 64), /* lo_crypt_name */ + MK_ARRAY(TYPE_CHAR, 32), /* lo_encrypt_key */ + MK_ARRAY(TYPE_ULONGLONG, 2)) /* lo_init */ |