diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2014-07-10 11:36:12 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-07-18 14:42:35 +0200 |
commit | 245069bcef15ecc19db616a967501349b76c84d0 (patch) | |
tree | 9398374ea6f0b87d4658c343326aaceba90cbd4d /drivers/usb/core/usb.c | |
parent | 4a872ae0ffe1380a28589f8f9e164d9d67471f1a (diff) | |
download | barebox-245069bcef15ecc19db616a967501349b76c84d0.tar.gz barebox-245069bcef15ecc19db616a967501349b76c84d0.tar.xz |
USB: introduce usb_interface/usb_configuration structs
Currently we have two conflicting definitions of struct usb_config_descriptor
and struct usb_interface_descriptor in the tree. This is because the USB code
uses additional fields in the structs for internal housekeeping. Add
struct usb_interface and struct struct usb_configuration with the housekeeping
data and embed the corresponding hardware structs into them. This frees the
way to use the definitions from ch9.h in the next step.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/usb/core/usb.c')
-rw-r--r-- | drivers/usb/core/usb.c | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index 9c1571d190..f5724322ce 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c @@ -159,10 +159,10 @@ static int usb_set_maxpacket(struct usb_device *dev) { int i, ii; - for (i = 0; i < dev->config.bNumInterfaces; i++) - for (ii = 0; ii < dev->config.if_desc[i].bNumEndpoints; ii++) + for (i = 0; i < dev->config.desc.bNumInterfaces; i++) + for (ii = 0; ii < dev->config.interface[i].desc.bNumEndpoints; ii++) usb_set_maxpacket_ep(dev, - &dev->config.if_desc[i].ep_desc[ii]); + &dev->config.interface[i].ep_desc[ii]); return 0; } @@ -193,11 +193,11 @@ static int usb_parse_config(struct usb_device *dev, unsigned char *buffer, int c le16_to_cpus(&(dev->config.wTotalLength)); dev->config.no_of_if = 0; - index = dev->config.bLength; + index = dev->config.desc.bLength; /* Ok the first entry must be a configuration entry, * now process the others */ head = (struct usb_descriptor_header *) &buffer[index]; - while (index + 1 < dev->config.wTotalLength) { + while (index + 1 < dev->config.desc.wTotalLength) { switch (head->bDescriptorType) { case USB_DT_INTERFACE: if (((struct usb_interface_descriptor *) \ @@ -215,24 +215,24 @@ static int usb_parse_config(struct usb_device *dev, unsigned char *buffer, int c break; } dev->config.no_of_if++; - memcpy(&dev->config.if_desc[ifno], + memcpy(&dev->config.interface[ifno].desc, &buffer[index], buffer[index]); - dev->config.if_desc[ifno].no_of_ep = 0; - dev->config.if_desc[ifno].num_altsetting = 1; + dev->config.interface[ifno].no_of_ep = 0; + dev->config.interface[ifno].num_altsetting = 1; curr_if_num = - dev->config.if_desc[ifno].bInterfaceNumber; + dev->config.interface[ifno].desc.bInterfaceNumber; } else { /* found alternate setting for the interface */ - dev->config.if_desc[ifno].num_altsetting++; + dev->config.interface[ifno].num_altsetting++; } break; case USB_DT_ENDPOINT: - epno = dev->config.if_desc[ifno].no_of_ep; + epno = dev->config.interface[ifno].no_of_ep; /* found an endpoint */ - dev->config.if_desc[ifno].no_of_ep++; - memcpy(&dev->config.if_desc[ifno].ep_desc[epno], + dev->config.interface[ifno].no_of_ep++; + memcpy(&dev->config.interface[ifno].ep_desc[epno], &buffer[index], buffer[index]); - le16_to_cpus(&(dev->config.if_desc[ifno].ep_desc[epno].\ + le16_to_cpus(&(dev->config.interface[ifno].ep_desc[epno].\ wMaxPacketSize)); USB_PRINTF("if %d, ep %d\n", ifno, epno); break; @@ -411,7 +411,7 @@ static int usb_new_device(struct usb_device *dev) usb_parse_config(dev, buf, 0); usb_set_maxpacket(dev); /* we set the default configuration here */ - if (usb_set_configuration(dev, dev->config.bConfigurationValue)) { + if (usb_set_configuration(dev, dev->config.desc.bConfigurationValue)) { printf("failed to set default configuration " \ "len %d, status %lX\n", dev->act_len, dev->status); goto err_out; @@ -721,12 +721,12 @@ int usb_get_configuration_no(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++) { - if (dev->config.if_desc[i].bInterfaceNumber == interface) { - if_face = &dev->config.if_desc[i]; + for (i = 0; i < dev->config.desc.bNumInterfaces; i++) { + if (dev->config.interface[i].desc.bInterfaceNumber == interface) { + if_face = &dev->config.interface[i]; break; } } @@ -1297,21 +1297,21 @@ static int usb_hub_configure(struct usb_device *dev) static 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; - iface = &dev->config.if_desc[ifnum]; + iface = &dev->config.interface[ifnum]; /* Is it a hub? */ - if (iface->bInterfaceClass != USB_CLASS_HUB) + if (iface->desc.bInterfaceClass != USB_CLASS_HUB) return 0; /* Some hubs have a subclass of 1, which AFAICT according to the */ /* specs is not defined, but it works */ - if ((iface->bInterfaceSubClass != 0) && - (iface->bInterfaceSubClass != 1)) + if ((iface->desc.bInterfaceSubClass != 0) && + (iface->desc.bInterfaceSubClass != 1)) return 0; /* Multiple endpoints? What kind of mutant ninja-hub is this? */ - if (iface->bNumEndpoints != 1) + if (iface->desc.bNumEndpoints != 1) return 0; ep = &iface->ep_desc[0]; /* Output endpoint? Curiousier and curiousier.. */ @@ -1373,7 +1373,7 @@ static int usb_match_one_id(struct usb_device *usbdev, /* match any interface */ for (ifno=0; ifno<usbdev->config.no_of_if; ifno++) { struct usb_interface_descriptor *intf; - intf = &usbdev->config.if_desc[ifno]; + intf = &usbdev->config.interface[ifno].desc; if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_CLASS) && (id->bInterfaceClass != intf->bInterfaceClass)) |