From 215bc97c2a227eaf0473a801a9b20f9b218cfbbe Mon Sep 17 00:00:00 2001 Message-Id: <215bc97c2a227eaf0473a801a9b20f9b218cfbbe.1334581530.git.minovotn@redhat.com> In-Reply-To: <28774cb15d2443e325049ef410956f5635a1484b.1334581530.git.minovotn@redhat.com> References: <28774cb15d2443e325049ef410956f5635a1484b.1334581530.git.minovotn@redhat.com> From: Gerd Hoffmann Date: Fri, 30 Mar 2012 12:35:35 +0200 Subject: [PATCH 5/6] usb: use USBDescriptor for endpoint descriptors. RH-Author: Gerd Hoffmann Message-id: <1333110936-22700-6-git-send-email-kraxel@redhat.com> Patchwork-id: 39041 O-Subject: [RHEL-6.3 qemu-kvm PATCH 5/6] usb: use USBDescriptor for endpoint descriptors. Bugzilla: 807878 RH-Acked-by: Hans de Goede RH-Acked-by: Laszlo Ersek RH-Acked-by: Paolo Bonzini Add endpoint descriptor substruct to USBDescriptor, use it in the descriptor generator code. upstream: http://patchwork.ozlabs.org/patch/149402/ Signed-off-by: Gerd Hoffmann Conflicts: hw/usb-desc.c [ rhel6 lacks audio endpoint support ] --- hw/usb-desc.c | 16 +++++++++------- hw/usb-desc.h | 9 +++++++++ 2 files changed, 18 insertions(+), 7 deletions(-) Signed-off-by: Michal Novotny --- hw/usb-desc.c | 16 +++++++++------- hw/usb-desc.h | 9 +++++++++ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/hw/usb-desc.c b/hw/usb-desc.c index 6a13dfa..d8c9aa3 100644 --- a/hw/usb-desc.c +++ b/hw/usb-desc.c @@ -199,18 +199,20 @@ int usb_desc_iface(const USBDescIface *iface, uint8_t *dest, size_t len) int usb_desc_endpoint(const USBDescEndpoint *ep, uint8_t *dest, size_t len) { uint8_t bLength = 0x07; + USBDescriptor *d = (void *)dest; if (len < bLength) { return -1; } - dest[0x00] = bLength; - dest[0x01] = USB_DT_ENDPOINT; - dest[0x02] = ep->bEndpointAddress; - dest[0x03] = ep->bmAttributes; - dest[0x04] = usb_lo(ep->wMaxPacketSize); - dest[0x05] = usb_hi(ep->wMaxPacketSize); - dest[0x06] = ep->bInterval; + d->bLength = bLength; + d->bDescriptorType = USB_DT_ENDPOINT; + + d->u.endpoint.bEndpointAddress = ep->bEndpointAddress; + d->u.endpoint.bmAttributes = ep->bmAttributes; + d->u.endpoint.wMaxPacketSize_lo = usb_lo(ep->wMaxPacketSize); + d->u.endpoint.wMaxPacketSize_hi = usb_hi(ep->wMaxPacketSize); + d->u.endpoint.bInterval = ep->bInterval; return bLength; } diff --git a/hw/usb-desc.h b/hw/usb-desc.h index 2364605..df53d2c 100644 --- a/hw/usb-desc.h +++ b/hw/usb-desc.h @@ -54,6 +54,15 @@ typedef struct USBDescriptor { uint8_t bInterfaceProtocol; uint8_t iInterface; } interface; + struct { + uint8_t bEndpointAddress; + uint8_t bmAttributes; + uint8_t wMaxPacketSize_lo; + uint8_t wMaxPacketSize_hi; + uint8_t bInterval; + uint8_t bRefresh; /* only audio ep */ + uint8_t bSynchAddress; /* only audio ep */ + } endpoint; } u; } __attribute__((packed)) USBDescriptor; -- 1.7.7.6