* [Qemu-devel] [PULL 0/8] usb patch queue
@ 2011-01-24 16:30 Gerd Hoffmann
2011-02-17 20:00 ` Anthony Liguori
0 siblings, 1 reply; 14+ messages in thread
From: Gerd Hoffmann @ 2011-01-24 16:30 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
Here is the current usb patch queue. What is in there?
Migration support for USB devices. For starters hub and HID devices are
covered.
Event queues for the usb mouse/table (thanks to Paolo and the Xen folks)
and the usb keyboard, so we can have the queue included in the migration
state right from the start and avoid the compatibility issues we would
get when adding this later on.
Also includes is a warning fix from blueswirl.
please pull,
Gerd
The following changes since commit 0bfe006c5380c5f8a485a55ded3329fbbc224396:
multiboot: Fix upper memory size in multiboot info (2011-01-23 22:44:13 +0100)
are available in the git repository at:
git://anongit.freedesktop.org/spice/qemu usb.5
Blue Swirl (1):
usb-bus: use snprintf
Gerd Hoffmann (6):
usb keyboard: add event event queue
usb hid: move head+n to common struct
vnc: fix numlock+capslock tracking
usb core: add migration support
usb hub: add migration support
usb hid: add migration support
Paolo Bonzini (1):
add event queueing to USB HID
hw/hw.h | 10 ++
hw/usb-bus.c | 28 ++++-
hw/usb-hid.c | 317 ++++++++++++++++++++++++++++++++++++++++------------------
hw/usb-hub.c | 24 +++++
hw/usb.h | 10 +-
ui/vnc.c | 4 +-
6 files changed, 282 insertions(+), 111 deletions(-)
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PULL 0/8] usb patch queue
2011-01-24 16:30 Gerd Hoffmann
@ 2011-02-17 20:00 ` Anthony Liguori
0 siblings, 0 replies; 14+ messages in thread
From: Anthony Liguori @ 2011-02-17 20:00 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
On 01/24/2011 10:30 AM, Gerd Hoffmann wrote:
> Hi,
>
> Here is the current usb patch queue. What is in there?
>
> Migration support for USB devices. For starters hub and HID devices are
> covered.
>
> Event queues for the usb mouse/table (thanks to Paolo and the Xen folks)
> and the usb keyboard, so we can have the queue included in the migration
> state right from the start and avoid the compatibility issues we would
> get when adding this later on.
>
> Also includes is a warning fix from blueswirl.
>
Pulled. Thanks.
Regards,
Anthony Liguori
> please pull,
> Gerd
>
> The following changes since commit 0bfe006c5380c5f8a485a55ded3329fbbc224396:
>
> multiboot: Fix upper memory size in multiboot info (2011-01-23 22:44:13 +0100)
>
> are available in the git repository at:
> git://anongit.freedesktop.org/spice/qemu usb.5
>
> Blue Swirl (1):
> usb-bus: use snprintf
>
> Gerd Hoffmann (6):
> usb keyboard: add event event queue
> usb hid: move head+n to common struct
> vnc: fix numlock+capslock tracking
> usb core: add migration support
> usb hub: add migration support
> usb hid: add migration support
>
> Paolo Bonzini (1):
> add event queueing to USB HID
>
> hw/hw.h | 10 ++
> hw/usb-bus.c | 28 ++++-
> hw/usb-hid.c | 317 ++++++++++++++++++++++++++++++++++++++++------------------
> hw/usb-hub.c | 24 +++++
> hw/usb.h | 10 +-
> ui/vnc.c | 4 +-
> 6 files changed, 282 insertions(+), 111 deletions(-)
>
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 0/8] usb patch queue
@ 2012-09-26 7:36 Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 1/8] add pc-1.3 machine type Gerd Hoffmann
` (8 more replies)
0 siblings, 9 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2012-09-26 7:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
This is the usb patch queue. Adds a pc-1.3 machine type (patch #1) so I
can add xhci compat properties (patch #2). xhci gets usb hub support.
Other that that just a bunch of bugfixes.
please pull,
Gerd
The following changes since commit d9b41bcda91ea7285d934a9c2333c49cd32d1ad3:
Merge remote-tracking branch 'origin/master' into staging (2012-09-25 18:12:07 -0500)
are available in the git repository at:
git://git.kraxel.org/qemu usb.66
David Gibson (1):
usb: Fix usb_packet_map() in the presence of IOMMUs
Gerd Hoffmann (5):
add pc-1.3 machine type
compat: turn off msi/msix on xhci for old machine types
xhci: tweak limits
xhci: route string & usb hub support
xhci: create a memory region for each port
Hans de Goede (2):
ehci: Fix interrupt packet MULT handling
usb-redir: Adjust pkg-config check for usbredirparser .pc file rename (v2)
configure | 6 +-
hw/pc_piix.c | 28 ++++++++-
hw/usb/hcd-ehci.c | 40 ++++++------
hw/usb/hcd-xhci.c | 179 ++++++++++++++++++++++++++++++-----------------------
hw/usb/libhw.c | 24 +++++---
5 files changed, 166 insertions(+), 111 deletions(-)
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH 1/8] add pc-1.3 machine type
2012-09-26 7:36 [Qemu-devel] [PULL 0/8] usb patch queue Gerd Hoffmann
@ 2012-09-26 7:36 ` Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 2/8] compat: turn off msi/msix on xhci for old machine types Gerd Hoffmann
` (7 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2012-09-26 7:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/pc_piix.c | 12 ++++++++++--
1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index 88ff041..5a0796b 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -349,8 +349,8 @@ static void pc_xen_hvm_init(ram_addr_t ram_size,
}
#endif
-static QEMUMachine pc_machine_v1_2 = {
- .name = "pc-1.2",
+static QEMUMachine pc_machine_v1_3 = {
+ .name = "pc-1.3",
.alias = "pc",
.desc = "Standard PC",
.init = pc_init_pci,
@@ -358,6 +358,13 @@ static QEMUMachine pc_machine_v1_2 = {
.is_default = 1,
};
+static QEMUMachine pc_machine_v1_2 = {
+ .name = "pc-1.2",
+ .desc = "Standard PC",
+ .init = pc_init_pci,
+ .max_cpus = 255,
+};
+
#define PC_COMPAT_1_1 \
{\
.driver = "virtio-scsi-pci",\
@@ -655,6 +662,7 @@ static QEMUMachine xenfv_machine = {
static void pc_machine_init(void)
{
+ qemu_register_machine(&pc_machine_v1_3);
qemu_register_machine(&pc_machine_v1_2);
qemu_register_machine(&pc_machine_v1_1);
qemu_register_machine(&pc_machine_v1_0);
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH 2/8] compat: turn off msi/msix on xhci for old machine types
2012-09-26 7:36 [Qemu-devel] [PULL 0/8] usb patch queue Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 1/8] add pc-1.3 machine type Gerd Hoffmann
@ 2012-09-26 7:36 ` Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 3/8] xhci: tweak limits Gerd Hoffmann
` (6 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2012-09-26 7:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/pc_piix.c | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index 5a0796b..afd8361 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -358,14 +358,30 @@ static QEMUMachine pc_machine_v1_3 = {
.is_default = 1,
};
+#define PC_COMPAT_1_2 \
+ {\
+ .driver = "nec-usb-xhci",\
+ .property = "msi",\
+ .value = "off",\
+ },{\
+ .driver = "nec-usb-xhci",\
+ .property = "msix",\
+ .value = "off",\
+ }
+
static QEMUMachine pc_machine_v1_2 = {
.name = "pc-1.2",
.desc = "Standard PC",
.init = pc_init_pci,
.max_cpus = 255,
+ .compat_props = (GlobalProperty[]) {
+ PC_COMPAT_1_2,
+ { /* end of list */ }
+ },
};
#define PC_COMPAT_1_1 \
+ PC_COMPAT_1_2,\
{\
.driver = "virtio-scsi-pci",\
.property = "hotplug",\
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH 3/8] xhci: tweak limits
2012-09-26 7:36 [Qemu-devel] [PULL 0/8] usb patch queue Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 1/8] add pc-1.3 machine type Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 2/8] compat: turn off msi/msix on xhci for old machine types Gerd Hoffmann
@ 2012-09-26 7:36 ` Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 4/8] xhci: route string & usb hub support Gerd Hoffmann
` (5 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2012-09-26 7:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Set maxports to 15. This is what the usb3 route string can handle.
Set maxslots to 64. This is more than the number of root ports we
can have, but with additional hubs you can end up with more devices.
Set maxintrs (aka msi vectors) to 16. Should be enougth, especially
considering that vectors are a limited ressource. Linux guests use
only three at the moment.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb/hcd-xhci.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index e0ca690..1414826 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -37,12 +37,12 @@
#define FIXME() do { fprintf(stderr, "FIXME %s:%d\n", \
__func__, __LINE__); abort(); } while (0)
-#define MAXPORTS_2 8
-#define MAXPORTS_3 8
+#define MAXPORTS_2 15
+#define MAXPORTS_3 15
#define MAXPORTS (MAXPORTS_2+MAXPORTS_3)
-#define MAXSLOTS MAXPORTS
-#define MAXINTRS MAXPORTS
+#define MAXSLOTS 64
+#define MAXINTRS 16
#define TD_QUEUE 24
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH 4/8] xhci: route string & usb hub support
2012-09-26 7:36 [Qemu-devel] [PULL 0/8] usb patch queue Gerd Hoffmann
` (2 preceding siblings ...)
2012-09-26 7:36 ` [Qemu-devel] [PATCH 3/8] xhci: tweak limits Gerd Hoffmann
@ 2012-09-26 7:36 ` Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 5/8] xhci: create a memory region for each port Gerd Hoffmann
` (4 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2012-09-26 7:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Parse route string in slot contexts and
support devices connected via hub.
---
hw/usb/hcd-xhci.c | 86 ++++++++++++++++++++++++++++++++++-------------------
1 files changed, 55 insertions(+), 31 deletions(-)
diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index 1414826..8c0155b 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -363,7 +363,7 @@ typedef struct XHCIEPContext {
typedef struct XHCISlot {
bool enabled;
dma_addr_t ctx;
- unsigned int port;
+ USBPort *uport;
unsigned int devaddr;
XHCIEPContext * eps[31];
} XHCISlot;
@@ -1230,7 +1230,7 @@ static TRBCCode xhci_reset_ep(XHCIState *xhci, unsigned int slotid,
ep |= 0x80;
}
- dev = xhci->ports[xhci->slots[slotid-1].port-1].uport->dev;
+ dev = xhci->slots[slotid-1].uport->dev;
if (!dev) {
return CC_USB_TRANSACTION_ERROR;
}
@@ -1412,18 +1412,9 @@ static void xhci_stall_ep(XHCITransfer *xfer)
static int xhci_submit(XHCIState *xhci, XHCITransfer *xfer,
XHCIEPContext *epctx);
-static USBDevice *xhci_find_device(XHCIPort *port, uint8_t addr)
-{
- if (!(port->portsc & PORTSC_PED)) {
- return NULL;
- }
- return usb_find_device(port->uport, addr);
-}
-
static int xhci_setup_packet(XHCITransfer *xfer)
{
XHCIState *xhci = xfer->xhci;
- XHCIPort *port;
USBDevice *dev;
USBEndpoint *ep;
int dir;
@@ -1434,13 +1425,12 @@ static int xhci_setup_packet(XHCITransfer *xfer)
ep = xfer->packet.ep;
dev = ep->dev;
} else {
- port = &xhci->ports[xhci->slots[xfer->slotid-1].port-1];
- dev = xhci_find_device(port, xhci->slots[xfer->slotid-1].devaddr);
- if (!dev) {
- fprintf(stderr, "xhci: slot %d port %d has no device\n",
- xfer->slotid, xhci->slots[xfer->slotid-1].port);
+ if (!xhci->slots[xfer->slotid-1].uport) {
+ fprintf(stderr, "xhci: slot %d has no device\n",
+ xfer->slotid);
return -1;
}
+ dev = xhci->slots[xfer->slotid-1].uport->dev;
ep = usb_ep_get(dev, dir, xfer->epid >> 1);
}
@@ -1772,7 +1762,7 @@ static TRBCCode xhci_enable_slot(XHCIState *xhci, unsigned int slotid)
trace_usb_xhci_slot_enable(slotid);
assert(slotid >= 1 && slotid <= MAXSLOTS);
xhci->slots[slotid-1].enabled = 1;
- xhci->slots[slotid-1].port = 0;
+ xhci->slots[slotid-1].uport = NULL;
memset(xhci->slots[slotid-1].eps, 0, sizeof(XHCIEPContext*)*31);
return CC_SUCCESS;
@@ -1795,17 +1785,42 @@ static TRBCCode xhci_disable_slot(XHCIState *xhci, unsigned int slotid)
return CC_SUCCESS;
}
+static USBPort *xhci_lookup_uport(XHCIState *xhci, uint32_t *slot_ctx)
+{
+ USBPort *uport;
+ char path[32];
+ int i, pos, port;
+
+ port = (slot_ctx[1]>>16) & 0xFF;
+ port = xhci->ports[port-1].uport->index+1;
+ pos = snprintf(path, sizeof(path), "%d", port);
+ for (i = 0; i < 5; i++) {
+ port = (slot_ctx[0] >> 4*i) & 0x0f;
+ if (!port) {
+ break;
+ }
+ pos += snprintf(path + pos, sizeof(path) - pos, ".%d", port);
+ }
+
+ QTAILQ_FOREACH(uport, &xhci->bus.used, next) {
+ if (strcmp(uport->path, path) == 0) {
+ return uport;
+ }
+ }
+ return NULL;
+}
+
static TRBCCode xhci_address_slot(XHCIState *xhci, unsigned int slotid,
uint64_t pictx, bool bsr)
{
XHCISlot *slot;
+ USBPort *uport;
USBDevice *dev;
dma_addr_t ictx, octx, dcbaap;
uint64_t poctx;
uint32_t ictl_ctx[2];
uint32_t slot_ctx[4];
uint32_t ep0_ctx[5];
- unsigned int port;
int i;
TRBCCode res;
@@ -1837,27 +1852,28 @@ static TRBCCode xhci_address_slot(XHCIState *xhci, unsigned int slotid,
DPRINTF("xhci: input ep0 context: %08x %08x %08x %08x %08x\n",
ep0_ctx[0], ep0_ctx[1], ep0_ctx[2], ep0_ctx[3], ep0_ctx[4]);
- port = (slot_ctx[1]>>16) & 0xFF;
- dev = xhci->ports[port-1].uport->dev;
-
- if (port < 1 || port > xhci->numports) {
- fprintf(stderr, "xhci: bad port %d\n", port);
+ uport = xhci_lookup_uport(xhci, slot_ctx);
+ if (uport == NULL) {
+ fprintf(stderr, "xhci: port not found\n");
return CC_TRB_ERROR;
- } else if (!dev) {
- fprintf(stderr, "xhci: port %d not connected\n", port);
+ }
+
+ dev = uport->dev;
+ if (!dev) {
+ fprintf(stderr, "xhci: port %s not connected\n", uport->path);
return CC_USB_TRANSACTION_ERROR;
}
for (i = 0; i < MAXSLOTS; i++) {
- if (xhci->slots[i].port == port) {
- fprintf(stderr, "xhci: port %d already assigned to slot %d\n",
- port, i+1);
+ if (xhci->slots[i].uport == uport) {
+ fprintf(stderr, "xhci: port %s already assigned to slot %d\n",
+ uport->path, i+1);
return CC_TRB_ERROR;
}
}
slot = &xhci->slots[slotid-1];
- slot->port = port;
+ slot->uport = uport;
slot->ctx = octx;
if (bsr) {
@@ -2821,9 +2837,17 @@ static void xhci_complete(USBPort *port, USBPacket *packet)
xhci_kick_ep(xfer->xhci, xfer->slotid, xfer->epid);
}
-static void xhci_child_detach(USBPort *port, USBDevice *child)
+static void xhci_child_detach(USBPort *uport, USBDevice *child)
{
- FIXME();
+ USBBus *bus = usb_bus_from_device(child);
+ XHCIState *xhci = container_of(bus, XHCIState, bus);
+ int i;
+
+ for (i = 0; i < MAXSLOTS; i++) {
+ if (xhci->slots[i].uport == uport) {
+ xhci->slots[i].uport = NULL;
+ }
+ }
}
static USBPortOps xhci_port_ops = {
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH 5/8] xhci: create a memory region for each port
2012-09-26 7:36 [Qemu-devel] [PULL 0/8] usb patch queue Gerd Hoffmann
` (3 preceding siblings ...)
2012-09-26 7:36 ` [Qemu-devel] [PATCH 4/8] xhci: route string & usb hub support Gerd Hoffmann
@ 2012-09-26 7:36 ` Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 6/8] ehci: Fix interrupt packet MULT handling Gerd Hoffmann
` (3 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2012-09-26 7:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb/hcd-xhci.c | 85 +++++++++++++++++++++++++++--------------------------
1 files changed, 43 insertions(+), 42 deletions(-)
diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index 8c0155b..e79a872 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -285,6 +285,8 @@ typedef enum TRBCCode {
#define SLOT_CONTEXT_ENTRIES_MASK 0x1f
#define SLOT_CONTEXT_ENTRIES_SHIFT 27
+typedef struct XHCIState XHCIState;
+
typedef enum EPType {
ET_INVALID = 0,
ET_ISO_OUT,
@@ -303,15 +305,15 @@ typedef struct XHCIRing {
} XHCIRing;
typedef struct XHCIPort {
+ XHCIState *xhci;
uint32_t portsc;
uint32_t portnr;
USBPort *uport;
uint32_t speedmask;
+ char name[16];
+ MemoryRegion mem;
} XHCIPort;
-struct XHCIState;
-typedef struct XHCIState XHCIState;
-
typedef struct XHCITransfer {
XHCIState *xhci;
USBPacket packet;
@@ -2430,20 +2432,14 @@ static uint64_t xhci_cap_read(void *ptr, target_phys_addr_t reg, unsigned size)
return ret;
}
-static uint32_t xhci_port_read(XHCIState *xhci, uint32_t reg)
+static uint64_t xhci_port_read(void *ptr, target_phys_addr_t reg, unsigned size)
{
- uint32_t port = reg >> 4;
+ XHCIPort *port = ptr;
uint32_t ret;
- if (port >= xhci->numports) {
- fprintf(stderr, "xhci_port_read: port %d out of bounds\n", port);
- ret = 0;
- goto out;
- }
-
- switch (reg & 0xf) {
+ switch (reg) {
case 0x00: /* PORTSC */
- ret = xhci->ports[port].portsc;
+ ret = port->portsc;
break;
case 0x04: /* PORTPMSC */
case 0x08: /* PORTLI */
@@ -2452,30 +2448,25 @@ static uint32_t xhci_port_read(XHCIState *xhci, uint32_t reg)
case 0x0c: /* reserved */
default:
fprintf(stderr, "xhci_port_read (port %d): reg 0x%x unimplemented\n",
- port, reg);
+ port->portnr, (uint32_t)reg);
ret = 0;
}
-out:
- trace_usb_xhci_port_read(port, reg & 0x0f, ret);
+ trace_usb_xhci_port_read(port->portnr, reg, ret);
return ret;
}
-static void xhci_port_write(XHCIState *xhci, uint32_t reg, uint32_t val)
+static void xhci_port_write(void *ptr, target_phys_addr_t reg,
+ uint64_t val, unsigned size)
{
- uint32_t port = reg >> 4;
+ XHCIPort *port = ptr;
uint32_t portsc;
- trace_usb_xhci_port_write(port, reg & 0x0f, val);
+ trace_usb_xhci_port_write(port->portnr, reg, val);
- if (port >= xhci->numports) {
- fprintf(stderr, "xhci_port_read: port %d out of bounds\n", port);
- return;
- }
-
- switch (reg & 0xf) {
+ switch (reg) {
case 0x00: /* PORTSC */
- portsc = xhci->ports[port].portsc;
+ portsc = port->portsc;
/* write-1-to-clear bits*/
portsc &= ~(val & (PORTSC_CSC|PORTSC_PEC|PORTSC_WRC|PORTSC_OCC|
PORTSC_PRC|PORTSC_PLC|PORTSC_CEC));
@@ -2490,16 +2481,16 @@ static void xhci_port_write(XHCIState *xhci, uint32_t reg, uint32_t val)
/* write-1-to-start bits */
if (val & PORTSC_PR) {
DPRINTF("xhci: port %d reset\n", port);
- usb_device_reset(xhci->ports[port].uport->dev);
+ usb_device_reset(port->uport->dev);
portsc |= PORTSC_PRC | PORTSC_PED;
}
- xhci->ports[port].portsc = portsc;
+ port->portsc = portsc;
break;
case 0x04: /* PORTPMSC */
case 0x08: /* PORTLI */
default:
fprintf(stderr, "xhci_port_write (port %d): reg 0x%x unimplemented\n",
- port, reg);
+ port->portnr, (uint32_t)reg);
}
}
@@ -2508,10 +2499,6 @@ static uint64_t xhci_oper_read(void *ptr, target_phys_addr_t reg, unsigned size)
XHCIState *xhci = ptr;
uint32_t ret;
- if (reg >= 0x400) {
- return xhci_port_read(xhci, reg - 0x400);
- }
-
switch (reg) {
case 0x00: /* USBCMD */
ret = xhci->usbcmd;
@@ -2554,11 +2541,6 @@ static void xhci_oper_write(void *ptr, target_phys_addr_t reg,
{
XHCIState *xhci = ptr;
- if (reg >= 0x400) {
- xhci_port_write(xhci, reg - 0x400, val);
- return;
- }
-
trace_usb_xhci_oper_write(reg, val);
switch (reg) {
@@ -2777,6 +2759,14 @@ static const MemoryRegionOps xhci_oper_ops = {
.endianness = DEVICE_LITTLE_ENDIAN,
};
+static const MemoryRegionOps xhci_port_ops = {
+ .read = xhci_port_read,
+ .write = xhci_port_write,
+ .valid.min_access_size = 4,
+ .valid.max_access_size = 4,
+ .endianness = DEVICE_LITTLE_ENDIAN,
+};
+
static const MemoryRegionOps xhci_runtime_ops = {
.read = xhci_runtime_read,
.write = xhci_runtime_write,
@@ -2850,7 +2840,7 @@ static void xhci_child_detach(USBPort *uport, USBDevice *child)
}
}
-static USBPortOps xhci_port_ops = {
+static USBPortOps xhci_uport_ops = {
.attach = xhci_attach,
.detach = xhci_detach,
.wakeup = xhci_wakeup,
@@ -2930,6 +2920,7 @@ static void usb_xhci_init(XHCIState *xhci, DeviceState *dev)
USB_SPEED_MASK_LOW |
USB_SPEED_MASK_FULL |
USB_SPEED_MASK_HIGH;
+ snprintf(port->name, sizeof(port->name), "usb2 port #%d", i+1);
speedmask |= port->speedmask;
}
if (i < xhci->numports_3) {
@@ -2937,16 +2928,17 @@ static void usb_xhci_init(XHCIState *xhci, DeviceState *dev)
port->portnr = i + 1 + xhci->numports_2;
port->uport = &xhci->uports[i];
port->speedmask = USB_SPEED_MASK_SUPER;
+ snprintf(port->name, sizeof(port->name), "usb3 port #%d", i+1);
speedmask |= port->speedmask;
}
usb_register_port(&xhci->bus, &xhci->uports[i], xhci, i,
- &xhci_port_ops, speedmask);
+ &xhci_uport_ops, speedmask);
}
}
static int usb_xhci_initfn(struct PCIDevice *dev)
{
- int ret;
+ int i, ret;
XHCIState *xhci = DO_UPCAST(XHCIState, pci_dev, dev);
@@ -2965,7 +2957,7 @@ static int usb_xhci_initfn(struct PCIDevice *dev)
memory_region_init_io(&xhci->mem_cap, &xhci_cap_ops, xhci,
"capabilities", LEN_CAP);
memory_region_init_io(&xhci->mem_oper, &xhci_oper_ops, xhci,
- "operational", 0x400 + 0x10 * xhci->numports);
+ "operational", 0x400);
memory_region_init_io(&xhci->mem_runtime, &xhci_runtime_ops, xhci,
"runtime", LEN_RUNTIME);
memory_region_init_io(&xhci->mem_doorbell, &xhci_doorbell_ops, xhci,
@@ -2976,6 +2968,15 @@ static int usb_xhci_initfn(struct PCIDevice *dev)
memory_region_add_subregion(&xhci->mem, OFF_RUNTIME, &xhci->mem_runtime);
memory_region_add_subregion(&xhci->mem, OFF_DOORBELL, &xhci->mem_doorbell);
+ for (i = 0; i < xhci->numports; i++) {
+ XHCIPort *port = &xhci->ports[i];
+ uint32_t offset = OFF_OPER + 0x400 + 0x10 * i;
+ port->xhci = xhci;
+ memory_region_init_io(&port->mem, &xhci_port_ops, port,
+ port->name, 0x10);
+ memory_region_add_subregion(&xhci->mem, offset, &port->mem);
+ }
+
pci_register_bar(&xhci->pci_dev, 0,
PCI_BASE_ADDRESS_SPACE_MEMORY|PCI_BASE_ADDRESS_MEM_TYPE_64,
&xhci->mem);
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH 6/8] ehci: Fix interrupt packet MULT handling
2012-09-26 7:36 [Qemu-devel] [PULL 0/8] usb patch queue Gerd Hoffmann
` (4 preceding siblings ...)
2012-09-26 7:36 ` [Qemu-devel] [PATCH 5/8] xhci: create a memory region for each port Gerd Hoffmann
@ 2012-09-26 7:36 ` Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 7/8] usb-redir: Adjust pkg-config check for usbredirparser .pc file rename (v2) Gerd Hoffmann
` (2 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2012-09-26 7:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
There are several issues with our handling of the MULT epcap field
of interrupt qhs, which this patch fixes.
1) When we don't execute a transaction because of the transaction counter
being 0, p->async stays EHCI_ASYNC_NONE, and the next time we process the
same qtd we hit an assert in ehci_state_fetchqtd because of this. Even though
I believe that this is caused by 3 below, this patch still removes the assert,
as that can still happen without 3, when multiple packets are queued for the
same interrupt ep.
2) We only *check* the transaction counter from ehci_state_execute, any
packets queued up by fill_queue bypass this check. This is fixed by not calling
fill_queue for interrupt packets.
3) Some versions of Windows set the MULT field of the qh to 0, which is a
clear violation of the EHCI spec, but still they do it. This means that we
will never execute a qtd for these, making interrupt ep-s on USB-2 devices
not work, and after recent changes, triggering 1).
So far we've stored the transaction counter in our copy of the mult field,
but with this beginnig at 0 already when dealing with these version of windows
this won't work. So this patch adds a transact_ctr field to our qh struct,
and sets this to the MULT field value on fetchqh. When the MULT field value
is 0, we set it to 4. Assuming that windows gets way with setting it to 0,
by the actual hardware going horizontal on a 1 -> 0 transition, which will
give it 4 transactions (MULT goes from 0 - 3).
Note that we cannot stop on detecting the 1 -> 0 transition, as our decrement
of the transaction counter, and checking for it are done in 2 different places.
Reported-by: Shawn Starr <shawn.starr@rogers.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb/hcd-ehci.c | 40 ++++++++++++++++++++--------------------
1 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c
index 6a5da84..8bdb806 100644
--- a/hw/usb/hcd-ehci.c
+++ b/hw/usb/hcd-ehci.c
@@ -373,6 +373,7 @@ struct EHCIQueue {
uint32_t seen;
uint64_t ts;
int async;
+ int transact_ctr;
/* cached data from guest - needs to be flushed
* when guest removes an entry (doorbell, handshake sequence)
@@ -1837,6 +1838,11 @@ static EHCIQueue *ehci_state_fetchqh(EHCIState *ehci, int async)
}
q->qh = qh;
+ q->transact_ctr = get_field(q->qh.epcap, QH_EPCAP_MULT);
+ if (q->transact_ctr == 0) { /* Guest bug in some versions of windows */
+ q->transact_ctr = 4;
+ }
+
if (q->dev == NULL) {
q->dev = ehci_find_device(q->ehci, devaddr);
}
@@ -2014,11 +2020,8 @@ static int ehci_state_fetchqtd(EHCIQueue *q)
} else if (p != NULL) {
switch (p->async) {
case EHCI_ASYNC_NONE:
- /* Should never happen packet should at least be initialized */
- assert(0);
- break;
case EHCI_ASYNC_INITIALIZED:
- /* Previously nacked packet (likely interrupt ep) */
+ /* Not yet executed (MULT), or previously nacked (int) packet */
ehci_set_state(q->ehci, q->async, EST_EXECUTE);
break;
case EHCI_ASYNC_INFLIGHT:
@@ -2107,15 +2110,12 @@ static int ehci_state_execute(EHCIQueue *q)
// TODO verify enough time remains in the uframe as in 4.4.1.1
// TODO write back ptr to async list when done or out of time
- // TODO Windows does not seem to ever set the MULT field
- if (!q->async) {
- int transactCtr = get_field(q->qh.epcap, QH_EPCAP_MULT);
- if (!transactCtr) {
- ehci_set_state(q->ehci, q->async, EST_HORIZONTALQH);
- again = 1;
- goto out;
- }
+ /* 4.10.3, bottom of page 82, go horizontal on transaction counter == 0 */
+ if (!q->async && q->transact_ctr == 0) {
+ ehci_set_state(q->ehci, q->async, EST_HORIZONTALQH);
+ again = 1;
+ goto out;
}
if (q->async) {
@@ -2132,7 +2132,11 @@ static int ehci_state_execute(EHCIQueue *q)
trace_usb_ehci_packet_action(p->queue, p, "async");
p->async = EHCI_ASYNC_INFLIGHT;
ehci_set_state(q->ehci, q->async, EST_HORIZONTALQH);
- again = (ehci_fill_queue(p) == USB_RET_PROCERR) ? -1 : 1;
+ if (q->async) {
+ again = (ehci_fill_queue(p) == USB_RET_PROCERR) ? -1 : 1;
+ } else {
+ again = 1;
+ }
goto out;
}
@@ -2152,13 +2156,9 @@ static int ehci_state_executing(EHCIQueue *q)
ehci_execute_complete(q);
- // 4.10.3
- if (!q->async) {
- int transactCtr = get_field(q->qh.epcap, QH_EPCAP_MULT);
- transactCtr--;
- set_field(&q->qh.epcap, transactCtr, QH_EPCAP_MULT);
- // 4.10.3, bottom of page 82, should exit this state when transaction
- // counter decrements to 0
+ /* 4.10.3 */
+ if (!q->async && q->transact_ctr > 0) {
+ q->transact_ctr--;
}
/* 4.10.5 */
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH 7/8] usb-redir: Adjust pkg-config check for usbredirparser .pc file rename (v2)
2012-09-26 7:36 [Qemu-devel] [PULL 0/8] usb patch queue Gerd Hoffmann
` (5 preceding siblings ...)
2012-09-26 7:36 ` [Qemu-devel] [PATCH 6/8] ehci: Fix interrupt packet MULT handling Gerd Hoffmann
@ 2012-09-26 7:36 ` Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 8/8] usb: Fix usb_packet_map() in the presence of IOMMUs Gerd Hoffmann
2012-10-05 2:13 ` [Qemu-devel] [PULL 0/8] usb patch queue Anthony Liguori
8 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2012-09-26 7:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
The usbredir 0.5 release introduced the new API for 64 bit packet ids, but
it kept the libusbredirparser.pc name as is, meaning that older versions of
qemu will still have their pkg-config check for usbredirparser fulfilled,
and build with the usb-redir device. Due to the API change there will be
some compiler warnings, but the build will succeed, however the usb-redir
device will be broken on 32 bit machines.
To solve this a new usbredir-0.5.2 release is coming, which renames the
libusbredirparser.pc file to libusbredirparser-0.5.pc, so that it will no
longer fulfill the pkg-config check of the qemu-1.2 and older releases,
stopping the (silent) breakage. This patch adjusts qemu master's configure
to properly detect the new usbredir release.
Changes in v2:
-Not only use the new .pc name in the check but also when getting cflags
and libs!
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
configure | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/configure b/configure
index 1b86517..4f24062 100755
--- a/configure
+++ b/configure
@@ -2752,10 +2752,10 @@ fi
# check for usbredirparser for usb network redirection support
if test "$usb_redir" != "no" ; then
- if $pkg_config --atleast-version=0.5 libusbredirparser >/dev/null 2>&1 ; then
+ if $pkg_config --atleast-version=0.5 libusbredirparser-0.5 >/dev/null 2>&1 ; then
usb_redir="yes"
- usb_redir_cflags=$($pkg_config --cflags libusbredirparser 2>/dev/null)
- usb_redir_libs=$($pkg_config --libs libusbredirparser 2>/dev/null)
+ usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5 2>/dev/null)
+ usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5 2>/dev/null)
QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
libs_softmmu="$libs_softmmu $usb_redir_libs"
else
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH 8/8] usb: Fix usb_packet_map() in the presence of IOMMUs
2012-09-26 7:36 [Qemu-devel] [PULL 0/8] usb patch queue Gerd Hoffmann
` (6 preceding siblings ...)
2012-09-26 7:36 ` [Qemu-devel] [PATCH 7/8] usb-redir: Adjust pkg-config check for usbredirparser .pc file rename (v2) Gerd Hoffmann
@ 2012-09-26 7:36 ` Gerd Hoffmann
2012-10-05 2:13 ` [Qemu-devel] [PULL 0/8] usb patch queue Anthony Liguori
8 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2012-09-26 7:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, David Gibson
From: David Gibson <david@gibson.dropbear.id.au>
With the IOMMU infrastructure introduced before 1.2, we need to use
dma_memory_map() to obtain a qemu pointer to memory from an IO bus address.
However, dma_memory_map() alters the given length to reflect the length
over which the used DMA translation is valid - which could be either more
or less than the requested length.
usb_packet_map() does not correctly handle these cases, simply failing if
dma_memory_map() alters the requested length. If dma_memory_map()
increased the length, we just need to use the requested length for the
qemu_iovec_add(). However, if it decreased the length, it means that a
single DMA translation is not valid for the whole sglist element, and so
we need to loop, splitting it up into multiple iovec entries for each
piece with a DMA translation (in practice >2 pieces is unlikely).
This patch implements the correct behaviour
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb/libhw.c | 24 +++++++++++++++---------
1 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/hw/usb/libhw.c b/hw/usb/libhw.c
index c0de30e..703e2d2 100644
--- a/hw/usb/libhw.c
+++ b/hw/usb/libhw.c
@@ -28,19 +28,25 @@ int usb_packet_map(USBPacket *p, QEMUSGList *sgl)
{
DMADirection dir = (p->pid == USB_TOKEN_IN) ?
DMA_DIRECTION_FROM_DEVICE : DMA_DIRECTION_TO_DEVICE;
- dma_addr_t len;
void *mem;
int i;
for (i = 0; i < sgl->nsg; i++) {
- len = sgl->sg[i].len;
- mem = dma_memory_map(sgl->dma, sgl->sg[i].base, &len, dir);
- if (!mem) {
- goto err;
- }
- qemu_iovec_add(&p->iov, mem, len);
- if (len != sgl->sg[i].len) {
- goto err;
+ dma_addr_t base = sgl->sg[i].base;
+ dma_addr_t len = sgl->sg[i].len;
+
+ while (len) {
+ dma_addr_t xlen = len;
+ mem = dma_memory_map(sgl->dma, sgl->sg[i].base, &xlen, dir);
+ if (!mem) {
+ goto err;
+ }
+ if (xlen > len) {
+ xlen = len;
+ }
+ qemu_iovec_add(&p->iov, mem, xlen);
+ len -= xlen;
+ base += xlen;
}
}
return 0;
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PULL 0/8] usb patch queue
2012-09-26 7:36 [Qemu-devel] [PULL 0/8] usb patch queue Gerd Hoffmann
` (7 preceding siblings ...)
2012-09-26 7:36 ` [Qemu-devel] [PATCH 8/8] usb: Fix usb_packet_map() in the presence of IOMMUs Gerd Hoffmann
@ 2012-10-05 2:13 ` Anthony Liguori
8 siblings, 0 replies; 14+ messages in thread
From: Anthony Liguori @ 2012-10-05 2:13 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel
Gerd Hoffmann <kraxel@redhat.com> writes:
> Hi,
>
> This is the usb patch queue. Adds a pc-1.3 machine type (patch #1) so I
> can add xhci compat properties (patch #2). xhci gets usb hub support.
> Other that that just a bunch of bugfixes.
>
> please pull,
> Gerd
>
Pulled. Thanks.
Regards,
Anthony Liguori
> The following changes since commit d9b41bcda91ea7285d934a9c2333c49cd32d1ad3:
>
> Merge remote-tracking branch 'origin/master' into staging (2012-09-25 18:12:07 -0500)
>
> are available in the git repository at:
>
> git://git.kraxel.org/qemu usb.66
>
> David Gibson (1):
> usb: Fix usb_packet_map() in the presence of IOMMUs
>
> Gerd Hoffmann (5):
> add pc-1.3 machine type
> compat: turn off msi/msix on xhci for old machine types
> xhci: tweak limits
> xhci: route string & usb hub support
> xhci: create a memory region for each port
>
> Hans de Goede (2):
> ehci: Fix interrupt packet MULT handling
> usb-redir: Adjust pkg-config check for usbredirparser .pc file rename (v2)
>
> configure | 6 +-
> hw/pc_piix.c | 28 ++++++++-
> hw/usb/hcd-ehci.c | 40 ++++++------
> hw/usb/hcd-xhci.c | 179 ++++++++++++++++++++++++++++++-----------------------
> hw/usb/libhw.c | 24 +++++---
> 5 files changed, 166 insertions(+), 111 deletions(-)
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 0/8] usb patch queue
@ 2012-11-09 9:05 Gerd Hoffmann
2012-11-14 16:22 ` Anthony Liguori
0 siblings, 1 reply; 14+ messages in thread
From: Gerd Hoffmann @ 2012-11-09 9:05 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
This is the usb patch queue. It cleans up the USBPacket error handling
to have separate length and status fields which is needed to get some
corner cases correct. While being at it it also makes status reporting
identical for both sync and async USBPackets.
It also features a fix for the ehci migration bug added by the most recent
pull and endian fixes for xhci.
please pull,
Gerd
The following changes since commit 2592c59a66d456fe98fe96cb5787b356c40ee66f:
tools: initialize main loop before block layer (2012-11-06 04:37:57 +0400)
are available in the git repository at:
git://git.kraxel.org/qemu usb.70
David Gibson (1):
xhci: Fix some DMA host endian bugs
Gerd Hoffmann (1):
ehci: fix migration
Hans de Goede (6):
usb: split packet result into actual_length + status
usb-redir: Allow packets to have both data and an error-status
ehci: Get rid of the magical PROC_ERR status
ehci: Add support for packets with both data and an error status
xhci: Add support for packets with both data and an error status
usb/combined-packet: Move freeing of combined to usb_combined_packet_remove()
hw/usb.h | 24 +++--
hw/usb/bus.c | 13 +--
hw/usb/combined-packet.c | 58 ++++++-----
hw/usb/core.c | 209 +++++++++++++++++++++-------------------
hw/usb/desc.c | 16 ++-
hw/usb/desc.h | 3 +-
hw/usb/dev-audio.c | 49 +++------
hw/usb/dev-bluetooth.c | 33 +++----
hw/usb/dev-hid.c | 42 ++++-----
hw/usb/dev-hub.c | 34 +++----
hw/usb/dev-network.c | 101 +++++++++----------
hw/usb/dev-serial.c | 29 ++----
hw/usb/dev-smartcard-reader.c | 69 +++++--------
hw/usb/dev-storage.c | 51 ++++------
hw/usb/dev-uas.c | 36 +++----
hw/usb/dev-wacom.c | 38 +++----
hw/usb/hcd-ehci-pci.c | 3 +-
hw/usb/hcd-ehci.c | 216 ++++++++++++++++++++---------------------
hw/usb/hcd-ehci.h | 1 -
hw/usb/hcd-musb.c | 16 ++--
hw/usb/hcd-ohci.c | 26 +++--
hw/usb/hcd-uhci.c | 34 +++----
hw/usb/hcd-xhci.c | 129 +++++++++++++++----------
hw/usb/host-bsd.c | 27 +++---
hw/usb/host-linux.c | 128 +++++++++++++-----------
hw/usb/redirect.c | 187 ++++++++++++++++++-----------------
26 files changed, 775 insertions(+), 797 deletions(-)
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PULL 0/8] usb patch queue
2012-11-09 9:05 Gerd Hoffmann
@ 2012-11-14 16:22 ` Anthony Liguori
0 siblings, 0 replies; 14+ messages in thread
From: Anthony Liguori @ 2012-11-14 16:22 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel
Gerd Hoffmann <kraxel@redhat.com> writes:
> Hi,
>
> This is the usb patch queue. It cleans up the USBPacket error handling
> to have separate length and status fields which is needed to get some
> corner cases correct. While being at it it also makes status reporting
> identical for both sync and async USBPackets.
>
> It also features a fix for the ehci migration bug added by the most recent
> pull and endian fixes for xhci.
>
> please pull,
> Gerd
>
> The following changes since commit 2592c59a66d456fe98fe96cb5787b356c40ee66f:
>
> tools: initialize main loop before block layer (2012-11-06 04:37:57 +0400)
>
> are available in the git repository at:
> git://git.kraxel.org/qemu usb.70
Pulled. Thanks.
Regards,
Anthony Liguori
>
> David Gibson (1):
> xhci: Fix some DMA host endian bugs
>
> Gerd Hoffmann (1):
> ehci: fix migration
>
> Hans de Goede (6):
> usb: split packet result into actual_length + status
> usb-redir: Allow packets to have both data and an error-status
> ehci: Get rid of the magical PROC_ERR status
> ehci: Add support for packets with both data and an error status
> xhci: Add support for packets with both data and an error status
> usb/combined-packet: Move freeing of combined to usb_combined_packet_remove()
>
> hw/usb.h | 24 +++--
> hw/usb/bus.c | 13 +--
> hw/usb/combined-packet.c | 58 ++++++-----
> hw/usb/core.c | 209 +++++++++++++++++++++-------------------
> hw/usb/desc.c | 16 ++-
> hw/usb/desc.h | 3 +-
> hw/usb/dev-audio.c | 49 +++------
> hw/usb/dev-bluetooth.c | 33 +++----
> hw/usb/dev-hid.c | 42 ++++-----
> hw/usb/dev-hub.c | 34 +++----
> hw/usb/dev-network.c | 101 +++++++++----------
> hw/usb/dev-serial.c | 29 ++----
> hw/usb/dev-smartcard-reader.c | 69 +++++--------
> hw/usb/dev-storage.c | 51 ++++------
> hw/usb/dev-uas.c | 36 +++----
> hw/usb/dev-wacom.c | 38 +++----
> hw/usb/hcd-ehci-pci.c | 3 +-
> hw/usb/hcd-ehci.c | 216 ++++++++++++++++++++---------------------
> hw/usb/hcd-ehci.h | 1 -
> hw/usb/hcd-musb.c | 16 ++--
> hw/usb/hcd-ohci.c | 26 +++--
> hw/usb/hcd-uhci.c | 34 +++----
> hw/usb/hcd-xhci.c | 129 +++++++++++++++----------
> hw/usb/host-bsd.c | 27 +++---
> hw/usb/host-linux.c | 128 +++++++++++++-----------
> hw/usb/redirect.c | 187 ++++++++++++++++++-----------------
> 26 files changed, 775 insertions(+), 797 deletions(-)
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2012-11-14 16:22 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-26 7:36 [Qemu-devel] [PULL 0/8] usb patch queue Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 1/8] add pc-1.3 machine type Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 2/8] compat: turn off msi/msix on xhci for old machine types Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 3/8] xhci: tweak limits Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 4/8] xhci: route string & usb hub support Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 5/8] xhci: create a memory region for each port Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 6/8] ehci: Fix interrupt packet MULT handling Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 7/8] usb-redir: Adjust pkg-config check for usbredirparser .pc file rename (v2) Gerd Hoffmann
2012-09-26 7:36 ` [Qemu-devel] [PATCH 8/8] usb: Fix usb_packet_map() in the presence of IOMMUs Gerd Hoffmann
2012-10-05 2:13 ` [Qemu-devel] [PULL 0/8] usb patch queue Anthony Liguori
-- strict thread matches above, loose matches on Subject: below --
2012-11-09 9:05 Gerd Hoffmann
2012-11-14 16:22 ` Anthony Liguori
2011-01-24 16:30 Gerd Hoffmann
2011-02-17 20:00 ` Anthony Liguori
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).