Hi Sarah,
On Tue, Nov 12, 2013 at 09:43:20AM -0800, Sarah Sharp wrote:
> On Mon, Oct 28, 2013 at 11:31:33PM +0800, Huang Rui wrote:
> > In Test 9 of usbtest module, it is used for performing chapter 9 tests N
> > times.
> >
> > USB2.0 Extension descriptor is one of the generic device-level capbility
> > descriptors which added in section 9.6.2.1 of USB 3.0 spec.
> >
> > This patch adds to support getting usb2.0 extension descriptor test
> > scenario for USB 3.0.
>
> Why not check the USB 2.0 extension BOS descriptor for USB 2.1 devices
> as well? Just change you check to be bcdUSB >= 0x0210. You would have
> to make sure you fail a USB 2.1 device with a the USB 3.0 BOS extension
> descriptor or the Container ID BOS extension.
>
Thank you to look at these patches.
I tested with a USB 3.0 pen drive of "DT Ultimate G2 16G" which is
attached on USB2 bus and act as a USB 2.1 device. It passed.
But there aren't BOS descriptor set from lsusb message attached, it's
strange, why?
BTW, is BOS descriptor set not mandatory for USB 2.1 device?
> More comments below.
>
> > Signed-off-by: Huang Rui <[email protected]>
> > ---
> > drivers/usb/misc/usbtest.c | 77
> > ++++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 77 insertions(+)
> >
> > diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
> > index 38ebe1d..d9ac215 100644
> > --- a/drivers/usb/misc/usbtest.c
> > +++ b/drivers/usb/misc/usbtest.c
> > @@ -606,6 +606,28 @@ static int is_good_config(struct usbtest_dev *tdev,
> > int len)
> > return 0;
> > }
> >
> > +static int is_good_ext(struct usbtest_dev *tdev, char *buf)
> > +{
> > + struct usb_ext_cap_descriptor *ext;
> > + u32 attr;
> > +
> > + ext = (struct usb_ext_cap_descriptor *) buf;
> > +
> > + if (ext->bLength != USB_DT_USB_EXT_CAP_SIZE) {
> > + ERROR(tdev, "bogus usb 2.0 extension descriptor length\n");
> > + return 0;
> > + }
> > +
> > + attr = le32_to_cpu(ext->bmAttributes);
> > + /* bits[1:4] is used and others are reserved */
> > + if (attr & ~0x1e) { /* reserved == 0 */
> > + ERROR(tdev, "reserved bits set\n");
> > + return 0;
> > + }
>
> New errata for USB 2.1 Link PM that adds support for the BESL and DBESL
> encoding uses bits[1:15]. See the "USB2-LPM-Errata-final.pdf" file in
> the latest download of the USB 2.0 spec. This code should be fixed to
> reflect those changes (bitmask should be 0xfffe rather than 0x1e).
>
You're right. I will make a patch to fix it.
Thanks,
Rui
Bus 001 Device 005: ID 0951:1656 Kingston Technology
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0951 Kingston Technology
idProduct 0x1656
bcdDevice 1.10
iManufacturer 1 Kingston
iProduct 2 DT Ultimate G2
iSerial 3 0018F30BFDDCBC410000003D
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 498mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 6 SCSI
bInterfaceProtocol 80 Bulk (Zip)
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Device Status: 0x0000
(Bus Powered)