[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/23] usb: Add a register_companion USB bus op.
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 04/23] usb: Add a register_companion USB bus op. |
Date: |
Fri, 8 Jul 2011 11:50:54 +0200 |
From: Hans de Goede <address@hidden>
This is a preparation patch for adding support for USB companion controllers.
Signed-off-by: Hans de Goede <address@hidden>
Signed-off-by: Gerd Hoffmann <address@hidden>
---
hw/usb-bus.c | 31 +++++++++++++++++++++++++++++++
hw/usb.h | 5 +++++
2 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/hw/usb-bus.c b/hw/usb-bus.c
index e37e8a2..b511bac 100644
--- a/hw/usb-bus.c
+++ b/hw/usb-bus.c
@@ -160,6 +160,37 @@ void usb_register_port(USBBus *bus, USBPort *port, void
*opaque, int index,
bus->nfree++;
}
+int usb_register_companion(const char *masterbus, USBPort *ports[],
+ uint32_t portcount, uint32_t firstport,
+ void *opaque, USBPortOps *ops, int speedmask)
+{
+ USBBus *bus;
+ int i;
+
+ QTAILQ_FOREACH(bus, &busses, next) {
+ if (strcmp(bus->qbus.name, masterbus) == 0) {
+ break;
+ }
+ }
+
+ if (!bus || !bus->ops->register_companion) {
+ qerror_report(QERR_INVALID_PARAMETER_VALUE, "masterbus",
+ "an USB masterbus");
+ if (bus) {
+ error_printf_unless_qmp(
+ "USB bus '%s' does not allow companion controllers\n",
+ masterbus);
+ }
+ return -1;
+ }
+
+ for (i = 0; i < portcount; i++) {
+ usb_fill_port(ports[i], opaque, i, ops, speedmask);
+ }
+
+ return bus->ops->register_companion(bus, ports, portcount, firstport);
+}
+
void usb_port_location(USBPort *downstream, USBPort *upstream, int portnr)
{
if (upstream) {
diff --git a/hw/usb.h b/hw/usb.h
index 076e2ff..a5f2efa 100644
--- a/hw/usb.h
+++ b/hw/usb.h
@@ -344,6 +344,8 @@ struct USBBus {
};
struct USBBusOps {
+ int (*register_companion)(USBBus *bus, USBPort *ports[],
+ uint32_t portcount, uint32_t firstport);
void (*device_destroy)(USBBus *bus, USBDevice *dev);
};
@@ -356,6 +358,9 @@ USBDevice *usb_create_simple(USBBus *bus, const char *name);
USBDevice *usbdevice_create(const char *cmdline);
void usb_register_port(USBBus *bus, USBPort *port, void *opaque, int index,
USBPortOps *ops, int speedmask);
+int usb_register_companion(const char *masterbus, USBPort *ports[],
+ uint32_t portcount, uint32_t firstport,
+ void *opaque, USBPortOps *ops, int speedmask);
void usb_port_location(USBPort *downstream, USBPort *upstream, int portnr);
void usb_unregister_port(USBBus *bus, USBPort *port);
int usb_device_attach(USBDevice *dev);
--
1.7.1
- [Qemu-devel] [PULL] usb patch queue, Gerd Hoffmann, 2011/07/08
- [Qemu-devel] [PATCH 03/23] usb: Move (initial) call of usb_port_location to usb_fill_port, Gerd Hoffmann, 2011/07/08
- [Qemu-devel] [PATCH 04/23] usb: Add a register_companion USB bus op.,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 02/23] usb: Add a usb_fill_port helper function, Gerd Hoffmann, 2011/07/08
- [Qemu-devel] [PATCH 10/23] usb: assert on calling usb_attach(port, NULL) on a port without a dev, Gerd Hoffmann, 2011/07/08
- [Qemu-devel] [PATCH 09/23] usb-ehci: cleanup port reset handling, Gerd Hoffmann, 2011/07/08
- [Qemu-devel] [PATCH 08/23] usb-ehci: Connect Status bit is read only, don't allow changing it by the guest, Gerd Hoffmann, 2011/07/08
- [Qemu-devel] [PATCH 11/23] usb-ehci: Fix handling of PED and PEDC port status bits, Gerd Hoffmann, 2011/07/08
- [Qemu-devel] [PATCH 01/23] hw/usb-musb.c: Don't misuse usb_packet_complete(), Gerd Hoffmann, 2011/07/08
- [Qemu-devel] [PATCH 07/23] usb-ehci: drop unused num-ports state member, Gerd Hoffmann, 2011/07/08
- [Qemu-devel] [PATCH 05/23] usb: Make port wakeup and complete ops take a USBPort instead of a Device, Gerd Hoffmann, 2011/07/08
- [Qemu-devel] [PATCH 14/23] usb-ohci: Add support for being a companion controller, Gerd Hoffmann, 2011/07/08
- [Qemu-devel] [PATCH 13/23] usb-uhci: Add support for being a companion controller, Gerd Hoffmann, 2011/07/08