diff options
| author | riastradh <riastradh@NetBSD.org> | 2022-04-17 13:15:37 +0000 |
|---|---|---|
| committer | riastradh <riastradh@NetBSD.org> | 2022-04-17 13:15:37 +0000 |
| commit | 95340d18e02c4edb5cebd2edb99f4b8b306bce24 (patch) | |
| tree | 74837cb1eab5a7d985fd30dd29f28933f61bc986 /sys/dev/usb | |
| parent | 8f683709ef7e9a9ee77475bbe802953cc6173979 (diff) | |
usbdi(9): Restore usb_descriptor_t to its correct definition.
Descriptors in the USB spec all start with bLength and
bDescriptorType. bDescriptorSubtype is only for certain
class-specific descriptors. Many descriptors, such as
usb_device_descriptor_t, _do not_ have bDescriptorSubtype, so using a
structure that has bDescriptorSubtype for such descrpitors is wrong.
There is some history here:
- Back in 1998, when augustss@ introduced the USB stack, the type
usb_descriptor_t was erroneously defined with a bDescriptorSubtype
member.
- In 2007, drochner@ removed this member to accurately reflect the
USB spec.
- In 2018, khorben@ appeared to have accidentally reintroduced it
while importing the umb(4) driver from OpenBSD, which still has the
erroneous bDescriptorSubtype member in usb_descriptor_t.
The umb(4) driver has since been adjusted to correctly use
usb_cdc_descriptor_t instead of usb_descriptor_t (and I have now
restored umidi_cs_descriptor_t which I had removed last month before
I realized this history of usb_descriptor_t), so this member is no
longer necessary.
Diffstat (limited to 'sys/dev/usb')
| -rw-r--r-- | sys/dev/usb/usb.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/dev/usb/usb.h b/sys/dev/usb/usb.h index 2d0734433a4..92cf37d4ec4 100644 --- a/sys/dev/usb/usb.h +++ b/sys/dev/usb/usb.h @@ -1,4 +1,4 @@ -/* $NetBSD: usb.h,v 1.119 2021/10/11 00:25:05 jmcneill Exp $ */ +/* $NetBSD: usb.h,v 1.120 2022/04/17 13:15:37 riastradh Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -202,12 +202,18 @@ typedef struct { #define USB_3_MAX_CTRL_PACKET 512 +/* + * This is the common header to all USB descriptors defined in the USB + * specification. + * + * DO NOT CHANGE THIS TYPE! + */ typedef struct { uByte bLength; uByte bDescriptorType; - uByte bDescriptorSubtype; } UPACKED usb_descriptor_t; -#define USB_DESCRIPTOR_SIZE 3 +#define USB_DESCRIPTOR_SIZE 2 +__CTASSERT(sizeof(usb_descriptor_t) == USB_DESCRIPTOR_SIZE); typedef struct { uByte bLength; |
