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,3 +300,13 @@
300 300
301 IOCTL(VFAT_IOCTL_READDIR_BOTH, IOC_R, MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_dirent), 2))) 301 IOCTL(VFAT_IOCTL_READDIR_BOTH, IOC_R, MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_dirent), 2)))
302 IOCTL(VFAT_IOCTL_READDIR_SHORT, IOC_R, MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_dirent), 2))) 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,6 +68,7 @@
68 #include <linux/soundcard.h> 68 #include <linux/soundcard.h>
69 #include <linux/dirent.h> 69 #include <linux/dirent.h>
70 #include <linux/kd.h> 70 #include <linux/kd.h>
  71 +#include <linux/loop.h>
71 72
72 #include "qemu.h" 73 #include "qemu.h"
73 74
linux-user/syscall_defs.h
@@ -830,6 +830,14 @@ struct target_pollfd { @@ -830,6 +830,14 @@ struct target_pollfd {
830 #define TARGET_HDIO_SET_DMA 0x0326 /* change use-dma flag */ 830 #define TARGET_HDIO_SET_DMA 0x0326 /* change use-dma flag */
831 #define TARGET_HDIO_SET_PIO_MODE 0x0327 /* reconfig interface to new speed */ 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 /* from asm/termbits.h */ 842 /* from asm/termbits.h */
835 843
linux-user/syscall_types.h
@@ -79,3 +79,32 @@ STRUCT(count_info, @@ -79,3 +79,32 @@ STRUCT(count_info,
79 79
80 STRUCT(mixer_info, 80 STRUCT(mixer_info,
81 MK_ARRAY(TYPE_CHAR, 16), MK_ARRAY(TYPE_CHAR, 32), TYPE_INT, MK_ARRAY(TYPE_INT, 10)) 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 */