]> sigrok.org Git - sigrok-util.git/blobdiff - cross-compile/mingw/libusb1_upgrade.patch
sigrok-fwextract-kingst-la2016: concentrate RCC flags in one spot
[sigrok-util.git] / cross-compile / mingw / libusb1_upgrade.patch
index ac350c336955f2661bc8b0631e3b66761aebbfd7..8dc8646864fe3622b7319856590b7a711b879831 100644 (file)
@@ -1,90 +1,67 @@
-The sigrok build references an older libusb1 library version, which
-addresses two specific aspects:
+The sigrok project build references a libusb feature which is not yet
+available in mainline libusb1, enabling the RAW_IO policy by default
+to improve performance on Windows. And applies an autotools fix to the
+mainline MXE build rules.
 
-  - Presence of an "event abstraction" is desired. Which once was
-    available as a branch on top of 1.0.20-rc3, but has gone away
-    in the meantime and got archived locally. -- Library versions
-    1.0.24 and above may provide that feature under the common API
-    but are yet to get verified.
-
-  - For performance reasons the RAW_IO feature is enabled. libusb1
-    mainline may provide such an approach later (automatically, after
-    checking more conditions for improved reliability), but does not
-    in versions up to and including 1.0.25 yet.
+See the libusb pull request https://github.com/libusb/libusb/pull/1069
+for a discussion of the RAW_IO policy tweak.
 
 Manipulation of the libusb1 configuration in the MXE setup avoids the
 necessity for a custom libusb1 build as a step in the sigrok procedure.
+When the MXE modification is considered undesirable, then the sigrok
+build script or the manual sequence of building needs to get adjusted
+to include a local libusb1 build which then gets referenced in the
+configure step.
 
-Ideally the sigrok build would use libusb1 version 1.0.25+ to benefit
-from the many portability and robustness and feature set improvements.
-Regardless of which libusb1 version ships with mainline MXE. That is
-why this file is called "libusb1_upgrade.patch". Until then it patches
-the local archive of the older library version.
 
 diff --git a/src/libusb1.mk b/src/libusb1.mk
 index ab01bf69..53aed36e 100644
 --- a/src/libusb1.mk
 +++ b/src/libusb1.mk
-@@ -4,11 +4,11 @@ PKG             := libusb1
- $(PKG)_WEBSITE  := https://libusb.info/
- $(PKG)_DESCR    := LibUsb-1.0
- $(PKG)_IGNORE   :=
--$(PKG)_VERSION  := 1.0.24
--$(PKG)_CHECKSUM := 7efd2685f7b327326dcfb85cee426d9b871fd70e22caa15bb68d595ce2a2b12a
--$(PKG)_SUBDIR   := libusb-$($(PKG)_VERSION)
--$(PKG)_FILE     := libusb-$($(PKG)_VERSION).tar.bz2
--$(PKG)_URL      := https://$(SOURCEFORGE_MIRROR)/project/libusb/libusb-1.0/libusb-$($(PKG)_VERSION)/$($(PKG)_FILE)
-+$(PKG)_VERSION  := 1.0.20-rc3-event-abstraction-v4
-+$(PKG)_CHECKSUM := 58fee7f3f05fda209d14c55763df36ab86028bd9ab82c9bb74f1d5ab3208bcfd
-+$(PKG)_SUBDIR   := libusb-event-abstraction-v4
-+$(PKG)_FILE     := libusb-event-abstraction-v4.zip
-+$(PKG)_URL      := https://github.com/uwehermann/libusb/archive/event-abstraction-v4.zip
- $(PKG)_DEPS     := cc
- define $(PKG)_UPDATE
 @@ -19,7 +19,7 @@ define $(PKG)_UPDATE
  endef
  
  define $(PKG)_BUILD
 -    cd '$(1)' && ./configure \
 +    cd '$(1)' && autoreconf -i && ./configure \
-         $(MXE_CONFIGURE_OPTS) \
-         CFLAGS=-D_WIN32_WINNT=0x0500
+         $(MXE_CONFIGURE_OPTS)
      $(MAKE) -C '$(1)' -j '$(JOBS)' install
