Add various ioctl()s

Patch initially written by Eric Andersen <andersen@codepoet.org>.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Index: valgrind-3.7.0/coregrind/m_syswrap/syswrap-linux.c
===================================================================
--- valgrind-3.7.0.orig/coregrind/m_syswrap/syswrap-linux.c	2011-10-27 12:55:05.000000000 +0200
+++ valgrind-3.7.0/coregrind/m_syswrap/syswrap-linux.c	2011-12-22 14:53:16.258126390 +0100
@@ -4058,7 +4058,33 @@
    case VKI_SG_GET_SG_TABLESIZE: /* 0x227f */
       PRE_MEM_WRITE( "ioctl(SG_GET_SG_TABLESIZE)", ARG3, sizeof(int) );
       break;
+   case VKI_SCSI_IOCTL_GET_IDLUN:
+      PRE_MEM_WRITE( "ioctl(SCSI_IOCTL_GET_IDLUN)", ARG3, sizeof(vki_scsi_idlun_t) );
+      break;
+   case VKI_SCSI_IOCTL_PROBE_HOST:
+      {
+	  int arraylen;
+	  char *array = (char*)ARG3;
+	  PRE_MEM_READ("ioctl(SCSI_IOCTL_PROBE_HOST)",  ARG3, sizeof(char)*4 );
+	  arraylen = array[0] + (array[1]<<8) + (array[2]<<16) + (array[3]<<24);
+	  PRE_MEM_WRITE( "ioctl(SCSI_IOCTL_PROBE_HOST)", ARG3, sizeof(char)*arraylen );
+      }
+      break;
+   case VKI_SCSI_IOCTL_GET_BUS_NUMBER:
+      PRE_MEM_WRITE( "ioctl(SCSI_IOCTL_GET_BUS_NUMBER)", ARG3, sizeof(int) );
+      break;
 
+   case VKI_FDRESET:
+      break;
+   case VKI_FDGETDRVTYP:
+      PRE_MEM_WRITE( "ioctl(FDGETDRVTYP)", ARG3, sizeof(char)*16 );
+      break;
+   case VKI_FDPOLLDRVSTAT:
+      PRE_MEM_WRITE( "ioctl(FDPOLLDRVSTAT)", ARG3, sizeof(vki_floppy_drive_struct_t) );
+      break;
+   case VKI_FDGETPRM:
+      PRE_MEM_WRITE( "ioctl(FDGETPRM)", ARG3, sizeof(vki_floppy_struct_t) );
+      break;
    case VKI_IIOCGETCPS:
       PRE_MEM_WRITE( "ioctl(IIOCGETCPS)", ARG3,
 		     VKI_ISDN_MAX_CHANNELS * 2 * sizeof(unsigned long) );
@@ -4373,6 +4399,8 @@
    case VKI_BLKROGET:
       PRE_MEM_WRITE( "ioctl(BLKROGET)", ARG3, sizeof(int));
       break;
+   case VKI_BLKRRPART:
+      break;
    case VKI_BLKGETSIZE:
       PRE_MEM_WRITE( "ioctl(BLKGETSIZE)", ARG3, sizeof(unsigned long));
       break;
@@ -4381,6 +4409,8 @@
    case VKI_BLKRAGET:
       PRE_MEM_WRITE( "ioctl(BLKRAGET)", ARG3, sizeof(long));
       break;
+   case VKI_BLKFLSBUF:
+      break;
    case VKI_BLKFRASET:
       break;
    case VKI_BLKFRAGET:
@@ -4447,6 +4477,8 @@
       PRE_MEM_WRITE( "ioctl(CDROMREADTOCENTRY)", ARG3, 
 		     sizeof(struct vki_cdrom_tocentry));
       break;
+   case VKI_CDROMEJECT:
+      break;
    case VKI_CDROMMULTISESSION: /* 0x5310 */
       PRE_MEM_WRITE( "ioctl(CDROMMULTISESSION)", ARG3,
 		     sizeof(struct vki_cdrom_multisession));
@@ -5321,7 +5353,28 @@
    case VKI_SG_GET_SG_TABLESIZE:
       POST_MEM_WRITE(ARG3, sizeof(int));
       break;      
+   case VKI_SCSI_IOCTL_GET_IDLUN:
+      POST_MEM_WRITE(ARG3, sizeof(vki_scsi_idlun_t));
+      break;
+   case VKI_SCSI_IOCTL_PROBE_HOST:
+      if (RES > 0 && ARG3 )
+	  POST_MEM_WRITE(ARG3, sizeof(char)*RES);
+      break;
+   case VKI_SCSI_IOCTL_GET_BUS_NUMBER:
+      POST_MEM_WRITE(ARG3, sizeof(int));
+      break;
 
+   case VKI_FDRESET:
+      break;
+   case VKI_FDGETDRVTYP:
+      POST_MEM_WRITE( ARG3, sizeof(char)*16 );
+      break;
+   case VKI_FDPOLLDRVSTAT:
+      POST_MEM_WRITE( ARG3, sizeof(vki_floppy_drive_struct_t) );
+      break;
+   case VKI_FDGETPRM:
+      POST_MEM_WRITE( ARG3, sizeof(vki_floppy_struct_t) );
+      break;
    case VKI_IIOCGETCPS:
       POST_MEM_WRITE( ARG3, VKI_ISDN_MAX_CHANNELS * 2 * sizeof(unsigned long) );
       break;
