>>>>> "Vrastil," == Vrastil, Michal <michal.vrastil@xxxxxxxxxxxxx> writes: > This reverts commit ec6ce7075ef879b91a8710829016005dc8170f17. > Fix install of WinUSB dsriver using OS descriptors. > Without the fix the drivers is 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. > 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. Hmm, very odd. How are you testing this on the host side? Could it be that you are running into the WinUSB bug described here: https://github.com/pbatard/libwdi/wiki/WCID-Devices#defining-a-device-interface-guid-or-other-device-specific-properties IMPORTANT NOTE 1: There is a bug/limitation in WinUSB that will force the wIndex of any Interface Request to the interface num ber. This means that, if you are using WinUSB to verify the content of your Extended Properties Feature Descriptor, you won't be able to retrieve it (unless it is only defined for interface #5). If you use WinUSB on Windows to validate your descriptors, our advice then is to have your device firmware answer both Device and Interface requests when the Extended Properties Feature Descriptor is queried, so that you can use a Device Request rather than an Interface Request to validate that your descriptor is set properly. For reference, the latest xusb sample application from libusb has a -w switch that will force the wIndex = 0x0005 to use the Device mode. > Fixes: ec6ce70 ("usb: gadget: composite: fix OS descriptors w_value logic") > Signed-off-by: Michal Vrastil <michal.vrastil@xxxxxxxxxxxxx> > --- > drivers/usb/gadget/composite.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > 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; > -- > 2.43.0 -- Bye, Peter Korsgaard