+
 diff --git a/src/libusb1-1-fixes.patch b/src/libusb1-1-fixes.patch
 new file mode 100644
 index 00000000..6cdeb0c4
 --- /dev/null
 +++ b/src/libusb1-1-fixes.patch
 @@ -0,0 +1,31 @@
-+From d4f7a49d77bd8f4ac871a999fc9ec898cb22b8c3 Mon Sep 17 00:00:00 2001
-+From: Vlad Ivanov <vlad-mbx@ya.ru>
-+Date: Tue, 9 Feb 2016 10:35:23 +0300
-+Subject: [PATCH] windows_usb: enable RAW_IO policy by default
++commit f341e4a086edd4f45c2db4df892a52ebfd52ac5b
++Author:     Petteri Aimonen <jpa@git.mail.kapsi.fi>
++AuthorDate: 2022-02-11 12:08:01 +0200
++Commit:     Petteri Aimonen <jpa@git.mail.kapsi.fi>
++CommitDate: 2022-02-11 12:08:01 +0200
 +
-+libusb should set RAW_IO policy unconditionally because it
-+implements the buffer management itself.
-+
-+Signed-off-by: Vlad Ivanov <vlad-mbx@ya.ru>
++    WinUSB: Use RAW_IO when transfer size is divisible by 512 bytes
 +---
-+ libusb/os/windows_usb.c | 4 ++++
-+ 1 file changed, 4 insertions(+)
++ libusb/os/windows_winusb.c | 9 +++++++++
++ 1 file changed, 9 insertions(+)
 +
-+diff --git a/libusb/os/windows_usb.c b/libusb/os/windows_usb.c
-+index 6640ad5..12fdab0 100644
-+--- a/libusb/os/windows_usb.c
-++++ b/libusb/os/windows_usb.c
-+@@ -2890,6 +2890,10 @@ static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle
-+                      AUTO_CLEAR_STALL, sizeof(UCHAR), &policy)) {
-+                      usbi_dbg("failed to enable AUTO_CLEAR_STALL for endpoint %02X", endpoint_address);
-+              }
-++             if (!WinUSBX[sub_api].SetPipePolicy(winusb_handle, endpoint_address,
-++                     RAW_IO, sizeof(UCHAR), &policy)) {
-++                     usbi_dbg("failed to enable RAW_IO for endpoint %02X", endpoint_address);
-++             }
-+      }
++diff --git a/libusb/os/windows_winusb.c b/libusb/os/windows_winusb.c
++index a03d6a51216a..a0ac0c609e99 100644
++--- a/libusb/os/windows_winusb.c
+++++ b/libusb/os/windows_winusb.c
++@@ -3086,6 +3086,15 @@ static int winusbx_submit_bulk_transfer(int sub_api, struct usbi_transfer *itran
++      set_transfer_priv_handle(itransfer, handle_priv->interface_handle[current_interface].dev_handle);
++      overlapped = get_transfer_priv_overlapped(itransfer);
 + 
-+      return LIBUSB_SUCCESS;
-+-- 
-+2.5.0
-+
+++     if (sub_api == SUB_API_WINUSB)
+++     {
+++             // Use RAW_IO when transfer size is divisible by 512 bytes.
+++             UCHAR policy = (transfer->length % 512 == 0);
+++             if (!WinUSBX[sub_api].SetPipePolicy(winusb_handle, transfer->endpoint, RAW_IO, sizeof(UCHAR), &policy)) {
+++                             usbi_err(TRANSFER_CTX(transfer), "failed to set RAW_IO for endpoint %02X", transfer->endpoint);
+++             }
+++     }
+++
++      if (IS_XFERIN(transfer)) {
++              usbi_dbg(TRANSFER_CTX(transfer), "reading %d bytes", transfer->length);
++              ret = WinUSBX[sub_api].ReadPipe(winusb_handle, transfer->endpoint, transfer->buffer, transfer->length, NULL, overlapped);