Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Oct 2017 23:18:04 -0400
From:      Farhan Khan <khanzf@gmail.com>
To:        blubee blubeeme <gurenchan@gmail.com>, freebsd-drivers@freebsd.org
Subject:   Re: Getting into USB drivers
Message-ID:  <5bd8a40a-2795-6a1a-d8e7-2fc603fdfc2a@gmail.com>
In-Reply-To: <CALM2mE=eJfFr_jNyv%2BuNS3tWBTO1SOREunPYA5zwwmyv7a173Q@mail.gmail.com>
References:  <CALM2mE=eJfFr_jNyv%2BuNS3tWBTO1SOREunPYA5zwwmyv7a173Q@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi!

I am working with on a PCIe driver, but I've done a bit of reading on 
USB drivers on Linux, and its probably not too different from BSD.

Chapter 9 of the Architecture Handbook is a good start.  The usb(4) man 
page is pretty solid, it gets into the data structures and API calls. In 
my opinion though, man pages don't make any sense unless you already 
have a sense of what you are doing, so I would also read a few sample 
drivers that are out there. There's an excellent book called "FreeBSD 
Device Drivers: A Guide for the Intrepid" that helps to bring everything 
together. It has sample drivers and builds you into things slowly.

Though a different OS, the Linux documentation is pretty good. One 
article that helped me was this: 
http://matthias.vallentin.net/blog/2007/04/writing-a-linux-kernel-driver-for-an-unknown-usb-device/ 
and Linux's drivers/usb/usb-skeleton.c sample driver.

That looks like a laptop camera, right? I think I used to have it. Would 
be great if you got it over!

