Commit b80059146a170ea5111a55f3757b8de4cf0c729b

Authored by balrog
1 parent c38b6e25

Add loop device ioctls (Gary Thomas).


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4257 c046a42c-6fe2-441c-8c8c-71466251a162
linux-user/ioctls.h
... ... @@ -300,3 +300,13 @@
300 300  
301 301 IOCTL(VFAT_IOCTL_READDIR_BOTH, IOC_R, MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_dirent), 2)))
302 302 IOCTL(VFAT_IOCTL_READDIR_SHORT, IOC_R, MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_dirent), 2)))
  303 +
  304 + IOCTL(LOOP_SET_FD, 0, TYPE_INT)
  305 + IOCTL(LOOP_CLR_FD, 0, TYPE_INT)
  306 + IOCTL(LOOP_SET_STATUS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info)))
  307 + IOCTL(LOOP_GET_STATUS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info)))
  308 +#if 0 /* These have some problems - not fully tested */
  309 + IOCTL(LOOP_SET_STATUS64, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info64)))
  310 + IOCTL(LOOP_GET_STATUS64, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info64)))
  311 +#endif
  312 + IOCTL(LOOP_CHANGE_FD, 0, TYPE_INT)
... ...
linux-user/syscall.c
... ... @@ -68,6 +68,7 @@
68 68 #include <linux/soundcard.h>
69 69 #include <linux/dirent.h>
70 70 #include <linux/kd.h>
  71 +#include <linux/loop.h>
71 72  
72 73 #include "qemu.h"
73 74  
... ...
linux-user/syscall_defs.h
... ... @@ -830,6 +830,14 @@ struct target_pollfd {
830 830 #define TARGET_HDIO_SET_DMA 0x0326 /* change use-dma flag */
831 831 #define TARGET_HDIO_SET_PIO_MODE 0x0327 /* reconfig interface to new speed */
832 832  
  833 +/* loop ioctls */
  834 +#define TARGET_LOOP_SET_FD 0x4C00
  835 +#define TARGET_LOOP_CLR_FD 0x4C01
  836 +#define TARGET_LOOP_SET_STATUS 0x4C02
  837 +#define TARGET_LOOP_GET_STATUS 0x4C03
  838 +#define TARGET_LOOP_SET_STATUS64 0x4C04
  839 +#define TARGET_LOOP_GET_STATUS64 0x4C05
  840 +#define TARGET_LOOP_CHANGE_FD 0x4C06
833 841  
834 842 /* from asm/termbits.h */
835 843  
... ...
linux-user/syscall_types.h
... ... @@ -79,3 +79,32 @@ STRUCT(count_info,
79 79  
80 80 STRUCT(mixer_info,
81 81 MK_ARRAY(TYPE_CHAR, 16), MK_ARRAY(TYPE_CHAR, 32), TYPE_INT, MK_ARRAY(TYPE_INT, 10))
  82 +
  83 +/* loop device ioctls */
  84 +STRUCT(loop_info,
  85 + TYPE_INT, /* lo_number */
  86 + TYPE_SHORT, /* lo_device */
  87 + TYPE_ULONG, /* lo_inode */
  88 + TYPE_SHORT, /* lo_rdevice */
  89 + TYPE_INT, /* lo_offset */
  90 + TYPE_INT, /* lo_encrypt_type */
  91 + TYPE_INT, /* lo_encrypt_key_size */
  92 + TYPE_INT, /* lo_flags */
  93 + MK_ARRAY(TYPE_CHAR, 64), /* lo_name */
  94 + MK_ARRAY(TYPE_CHAR, 32), /* lo_encrypt_key */
  95 + MK_ARRAY(TYPE_ULONG, 2), /* lo_init */
  96 + MK_ARRAY(TYPE_CHAR, 4)) /* reserved */
  97 +
  98 +STRUCT(loop_info64,
  99 + TYPE_ULONGLONG, /* lo_device */
  100 + TYPE_ULONGLONG, /* lo_inode */
  101 + TYPE_ULONGLONG, /* lo_rdevice */
  102 + TYPE_ULONGLONG, /* lo_offset */
  103 + TYPE_ULONG, /* lo_number */
  104 + TYPE_ULONG, /* lo_encrypt_type */
  105 + TYPE_ULONG, /* lo_encrypt_key_size */
  106 + TYPE_ULONG, /* lo_flags */
  107 + MK_ARRAY(TYPE_CHAR, 64), /* lo_name */
  108 + MK_ARRAY(TYPE_CHAR, 64), /* lo_crypt_name */
  109 + MK_ARRAY(TYPE_CHAR, 32), /* lo_encrypt_key */
  110 + MK_ARRAY(TYPE_ULONGLONG, 2)) /* lo_init */
... ...