Message ID | AS8PR05MB848522189AE458978C5F231490932@AS8PR05MB8485.eurprd05.prod.outlook.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | usb: gadget: composite: fix OS descriptors w_value logic | expand |
On Tue, Sep 03, 2024 at 11:14:39AM +0000, Vrastil, Michal wrote: > >From 118f8c8b72d633c0daa65e564e48cbf4964977ab Mon Sep 17 00:00:00 2001 > From: Michal Vrastil <michal.vrastil@hidglobal.com> > Date: Tue, 3 Sep 2024 10:55:15 +0200 > Subject: [PATCH] Revert "usb: gadget: composite: fix OS descriptors w_value > logic" This looks odd, did you mean to put the whole commit in the mail? Also, all tabs are gone, meaning you probably did a cut/paste thing, please read the kernel documentation for how to use 'git send-email' to make this simpler? > > This reverts commit ec6ce7075ef879b91a8710829016005dc8170f17. > > Fix install of WinUSB dsriver using OS descriptors. Without the fix the drivers are not installed correctly > and the property 'DeviceInterfaceGUID' is missing on host side. > > The original change was based on assumption that the interface number is in the high byte of wValue but it is in the low byte, instead. > Unfortunately, the fix is based on MS documentation which is also wrong. Please wrap your changelog text at 72 columns like your editor tried to get you to do :) > > The actual USB request for OS descriptors (using USB analyzer) looks like: > > Offset 0 1 2 3 4 5 6 7 > 0x000 C1 A1 02 00 05 00 0A 00 > > C1: bmRequestType (device to host, vendor, interface) > A1: nas magic number > 0002: wValue (2: nas interface) > 0005: wIndex (5: get extended property i.e. nas interface GUID) > 008E: wLength (142) > > The fix was tested on Windows 10 and Windows 11. > > Signed-off-by: Michal Vrastil <michal.vrastil@hidglobal.com> What commit id does this fix? thanks, greg k-h
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index 17ae3b394469..a3106b179562 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -1925,7 +1925,7 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) buf[5] = 0x01; switch (ctrl->bRequestType & USB_RECIP_MASK) { case USB_RECIP_DEVICE: - if (w_index != 0x4 || (w_value & 0xff)) + if (w_index != 0x4 || (w_value >> 8)) break; buf[6] = w_index; /* Number of ext compat interfaces */ @@ -1941,9 +1941,9 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) } break; case USB_RECIP_INTERFACE: - if (w_index != 0x5 || (w_value & 0xff)) + if (w_index != 0x5 || (w_value >> 8)) break; - interface = w_value >> 8; + interface = w_value & 0xFF; if (interface >= MAX_CONFIG_INTERFACES || !os_desc_cfg->interface[interface]) break;