diff options
| author | 2009-05-05 01:40:22 +0200 | |
|---|---|---|
| committer | 2009-05-05 01:40:22 +0200 | |
| commit | dce2546afadd9185b7e65f1db6b127d6293b178c (patch) | |
| tree | 956f7d1adbba68ca2db4ce7d8740e10be8f5f53b /patches | |
| parent | 78577f36b4fd92b052300e0b4d3b369d45b40e67 (diff) | |
| download | usbmuxd-dce2546afadd9185b7e65f1db6b127d6293b178c.tar.gz usbmuxd-dce2546afadd9185b7e65f1db6b127d6293b178c.tar.bz2 | |
Add python stuff and patches
Diffstat (limited to 'patches')
| -rw-r--r-- | patches/libusb-add-zlp-flag.patch | 24 | ||||
| -rw-r--r-- | patches/valgrind-usbdevfs.patch | 133 | 
2 files changed, 157 insertions, 0 deletions
| diff --git a/patches/libusb-add-zlp-flag.patch b/patches/libusb-add-zlp-flag.patch new file mode 100644 index 0000000..add9f97 --- /dev/null +++ b/patches/libusb-add-zlp-flag.patch @@ -0,0 +1,24 @@ +diff -ur libusb-1.0.0/libusb/os/linux_usbfs.c libusb-1.0.0-mod/libusb/os/linux_usbfs.c +--- libusb-1.0.0/libusb/os/linux_usbfs.c	2008-12-13 20:43:20.000000000 +0100 ++++ libusb-1.0.0-mod/libusb/os/linux_usbfs.c	2009-04-30 04:25:12.000000000 +0200 +@@ -1295,7 +1295,8 @@ + 			urb->buffer_length = transfer->length % MAX_BULK_BUFFER_LENGTH; + 		else + 			urb->buffer_length = MAX_BULK_BUFFER_LENGTH; +- ++		if ((!(transfer->endpoint & LIBUSB_ENDPOINT_DIR_MASK)) && (i == num_urbs - 1)) ++			urb->flags = USBFS_URB_ZLP; + 		r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urb); + 		if (r < 0) { + 			int j; +diff -ur libusb-1.0.0/libusb/os/linux_usbfs.h libusb-1.0.0-mod/libusb/os/linux_usbfs.h +--- libusb-1.0.0/libusb/os/linux_usbfs.h	2008-07-16 16:17:57.000000000 +0200 ++++ libusb-1.0.0-mod/libusb/os/linux_usbfs.h	2009-04-30 04:08:27.000000000 +0200 +@@ -63,6 +63,7 @@ + #define USBFS_URB_DISABLE_SPD	1 + #define USBFS_URB_ISO_ASAP	2 + #define USBFS_URB_QUEUE_BULK	0x10 ++#define USBFS_URB_ZLP	0x40 +  + enum usbfs_urb_type { + 	USBFS_URB_TYPE_ISO = 0, diff --git a/patches/valgrind-usbdevfs.patch b/patches/valgrind-usbdevfs.patch new file mode 100644 index 0000000..9287573 --- /dev/null +++ b/patches/valgrind-usbdevfs.patch @@ -0,0 +1,133 @@ +diff -ur -x '*~' valgrind-3.4.1/coregrind/m_syswrap/syswrap-generic.c valgrind-3.4.1-mod/coregrind/m_syswrap/syswrap-generic.c +--- valgrind-3.4.1/coregrind/m_syswrap/syswrap-generic.c	2009-03-01 23:01:09.000000000 +0100 ++++ valgrind-3.4.1-mod/coregrind/m_syswrap/syswrap-generic.c	2009-04-29 15:44:08.000000000 +0200 +@@ -4160,23 +4160,56 @@ +          struct vki_usbdevfs_urb *vkuu = (struct vki_usbdevfs_urb *)ARG3; +  +          /* Not the whole struct needs to be initialized */ +-         PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).ep", (Addr)&vkuu->endpoint, sizeof(vkuu->endpoint)); ++         PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).endpoint", (Addr)&vkuu->endpoint, sizeof(vkuu->endpoint)); +          PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).type", (Addr)&vkuu->type, sizeof(vkuu->type)); +          PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).flags", (Addr)&vkuu->flags, sizeof(vkuu->flags)); +          PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).buffer", (Addr)&vkuu->buffer, sizeof(vkuu->buffer)); +-         PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).buffer_length", (Addr)&vkuu->buffer_length, sizeof(vkuu->buffer_length)); +-         PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).usercontext", (Addr)&vkuu->usercontext, sizeof(vkuu->usercontext)); +-         if (vkuu->endpoint & 0x80) +-            PRE_MEM_WRITE( "ioctl(USBDEVFS_URB).buffer", (Addr)vkuu->buffer, vkuu->buffer_length); +-         else +-            PRE_MEM_READ( "ioctl(USBDEVFS_URB).buffer", (Addr)vkuu->buffer, vkuu->buffer_length); +-         /* FIXME: Does not handle all cases this ioctl can do, ISOs are missing. */ ++         PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).signr", (Addr)&vkuu->signr, sizeof(vkuu->signr)); ++         PRE_MEM_WRITE( "ioctl(USBDEVFS_SUBMITURB).status", (Addr)&vkuu->status, sizeof(vkuu->status)); ++         if (vkuu->type == VKI_USBDEVFS_URB_TYPE_CONTROL) { ++            struct vki_usbdevfs_setuppacket *vkusp = (struct vki_usbdevfs_setuppacket *)vkuu->buffer; ++            PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).buffer_length", (Addr)&vkuu->buffer_length, sizeof(vkuu->buffer_length)); ++            PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).buffer.setup_packet", (Addr)vkusp, sizeof(*vkusp)); ++            if (vkusp->bRequestType & 0x80) ++               PRE_MEM_WRITE( "ioctl(USBDEVFS_SUBMITURB).buffer.data", (Addr)(vkusp+1), vkuu->buffer_length - sizeof(*vkusp)); ++            else ++               PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).buffer.data", (Addr)(vkusp+1), vkuu->buffer_length - sizeof(*vkusp)); ++            PRE_MEM_WRITE( "ioctl(USBDEVFS_SUBMITURB).actual_length", (Addr)&vkuu->actual_length, sizeof(vkuu->actual_length)); ++         } else if (vkuu->type == VKI_USBDEVFS_URB_TYPE_ISO) { ++            int total_length = 0; ++            int i; ++            PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).number_of_packets", (Addr)&vkuu->number_of_packets, sizeof(vkuu->number_of_packets)); ++            for(i=0; i<vkuu->number_of_packets; i++) { ++               PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).iso_frame_desc[].length", (Addr)&vkuu->iso_frame_desc[i].length, sizeof(vkuu->iso_frame_desc[i].length)); ++               PRE_MEM_WRITE( "ioctl(USBDEVFS_SUBMITURB).iso_frame_desc[].actual_length", (Addr)&vkuu->iso_frame_desc[i].actual_length, sizeof(vkuu->iso_frame_desc[i].actual_length)); ++               PRE_MEM_WRITE( "ioctl(USBDEVFS_SUBMITURB).iso_frame_desc[].status", (Addr)&vkuu->iso_frame_desc[i].status, sizeof(vkuu->iso_frame_desc[i].status)); ++               total_length += vkuu->iso_frame_desc[i].length; ++            } ++            if (vkuu->endpoint & 0x80) ++               PRE_MEM_WRITE( "ioctl(USBDEVFS_SUBMITURB).buffer", (Addr)vkuu->buffer, total_length); ++            else ++               PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).buffer", (Addr)vkuu->buffer, total_length); ++            PRE_MEM_WRITE( "ioctl(USBDEVFS_SUBMITURB).error_count", (Addr)&vkuu->error_count, sizeof(vkuu->error_count)); ++         } else { ++            PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).buffer_length", (Addr)&vkuu->buffer_length, sizeof(vkuu->buffer_length)); ++            if (vkuu->endpoint & 0x80) ++               PRE_MEM_WRITE( "ioctl(USBDEVFS_SUBMITURB).buffer", (Addr)vkuu->buffer, vkuu->buffer_length); ++            else ++               PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).buffer", (Addr)vkuu->buffer, vkuu->buffer_length); ++            PRE_MEM_WRITE( "ioctl(USBDEVFS_SUBMITURB).actual_length", (Addr)&vkuu->actual_length, sizeof(vkuu->actual_length)); ++         } +          break; +       } ++   case VKI_USBDEVFS_DISCARDURB: ++      break; +    case VKI_USBDEVFS_REAPURB: ++      if ( ARG3 ) { ++         PRE_MEM_WRITE( "ioctl(USBDEVFS_REAPURB)", ARG3, sizeof(struct vki_usbdevfs_urb **)); ++         break; ++      } +    case VKI_USBDEVFS_REAPURBNDELAY: +       if ( ARG3 ) { +-         PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB)", ARG3, sizeof(struct vki_usbdevfs_urb *)); ++         PRE_MEM_WRITE( "ioctl(USBDEVFS_REAPURBNDELAY)", ARG3, sizeof(struct vki_usbdevfs_urb **)); +          break; +       } +    case VKI_USBDEVFS_CONNECTINFO: +@@ -4986,11 +5019,31 @@ +    case VKI_USBDEVFS_REAPURBNDELAY: +       if ( ARG3 ) { +          struct vki_usbdevfs_urb **vkuu = (struct vki_usbdevfs_urb**)ARG3; ++         POST_MEM_WRITE((Addr)vkuu, sizeof(*vkuu)); +          if (!*vkuu) +             break; +          POST_MEM_WRITE((Addr) &((*vkuu)->status),sizeof((*vkuu)->status)); +-         if ((*vkuu)->endpoint & 0x80) +-            POST_MEM_WRITE((Addr)(*vkuu)->buffer, (*vkuu)->actual_length); ++         if ((*vkuu)->type == VKI_USBDEVFS_URB_TYPE_CONTROL) { ++            struct vki_usbdevfs_setuppacket *vkusp = (struct vki_usbdevfs_setuppacket *)(*vkuu)->buffer; ++            if (vkusp->bRequestType & 0x80) ++               POST_MEM_WRITE((Addr)(vkusp+1), (*vkuu)->buffer_length - sizeof(*vkusp)); ++            POST_MEM_WRITE((Addr)&(*vkuu)->actual_length, sizeof((*vkuu)->actual_length)); ++         } else if ((*vkuu)->type == VKI_USBDEVFS_URB_TYPE_ISO) { ++            char *bp = (*vkuu)->buffer; ++            int i; ++            for(i=0; i<(*vkuu)->number_of_packets; i++) { ++               POST_MEM_WRITE((Addr)&(*vkuu)->iso_frame_desc[i].actual_length, sizeof((*vkuu)->iso_frame_desc[i].actual_length)); ++               POST_MEM_WRITE((Addr)&(*vkuu)->iso_frame_desc[i].status, sizeof((*vkuu)->iso_frame_desc[i].status)); ++               if ((*vkuu)->endpoint & 0x80) ++                  POST_MEM_WRITE((Addr)bp, (*vkuu)->iso_frame_desc[i].actual_length); ++               bp += (*vkuu)->iso_frame_desc[i].length; // FIXME: or actual_length?? ++            } ++            POST_MEM_WRITE((Addr)&(*vkuu)->error_count, sizeof((*vkuu)->error_count)); ++         } else { ++            if ((*vkuu)->endpoint & 0x80) ++               POST_MEM_WRITE((Addr)(*vkuu)->buffer, (*vkuu)->actual_length); ++            POST_MEM_WRITE((Addr)&(*vkuu)->actual_length, sizeof((*vkuu)->actual_length)); ++         } +          break; +       } +    case VKI_USBDEVFS_CONNECTINFO: +diff -ur -x '*~' valgrind-3.4.1/include/vki/vki-linux.h valgrind-3.4.1-mod/include/vki/vki-linux.h +--- valgrind-3.4.1/include/vki/vki-linux.h	2009-03-01 22:46:45.000000000 +0100 ++++ valgrind-3.4.1-mod/include/vki/vki-linux.h	2009-04-29 15:42:05.000000000 +0200 +@@ -2325,11 +2325,26 @@ + #define VKI_USBDEVFS_BULK              _VKI_IOWR('U', 2, struct vki_usbdevfs_bulktransfer) + #define VKI_USBDEVFS_GETDRIVER         _VKI_IOW('U', 8, struct vki_usbdevfs_getdriver) + #define VKI_USBDEVFS_SUBMITURB         _VKI_IOR('U', 10, struct vki_usbdevfs_urb) ++#define VKI_USBDEVFS_DISCARDURB        _VKI_IO('U', 11) + #define VKI_USBDEVFS_REAPURB           _VKI_IOW('U', 12, void *) + #define VKI_USBDEVFS_REAPURBNDELAY     _VKI_IOW('U', 13, void *) + #define VKI_USBDEVFS_CONNECTINFO       _VKI_IOW('U', 17, struct vki_usbdevfs_connectinfo) + #define VKI_USBDEVFS_IOCTL             _VKI_IOWR('U', 18, struct vki_usbdevfs_ioctl) +  ++#define VKI_USBDEVFS_URB_TYPE_ISO              0 ++#define VKI_USBDEVFS_URB_TYPE_INTERRUPT        1 ++#define VKI_USBDEVFS_URB_TYPE_CONTROL          2 ++#define VKI_USBDEVFS_URB_TYPE_BULK             3 ++ ++// this is missing in usbdevice_fs.h ++struct vki_usbdevfs_setuppacket { ++	__vki_u8 bRequestType; ++	__vki_u8 bRequest; ++	__vki_u16 wValue; ++	__vki_u16 wIndex; ++	__vki_u16 wLength; ++}; ++ + //---------------------------------------------------------------------- + // From linux-2.6.20.1/include/linux/i2c.h + //---------------------------------------------------------------------- | 
