Module Name: src
Committed By: riastradh
Date: Sun Apr 17 13:15:37 UTC 2022
Modified Files:
src/sys/dev/usb: usb.h
Log Message:
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.
To generate a diff of this commit:
cvs rdiff -u -r1.119 -r1.120 src/sys/dev/usb/usb.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/usb/usb.h
diff -u src/sys/dev/usb/usb.h:1.119 src/sys/dev/usb/usb.h:1.120
--- src/sys/dev/usb/usb.h:1.119 Mon Oct 11 00:25:05 2021
+++ src/sys/dev/usb/usb.h Sun Apr 17 13:15:37 2022
@@ -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;