@@ -5542,6 +5595,8 @@
    case VKI_BLKROGET:
       POST_MEM_WRITE(ARG3, sizeof(int));
       break;
+   case VKI_BLKRRPART:
+      break;
    case VKI_BLKGETSIZE:
       POST_MEM_WRITE(ARG3, sizeof(unsigned long));
       break;
@@ -5550,6 +5605,8 @@
    case VKI_BLKRAGET:
       POST_MEM_WRITE(ARG3, sizeof(long));
       break;
+   case VKI_BLKFLSBUF:
+      break;
    case VKI_BLKFRASET:
       break;
    case VKI_BLKFRAGET:
@@ -5591,6 +5648,8 @@
    case VKI_CDROMREADTOCENTRY:
       POST_MEM_WRITE(ARG3, sizeof(struct vki_cdrom_tocentry));
       break;
+   case VKI_CDROMEJECT:
+      break;
    case VKI_CDROMMULTISESSION:
       POST_MEM_WRITE(ARG3, sizeof(struct vki_cdrom_multisession));
       break;
Index: valgrind-3.7.0/include/vki/vki-linux.h
===================================================================
--- valgrind-3.7.0.orig/include/vki/vki-linux.h	2011-10-26 23:24:31.000000000 +0200
+++ valgrind-3.7.0/include/vki/vki-linux.h	2011-12-22 14:53:16.258126390 +0100
@@ -1654,7 +1654,9 @@
 
 #define VKI_BLKROSET   _VKI_IO(0x12,93)	/* set device read-only (0 = read-write) */
 #define VKI_BLKROGET   _VKI_IO(0x12,94)	/* get read-only status (0 = read_write) */
+#define VKI_BLKRRPART  _VKI_IO(0x12,95) /* re-read partition table */
 #define VKI_BLKGETSIZE _VKI_IO(0x12,96) /* return device size /512 (long *arg) */
+#define VKI_BLKFLSBUF  _VKI_IO(0x12,97) /* flush buffer cache */
 #define VKI_BLKRASET   _VKI_IO(0x12,98)	/* set read ahead for block device */
 #define VKI_BLKRAGET   _VKI_IO(0x12,99)	/* get current read ahead setting */
 #define VKI_BLKFRASET  _VKI_IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
@@ -1729,6 +1731,53 @@
 //#define SG_GET_COMMAND_Q 0x2270   /* Yields 0 (queuing off) or 1 (on) */
 #define VKI_SG_SET_COMMAND_Q 0x2271   /* Change queuing state with 0 or 1 */
 
+typedef struct vki_scsi_idlun
+{
+    int mux4;
+    int host_unique_id;
+
+} vki_scsi_idlun_t;
+#define VKI_SCSI_IOCTL_GET_IDLUN 0x5382		/* Gets a struct vki_scsi_idlun */
+#define VKI_SCSI_IOCTL_PROBE_HOST 0x5385	/* Gets an arrary describing the SCSI host */
+#define VKI_SCSI_IOCTL_GET_BUS_NUMBER 0x5386	/* Get the bus number for a device */
+
+//----------------------------------------------------------------------
+// From linux-2.6.8.1/include/linux/fd.h
+//----------------------------------------------------------------------
+#define VKI_FDRESET 0x254		/* Takes an int by value */
+#define VKI_FDGETDRVTYP 0x20f	/* Returns char floppy_drive_name[16] */
+typedef struct vki_floppy_drive_struct {
+	unsigned long flags;
+	unsigned long spinup_date;
+	unsigned long select_date;
+	unsigned long first_read_date;
+	short probed_format;
+	short track;
+	short maxblock;
+	short maxtrack;
+	int generation;
+	int keep_data;
+	int fd_ref;
+	int fd_device;
+	unsigned long last_checked;
+	char *dmabuf;
+	int bufblocks;
+} vki_floppy_drive_struct_t;
+#define VKI_FDPOLLDRVSTAT 0x213	    /* returns a struct floppy_drive_struct */
+typedef struct vki_floppy_struct {
+	unsigned int	size;
+	unsigned int	sect;
+	unsigned int	head;
+	unsigned int	track;
+	unsigned int	stretch;
+	unsigned char	gap;
+	unsigned char	rate;
+	unsigned char	spec1;
+	unsigned char	fmt_gap;
+	const char	* name;
+} vki_floppy_struct_t;
+#define VKI_FDGETPRM 0x204	    /* returns a struct floppy_struct */
+
 //----------------------------------------------------------------------
 // From linux-2.6.8.1/include/linux/cdrom.h
 //----------------------------------------------------------------------
@@ -1738,6 +1787,7 @@
                                            (struct cdrom_tochdr) */
 #define VKI_CDROMREADTOCENTRY	0x5306 /* Read TOC entry 
                                            (struct cdrom_tocentry) */
+#define VKI_CDROMEJECT		0x5309 /* Eject cdrom media */
 #define VKI_CDROMSUBCHNL	0x530b /* Read subchannel data 
                                            (struct cdrom_subchnl) */
 #define VKI_CDROMREADMODE2	0x530c /* Read CDROM mode 2 data (2336 Bytes) 
