Skip to content

Commit

Permalink
usb: fix endpoint descriptor ordering
Browse files Browse the repository at this point in the history
Fix the ordering of the endpoint descriptors for superspeed endpoints:
The superspeed companion must come first, possible additional
descriptors for the endpoint after that.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
  • Loading branch information
kraxel committed Feb 19, 2013
1 parent 6ef3ccd commit 2e5df36
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions hw/usb/desc.c
Expand Up @@ -225,12 +225,9 @@ int usb_desc_endpoint(const USBDescEndpoint *ep, int flags,
d->u.endpoint.bRefresh = ep->bRefresh;
d->u.endpoint.bSynchAddress = ep->bSynchAddress;
}
if (ep->extra) {
memcpy(dest + bLength, ep->extra, extralen);
}

if (superlen) {
USBDescriptor *d = (void *)(dest + bLength + extralen);
USBDescriptor *d = (void *)(dest + bLength);

d->bLength = 0x06;
d->bDescriptorType = USB_DT_ENDPOINT_COMPANION;
Expand All @@ -243,6 +240,10 @@ int usb_desc_endpoint(const USBDescEndpoint *ep, int flags,
usb_hi(ep->wBytesPerInterval);
}

if (ep->extra) {
memcpy(dest + bLength + superlen, ep->extra, extralen);
}

return bLength + extralen + superlen;
}

Expand Down

0 comments on commit 2e5df36

Please sign in to comment.