
The header files usb.h and usbdescriptors.h have the same or similarly named structure definitions for
usb_device_descriptor usb_string_descriptor usb_endpoint_descriptor usb_config_descriptor vs usb_configuration_descriptor usb_interface_descriptor
There should only be one definition of these structures. Some of these structures are element-wise duplicates, one has unused elements that can be reduced to a duplicate, and some of the the structures have additional elements.
These are the element-wise duplicates in usb.h
usb_device_descriptor usb_string_descriptor
For these, the usb.h definition will be removed.
This definition in usb.h has extra unused elements
usb_endpoint_descriptor
unsigned char bRefresh unsigned char bSynchAddress;
The definition of usb_endpoint_descriptor in usb.h will be removed.
These definitions in usb.h have extra elements at the end of the usb 2.0 specified descriptor:
usb_config_descriptor usb_interface_descriptor
These structures will have their name shorted by removing the '_descriptor' suffix.
So
usb_config_descriptor -> usb_config usb_interface_descriptor -> usb_interface
The common descriptor elements are now defined by the macros
USB_CONFIG_DESCRIPTOR_DEFINITION USB_INTERFACE_DESCRIPTOR_DEFINITION
This has been compile tested on MAKEALL arm, ppc and mips.
Signed-off-by: Tom Rix Tom.Rix@windriver.com --- common/cmd_usb.c | 12 ++++---- common/usb.c | 8 ++-- common/usb_kbd.c | 4 +- common/usb_storage.c | 2 +- cpu/ppc4xx/usbdev.c | 4 +- drivers/usb/host/ehci-hcd.c | 2 +- drivers/usb/musb/musb_hcd.c | 2 +- include/usb.h | 70 +++++------------------------------------- include/usbdescriptors.h | 40 ++++++++++++++---------- 9 files changed, 49 insertions(+), 95 deletions(-)
diff --git a/common/cmd_usb.c b/common/cmd_usb.c index 7b8ee6b..6f3b095 100644 --- a/common/cmd_usb.c +++ b/common/cmd_usb.c @@ -187,14 +187,14 @@ void usb_display_desc(struct usb_device *dev)
}
-void usb_display_conf_desc(struct usb_config_descriptor *config, +void usb_display_conf_desc(struct usb_config *config, struct usb_device *dev) { printf(" Configuration: %d\n", config->bConfigurationValue); printf(" - Interfaces: %d %s%s%dmA\n", config->bNumInterfaces, (config->bmAttributes & 0x40) ? "Self Powered " : "Bus Powered ", (config->bmAttributes & 0x20) ? "Remote Wakeup " : "", - config->MaxPower*2); + config->bMaxPower*2); if (config->iConfiguration) { printf(" - "); usb_display_string(dev, config->iConfiguration); @@ -202,7 +202,7 @@ void usb_display_conf_desc(struct usb_config_descriptor *config, } }
-void usb_display_if_desc(struct usb_interface_descriptor *ifdesc, +void usb_display_if_desc(struct usb_interface *ifdesc, struct usb_device *dev) { printf(" Interface: %d\n", ifdesc->bInterfaceNumber); @@ -246,8 +246,8 @@ void usb_display_ep_desc(struct usb_endpoint_descriptor *epdesc) /* main routine to diasplay the configs, interfaces and endpoints */ void usb_display_config(struct usb_device *dev) { - struct usb_config_descriptor *config; - struct usb_interface_descriptor *ifdesc; + struct usb_config *config; + struct usb_interface *ifdesc; struct usb_endpoint_descriptor *epdesc; int i, ii;
@@ -321,7 +321,7 @@ void usb_show_tree_graph(struct usb_device *dev, char *pre) printf(" %s (%s, %dmA)\n", usb_get_class_desc( dev->config.if_desc[0].bInterfaceClass), portspeed(dev->speed), - dev->config.MaxPower * 2); + dev->config.bMaxPower * 2); if (strlen(dev->mf) || strlen(dev->prod) || strlen(dev->serial)) printf(" %s %s %s %s\n", pre, dev->mf, dev->prod, dev->serial); printf(" %s\n", pre); diff --git a/common/usb.c b/common/usb.c index 87fca70..6649f8c 100644 --- a/common/usb.c +++ b/common/usb.c @@ -440,10 +440,10 @@ int usb_get_configuration_no(struct usb_device *dev, { int result; unsigned int tmp; - struct usb_config_descriptor *config; + struct usb_config *config;
- config = (struct usb_config_descriptor *)&buffer[0]; + config = (struct usb_config *)&buffer[0]; result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno, buffer, 9); if (result < 9) { if (result < 0) @@ -489,7 +489,7 @@ int usb_set_address(struct usb_device *dev) */ int usb_set_interface(struct usb_device *dev, int interface, int alternate) { - struct usb_interface_descriptor *if_face = NULL; + struct usb_interface *if_face = NULL; int ret, i;
for (i = 0; i < dev->config.bNumInterfaces; i++) { @@ -1347,7 +1347,7 @@ int usb_hub_configure(struct usb_device *dev)
int usb_hub_probe(struct usb_device *dev, int ifnum) { - struct usb_interface_descriptor *iface; + struct usb_interface *iface; struct usb_endpoint_descriptor *ep; int ret;
diff --git a/common/usb_kbd.c b/common/usb_kbd.c index b458d77..4e584a2 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -229,7 +229,7 @@ int usb_kbd_deregister(void)
static void usb_kbd_setled(struct usb_device *dev) { - struct usb_interface_descriptor *iface; + struct usb_interface *iface; iface = &dev->config.if_desc[0]; leds=0; if(scroll_lock!=0) @@ -348,7 +348,7 @@ static int usb_kbd_irq(struct usb_device *dev) /* probes the USB device dev for keyboard type */ static int usb_kbd_probe(struct usb_device *dev, unsigned int ifnum) { - struct usb_interface_descriptor *iface; + struct usb_interface *iface; struct usb_endpoint_descriptor *ep; int pipe,maxp;
diff --git a/common/usb_storage.c b/common/usb_storage.c index 19613f2..4afc8ff 100644 --- a/common/usb_storage.c +++ b/common/usb_storage.c @@ -1070,7 +1070,7 @@ retry_it: int usb_storage_probe(struct usb_device *dev, unsigned int ifnum, struct us_data *ss) { - struct usb_interface_descriptor *iface; + struct usb_interface *iface; int i; unsigned int flags = 0;
diff --git a/cpu/ppc4xx/usbdev.c b/cpu/ppc4xx/usbdev.c index 5bb4f3c..fe398af 100644 --- a/cpu/ppc4xx/usbdev.c +++ b/cpu/ppc4xx/usbdev.c @@ -21,7 +21,7 @@ void process_endpoints(unsigned short usb2d0_intrin) { /*will hold the packet received */ struct usb_device_descriptor usb_device_packet; - struct usb_config_descriptor usb_config_packet; + struct usb_configuration_descriptor usb_config_packet; struct usb_string_descriptor usb_string_packet; struct devrequest setup_packet; unsigned int *setup_packet_pt; @@ -99,7 +99,7 @@ void process_endpoints(unsigned short usb2d0_intrin) usb_config_packet.bConfigurationValue = 1; usb_config_packet.iConfiguration = 0; usb_config_packet.bmAttributes = 0x40; - usb_config_packet.MaxPower = 0; + usb_config_packet.bMaxPower = 0;
/*put packet in fifo */ packet_pt = (unsigned char *)&usb_config_packet; diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 324c308..ba85991 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -96,7 +96,7 @@ static struct descriptor { * UE_DIR_IN | EHCI_INTR_ENDPT */ 3, /* bmAttributes: UE_INTERRUPT */ - 8, 0, /* wMaxPacketSize */ + 8, /* wMaxPacketSize */ 255 /* bInterval */ }, }; diff --git a/drivers/usb/musb/musb_hcd.c b/drivers/usb/musb/musb_hcd.c index 4ca94cb..555d2dc 100644 --- a/drivers/usb/musb/musb_hcd.c +++ b/drivers/usb/musb/musb_hcd.c @@ -803,7 +803,7 @@ void usb_event_poll() { struct stdio_dev *dev; struct usb_device *usb_kbd_dev; - struct usb_interface_descriptor *iface; + struct usb_interface *iface; struct usb_endpoint_descriptor *ep; int pipe; int maxp; diff --git a/include/usb.h b/include/usb.h index 7c47098..378a23b 100644 --- a/include/usb.h +++ b/include/usb.h @@ -27,6 +27,7 @@ #define _USB_H_
#include <usb_defs.h> +#include <usbdescriptors.h>
/* Everything is aribtrary */ #define USB_ALTSETTINGALLOC 4 @@ -41,13 +42,6 @@
#define USB_CNTL_TIMEOUT 100 /* 100ms timeout */
-/* String descriptor */ -struct usb_string_descriptor { - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short wData[1]; -} __attribute__ ((packed)); - /* device request (setup) */ struct devrequest { unsigned char requesttype; @@ -63,47 +57,9 @@ struct usb_descriptor_header { unsigned char bDescriptorType; } __attribute__ ((packed));
-/* Device descriptor */ -struct usb_device_descriptor { - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short bcdUSB; - unsigned char bDeviceClass; - unsigned char bDeviceSubClass; - unsigned char bDeviceProtocol; - unsigned char bMaxPacketSize0; - unsigned short idVendor; - unsigned short idProduct; - unsigned short bcdDevice; - unsigned char iManufacturer; - unsigned char iProduct; - unsigned char iSerialNumber; - unsigned char bNumConfigurations; -} __attribute__ ((packed)); - -/* Endpoint descriptor */ -struct usb_endpoint_descriptor { - unsigned char bLength; - unsigned char bDescriptorType; - unsigned char bEndpointAddress; - unsigned char bmAttributes; - unsigned short wMaxPacketSize; - unsigned char bInterval; - unsigned char bRefresh; - unsigned char bSynchAddress; -} __attribute__ ((packed)) __attribute__ ((aligned(2))); - -/* Interface descriptor */ -struct usb_interface_descriptor { - unsigned char bLength; - unsigned char bDescriptorType; - unsigned char bInterfaceNumber; - unsigned char bAlternateSetting; - unsigned char bNumEndpoints; - unsigned char bInterfaceClass; - unsigned char bInterfaceSubClass; - unsigned char bInterfaceProtocol; - unsigned char iInterface; +/* Interface */ +struct usb_interface { + USB_INTERFACE_DESCRIPTOR_DEFINITION;
unsigned char no_of_ep; unsigned char num_altsetting; @@ -112,20 +68,12 @@ struct usb_interface_descriptor { struct usb_endpoint_descriptor ep_desc[USB_MAXENDPOINTS]; } __attribute__ ((packed));
- -/* Configuration descriptor information.. */ -struct usb_config_descriptor { - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short wTotalLength; - unsigned char bNumInterfaces; - unsigned char bConfigurationValue; - unsigned char iConfiguration; - unsigned char bmAttributes; - unsigned char MaxPower; +/* Configuration information.. */ +struct usb_config { + USB_CONFIG_DESCRIPTOR_DEFINITION;
unsigned char no_of_if; /* number of interfaces */ - struct usb_interface_descriptor if_desc[USB_MAXINTERFACES]; + struct usb_interface if_desc[USB_MAXINTERFACES]; } __attribute__ ((packed));
enum { @@ -156,7 +104,7 @@ struct usb_device {
int configno; /* selected config number */ struct usb_device_descriptor descriptor; /* Device Descriptor */ - struct usb_config_descriptor config; /* config descriptor */ + struct usb_config config; /* config descriptor */
int have_langid; /* whether string_langid is valid yet */ int string_langid; /* language ID for strings */ diff --git a/include/usbdescriptors.h b/include/usbdescriptors.h index a752097..ea05672 100644 --- a/include/usbdescriptors.h +++ b/include/usbdescriptors.h @@ -201,27 +201,33 @@ struct usb_endpoint_descriptor { u8 bInterval; } __attribute__ ((packed));
+#define USB_INTERFACE_DESCRIPTOR_DEFINITION \ + u8 bLength; \ + u8 bDescriptorType; /* 0x04 */ \ + u8 bInterfaceNumber; \ + u8 bAlternateSetting; \ + u8 bNumEndpoints; \ + u8 bInterfaceClass; \ + u8 bInterfaceSubClass; \ + u8 bInterfaceProtocol; \ + u8 iInterface + struct usb_interface_descriptor { - u8 bLength; - u8 bDescriptorType; /* 0x04 */ - u8 bInterfaceNumber; - u8 bAlternateSetting; - u8 bNumEndpoints; - u8 bInterfaceClass; - u8 bInterfaceSubClass; - u8 bInterfaceProtocol; - u8 iInterface; + USB_INTERFACE_DESCRIPTOR_DEFINITION; } __attribute__ ((packed));
+#define USB_CONFIG_DESCRIPTOR_DEFINITION \ + u8 bLength; \ + u8 bDescriptorType; /* 0x2 */ \ + u16 wTotalLength; \ + u8 bNumInterfaces; \ + u8 bConfigurationValue; \ + u8 iConfiguration; \ + u8 bmAttributes; \ + u8 bMaxPower + struct usb_configuration_descriptor { - u8 bLength; - u8 bDescriptorType; /* 0x2 */ - u16 wTotalLength; - u8 bNumInterfaces; - u8 bConfigurationValue; - u8 iConfiguration; - u8 bmAttributes; - u8 bMaxPower; + USB_CONFIG_DESCRIPTOR_DEFINITION; } __attribute__ ((packed));
struct usb_device_descriptor {