On 10/26/2017 10:18 PM, blubee blubeeme wrote:
> I have a USB webcam that I would like to get into writing drivers for as a
> practical introduction to writing drivers for FreeBSD. I am not sure if
> this one already has a driver but here's the usb dump of the device.
> 
> Anyone here willing to give me some pointers on writing drivers?
> 
> 
> me@blubee:~ % sudo usbconfig -d 0.5 dump_all_config_desc
> Password:
> ugen0.5: <SunplusIT Inc Chicony USB 2.0 Camera> at usbus0, cfg=0 md=HOST
> spd=HIGH (480Mbps) pwr=ON (500mA)
> 
> 
>   Configuration index 0
> 
>      bLength = 0x0009
>      bDescriptorType = 0x0002
>      wTotalLength = 0x03a9
>      bNumInterfaces = 0x0002
>      bConfigurationValue = 0x0001
>      iConfiguration = 0x0000  <no string>
>      bmAttributes = 0x0080
>      bMaxPower = 0x00fa
> 
>      Additional Descriptor
> 
>      bLength = 0x08
>      bDescriptorType = 0x0b
>      bDescriptorSubType = 0x00
>       RAW dump:
>       0x00 | 0x08, 0x0b, 0x00, 0x02, 0x0e, 0x03, 0x00, 0x04
> 
> 
>      Interface 0
>        bLength = 0x0009
>        bDescriptorType = 0x0004
>        bInterfaceNumber = 0x0000
>        bAlternateSetting = 0x0000
>        bNumEndpoints = 0x0001
>        bInterfaceClass = 0x000e  <Video device>
>        bInterfaceSubClass = 0x0001
>        bInterfaceProtocol = 0x0000
>        iInterface = 0x0004  <Chicony USB 2.0 Camera>
> 
>        Additional Descriptor
> 
>        bLength = 0x0d
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x01
>         RAW dump:
>         0x00 | 0x0d, 0x24, 0x01, 0x00, 0x01, 0x6d, 0x00, 0x00,
>         0x08 | 0x6c, 0xdc, 0x02, 0x01, 0x01
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x12
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x02
>         RAW dump:
>         0x00 | 0x12, 0x24, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00,
>         0x08 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0e,
>         0x10 | 0x00, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x0b
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x05
>         RAW dump:
>         0x00 | 0x0b, 0x24, 0x05, 0x02, 0x01, 0x00, 0x40, 0x02,
>         0x08 | 0x7f, 0x15, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1d
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x06
>         RAW dump:
>         0x00 | 0x1d, 0x24, 0x06, 0x03, 0xc3, 0x85, 0xb8, 0x0f,
>         0x08 | 0xc2, 0x68, 0x47, 0x45, 0x90, 0xf7, 0x8f, 0x47,
>         0x10 | 0x57, 0x9d, 0x95, 0xfc, 0x00, 0x01, 0x02, 0x04,
>         0x18 | 0x1f, 0x00, 0x00, 0x00, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1d
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x06
>         RAW dump:
>         0x00 | 0x1d, 0x24, 0x06, 0x04, 0x82, 0x06, 0x61, 0x63,
>         0x08 | 0x70, 0x50, 0xab, 0x49, 0xb8, 0xcc, 0xb3, 0x85,
>         0x10 | 0x5e, 0x8d, 0x22, 0x1d, 0x00, 0x01, 0x03, 0x04,
>         0x18 | 0xff, 0xff, 0x71, 0x00, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x09
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x03
>         RAW dump:
>         0x00 | 0x09, 0x24, 0x03, 0x05, 0x01, 0x01, 0x00, 0x04,
>         0x08 | 0x00
> 
>       Endpoint 0
>          bLength = 0x0007
>          bDescriptorType = 0x0005
>          bEndpointAddress = 0x0087  <IN>
>          bmAttributes = 0x0003  <INTERRUPT>
>          wMaxPacketSize = 0x0010
>          bInterval = 0x0008
>          bRefresh = 0x0000
>          bSynchAddress = 0x0000
> 
>        Additional Descriptor
> 
>        bLength = 0x05
>        bDescriptorType = 0x25
>        bDescriptorSubType = 0x03
>         RAW dump:
>         0x00 | 0x05, 0x25, 0x03, 0x05, 0x04
> 
> 
> 
>      Interface 1
>        bLength = 0x0009
>        bDescriptorType = 0x0004
>        bInterfaceNumber = 0x0001
>        bAlternateSetting = 0x0000
>        bNumEndpoints = 0x0000
>        bInterfaceClass = 0x000e  <Video device>
>        bInterfaceSubClass = 0x0002
>        bInterfaceProtocol = 0x0000
>        iInterface = 0x0000  <no string>
> 
>        Additional Descriptor
> 
>        bLength = 0x0f
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x01
>         RAW dump:
>         0x00 | 0x0f, 0x24, 0x01, 0x02, 0x5d, 0x02, 0x81, 0x00,
>         0x08 | 0x05, 0x01, 0x01, 0x00, 0x01, 0x04, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x0b
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x06
>         RAW dump:
>         0x00 | 0x0b, 0x24, 0x06, 0x01, 0x09, 0x01, 0x01, 0x00,
>         0x08 | 0x00, 0x00, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x07
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x07, 0x01, 0x01, 0x80, 0x07, 0x38,
>         0x08 | 0x04, 0x00, 0x80, 0x53, 0x3b, 0x00, 0x80, 0x53,
>         0x10 | 0x3b, 0x00, 0x48, 0x3f, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x07
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x07, 0x02, 0x01, 0xa0, 0x00, 0x78,
>         0x08 | 0x00, 0x00, 0xa0, 0x8c, 0x00, 0x00, 0xa0, 0x8c,
>         0x10 | 0x00, 0x00, 0x96, 0x00, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x07
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x07, 0x03, 0x01, 0xb0, 0x00, 0x90,
>         0x08 | 0x00, 0x00, 0xa0, 0xb9, 0x00, 0x00, 0xa0, 0xb9,
>         0x10 | 0x00, 0x00, 0xc6, 0x00, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x07
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x07, 0x04, 0x01, 0x40, 0x01, 0xf0,
>         0x08 | 0x00, 0x00, 0x80, 0x32, 0x02, 0x00, 0x80, 0x32,
>         0x10 | 0x02, 0x00, 0x58, 0x02, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x07
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x07, 0x05, 0x01, 0x60, 0x01, 0x20,
>         0x08 | 0x01, 0x00, 0x80, 0xe6, 0x02, 0x00, 0x80, 0xe6,
>         0x10 | 0x02, 0x00, 0x18, 0x03, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x07
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x07, 0x06, 0x01, 0x80, 0x02, 0x68,
>         0x08 | 0x01, 0x00, 0x80, 0x97, 0x06, 0x00, 0x80, 0x97,
>         0x10 | 0x06, 0x00, 0x08, 0x07, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x07
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x07, 0x07, 0x01, 0x80, 0x02, 0xe0,
>         0x08 | 0x01, 0x00, 0x00, 0xca, 0x08, 0x00, 0x00, 0xca,
>         0x10 | 0x08, 0x00, 0x60, 0x09, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x07
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x07, 0x08, 0x01, 0x00, 0x05, 0xd0,
>         0x08 | 0x02, 0x00, 0x00, 0x5e, 0x1a, 0x00, 0x00, 0x5e,
>         0x10 | 0x1a, 0x00, 0x20, 0x1c, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x07
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x07, 0x09, 0x01, 0x00, 0x05, 0x00,
>         0x08 | 0x04, 0x00, 0x00, 0x80, 0x25, 0x00, 0x00, 0x80,
>         0x10 | 0x25, 0x00, 0x00, 0x28, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x06
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x0d
>         RAW dump:
>         0x00 | 0x06, 0x24, 0x0d, 0x01, 0x01, 0x04
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1b
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x04
>         RAW dump:
>         0x00 | 0x1b, 0x24, 0x04, 0x02, 0x09, 0x59, 0x55, 0x59,
>         0x08 | 0x32, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00,
>         0x10 | 0xaa, 0x00, 0x38, 0x9b, 0x71, 0x10, 0x01, 0x00,
>         0x18 | 0x00, 0x00, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x05
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x05, 0x01, 0x01, 0x80, 0x07, 0x38,
>         0x08 | 0x04, 0x00, 0x40, 0xe3, 0x09, 0x00, 0x40, 0xe3,
>         0x10 | 0x09, 0x00, 0x48, 0x3f, 0x00, 0x80, 0x84, 0x1e,
>         0x18 | 0x00, 0x01, 0x80, 0x84, 0x1e, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x05
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x05, 0x02, 0x01, 0xa0, 0x00, 0x78,
>         0x08 | 0x00, 0x00, 0xa0, 0x8c, 0x00, 0x00, 0xa0, 0x8c,
>         0x10 | 0x00, 0x00, 0x96, 0x00, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x05
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x05, 0x03, 0x01, 0xb0, 0x00, 0x90,
>         0x08 | 0x00, 0x00, 0xa0, 0xb9, 0x00, 0x00, 0xa0, 0xb9,
>         0x10 | 0x00, 0x00, 0xc6, 0x00, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x05
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x05, 0x04, 0x01, 0x40, 0x01, 0xf0,
>         0x08 | 0x00, 0x00, 0x80, 0x32, 0x02, 0x00, 0x80, 0x32,
>         0x10 | 0x02, 0x00, 0x58, 0x02, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x05
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x05, 0x05, 0x01, 0x60, 0x01, 0x20,
>         0x08 | 0x01, 0x00, 0x80, 0xe6, 0x02, 0x00, 0x80, 0xe6,
>         0x10 | 0x02, 0x00, 0x18, 0x03, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x05
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x05, 0x06, 0x01, 0x80, 0x02, 0x68,
>         0x08 | 0x01, 0x00, 0x80, 0x97, 0x06, 0x00, 0x80, 0x97,
>         0x10 | 0x06, 0x00, 0x08, 0x07, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x05
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x05, 0x07, 0x01, 0x80, 0x02, 0xe0,
>         0x08 | 0x01, 0x00, 0x00, 0xca, 0x08, 0x00, 0x00, 0xca,
>         0x10 | 0x08, 0x00, 0x60, 0x09, 0x00, 0x15, 0x16, 0x05,
>         0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x05
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x05, 0x08, 0x01, 0x00, 0x05, 0xd0,
>         0x08 | 0x02, 0x00, 0x00, 0xca, 0x08, 0x00, 0x00, 0xca,
>         0x10 | 0x08, 0x00, 0x20, 0x1c, 0x00, 0x40, 0x42, 0x0f,
>         0x18 | 0x00, 0x01, 0x40, 0x42, 0x0f, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x1e
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x05
>         RAW dump:
>         0x00 | 0x1e, 0x24, 0x05, 0x09, 0x01, 0x00, 0x05, 0x00,
>         0x08 | 0x04, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x40,
>         0x10 | 0x06, 0x00, 0x00, 0x28, 0x00, 0x80, 0x84, 0x1e,
>         0x18 | 0x00, 0x01, 0x80, 0x84, 0x1e, 0x00
> 
> 
>        Additional Descriptor
> 
>        bLength = 0x06
>        bDescriptorType = 0x24
>        bDescriptorSubType = 0x0d
>         RAW dump:
>         0x00 | 0x06, 0x24, 0x0d, 0x01, 0x01, 0x04
> 
> 
> 
>      Interface 1 Alt 1
>        bLength = 0x0009
>        bDescriptorType = 0x0004
>        bInterfaceNumber = 0x0001
>        bAlternateSetting = 0x0001
>        bNumEndpoints = 0x0001
>        bInterfaceClass = 0x000e  <Video device>
>        bInterfaceSubClass = 0x0002
>        bInterfaceProtocol = 0x0000
>        iInterface = 0x0000  <no string>
> 
>       Endpoint 0
>          bLength = 0x0007
>          bDescriptorType = 0x0005
>          bEndpointAddress = 0x0081  <IN>
>          bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
>          wMaxPacketSize = 0x00c0
>          bInterval = 0x0001
>          bRefresh = 0x0000
>          bSynchAddress = 0x0000
> 
> 
>      Interface 1 Alt 2
>        bLength = 0x0009
>        bDescriptorType = 0x0004
>        bInterfaceNumber = 0x0001
>        bAlternateSetting = 0x0002
>        bNumEndpoints = 0x0001
>        bInterfaceClass = 0x000e  <Video device>
>        bInterfaceSubClass = 0x0002
>        bInterfaceProtocol = 0x0000
>        iInterface = 0x0000  <no string>
> 
>       Endpoint 0
>          bLength = 0x0007
>          bDescriptorType = 0x0005
>          bEndpointAddress = 0x0081  <IN>
>          bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
>          wMaxPacketSize = 0x0180
>          bInterval = 0x0001
>          bRefresh = 0x0000
>          bSynchAddress = 0x0000
> 
> 
>      Interface 1 Alt 3
>        bLength = 0x0009
>        bDescriptorType = 0x0004
>        bInterfaceNumber = 0x0001
>        bAlternateSetting = 0x0003
>        bNumEndpoints = 0x0001
>        bInterfaceClass = 0x000e  <Video device>
>        bInterfaceSubClass = 0x0002
>        bInterfaceProtocol = 0x0000
>        iInterface = 0x0000  <no string>
> 
>       Endpoint 0
>          bLength = 0x0007
>          bDescriptorType = 0x0005
>          bEndpointAddress = 0x0081  <IN>
>          bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
>          wMaxPacketSize = 0x0200
>          bInterval = 0x0001
>          bRefresh = 0x0000
>          bSynchAddress = 0x0000
> 
> 
>      Interface 1 Alt 4
>        bLength = 0x0009
>        bDescriptorType = 0x0004
>        bInterfaceNumber = 0x0001
>        bAlternateSetting = 0x0004
>        bNumEndpoints = 0x0001
>        bInterfaceClass = 0x000e  <Video device>
>        bInterfaceSubClass = 0x0002
>        bInterfaceProtocol = 0x0000
>        iInterface = 0x0000  <no string>
> 
>       Endpoint 0
>          bLength = 0x0007
>          bDescriptorType = 0x0005
>          bEndpointAddress = 0x0081  <IN>
>          bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
>          wMaxPacketSize = 0x0280
>          bInterval = 0x0001
>          bRefresh = 0x0000
>          bSynchAddress = 0x0000
> 
> 
>      Interface 1 Alt 5
>        bLength = 0x0009
>        bDescriptorType = 0x0004
>        bInterfaceNumber = 0x0001
>        bAlternateSetting = 0x0005
>        bNumEndpoints = 0x0001
>        bInterfaceClass = 0x000e  <Video device>
>        bInterfaceSubClass = 0x0002
>        bInterfaceProtocol = 0x0000
>        iInterface = 0x0000  <no string>
> 
>       Endpoint 0
>          bLength = 0x0007
>          bDescriptorType = 0x0005
>          bEndpointAddress = 0x0081  <IN>
>          bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
>          wMaxPacketSize = 0x0320
>          bInterval = 0x0001
>          bRefresh = 0x0000
>          bSynchAddress = 0x0000
> 
> 
>      Interface 1 Alt 6
>        bLength = 0x0009
>        bDescriptorType = 0x0004
>        bInterfaceNumber = 0x0001
>        bAlternateSetting = 0x0006
>        bNumEndpoints = 0x0001
>        bInterfaceClass = 0x000e  <Video device>
>        bInterfaceSubClass = 0x0002
>        bInterfaceProtocol = 0x0000
>        iInterface = 0x0000  <no string>
> 
>       Endpoint 0
>          bLength = 0x0007
>          bDescriptorType = 0x0005
>          bEndpointAddress = 0x0081  <IN>
>          bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
>          wMaxPacketSize = 0x03b0
>          bInterval = 0x0001
>          bRefresh = 0x0000
>          bSynchAddress = 0x0000
> 
> 
>      Interface 1 Alt 7
>        bLength = 0x0009
>        bDescriptorType = 0x0004
>        bInterfaceNumber = 0x0001
>        bAlternateSetting = 0x0007
>        bNumEndpoints = 0x0001
>        bInterfaceClass = 0x000e  <Video device>
>        bInterfaceSubClass = 0x0002
>        bInterfaceProtocol = 0x0000
>        iInterface = 0x0000  <no string>
> 
>       Endpoint 0
>          bLength = 0x0007
>          bDescriptorType = 0x0005
>          bEndpointAddress = 0x0081  <IN>
>          bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
>          wMaxPacketSize = 0x0a80
>          bInterval = 0x0001
>          bRefresh = 0x0000
>          bSynchAddress = 0x0000
> 
> 
>      Interface 1 Alt 8
>        bLength = 0x0009
>        bDescriptorType = 0x0004
>        bInterfaceNumber = 0x0001
>        bAlternateSetting = 0x0008
>        bNumEndpoints = 0x0001
>        bInterfaceClass = 0x000e  <Video device>
>        bInterfaceSubClass = 0x0002
>        bInterfaceProtocol = 0x0000
>        iInterface = 0x0000  <no string>
> 
>       Endpoint 0
>          bLength = 0x0007
>          bDescriptorType = 0x0005
>          bEndpointAddress = 0x0081  <IN>
>          bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
>          wMaxPacketSize = 0x0b20
>          bInterval = 0x0001
>          bRefresh = 0x0000
>          bSynchAddress = 0x0000
> 
> 
>      Interface 1 Alt 9
>        bLength = 0x0009
>        bDescriptorType = 0x0004
>        bInterfaceNumber = 0x0001
>        bAlternateSetting = 0x0009
>        bNumEndpoints = 0x0001
>        bInterfaceClass = 0x000e  <Video device>
>        bInterfaceSubClass = 0x0002
>        bInterfaceProtocol = 0x0000
>        iInterface = 0x0000  <no string>
> 
>       Endpoint 0
>          bLength = 0x0007
>          bDescriptorType = 0x0005
>          bEndpointAddress = 0x0081  <IN>
>          bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
>          wMaxPacketSize = 0x0be0
>          bInterval = 0x0001
>          bRefresh = 0x0000
>          bSynchAddress = 0x0000
> 
> 
>      Interface 1 Alt 10
>        bLength = 0x0009
>        bDescriptorType = 0x0004
>        bInterfaceNumber = 0x0001
>        bAlternateSetting = 0x000a
>        bNumEndpoints = 0x0001
>        bInterfaceClass = 0x000e  <Video device>
>        bInterfaceSubClass = 0x0002
>        bInterfaceProtocol = 0x0000
>        iInterface = 0x0000  <no string>
> 
>       Endpoint 0
>          bLength = 0x0007
>          bDescriptorType = 0x0005
>          bEndpointAddress = 0x0081  <IN>
>          bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
>          wMaxPacketSize = 0x13c0
>          bInterval = 0x0001
>          bRefresh = 0x0000
>          bSynchAddress = 0x0000
> 
> 
>      Interface 1 Alt 11
>        bLength = 0x0009
>        bDescriptorType = 0x0004
>        bInterfaceNumber = 0x0001
>        bAlternateSetting = 0x000b
>        bNumEndpoints = 0x0001
>        bInterfaceClass = 0x000e  <Video device>
>        bInterfaceSubClass = 0x0002
>        bInterfaceProtocol = 0x0000
>        iInterface = 0x0000  <no string>
> 
>       Endpoint 0
>          bLength = 0x0007
>          bDescriptorType = 0x0005
>          bEndpointAddress = 0x0081  <IN>
>          bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
>          wMaxPacketSize = 0x13fc
>          bInterval = 0x0001
>          bRefresh = 0x0000
>          bSynchAddress = 0x0000
> _______________________________________________
> freebsd-drivers@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-drivers
> To unsubscribe, send any mail to "freebsd-drivers-unsubscribe@freebsd.org"
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5bd8a40a-2795-6a1a-d8e7-2fc603fdfc2a>