Module: wine Branch: master Commit: b313c4095ff2262d8c3076562442cb95dc059e34 URL: https://gitlab.winehq.org/wine/wine/-/commit/b313c4095ff2262d8c3076562442cb9...
Author: Hans Leidekker hans@codeweavers.com Date: Wed Nov 8 12:30:49 2023 +0100
wineusb.sys: Add support for URB_FUNCTION_VENDOR_DEVICE.
---
dlls/wineusb.sys/unixlib.c | 9 ++++++++- dlls/wineusb.sys/wineusb.c | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/dlls/wineusb.sys/unixlib.c b/dlls/wineusb.sys/unixlib.c index 95220dd3828..401993dc543 100644 --- a/dlls/wineusb.sys/unixlib.c +++ b/dlls/wineusb.sys/unixlib.c @@ -362,6 +362,7 @@ static void LIBUSB_CALL transfer_cb(struct libusb_transfer *transfer) break; }
+ case URB_FUNCTION_VENDOR_DEVICE: case URB_FUNCTION_VENDOR_INTERFACE: { struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST *req = &urb->UrbControlVendorClassRequest; @@ -539,10 +540,11 @@ static NTSTATUS usb_submit_urb(void *args) return STATUS_SUCCESS; }
+ case URB_FUNCTION_VENDOR_DEVICE: case URB_FUNCTION_VENDOR_INTERFACE: { struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST *req = &urb->UrbControlVendorClassRequest; - uint8_t req_type = LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_INTERFACE; + uint8_t req_type = LIBUSB_REQUEST_TYPE_VENDOR; struct transfer_ctx *transfer_ctx; unsigned char *buffer;
@@ -551,6 +553,11 @@ static NTSTATUS usb_submit_urb(void *args) transfer_ctx->irp = irp; transfer_ctx->transfer_buffer = params->transfer_buffer;
+ if (urb->UrbHeader.Function == URB_FUNCTION_VENDOR_DEVICE) + req_type |= LIBUSB_RECIPIENT_DEVICE; + else + req_type |= LIBUSB_RECIPIENT_INTERFACE; + if (req->TransferFlags & USBD_TRANSFER_DIRECTION_IN) req_type |= LIBUSB_ENDPOINT_IN; if (req->TransferFlags & ~USBD_TRANSFER_DIRECTION_IN) diff --git a/dlls/wineusb.sys/wineusb.c b/dlls/wineusb.sys/wineusb.c index 801393cacf6..29d28ee002d 100644 --- a/dlls/wineusb.sys/wineusb.c +++ b/dlls/wineusb.sys/wineusb.c @@ -556,6 +556,7 @@ static NTSTATUS usb_submit_urb(struct usb_device *device, IRP *irp) case URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: case URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: case URB_FUNCTION_SELECT_CONFIGURATION: + case URB_FUNCTION_VENDOR_DEVICE: case URB_FUNCTION_VENDOR_INTERFACE: { struct usb_submit_urb_params params = @@ -586,6 +587,7 @@ static NTSTATUS usb_submit_urb(struct usb_device *device, IRP *irp) break; }
+ case URB_FUNCTION_VENDOR_DEVICE: case URB_FUNCTION_VENDOR_INTERFACE: { struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST *req = &urb->UrbControlVendorClassRequest;