Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 151429
b: refs/heads/master
c: f0058c6
h: refs/heads/master
i:
  151427: aaac375
v: v3
  • Loading branch information
Sarah Sharp authored and Greg Kroah-Hartman committed Jun 16, 2009
1 parent 47c8ca9 commit 08a78b1
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 28 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b7116ebca4e1a898f30ae474151fd6474327257c
refs/heads/master: f0058c627855ecb3b6c7185b7ad1910463c24c42
36 changes: 19 additions & 17 deletions trunk/drivers/usb/core/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,30 +69,31 @@ static int find_next_descriptor(unsigned char *buffer, int size,
return buffer - buffer0;
}

static int usb_parse_endpoint_companion(struct device *ddev, int cfgno,
static int usb_parse_ss_endpoint_companion(struct device *ddev, int cfgno,
int inum, int asnum, struct usb_host_endpoint *ep,
int num_ep, unsigned char *buffer, int size)
{
unsigned char *buffer_start = buffer;
struct usb_ep_comp_descriptor *desc;
struct usb_ss_ep_comp_descriptor *desc;
int retval;
int num_skipped;
int max_tx;
int i;

/* Allocate space for the companion descriptor */
ep->ep_comp = kzalloc(sizeof(struct usb_host_ep_comp), GFP_KERNEL);
if (!ep->ep_comp)
/* Allocate space for the SS endpoint companion descriptor */
ep->ss_ep_comp = kzalloc(sizeof(struct usb_host_ss_ep_comp),
GFP_KERNEL);
if (!ep->ss_ep_comp)
return -ENOMEM;
desc = (struct usb_ep_comp_descriptor *) buffer;
desc = (struct usb_ss_ep_comp_descriptor *) buffer;
if (desc->bDescriptorType != USB_DT_SS_ENDPOINT_COMP) {
dev_warn(ddev, "No SuperSpeed endpoint companion for config %d "
" interface %d altsetting %d ep %d: "
"using minimum values\n",
cfgno, inum, asnum, ep->desc.bEndpointAddress);
ep->ep_comp->desc.bLength = USB_DT_EP_COMP_SIZE;
ep->ep_comp->desc.bDescriptorType = USB_DT_SS_ENDPOINT_COMP;
ep->ep_comp->desc.bMaxBurst = 0;
ep->ss_ep_comp->desc.bLength = USB_DT_SS_EP_COMP_SIZE;
ep->ss_ep_comp->desc.bDescriptorType = USB_DT_SS_ENDPOINT_COMP;
ep->ss_ep_comp->desc.bMaxBurst = 0;
/*
* Leave bmAttributes as zero, which will mean no streams for
* bulk, and isoc won't support multiple bursts of packets.
Expand All @@ -102,7 +103,7 @@ static int usb_parse_endpoint_companion(struct device *ddev, int cfgno,
*/
if (usb_endpoint_xfer_isoc(&ep->desc) ||
usb_endpoint_xfer_int(&ep->desc))
ep->ep_comp->desc.wBytesPerInterval =
ep->ss_ep_comp->desc.wBytesPerInterval =
ep->desc.wMaxPacketSize;
/*
* The next descriptor is for an Endpoint or Interface,
Expand All @@ -112,16 +113,16 @@ static int usb_parse_endpoint_companion(struct device *ddev, int cfgno,
retval = 0;
goto valid;
}
memcpy(&ep->ep_comp->desc, desc, USB_DT_EP_COMP_SIZE);
desc = &ep->ep_comp->desc;
memcpy(&ep->ss_ep_comp->desc, desc, USB_DT_SS_EP_COMP_SIZE);
desc = &ep->ss_ep_comp->desc;
buffer += desc->bLength;
size -= desc->bLength;

/* Eat up the other descriptors we don't care about */
ep->ep_comp->extra = buffer;
ep->ss_ep_comp->extra = buffer;
i = find_next_descriptor(buffer, size, USB_DT_ENDPOINT,
USB_DT_INTERFACE, &num_skipped);
ep->ep_comp->extralen = i;
ep->ss_ep_comp->extralen = i;
buffer += i;
size -= i;
retval = buffer - buffer_start + i;
Expand Down Expand Up @@ -310,7 +311,7 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno, int inum,
cfgno, inum, asnum, d->bEndpointAddress,
maxp);
}
/* Allocate room for and parse any endpoint companion descriptors */
/* Allocate room for and parse any SS endpoint companion descriptors */
if (to_usb_device(ddev)->speed == USB_SPEED_SUPER) {
endpoint->extra = buffer;
i = find_next_descriptor_more(buffer, size, USB_DT_SS_ENDPOINT_COMP,
Expand All @@ -320,8 +321,9 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno, int inum,
size -= i;

if (size > 0) {
retval = usb_parse_endpoint_companion(ddev, cfgno, inum, asnum,
endpoint, num_ep, buffer, size);
retval = usb_parse_ss_endpoint_companion(ddev, cfgno,
inum, asnum, endpoint, num_ep, buffer,
size);
if (retval >= 0) {
buffer += retval;
retval = buffer - buffer0;
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/usb/host/xhci-mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,7 @@ int xhci_endpoint_init(struct xhci_hcd *xhci,
max_packet = ep->desc.wMaxPacketSize;
ep_ctx->ep_info2 |= MAX_PACKET(max_packet);
/* dig out max burst from ep companion desc */
max_packet = ep->ep_comp->desc.bMaxBurst;
max_packet = ep->ss_ep_comp->desc.bMaxBurst;
ep_ctx->ep_info2 |= MAX_BURST(max_packet);
break;
case USB_SPEED_HIGH:
Expand Down
14 changes: 7 additions & 7 deletions trunk/include/linux/usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,15 @@ struct ep_device;

/* For SS devices */
/**
* struct usb_host_ep_comp - Valid for SuperSpeed devices only
* struct usb_host_ss_ep_comp - Valid for SuperSpeed devices only
* @desc: endpoint companion descriptor, wMaxPacketSize in native byteorder
* @extra: descriptors following this endpoint companion descriptor
* @extralen: how many bytes of "extra" are valid
*/
struct usb_host_ep_comp {
struct usb_ep_comp_descriptor desc;
unsigned char *extra; /* Extra descriptors */
int extralen;
struct usb_host_ss_ep_comp {
struct usb_ss_ep_comp_descriptor desc;
unsigned char *extra; /* Extra descriptors */
int extralen;
};

/**
Expand All @@ -65,7 +65,7 @@ struct usb_host_ep_comp {
* @hcpriv: for use by HCD; typically holds hardware dma queue head (QH)
* with one or more transfer descriptors (TDs) per urb
* @ep_dev: ep_device for sysfs info
* @ep_comp: companion descriptor information for this endpoint
* @ss_ep_comp: companion descriptor information for this endpoint
* @extra: descriptors following this endpoint in the configuration
* @extralen: how many bytes of "extra" are valid
* @enabled: URBs may be submitted to this endpoint
Expand All @@ -78,7 +78,7 @@ struct usb_host_endpoint {
struct list_head urb_list;
void *hcpriv;
struct ep_device *ep_dev; /* For sysfs info */
struct usb_host_ep_comp *ep_comp; /* For SS devices */
struct usb_host_ss_ep_comp *ss_ep_comp; /* For SS devices */

unsigned char *extra; /* Extra descriptors */
int extralen;
Expand Down
4 changes: 2 additions & 2 deletions trunk/include/linux/usb/ch9.h
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ static inline int usb_endpoint_is_isoc_out(
/*-------------------------------------------------------------------------*/

/* USB_DT_SS_ENDPOINT_COMP: SuperSpeed Endpoint Companion descriptor */
struct usb_ep_comp_descriptor {
struct usb_ss_ep_comp_descriptor {
__u8 bLength;
__u8 bDescriptorType;

Expand All @@ -547,7 +547,7 @@ struct usb_ep_comp_descriptor {
__u16 wBytesPerInterval;
} __attribute__ ((packed));

#define USB_DT_EP_COMP_SIZE 6
#define USB_DT_SS_EP_COMP_SIZE 6

/*-------------------------------------------------------------------------*/

Expand Down

0 comments on commit 08a78b1

Please sign in to comment.