[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 24/32] usb: add usb_desc_attach
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH v4 24/32] usb: add usb_desc_attach |
Date: |
Wed, 12 Jan 2011 12:20:06 +0100 |
Add usb_desc_attach() which sets up the device according to the speed
the usb port is able to handle. This function can be hooked into the
handle_attach callback.
Signed-off-by: Gerd Hoffmann <address@hidden>
---
hw/usb-desc.c | 36 +++++++++++++++++++++++++++++++++---
hw/usb-desc.h | 1 +
2 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/hw/usb-desc.c b/hw/usb-desc.c
index 56ef734..f01e1cf 100644
--- a/hw/usb-desc.c
+++ b/hw/usb-desc.c
@@ -153,16 +153,46 @@ int usb_desc_other(const USBDescOther *desc, uint8_t
*dest, size_t len)
/* ------------------------------------------------------------------ */
-void usb_desc_init(USBDevice *dev)
+static void usb_desc_setdefaults(USBDevice *dev)
{
const USBDesc *desc = dev->info->usb_desc;
assert(desc != NULL);
- dev->speed = USB_SPEED_FULL;
- dev->device = desc->full;
+ switch (dev->speed) {
+ case USB_SPEED_LOW:
+ case USB_SPEED_FULL:
+ dev->device = desc->full;
+ break;
+ case USB_SPEED_HIGH:
+ dev->device = desc->high;
+ break;
+ }
dev->config = dev->device->confs;
}
+void usb_desc_init(USBDevice *dev)
+{
+ dev->speed = USB_SPEED_FULL;
+ usb_desc_setdefaults(dev);
+}
+
+void usb_desc_attach(USBDevice *dev)
+{
+ const USBDesc *desc = dev->info->usb_desc;
+
+ assert(desc != NULL);
+ if (desc->high && (dev->port->speedmask & USB_SPEED_MASK_HIGH)) {
+ dev->speed = USB_SPEED_HIGH;
+ } else if (desc->full && (dev->port->speedmask & USB_SPEED_MASK_FULL)) {
+ dev->speed = USB_SPEED_FULL;
+ } else {
+ fprintf(stderr, "usb: port/device speed mismatch for \"%s\"\n",
+ dev->info->product_desc);
+ return;
+ }
+ usb_desc_setdefaults(dev);
+}
+
void usb_desc_set_string(USBDevice *dev, uint8_t index, const char *str)
{
USBDescString *s;
diff --git a/hw/usb-desc.h b/hw/usb-desc.h
index d441725..484c7c7 100644
--- a/hw/usb-desc.h
+++ b/hw/usb-desc.h
@@ -79,6 +79,7 @@ int usb_desc_other(const USBDescOther *desc, uint8_t *dest,
size_t len);
/* control message emulation helpers */
void usb_desc_init(USBDevice *dev);
+void usb_desc_attach(USBDevice *dev);
void usb_desc_set_string(USBDevice *dev, uint8_t index, const char *str);
const char *usb_desc_get_string(USBDevice *dev, uint8_t index);
int usb_desc_string(USBDevice *dev, int index, uint8_t *dest, size_t len);
--
1.7.1
- [Qemu-devel] [PATCH v4 21/32] usb: hid: change serial number to "42"., (continued)
- [Qemu-devel] [PATCH v4 21/32] usb: hid: change serial number to "42"., Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 19/32] usb: hub: remote wakeup support., Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 23/32] usb: add attach callback, Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 15/32] usb: create USBPortOps, move attach there., Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 20/32] usb: hid: remote wakeup support., Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 18/32] usb: uhci: remote wakeup support., Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 17/32] usb: add usb_wakeup() + wakeup callback to port ops, Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 31/32] usb: rewrite fw path, fix numbering, Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 24/32] usb: add usb_desc_attach,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH v4 22/32] usb: add speed mask to ports, Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 32/32] usb: zap pdev from usbport, Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 27/32] usb storage: fix status reporting, Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 28/32] usb storage: handle long responses, Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 16/32] usb: rework attach/detach workflow, Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 25/32] usb: add device qualifier support, Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 26/32] usb storage: high speed support, Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 29/32] usb: keep track of physical port address., Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 30/32] usb: add port property., Gerd Hoffmann, 2011/01/12
- [Qemu-devel] [PATCH v4 13/32] usb: move USB_REQ_{GET, SET}_CONFIGURATION handling to common code, Gerd Hoffmann, 2011/01/12