* [Qemu-devel] [PULL] usb patch queue
@ 2011-05-04 15:41 Gerd Hoffmann
2011-05-05 18:28 ` Anthony Liguori
0 siblings, 1 reply; 47+ messages in thread
From: Gerd Hoffmann @ 2011-05-04 15:41 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
The USB patch queue is back! I'm still busy catching up with the
backlog, I know I didn't pick up everything from the list yet. If in
doubt it doesn't hurt to resend usb related patches, with me being
Cc'ed.
This pull brings old stuff, most of the patches are several months old
already. Finally the usb-host fixes from Hans are queued up for merge.
Some async packet handling cleanups are in there to. Oh, and one more
bugfix for the usb mass storage device.
please pull,
Gerd
The following changes since commit d2d979c628e4b2c4a3cb71a31841875795c79043:
NBD: Avoid leaking a couple of strings when the NBD device is closed (2011-05-03 11:29:21 +0200)
are available in the git repository at:
git://git.kraxel.org/qemu usb.7.pull
Gerd Hoffmann (6):
uhci: switch to QTAILQ
uhci: keep uhci state pointer in async packet struct.
ohci: get ohci state via container_of()
musb: get musb state via container_of()
usb: move complete callback to port ops
usb: mass storage fix
Hans de Goede (8):
usb-linux: introduce a usb_linux_alt_setting function
usb-linux: Get the alt. setting from sysfs rather then asking the dev
usb-linux: Add support for buffering iso usb packets
usb-linux: Refuse packets for endpoints which are not in the usb descriptor
usb-linux: Refuse iso packets when max packet size is 0 (alt setting 0)
usb-linux: We only need to keep track of 15 endpoints
usb-linux: Add support for buffering iso out usb packets
usb: control buffer fixes
hw/usb-hub.c | 14 ++
hw/usb-msd.c | 5 +-
hw/usb-musb.c | 75 ++++++-----
hw/usb-ohci.c | 9 +-
hw/usb-uhci.c | 82 ++++--------
hw/usb.c | 6 +
hw/usb.h | 9 +-
usb-linux.c | 394 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
8 files changed, 445 insertions(+), 149 deletions(-)
^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-05-04 15:41 Gerd Hoffmann
@ 2011-05-05 18:28 ` Anthony Liguori
0 siblings, 0 replies; 47+ messages in thread
From: Anthony Liguori @ 2011-05-05 18:28 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
On 05/04/2011 10:41 AM, Gerd Hoffmann wrote:
> Hi,
>
> The USB patch queue is back! I'm still busy catching up with the
> backlog, I know I didn't pick up everything from the list yet. If in
> doubt it doesn't hurt to resend usb related patches, with me being
> Cc'ed.
>
> This pull brings old stuff, most of the patches are several months old
> already. Finally the usb-host fixes from Hans are queued up for merge.
> Some async packet handling cleanups are in there to. Oh, and one more
> bugfix for the usb mass storage device.
>
> please pull,
> Gerd
Pulled. Thanks.
Regards,
Anthony Liguori
>
> The following changes since commit d2d979c628e4b2c4a3cb71a31841875795c79043:
>
> NBD: Avoid leaking a couple of strings when the NBD device is closed (2011-05-03 11:29:21 +0200)
>
> are available in the git repository at:
> git://git.kraxel.org/qemu usb.7.pull
>
> Gerd Hoffmann (6):
> uhci: switch to QTAILQ
> uhci: keep uhci state pointer in async packet struct.
> ohci: get ohci state via container_of()
> musb: get musb state via container_of()
> usb: move complete callback to port ops
> usb: mass storage fix
>
> Hans de Goede (8):
> usb-linux: introduce a usb_linux_alt_setting function
> usb-linux: Get the alt. setting from sysfs rather then asking the dev
> usb-linux: Add support for buffering iso usb packets
> usb-linux: Refuse packets for endpoints which are not in the usb descriptor
> usb-linux: Refuse iso packets when max packet size is 0 (alt setting 0)
> usb-linux: We only need to keep track of 15 endpoints
> usb-linux: Add support for buffering iso out usb packets
> usb: control buffer fixes
>
> hw/usb-hub.c | 14 ++
> hw/usb-msd.c | 5 +-
> hw/usb-musb.c | 75 ++++++-----
> hw/usb-ohci.c | 9 +-
> hw/usb-uhci.c | 82 ++++--------
> hw/usb.c | 6 +
> hw/usb.h | 9 +-
> usb-linux.c | 394 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
> 8 files changed, 445 insertions(+), 149 deletions(-)
>
>
^ permalink raw reply [flat|nested] 47+ messages in thread
* [Qemu-devel] [PULL] usb patch queue
@ 2011-06-14 11:05 Gerd Hoffmann
2011-06-15 14:17 ` Anthony Liguori
0 siblings, 1 reply; 47+ messages in thread
From: Gerd Hoffmann @ 2011-06-14 11:05 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
The USB patch queue has been rebased, got a minor fix (wrong comment in
patch #8, spotted by David Ahern) and three new patches. I'm just
posting the three new patches to avoid spamming the list with 30
identical patches ...
please pull,
Gerd
The following changes since commit 0b862cedf36d927818c50584ddd611b0370673df:
configure: Detect and don't try to use older libcurl (2011-06-13 21:16:27 +0200)
are available in the git repository at:
git://git.kraxel.org/qemu usb.16
Brad Hards (3):
usb: Add defines for USB Serial Bus Release Number register
usb: Use defines for serial bus release number register for UHCI
usb: Use defines for serial bus release number register for EHCI
Gerd Hoffmann (18):
usb-linux: catch ENODEV in more places.
usb-ehci: trace mmio and usbsts
usb-ehci: trace state machine changes
usb-ehci: trace port state
usb-ehci: improve mmio tracing
usb-ehci: trace buffer copy
usb-ehci: add queue data struct
usb-ehci: multiqueue support
usb-ehci: fix offset writeback in ehci_buffer_rw
usb-ehci: fix error handling.
usb: cancel async packets on unplug
usb-ehci: drop EXECUTING checks.
usb-ehci: itd handling fixes.
usb-ehci: split trace calls to handle arg count limits
usb: documentation update
usb-linux: only cleanup in host_close when host_open was successful.
usb: don't call usb_host_device_open from vl.c
usb-uhci: fix expire time initialization.
Hans de Goede (9):
ehci: fix a number of unused-but-set-variable warnings (new with gcc-4.6)
usb-linux: Get speed from sysfs rather then from the connectinfo ioctl
usb-linux: Teach about super speed
usb-linux: Don't do perror when errno is not set
usb-linux: Ensure devep != 0
usb-linux: Don't try to open the same device twice
usb-linux: Enlarge buffer for descriptors to 8192 bytes
usb-bus: Add knowledge of USB_SPEED_SUPER to usb_speed helper
usb-bus: Don't detach non attached devices on device exit
Kevin O'Connor (2):
Fix USB mouse Set_Protocol behavior
The USB tablet should not claim boot protocol support.
Peter Maydell (2):
hw/usb-ohci.c: Ignore writes to HcPeriodCurrentED register
hw/usb-ohci.c: Implement remote wakeup
docs/usb2.txt | 85 ++++
hw/milkymist-softusb.c | 10 +-
hw/usb-bus.c | 10 +-
hw/usb-ehci.c | 1198 ++++++++++++++++++++++++++++--------------------
hw/usb-hid.c | 5 +-
hw/usb-musb.c | 23 +-
hw/usb-ohci.c | 37 ++-
hw/usb-uhci.c | 32 ++-
hw/usb.h | 14 +-
trace-events | 20 +
usb-linux.c | 96 +++--
vl.c | 6 +-
12 files changed, 990 insertions(+), 546 deletions(-)
^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-06-14 11:05 Gerd Hoffmann
@ 2011-06-15 14:17 ` Anthony Liguori
0 siblings, 0 replies; 47+ messages in thread
From: Anthony Liguori @ 2011-06-15 14:17 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
On 06/14/2011 06:05 AM, Gerd Hoffmann wrote:
> Hi,
>
> The USB patch queue has been rebased, got a minor fix (wrong comment in
> patch #8, spotted by David Ahern) and three new patches. I'm just
> posting the three new patches to avoid spamming the list with 30
> identical patches ...
>
> please pull,
> Gerd
Pulled. Thanks.
Regards,
Anthony Liguori
>
> The following changes since commit 0b862cedf36d927818c50584ddd611b0370673df:
>
> configure: Detect and don't try to use older libcurl (2011-06-13 21:16:27 +0200)
>
> are available in the git repository at:
> git://git.kraxel.org/qemu usb.16
>
> Brad Hards (3):
> usb: Add defines for USB Serial Bus Release Number register
> usb: Use defines for serial bus release number register for UHCI
> usb: Use defines for serial bus release number register for EHCI
>
> Gerd Hoffmann (18):
> usb-linux: catch ENODEV in more places.
> usb-ehci: trace mmio and usbsts
> usb-ehci: trace state machine changes
> usb-ehci: trace port state
> usb-ehci: improve mmio tracing
> usb-ehci: trace buffer copy
> usb-ehci: add queue data struct
> usb-ehci: multiqueue support
> usb-ehci: fix offset writeback in ehci_buffer_rw
> usb-ehci: fix error handling.
> usb: cancel async packets on unplug
> usb-ehci: drop EXECUTING checks.
> usb-ehci: itd handling fixes.
> usb-ehci: split trace calls to handle arg count limits
> usb: documentation update
> usb-linux: only cleanup in host_close when host_open was successful.
> usb: don't call usb_host_device_open from vl.c
> usb-uhci: fix expire time initialization.
>
> Hans de Goede (9):
> ehci: fix a number of unused-but-set-variable warnings (new with gcc-4.6)
> usb-linux: Get speed from sysfs rather then from the connectinfo ioctl
> usb-linux: Teach about super speed
> usb-linux: Don't do perror when errno is not set
> usb-linux: Ensure devep != 0
> usb-linux: Don't try to open the same device twice
> usb-linux: Enlarge buffer for descriptors to 8192 bytes
> usb-bus: Add knowledge of USB_SPEED_SUPER to usb_speed helper
> usb-bus: Don't detach non attached devices on device exit
>
> Kevin O'Connor (2):
> Fix USB mouse Set_Protocol behavior
> The USB tablet should not claim boot protocol support.
>
> Peter Maydell (2):
> hw/usb-ohci.c: Ignore writes to HcPeriodCurrentED register
> hw/usb-ohci.c: Implement remote wakeup
>
> docs/usb2.txt | 85 ++++
> hw/milkymist-softusb.c | 10 +-
> hw/usb-bus.c | 10 +-
> hw/usb-ehci.c | 1198 ++++++++++++++++++++++++++++--------------------
> hw/usb-hid.c | 5 +-
> hw/usb-musb.c | 23 +-
> hw/usb-ohci.c | 37 ++-
> hw/usb-uhci.c | 32 ++-
> hw/usb.h | 14 +-
> trace-events | 20 +
> usb-linux.c | 96 +++--
> vl.c | 6 +-
> 12 files changed, 990 insertions(+), 546 deletions(-)
>
>
^ permalink raw reply [flat|nested] 47+ messages in thread
* [Qemu-devel] [PULL] usb patch queue
@ 2011-06-24 10:59 Gerd Hoffmann
2011-06-24 13:30 ` Hans de Goede
2011-06-27 20:19 ` Anthony Liguori
0 siblings, 2 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-06-24 10:59 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
Here comes the USB patch queue. Nothing major, just a bunch of little
fixes and improvements.
please pull,
Gerd
The following changes since commit 48e2faf222cbf4abab7c8e4b3f44229ec98eae7f:
net: Warn about "-net nic" options which were ignored (2011-06-22 07:18:39 -0500)
are available in the git repository at:
git://git.kraxel.org/qemu usb.17
Gerd Hoffmann (6):
usb-linux: add get_endp()
usb-linux: make iso urb count contigurable
usb-linux: track inflight iso urb count
ehci: add freq + maxframes properties
ehci: switch to nanoseconds
usb: ignore USB_DT_DEBUG
Hans de Goede (5):
usb-bus: Don't allow attaching a device to a bus with no free ports
usb: Proper error propagation for usb_device_attach errors
usb: Add a speedmask to devices
usb-linux: allow "compatible" high speed devices to connect at fullspeed
usb-bus: Don't allow speed mismatch while attaching devices
Markus Armbruster (1):
usb-storage: Turn drive serial into a qdev property usb-storage.serial
Peter Maydell (1):
hw/usb-ohci.c: Fix handling of remote wakeup corner cases
hw/usb-bus.c | 31 ++++++++++-----
hw/usb-ccid.c | 1 +
hw/usb-desc.c | 14 ++++++
hw/usb-ehci.c | 43 +++++++++++---------
hw/usb-msd.c | 19 ++++++--
hw/usb-ohci.c | 17 ++++++-
hw/usb.h | 4 ++
usb-bsd.c | 2 +
usb-linux.c | 124 +++++++++++++++++++++++++++++++++++++++++++++------------
9 files changed, 191 insertions(+), 64 deletions(-)
^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-06-24 10:59 Gerd Hoffmann
@ 2011-06-24 13:30 ` Hans de Goede
2011-06-27 20:19 ` Anthony Liguori
1 sibling, 0 replies; 47+ messages in thread
From: Hans de Goede @ 2011-06-24 13:30 UTC (permalink / raw)
To: qemu-devel
Hi,
Entire series looks good to me, including my own patches ;)
Ack series.
Regards,
Hans
On 06/24/2011 12:59 PM, Gerd Hoffmann wrote:
> Hi,
>
> Here comes the USB patch queue. Nothing major, just a bunch of little
> fixes and improvements.
>
> please pull,
> Gerd
>
> The following changes since commit 48e2faf222cbf4abab7c8e4b3f44229ec98eae7f:
>
> net: Warn about "-net nic" options which were ignored (2011-06-22 07:18:39 -0500)
>
> are available in the git repository at:
> git://git.kraxel.org/qemu usb.17
>
> Gerd Hoffmann (6):
> usb-linux: add get_endp()
> usb-linux: make iso urb count contigurable
> usb-linux: track inflight iso urb count
> ehci: add freq + maxframes properties
> ehci: switch to nanoseconds
> usb: ignore USB_DT_DEBUG
>
> Hans de Goede (5):
> usb-bus: Don't allow attaching a device to a bus with no free ports
> usb: Proper error propagation for usb_device_attach errors
> usb: Add a speedmask to devices
> usb-linux: allow "compatible" high speed devices to connect at fullspeed
> usb-bus: Don't allow speed mismatch while attaching devices
>
> Markus Armbruster (1):
> usb-storage: Turn drive serial into a qdev property usb-storage.serial
>
> Peter Maydell (1):
> hw/usb-ohci.c: Fix handling of remote wakeup corner cases
>
> hw/usb-bus.c | 31 ++++++++++-----
> hw/usb-ccid.c | 1 +
> hw/usb-desc.c | 14 ++++++
> hw/usb-ehci.c | 43 +++++++++++---------
> hw/usb-msd.c | 19 ++++++--
> hw/usb-ohci.c | 17 ++++++-
> hw/usb.h | 4 ++
> usb-bsd.c | 2 +
> usb-linux.c | 124 +++++++++++++++++++++++++++++++++++++++++++++------------
> 9 files changed, 191 insertions(+), 64 deletions(-)
>
^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-06-24 10:59 Gerd Hoffmann
2011-06-24 13:30 ` Hans de Goede
@ 2011-06-27 20:19 ` Anthony Liguori
1 sibling, 0 replies; 47+ messages in thread
From: Anthony Liguori @ 2011-06-27 20:19 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
On 06/24/2011 05:59 AM, Gerd Hoffmann wrote:
> Hi,
>
> Here comes the USB patch queue. Nothing major, just a bunch of little
> fixes and improvements.
>
> please pull,
Pulled. Thanks.
Regards,
Anthony Liguori
> Gerd
>
> The following changes since commit 48e2faf222cbf4abab7c8e4b3f44229ec98eae7f:
>
> net: Warn about "-net nic" options which were ignored (2011-06-22 07:18:39 -0500)
>
> are available in the git repository at:
> git://git.kraxel.org/qemu usb.17
>
> Gerd Hoffmann (6):
> usb-linux: add get_endp()
> usb-linux: make iso urb count contigurable
> usb-linux: track inflight iso urb count
> ehci: add freq + maxframes properties
> ehci: switch to nanoseconds
> usb: ignore USB_DT_DEBUG
>
> Hans de Goede (5):
> usb-bus: Don't allow attaching a device to a bus with no free ports
> usb: Proper error propagation for usb_device_attach errors
> usb: Add a speedmask to devices
> usb-linux: allow "compatible" high speed devices to connect at fullspeed
> usb-bus: Don't allow speed mismatch while attaching devices
>
> Markus Armbruster (1):
> usb-storage: Turn drive serial into a qdev property usb-storage.serial
>
> Peter Maydell (1):
> hw/usb-ohci.c: Fix handling of remote wakeup corner cases
>
> hw/usb-bus.c | 31 ++++++++++-----
> hw/usb-ccid.c | 1 +
> hw/usb-desc.c | 14 ++++++
> hw/usb-ehci.c | 43 +++++++++++---------
> hw/usb-msd.c | 19 ++++++--
> hw/usb-ohci.c | 17 ++++++-
> hw/usb.h | 4 ++
> usb-bsd.c | 2 +
> usb-linux.c | 124 +++++++++++++++++++++++++++++++++++++++++++++------------
> 9 files changed, 191 insertions(+), 64 deletions(-)
>
>
^ permalink raw reply [flat|nested] 47+ messages in thread
* [Qemu-devel] [PULL] usb patch queue
@ 2011-07-08 9:50 Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 01/23] hw/usb-musb.c: Don't misuse usb_packet_complete() Gerd Hoffmann
` (24 more replies)
0 siblings, 25 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
Here is the current usb patch queue. Most noteworthy is the usb
companion controller support added. There are also a bunch of bug
fixes, some from Hans which he found while doing the companion
controller work and some have been found in patch review.
please pull,
Gerd
The following changes since commit 9312805d33e8b106bae356d13a8071fb37d75554:
pxa2xx_lcd: add proper rotation support (2011-07-04 22:12:21 +0200)
are available in the git repository at:
git://git.kraxel.org/qemu usb.19
Gerd Hoffmann (8):
pci: add ich9 usb controller ids
uhci: add ich9 controllers
ehci: fix port count.
ehci: add ich9 controller.
usb: update documentation
usb: fixup bluetooth descriptors
usb-hub: remove unused descriptor arrays
usb-ohci: raise interrupt on attach
Hans de Goede (13):
usb: Add a usb_fill_port helper function
usb: Move (initial) call of usb_port_location to usb_fill_port
usb: Add a register_companion USB bus op.
usb: Make port wakeup and complete ops take a USBPort instead of a Device
usb: Replace device_destroy bus op with a child_detach port op
usb-ehci: drop unused num-ports state member
usb-ehci: Connect Status bit is read only, don't allow changing it by the guest
usb-ehci: cleanup port reset handling
usb: assert on calling usb_attach(port, NULL) on a port without a dev
usb-ehci: Fix handling of PED and PEDC port status bits
usb-ehci: Add support for registering companion controllers
usb-uhci: Add support for being a companion controller
usb-ohci: Add support for being a companion controller
Jes Sorensen (1):
usb_register_port(): do not set port->opaque and port->index twice
Peter Maydell (1):
hw/usb-musb.c: Don't misuse usb_packet_complete()
docs/ich9-ehci-uhci.cfg | 37 +++++++
docs/usb2.txt | 33 +++++-
hw/milkymist-softusb.c | 9 ++-
hw/pci_ids.h | 8 ++
hw/usb-bt.c | 24 ++--
hw/usb-bus.c | 46 +++++++-
hw/usb-ehci.c | 270 ++++++++++++++++++++++++++++++++++-------------
hw/usb-hub.c | 90 +++-------------
hw/usb-musb.c | 24 +++--
hw/usb-ohci.c | 89 +++++++++++-----
hw/usb-uhci.c | 95 +++++++++++++----
hw/usb.c | 13 +--
hw/usb.h | 20 +++-
13 files changed, 523 insertions(+), 235 deletions(-)
create mode 100644 docs/ich9-ehci-uhci.cfg
^ permalink raw reply [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 01/23] hw/usb-musb.c: Don't misuse usb_packet_complete()
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
@ 2011-07-08 9:50 ` Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 02/23] usb: Add a usb_fill_port helper function Gerd Hoffmann
` (23 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Gerd Hoffmann
From: Peter Maydell <peter.maydell@linaro.org>
In musb_packet() handle final processing of non-asynchronous
USB packets by directly calling musb_schedule_cb() rather than
going through usb_packet_complete(). The latter will trigger
an assertion because the packet doesn't belong to a device.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-musb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/hw/usb-musb.c b/hw/usb-musb.c
index 21f35af..d15971f 100644
--- a/hw/usb-musb.c
+++ b/hw/usb-musb.c
@@ -616,7 +616,7 @@ static void musb_packet(MUSBState *s, MUSBEndPoint *ep,
}
ep->status[dir] = ret;
- usb_packet_complete(s->port.dev, &ep->packey[dir].p);
+ musb_schedule_cb(s->port.dev, &ep->packey[dir].p);
}
static void musb_tx_packet_complete(USBPacket *packey, void *opaque)
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 02/23] usb: Add a usb_fill_port helper function
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 01/23] hw/usb-musb.c: Don't misuse usb_packet_complete() Gerd Hoffmann
@ 2011-07-08 9:50 ` Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 03/23] usb: Move (initial) call of usb_port_location to usb_fill_port Gerd Hoffmann
` (22 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-bus.c | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/hw/usb-bus.c b/hw/usb-bus.c
index 2abce12..776974e 100644
--- a/hw/usb-bus.c
+++ b/hw/usb-bus.c
@@ -140,8 +140,8 @@ USBDevice *usb_create_simple(USBBus *bus, const char *name)
return dev;
}
-void usb_register_port(USBBus *bus, USBPort *port, void *opaque, int index,
- USBPortOps *ops, int speedmask)
+static void usb_fill_port(USBPort *port, void *opaque, int index,
+ USBPortOps *ops, int speedmask)
{
port->opaque = opaque;
port->index = index;
@@ -149,6 +149,12 @@ void usb_register_port(USBBus *bus, USBPort *port, void *opaque, int index,
port->index = index;
port->ops = ops;
port->speedmask = speedmask;
+}
+
+void usb_register_port(USBBus *bus, USBPort *port, void *opaque, int index,
+ USBPortOps *ops, int speedmask)
+{
+ usb_fill_port(port, opaque, index, ops, speedmask);
QTAILQ_INSERT_TAIL(&bus->free, port, next);
bus->nfree++;
}
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 03/23] usb: Move (initial) call of usb_port_location to usb_fill_port
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 01/23] hw/usb-musb.c: Don't misuse usb_packet_complete() Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 02/23] usb: Add a usb_fill_port helper function Gerd Hoffmann
@ 2011-07-08 9:50 ` Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 04/23] usb: Add a register_companion USB bus op Gerd Hoffmann
` (21 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
Cleanup / preparation patch for companion controller support. Note that
as a "side-effect" this patch also fixes the milkymist-softusb controller
not having a port_location set for its ports.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-bus.c | 1 +
hw/usb-ehci.c | 1 -
hw/usb-musb.c | 1 -
hw/usb-ohci.c | 1 -
hw/usb-uhci.c | 1 -
5 files changed, 1 insertions(+), 4 deletions(-)
diff --git a/hw/usb-bus.c b/hw/usb-bus.c
index 776974e..e37e8a2 100644
--- a/hw/usb-bus.c
+++ b/hw/usb-bus.c
@@ -149,6 +149,7 @@ static void usb_fill_port(USBPort *port, void *opaque, int index,
port->index = index;
port->ops = ops;
port->speedmask = speedmask;
+ usb_port_location(port, NULL, index + 1);
}
void usb_register_port(USBBus *bus, USBPort *port, void *opaque, int index,
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c
index 91fb7de..88cb2c2 100644
--- a/hw/usb-ehci.c
+++ b/hw/usb-ehci.c
@@ -2206,7 +2206,6 @@ static int usb_ehci_initfn(PCIDevice *dev)
for(i = 0; i < NB_PORTS; i++) {
usb_register_port(&s->bus, &s->ports[i], s, i, &ehci_port_ops,
USB_SPEED_MASK_HIGH);
- usb_port_location(&s->ports[i], NULL, i+1);
s->ports[i].dev = 0;
}
diff --git a/hw/usb-musb.c b/hw/usb-musb.c
index d15971f..84e6017 100644
--- a/hw/usb-musb.c
+++ b/hw/usb-musb.c
@@ -369,7 +369,6 @@ struct MUSBState *musb_init(qemu_irq *irqs)
usb_bus_new(&s->bus, &musb_bus_ops, NULL /* FIXME */);
usb_register_port(&s->bus, &s->port, s, 0, &musb_port_ops,
USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
- usb_port_location(&s->port, NULL, 1);
return s;
}
diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c
index 1c29b9f..95e4623 100644
--- a/hw/usb-ohci.c
+++ b/hw/usb-ohci.c
@@ -1742,7 +1742,6 @@ static void usb_ohci_init(OHCIState *ohci, DeviceState *dev,
for (i = 0; i < num_ports; i++) {
usb_register_port(&ohci->bus, &ohci->rhport[i].port, ohci, i, &ohci_port_ops,
USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
- usb_port_location(&ohci->rhport[i].port, NULL, i+1);
}
ohci->async_td = 0;
diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c
index 405fa7b..fd25d2a 100644
--- a/hw/usb-uhci.c
+++ b/hw/usb-uhci.c
@@ -1129,7 +1129,6 @@ static int usb_uhci_common_initfn(PCIDevice *dev)
for(i = 0; i < NB_PORTS; i++) {
usb_register_port(&s->bus, &s->ports[i].port, s, i, &uhci_port_ops,
USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
- usb_port_location(&s->ports[i].port, NULL, i+1);
}
s->frame_timer = qemu_new_timer_ns(vm_clock, uhci_frame_timer, s);
s->num_ports_vmstate = NB_PORTS;
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 04/23] usb: Add a register_companion USB bus op.
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (2 preceding siblings ...)
2011-07-08 9:50 ` [Qemu-devel] [PATCH 03/23] usb: Move (initial) call of usb_port_location to usb_fill_port Gerd Hoffmann
@ 2011-07-08 9:50 ` Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 05/23] usb: Make port wakeup and complete ops take a USBPort instead of a Device Gerd Hoffmann
` (20 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
This is a preparation patch for adding support for USB companion controllers.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
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
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 05/23] usb: Make port wakeup and complete ops take a USBPort instead of a Device
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (3 preceding siblings ...)
2011-07-08 9:50 ` [Qemu-devel] [PATCH 04/23] usb: Add a register_companion USB bus op Gerd Hoffmann
@ 2011-07-08 9:50 ` Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 06/23] usb: Replace device_destroy bus op with a child_detach port op Gerd Hoffmann
` (19 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
This makes them consistent with the attach and detach ops, and in general
it makes sense to make portops take a port as argument. This also makes
adding support for a companion controller easier / cleaner.
[ kraxel: fix usb-musb.c build ]
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-ehci.c | 2 +-
hw/usb-hub.c | 10 +++++-----
hw/usb-musb.c | 6 +++---
hw/usb-ohci.c | 12 +++++-------
hw/usb-uhci.c | 11 +++++------
hw/usb.c | 4 ++--
hw/usb.h | 9 +++++++--
7 files changed, 28 insertions(+), 26 deletions(-)
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c
index 88cb2c2..428c90b 100644
--- a/hw/usb-ehci.c
+++ b/hw/usb-ehci.c
@@ -1111,7 +1111,7 @@ static int ehci_buffer_rw(EHCIQueue *q, int bytes, int rw)
return 0;
}
-static void ehci_async_complete_packet(USBDevice *dev, USBPacket *packet)
+static void ehci_async_complete_packet(USBPort *port, USBPacket *packet)
{
EHCIQueue *q = container_of(packet, EHCIQueue, packet);
diff --git a/hw/usb-hub.c b/hw/usb-hub.c
index 6e2a358..d324bba 100644
--- a/hw/usb-hub.c
+++ b/hw/usb-hub.c
@@ -246,10 +246,10 @@ static void usb_hub_detach(USBPort *port1)
}
}
-static void usb_hub_wakeup(USBDevice *dev)
+static void usb_hub_wakeup(USBPort *port1)
{
- USBHubState *s = dev->port->opaque;
- USBHubPort *port = &s->ports[dev->port->index];
+ USBHubState *s = port1->opaque;
+ USBHubPort *port = &s->ports[port1->index];
if (port->wPortStatus & PORT_STAT_SUSPEND) {
port->wPortChange |= PORT_STAT_C_SUSPEND;
@@ -257,9 +257,9 @@ static void usb_hub_wakeup(USBDevice *dev)
}
}
-static void usb_hub_complete(USBDevice *dev, USBPacket *packet)
+static void usb_hub_complete(USBPort *port, USBPacket *packet)
{
- USBHubState *s = dev->port->opaque;
+ USBHubState *s = port->opaque;
/*
* Just pass it along upstream for now.
diff --git a/hw/usb-musb.c b/hw/usb-musb.c
index 84e6017..580bdc8 100644
--- a/hw/usb-musb.c
+++ b/hw/usb-musb.c
@@ -261,7 +261,7 @@
static void musb_attach(USBPort *port);
static void musb_detach(USBPort *port);
-static void musb_schedule_cb(USBDevice *dev, USBPacket *p);
+static void musb_schedule_cb(USBPort *port, USBPacket *p);
static void musb_device_destroy(USBBus *bus, USBDevice *dev);
static USBPortOps musb_port_ops = {
@@ -517,7 +517,7 @@ static void musb_cb_tick1(void *opaque)
#define musb_cb_tick (dir ? musb_cb_tick1 : musb_cb_tick0)
-static void musb_schedule_cb(USBDevice *dev, USBPacket *packey)
+static void musb_schedule_cb(USBPort *port, USBPacket *packey)
{
MUSBPacket *p = container_of(packey, MUSBPacket, p);
MUSBEndPoint *ep = p->ep;
@@ -615,7 +615,7 @@ static void musb_packet(MUSBState *s, MUSBEndPoint *ep,
}
ep->status[dir] = ret;
- musb_schedule_cb(s->port.dev, &ep->packey[dir].p);
+ musb_schedule_cb(&s->port, &ep->packey[dir].p);
}
static void musb_tx_packet_complete(USBPacket *packey, void *opaque)
diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c
index 95e4623..bd92c31 100644
--- a/hw/usb-ohci.c
+++ b/hw/usb-ohci.c
@@ -367,15 +367,13 @@ static void ohci_detach(USBPort *port1)
ohci_set_interrupt(s, OHCI_INTR_RHSC);
}
-static void ohci_wakeup(USBDevice *dev)
+static void ohci_wakeup(USBPort *port1)
{
- USBBus *bus = usb_bus_from_device(dev);
- OHCIState *s = container_of(bus, OHCIState, bus);
- int portnum = dev->port->index;
- OHCIPort *port = &s->rhport[portnum];
+ OHCIState *s = port1->opaque;
+ OHCIPort *port = &s->rhport[port1->index];
uint32_t intr = 0;
if (port->ctrl & OHCI_PORT_PSS) {
- DPRINTF("usb-ohci: port %d: wakeup\n", portnum);
+ DPRINTF("usb-ohci: port %d: wakeup\n", port1->index);
port->ctrl |= OHCI_PORT_PSSC;
port->ctrl &= ~OHCI_PORT_PSS;
intr = OHCI_INTR_RHSC;
@@ -602,7 +600,7 @@ static void ohci_copy_iso_td(OHCIState *ohci,
static void ohci_process_lists(OHCIState *ohci, int completion);
-static void ohci_async_complete_packet(USBDevice *dev, USBPacket *packet)
+static void ohci_async_complete_packet(USBPort *port, USBPacket *packet)
{
OHCIState *ohci = container_of(packet, OHCIState, usb_packet);
#ifdef DEBUG_PACKET
diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c
index fd25d2a..ab635f6 100644
--- a/hw/usb-uhci.c
+++ b/hw/usb-uhci.c
@@ -620,11 +620,10 @@ static void uhci_detach(USBPort *port1)
uhci_resume(s);
}
-static void uhci_wakeup(USBDevice *dev)
+static void uhci_wakeup(USBPort *port1)
{
- USBBus *bus = usb_bus_from_device(dev);
- UHCIState *s = container_of(bus, UHCIState, bus);
- UHCIPort *port = s->ports + dev->port->index;
+ UHCIState *s = port1->opaque;
+ UHCIPort *port = &s->ports[port1->index];
if (port->ctrl & UHCI_PORT_SUSPEND && !(port->ctrl & UHCI_PORT_RD)) {
port->ctrl |= UHCI_PORT_RD;
@@ -657,7 +656,7 @@ static int uhci_broadcast_packet(UHCIState *s, USBPacket *p)
return ret;
}
-static void uhci_async_complete(USBDevice *dev, USBPacket *packet);
+static void uhci_async_complete(USBPort *port, USBPacket *packet);
static void uhci_process_frame(UHCIState *s);
/* return -1 if fatal error (frame must be stopped)
@@ -849,7 +848,7 @@ done:
return len;
}
-static void uhci_async_complete(USBDevice *dev, USBPacket *packet)
+static void uhci_async_complete(USBPort *port, USBPacket *packet)
{
UHCIAsync *async = container_of(packet, UHCIAsync, packet);
UHCIState *s = async->uhci;
diff --git a/hw/usb.c b/hw/usb.c
index 4a39cbc..735ffd1 100644
--- a/hw/usb.c
+++ b/hw/usb.c
@@ -52,7 +52,7 @@ void usb_attach(USBPort *port, USBDevice *dev)
void usb_wakeup(USBDevice *dev)
{
if (dev->remote_wakeup && dev->port && dev->port->ops->wakeup) {
- dev->port->ops->wakeup(dev);
+ dev->port->ops->wakeup(dev->port);
}
}
@@ -335,7 +335,7 @@ void usb_packet_complete(USBDevice *dev, USBPacket *p)
{
/* Note: p->owner != dev is possible in case dev is a hub */
assert(p->owner != NULL);
- dev->port->ops->complete(dev, p);
+ dev->port->ops->complete(dev->port, p);
p->owner = NULL;
}
diff --git a/hw/usb.h b/hw/usb.h
index a5f2efa..65f45a0 100644
--- a/hw/usb.h
+++ b/hw/usb.h
@@ -252,8 +252,13 @@ struct USBDeviceInfo {
typedef struct USBPortOps {
void (*attach)(USBPort *port);
void (*detach)(USBPort *port);
- void (*wakeup)(USBDevice *dev);
- void (*complete)(USBDevice *dev, USBPacket *p);
+ void (*wakeup)(USBPort *port);
+ /*
+ * Note that port->dev will be different then the device from which
+ * the packet originated when a hub is involved, if you want the orginating
+ * device use p->owner
+ */
+ void (*complete)(USBPort *port, USBPacket *p);
} USBPortOps;
/* USB port on which a device can be connected */
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 06/23] usb: Replace device_destroy bus op with a child_detach port op
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (4 preceding siblings ...)
2011-07-08 9:50 ` [Qemu-devel] [PATCH 05/23] usb: Make port wakeup and complete ops take a USBPort instead of a Device Gerd Hoffmann
@ 2011-07-08 9:50 ` Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 07/23] usb-ehci: drop unused num-ports state member Gerd Hoffmann
` (18 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
Note this fixes 2 things in one go, first of all the device_destroy bus
op should be a device_detach bus op, as pending async packets from the
device should be cancelled on detach not on destroy.
Secondly having this as a bus op won't work with companion controllers, since
then there will be 1 bus driven by the ehci controller and thus 1 set of bus
ops, but the device being detached may be downstream of a handed over port.
Making the detach of a downstream device a port op allows the ehci controller
to forward this to the companion controller port for handed over ports.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/milkymist-softusb.c | 9 +++++++--
hw/usb-bus.c | 2 --
hw/usb-ehci.c | 18 ++++++++++--------
hw/usb-hub.c | 12 ++++++++++++
hw/usb-musb.c | 17 +++++++++++++----
hw/usb-ohci.c | 16 ++++++++++++----
hw/usb-uhci.c | 18 ++++++++++--------
hw/usb.h | 6 +++++-
8 files changed, 69 insertions(+), 29 deletions(-)
diff --git a/hw/milkymist-softusb.c b/hw/milkymist-softusb.c
index 5ab35c3..ce2bfc6 100644
--- a/hw/milkymist-softusb.c
+++ b/hw/milkymist-softusb.c
@@ -247,16 +247,21 @@ static void softusb_attach(USBPort *port)
{
}
-static void softusb_device_destroy(USBBus *bus, USBDevice *dev)
+static void softusb_detach(USBPort *port)
+{
+}
+
+static void softusb_child_detach(USBPort *port, USBDevice *child)
{
}
static USBPortOps softusb_ops = {
.attach = softusb_attach,
+ .detach = softusb_detach,
+ .child_detach = softusb_child_detach,
};
static USBBusOps softusb_bus_ops = {
- .device_destroy = softusb_device_destroy,
};
static void milkymist_softusb_reset(DeviceState *d)
diff --git a/hw/usb-bus.c b/hw/usb-bus.c
index b511bac..c8347e9 100644
--- a/hw/usb-bus.c
+++ b/hw/usb-bus.c
@@ -82,12 +82,10 @@ static int usb_qdev_init(DeviceState *qdev, DeviceInfo *base)
static int usb_qdev_exit(DeviceState *qdev)
{
USBDevice *dev = DO_UPCAST(USBDevice, qdev, qdev);
- USBBus *bus = usb_bus_from_device(dev);
if (dev->attached) {
usb_device_detach(dev);
}
- bus->ops->device_destroy(bus, dev);
if (dev->info->handle_destroy) {
dev->info->handle_destroy(dev);
}
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c
index 428c90b..96451f3 100644
--- a/hw/usb-ehci.c
+++ b/hw/usb-ehci.c
@@ -751,6 +751,8 @@ static void ehci_detach(USBPort *port)
trace_usb_ehci_port_detach(port->index);
+ ehci_queues_rip_device(s, port->dev);
+
*portsc &= ~PORTSC_CONNECT;
*portsc |= PORTSC_CSC;
@@ -764,6 +766,13 @@ static void ehci_detach(USBPort *port)
}
}
+static void ehci_child_detach(USBPort *port, USBDevice *child)
+{
+ EHCIState *s = port->opaque;
+
+ ehci_queues_rip_device(s, child);
+}
+
/* 4.1 host controller initialization */
static void ehci_reset(void *opaque)
{
@@ -2117,23 +2126,16 @@ static void ehci_map(PCIDevice *pci_dev, int region_num,
cpu_register_physical_memory(addr, size, s->mem);
}
-static void ehci_device_destroy(USBBus *bus, USBDevice *dev)
-{
- EHCIState *s = container_of(bus, EHCIState, bus);
-
- ehci_queues_rip_device(s, dev);
-}
-
static int usb_ehci_initfn(PCIDevice *dev);
static USBPortOps ehci_port_ops = {
.attach = ehci_attach,
.detach = ehci_detach,
+ .child_detach = ehci_child_detach,
.complete = ehci_async_complete_packet,
};
static USBBusOps ehci_bus_ops = {
- .device_destroy = ehci_device_destroy,
};
static PCIDeviceInfo ehci_info = {
diff --git a/hw/usb-hub.c b/hw/usb-hub.c
index d324bba..b7557ce 100644
--- a/hw/usb-hub.c
+++ b/hw/usb-hub.c
@@ -238,6 +238,9 @@ static void usb_hub_detach(USBPort *port1)
USBHubState *s = port1->opaque;
USBHubPort *port = &s->ports[port1->index];
+ /* Let upstream know the device on this port is gone */
+ s->dev.port->ops->child_detach(s->dev.port, port1->dev);
+
port->wPortStatus &= ~PORT_STAT_CONNECTION;
port->wPortChange |= PORT_STAT_C_CONNECTION;
if (port->wPortStatus & PORT_STAT_ENABLE) {
@@ -246,6 +249,14 @@ static void usb_hub_detach(USBPort *port1)
}
}
+static void usb_hub_child_detach(USBPort *port1, USBDevice *child)
+{
+ USBHubState *s = port1->opaque;
+
+ /* Pass along upstream */
+ s->dev.port->ops->child_detach(s->dev.port, child);
+}
+
static void usb_hub_wakeup(USBPort *port1)
{
USBHubState *s = port1->opaque;
@@ -537,6 +548,7 @@ static void usb_hub_handle_destroy(USBDevice *dev)
static USBPortOps usb_hub_port_ops = {
.attach = usb_hub_attach,
.detach = usb_hub_detach,
+ .child_detach = usb_hub_child_detach,
.wakeup = usb_hub_wakeup,
.complete = usb_hub_complete,
};
diff --git a/hw/usb-musb.c b/hw/usb-musb.c
index 580bdc8..035dda8 100644
--- a/hw/usb-musb.c
+++ b/hw/usb-musb.c
@@ -261,17 +261,18 @@
static void musb_attach(USBPort *port);
static void musb_detach(USBPort *port);
+static void musb_child_detach(USBPort *port, USBDevice *child);
static void musb_schedule_cb(USBPort *port, USBPacket *p);
-static void musb_device_destroy(USBBus *bus, USBDevice *dev);
+static void musb_async_cancel_device(MUSBState *s, USBDevice *dev);
static USBPortOps musb_port_ops = {
.attach = musb_attach,
.detach = musb_detach,
+ .child_detach = musb_child_detach,
.complete = musb_schedule_cb,
};
static USBBusOps musb_bus_ops = {
- .device_destroy = musb_device_destroy,
};
typedef struct MUSBPacket MUSBPacket;
@@ -497,10 +498,19 @@ static void musb_detach(USBPort *port)
{
MUSBState *s = (MUSBState *) port->opaque;
+ musb_async_cancel_device(s, port->dev);
+
musb_intr_set(s, musb_irq_disconnect, 1);
musb_session_update(s, 1, s->session);
}
+static void musb_child_detach(USBPort *port, USBDevice *child)
+{
+ MUSBState *s = (MUSBState *) port->opaque;
+
+ musb_async_cancel_device(s, child);
+}
+
static void musb_cb_tick0(void *opaque)
{
MUSBEndPoint *ep = (MUSBEndPoint *) opaque;
@@ -782,9 +792,8 @@ static void musb_rx_packet_complete(USBPacket *packey, void *opaque)
musb_rx_intr_set(s, epnum, 1);
}
-static void musb_device_destroy(USBBus *bus, USBDevice *dev)
+static void musb_async_cancel_device(MUSBState *s, USBDevice *dev)
{
- MUSBState *s = container_of(bus, MUSBState, bus);
int ep, dir;
for (ep = 0; ep < 16; ep++) {
diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c
index bd92c31..46f0bcb 100644
--- a/hw/usb-ohci.c
+++ b/hw/usb-ohci.c
@@ -124,6 +124,7 @@ struct ohci_hcca {
};
static void ohci_bus_stop(OHCIState *ohci);
+static void ohci_async_cancel_device(OHCIState *ohci, USBDevice *dev);
/* Bitfields for the first word of an Endpoint Desciptor. */
#define OHCI_ED_FA_SHIFT 0
@@ -351,6 +352,8 @@ static void ohci_detach(USBPort *port1)
OHCIPort *port = &s->rhport[port1->index];
uint32_t old_state = port->ctrl;
+ ohci_async_cancel_device(s, port1->dev);
+
/* set connect status */
if (port->ctrl & OHCI_PORT_CCS) {
port->ctrl &= ~OHCI_PORT_CCS;
@@ -392,6 +395,13 @@ static void ohci_wakeup(USBPort *port1)
ohci_set_interrupt(s, intr);
}
+static void ohci_child_detach(USBPort *port1, USBDevice *child)
+{
+ OHCIState *s = port1->opaque;
+
+ ohci_async_cancel_device(s, child);
+}
+
/* Reset the controller */
static void ohci_reset(void *opaque)
{
@@ -1673,10 +1683,8 @@ static void ohci_mem_write(void *ptr, target_phys_addr_t addr, uint32_t val)
}
}
-static void ohci_device_destroy(USBBus *bus, USBDevice *dev)
+static void ohci_async_cancel_device(OHCIState *ohci, USBDevice *dev)
{
- OHCIState *ohci = container_of(bus, OHCIState, bus);
-
if (ohci->async_td && ohci->usb_packet.owner == dev) {
usb_cancel_packet(&ohci->usb_packet);
ohci->async_td = 0;
@@ -1700,12 +1708,12 @@ static CPUWriteMemoryFunc * const ohci_writefn[3]={
static USBPortOps ohci_port_ops = {
.attach = ohci_attach,
.detach = ohci_detach,
+ .child_detach = ohci_child_detach,
.wakeup = ohci_wakeup,
.complete = ohci_async_complete_packet,
};
static USBBusOps ohci_bus_ops = {
- .device_destroy = ohci_device_destroy,
};
static void usb_ohci_init(OHCIState *ohci, DeviceState *dev,
diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c
index ab635f6..a46d61a 100644
--- a/hw/usb-uhci.c
+++ b/hw/usb-uhci.c
@@ -606,6 +606,8 @@ static void uhci_detach(USBPort *port1)
UHCIState *s = port1->opaque;
UHCIPort *port = &s->ports[port1->index];
+ uhci_async_cancel_device(s, port1->dev);
+
/* set connect status */
if (port->ctrl & UHCI_PORT_CCS) {
port->ctrl &= ~UHCI_PORT_CCS;
@@ -620,6 +622,13 @@ static void uhci_detach(USBPort *port1)
uhci_resume(s);
}
+static void uhci_child_detach(USBPort *port1, USBDevice *child)
+{
+ UHCIState *s = port1->opaque;
+
+ uhci_async_cancel_device(s, child);
+}
+
static void uhci_wakeup(USBPort *port1)
{
UHCIState *s = port1->opaque;
@@ -1095,22 +1104,15 @@ static void uhci_map(PCIDevice *pci_dev, int region_num,
register_ioport_read(addr, 32, 1, uhci_ioport_readb, s);
}
-static void uhci_device_destroy(USBBus *bus, USBDevice *dev)
-{
- UHCIState *s = container_of(bus, UHCIState, bus);
-
- uhci_async_cancel_device(s, dev);
-}
-
static USBPortOps uhci_port_ops = {
.attach = uhci_attach,
.detach = uhci_detach,
+ .child_detach = uhci_child_detach,
.wakeup = uhci_wakeup,
.complete = uhci_async_complete,
};
static USBBusOps uhci_bus_ops = {
- .device_destroy = uhci_device_destroy,
};
static int usb_uhci_common_initfn(PCIDevice *dev)
diff --git a/hw/usb.h b/hw/usb.h
index 65f45a0..ded2de2 100644
--- a/hw/usb.h
+++ b/hw/usb.h
@@ -252,6 +252,11 @@ struct USBDeviceInfo {
typedef struct USBPortOps {
void (*attach)(USBPort *port);
void (*detach)(USBPort *port);
+ /*
+ * This gets called when a device downstream from the device attached to
+ * the port (iow attached through a hub) gets detached.
+ */
+ void (*child_detach)(USBPort *port, USBDevice *child);
void (*wakeup)(USBPort *port);
/*
* Note that port->dev will be different then the device from which
@@ -351,7 +356,6 @@ struct USBBus {
struct USBBusOps {
int (*register_companion)(USBBus *bus, USBPort *ports[],
uint32_t portcount, uint32_t firstport);
- void (*device_destroy)(USBBus *bus, USBDevice *dev);
};
void usb_bus_new(USBBus *bus, USBBusOps *ops, DeviceState *host);
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 07/23] usb-ehci: drop unused num-ports state member
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (5 preceding siblings ...)
2011-07-08 9:50 ` [Qemu-devel] [PATCH 06/23] usb: Replace device_destroy bus op with a child_detach port op Gerd Hoffmann
@ 2011-07-08 9:50 ` Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 08/23] usb-ehci: Connect Status bit is read only, don't allow changing it by the guest Gerd Hoffmann
` (17 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-ehci.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c
index 96451f3..87e1de3 100644
--- a/hw/usb-ehci.c
+++ b/hw/usb-ehci.c
@@ -373,7 +373,6 @@ struct EHCIState {
qemu_irq irq;
target_phys_addr_t mem_base;
int mem;
- int num_ports;
/* properties */
uint32_t freq;
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 08/23] usb-ehci: Connect Status bit is read only, don't allow changing it by the guest
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (6 preceding siblings ...)
2011-07-08 9:50 ` [Qemu-devel] [PATCH 07/23] usb-ehci: drop unused num-ports state member Gerd Hoffmann
@ 2011-07-08 9:50 ` Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 09/23] usb-ehci: cleanup port reset handling Gerd Hoffmann
` (16 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-ehci.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c
index 87e1de3..ce1a432 100644
--- a/hw/usb-ehci.c
+++ b/hw/usb-ehci.c
@@ -103,10 +103,10 @@
#define PORTSC_BEGIN PORTSC
#define PORTSC_END (PORTSC + 4 * NB_PORTS)
/*
- * Bits that are reserverd or are read-only are masked out of values
+ * Bits that are reserved or are read-only are masked out of values
* written to us by software
*/
-#define PORTSC_RO_MASK 0x007021c5
+#define PORTSC_RO_MASK 0x007021c4
#define PORTSC_RWC_MASK 0x0000002a
#define PORTSC_WKOC_E (1 << 22) // Wake on Over Current Enable
#define PORTSC_WKDS_E (1 << 21) // Wake on Disconnect Enable
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 09/23] usb-ehci: cleanup port reset handling
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (7 preceding siblings ...)
2011-07-08 9:50 ` [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 9:50 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 10/23] usb: assert on calling usb_attach(port, NULL) on a port without a dev Gerd Hoffmann
` (15 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
Doing a usb_attach when dev is NULL will just result in the
port detach op getting called even though nothing was connected in
the first place.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-ehci.c | 7 +------
1 files changed, 1 insertions(+), 6 deletions(-)
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c
index ce1a432..d85e0a9 100644
--- a/hw/usb-ehci.c
+++ b/hw/usb-ehci.c
@@ -863,14 +863,9 @@ static void handle_port_status_write(EHCIState *s, int port, uint32_t val)
if (!(val & PORTSC_PRESET) &&(*portsc & PORTSC_PRESET)) {
trace_usb_ehci_port_reset(port, 0);
- usb_attach(&s->ports[port], dev);
-
- // TODO how to handle reset of ports with no device
if (dev) {
+ usb_attach(&s->ports[port], dev);
usb_send_msg(dev, USB_MSG_RESET);
- }
-
- if (s->ports[port].dev) {
*portsc &= ~PORTSC_CSC;
}
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 10/23] usb: assert on calling usb_attach(port, NULL) on a port without a dev
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (8 preceding siblings ...)
2011-07-08 9:50 ` [Qemu-devel] [PATCH 09/23] usb-ehci: cleanup port reset handling Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 11/23] usb-ehci: Fix handling of PED and PEDC port status bits Gerd Hoffmann
` (14 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
with the "usb-ehci: cleanup port reset handling" patch in place no callers
are calling usb_attach(port, NULL) for a port where port->dev is NULL.
Doing that makes no sense as that causes the port detach op to get called
for a port with nothing attached. Add an assert that port->dev != NULL when
dev == NULL, and remove the check for not having a port->dev in the dev == NULL
case.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb.c | 9 ++++-----
1 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/hw/usb.c b/hw/usb.c
index 735ffd1..27a983c 100644
--- a/hw/usb.c
+++ b/hw/usb.c
@@ -40,12 +40,11 @@ void usb_attach(USBPort *port, USBDevice *dev)
} else {
/* detach */
dev = port->dev;
+ assert(dev);
port->ops->detach(port);
- if (dev) {
- usb_send_msg(dev, USB_MSG_DETACH);
- dev->port = NULL;
- port->dev = NULL;
- }
+ usb_send_msg(dev, USB_MSG_DETACH);
+ dev->port = NULL;
+ port->dev = NULL;
}
}
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 11/23] usb-ehci: Fix handling of PED and PEDC port status bits
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (9 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 10/23] usb: assert on calling usb_attach(port, NULL) on a port without a dev Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 12/23] usb-ehci: Add support for registering companion controllers Gerd Hoffmann
` (13 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
The PED bit should only be set for highspeed devices and the PEDC bit
should not be set on "normal" PED bit changes, only on io errors.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-ehci.c | 24 +++++++++++-------------
1 files changed, 11 insertions(+), 13 deletions(-)
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c
index d85e0a9..973c342 100644
--- a/hw/usb-ehci.c
+++ b/hw/usb-ehci.c
@@ -106,7 +106,7 @@
* Bits that are reserved or are read-only are masked out of values
* written to us by software
*/
-#define PORTSC_RO_MASK 0x007021c4
+#define PORTSC_RO_MASK 0x007021c0
#define PORTSC_RWC_MASK 0x0000002a
#define PORTSC_WKOC_E (1 << 22) // Wake on Over Current Enable
#define PORTSC_WKDS_E (1 << 21) // Wake on Disconnect Enable
@@ -752,7 +752,7 @@ static void ehci_detach(USBPort *port)
ehci_queues_rip_device(s, port->dev);
- *portsc &= ~PORTSC_CONNECT;
+ *portsc &= ~(PORTSC_CONNECT|PORTSC_PED);
*portsc |= PORTSC_CSC;
/*
@@ -847,16 +847,14 @@ static void ehci_mem_writew(void *ptr, target_phys_addr_t addr, uint32_t val)
static void handle_port_status_write(EHCIState *s, int port, uint32_t val)
{
uint32_t *portsc = &s->portsc[port];
- int rwc;
USBDevice *dev = s->ports[port].dev;
- rwc = val & PORTSC_RWC_MASK;
+ /* Clear rwc bits */
+ *portsc &= ~(val & PORTSC_RWC_MASK);
+ /* The guest may clear, but not set the PED bit */
+ *portsc &= val | ~PORTSC_PED;
val &= PORTSC_RO_MASK;
- // handle_read_write_clear(&val, portsc, PORTSC_PEDC | PORTSC_CSC);
-
- *portsc &= ~rwc;
-
if ((val & PORTSC_PRESET) && !(*portsc & PORTSC_PRESET)) {
trace_usb_ehci_port_reset(port, 1);
}
@@ -869,13 +867,13 @@ static void handle_port_status_write(EHCIState *s, int port, uint32_t val)
*portsc &= ~PORTSC_CSC;
}
- /* Table 2.16 Set the enable bit(and enable bit change) to indicate
+ /*
+ * Table 2.16 Set the enable bit(and enable bit change) to indicate
* to SW that this port has a high speed device attached
- *
- * TODO - when to disable?
*/
- val |= PORTSC_PED;
- val |= PORTSC_PEDC;
+ if (dev && (dev->speedmask & USB_SPEED_MASK_HIGH)) {
+ val |= PORTSC_PED;
+ }
}
*portsc &= ~PORTSC_RO_MASK;
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 12/23] usb-ehci: Add support for registering companion controllers
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (10 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 11/23] usb-ehci: Fix handling of PED and PEDC port status bits Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 13/23] usb-uhci: Add support for being a companion controller Gerd Hoffmann
` (12 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-ehci.c | 174 +++++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 144 insertions(+), 30 deletions(-)
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c
index 973c342..ec68c29 100644
--- a/hw/usb-ehci.c
+++ b/hw/usb-ehci.c
@@ -20,9 +20,6 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
- *
- * TODO:
- * o Downstream port handoff
*/
#include "hw.h"
@@ -106,7 +103,7 @@
* Bits that are reserved or are read-only are masked out of values
* written to us by software
*/
-#define PORTSC_RO_MASK 0x007021c0
+#define PORTSC_RO_MASK 0x007001c0
#define PORTSC_RWC_MASK 0x0000002a
#define PORTSC_WKOC_E (1 << 22) // Wake on Over Current Enable
#define PORTSC_WKDS_E (1 << 21) // Wake on Disconnect Enable
@@ -373,6 +370,7 @@ struct EHCIState {
qemu_irq irq;
target_phys_addr_t mem_base;
int mem;
+ int companion_count;
/* properties */
uint32_t freq;
@@ -408,6 +406,7 @@ struct EHCIState {
int astate; // Current state in asynchronous schedule
int pstate; // Current state in periodic schedule
USBPort ports[NB_PORTS];
+ USBPort *companion_ports[NB_PORTS];
uint32_t usbsts_pending;
QTAILQ_HEAD(, EHCIQueue) queues;
@@ -730,17 +729,17 @@ static void ehci_attach(USBPort *port)
trace_usb_ehci_port_attach(port->index, port->dev->product_desc);
+ if (*portsc & PORTSC_POWNER) {
+ USBPort *companion = s->companion_ports[port->index];
+ companion->dev = port->dev;
+ companion->ops->attach(companion);
+ return;
+ }
+
*portsc |= PORTSC_CONNECT;
*portsc |= PORTSC_CSC;
- /*
- * If a high speed device is attached then we own this port(indicated
- * by zero in the PORTSC_POWNER bit field) so set the status bit
- * and set an interrupt if enabled.
- */
- if ( !(*portsc & PORTSC_POWNER)) {
- ehci_set_interrupt(s, USBSTS_PCD);
- }
+ ehci_set_interrupt(s, USBSTS_PCD);
}
static void ehci_detach(USBPort *port)
@@ -750,36 +749,110 @@ static void ehci_detach(USBPort *port)
trace_usb_ehci_port_detach(port->index);
+ if (*portsc & PORTSC_POWNER) {
+ USBPort *companion = s->companion_ports[port->index];
+ companion->ops->detach(companion);
+ companion->dev = NULL;
+ return;
+ }
+
ehci_queues_rip_device(s, port->dev);
*portsc &= ~(PORTSC_CONNECT|PORTSC_PED);
*portsc |= PORTSC_CSC;
- /*
- * If a high speed device is attached then we own this port(indicated
- * by zero in the PORTSC_POWNER bit field) so set the status bit
- * and set an interrupt if enabled.
- */
- if ( !(*portsc & PORTSC_POWNER)) {
- ehci_set_interrupt(s, USBSTS_PCD);
- }
+ ehci_set_interrupt(s, USBSTS_PCD);
}
static void ehci_child_detach(USBPort *port, USBDevice *child)
{
EHCIState *s = port->opaque;
+ uint32_t portsc = s->portsc[port->index];
+
+ if (portsc & PORTSC_POWNER) {
+ USBPort *companion = s->companion_ports[port->index];
+ companion->ops->child_detach(companion, child);
+ companion->dev = NULL;
+ return;
+ }
ehci_queues_rip_device(s, child);
}
+static void ehci_wakeup(USBPort *port)
+{
+ EHCIState *s = port->opaque;
+ uint32_t portsc = s->portsc[port->index];
+
+ if (portsc & PORTSC_POWNER) {
+ USBPort *companion = s->companion_ports[port->index];
+ if (companion->ops->wakeup) {
+ companion->ops->wakeup(companion);
+ }
+ }
+}
+
+static int ehci_register_companion(USBBus *bus, USBPort *ports[],
+ uint32_t portcount, uint32_t firstport)
+{
+ EHCIState *s = container_of(bus, EHCIState, bus);
+ uint32_t i;
+
+ if (firstport + portcount > NB_PORTS) {
+ qerror_report(QERR_INVALID_PARAMETER_VALUE, "firstport",
+ "firstport on masterbus");
+ error_printf_unless_qmp(
+ "firstport value of %u makes companion take ports %u - %u, which "
+ "is outside of the valid range of 0 - %u\n", firstport, firstport,
+ firstport + portcount - 1, NB_PORTS - 1);
+ return -1;
+ }
+
+ for (i = 0; i < portcount; i++) {
+ if (s->companion_ports[firstport + i]) {
+ qerror_report(QERR_INVALID_PARAMETER_VALUE, "masterbus",
+ "an USB masterbus");
+ error_printf_unless_qmp(
+ "port %u on masterbus %s already has a companion assigned\n",
+ firstport + i, bus->qbus.name);
+ return -1;
+ }
+ }
+
+ for (i = 0; i < portcount; i++) {
+ s->companion_ports[firstport + i] = ports[i];
+ s->ports[firstport + i].speedmask |=
+ USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL;
+ /* Ensure devs attached before the initial reset go to the companion */
+ s->portsc[firstport + i] = PORTSC_POWNER;
+ }
+
+ s->companion_count++;
+ s->mmio[0x05] = (s->companion_count << 4) | portcount;
+
+ return 0;
+}
+
/* 4.1 host controller initialization */
static void ehci_reset(void *opaque)
{
EHCIState *s = opaque;
int i;
+ USBDevice *devs[NB_PORTS];
trace_usb_ehci_reset();
+ /*
+ * Do the detach before touching portsc, so that it correctly gets send to
+ * us or to our companion based on PORTSC_POWNER before the reset.
+ */
+ for(i = 0; i < NB_PORTS; i++) {
+ devs[i] = s->ports[i].dev;
+ if (devs[i]) {
+ usb_attach(&s->ports[i], NULL);
+ }
+ }
+
memset(&s->mmio[OPREGBASE], 0x00, MMIO_SIZE - OPREGBASE);
s->usbcmd = NB_MAXINTRATE << USBCMD_ITC_SH;
@@ -791,10 +864,13 @@ static void ehci_reset(void *opaque)
s->attach_poll_counter = 0;
for(i = 0; i < NB_PORTS; i++) {
- s->portsc[i] = PORTSC_POWNER | PORTSC_PPOWER;
-
- if (s->ports[i].dev) {
- usb_attach(&s->ports[i], s->ports[i].dev);
+ if (s->companion_ports[i]) {
+ s->portsc[i] = PORTSC_POWNER | PORTSC_PPOWER;
+ } else {
+ s->portsc[i] = PORTSC_PPOWER;
+ }
+ if (devs[i]) {
+ usb_attach(&s->ports[i], devs[i]);
}
}
ehci_queues_rip_all(s);
@@ -844,6 +920,34 @@ static void ehci_mem_writew(void *ptr, target_phys_addr_t addr, uint32_t val)
exit(1);
}
+static void handle_port_owner_write(EHCIState *s, int port, uint32_t owner)
+{
+ USBDevice *dev = s->ports[port].dev;
+ uint32_t *portsc = &s->portsc[port];
+ uint32_t orig;
+
+ if (s->companion_ports[port] == NULL)
+ return;
+
+ owner = owner & PORTSC_POWNER;
+ orig = *portsc & PORTSC_POWNER;
+
+ if (!(owner ^ orig)) {
+ return;
+ }
+
+ if (dev) {
+ usb_attach(&s->ports[port], NULL);
+ }
+
+ *portsc &= ~PORTSC_POWNER;
+ *portsc |= owner;
+
+ if (dev) {
+ usb_attach(&s->ports[port], dev);
+ }
+}
+
static void handle_port_status_write(EHCIState *s, int port, uint32_t val)
{
uint32_t *portsc = &s->portsc[port];
@@ -853,6 +957,9 @@ static void handle_port_status_write(EHCIState *s, int port, uint32_t val)
*portsc &= ~(val & PORTSC_RWC_MASK);
/* The guest may clear, but not set the PED bit */
*portsc &= val | ~PORTSC_PED;
+ /* POWNER is masked out by RO_MASK as it is RO when we've no companion */
+ handle_port_owner_write(s, port, val);
+ /* And finally apply RO_MASK */
val &= PORTSC_RO_MASK;
if ((val & PORTSC_PRESET) && !(*portsc & PORTSC_PRESET)) {
@@ -956,7 +1063,7 @@ static void ehci_mem_writel(void *ptr, target_phys_addr_t addr, uint32_t val)
val &= 0x1;
if (val) {
for(i = 0; i < NB_PORTS; i++)
- s->portsc[i] &= ~PORTSC_POWNER;
+ handle_port_owner_write(s, i, 0);
}
break;
@@ -1114,8 +1221,17 @@ static int ehci_buffer_rw(EHCIQueue *q, int bytes, int rw)
static void ehci_async_complete_packet(USBPort *port, USBPacket *packet)
{
- EHCIQueue *q = container_of(packet, EHCIQueue, packet);
+ EHCIQueue *q;
+ EHCIState *s = port->opaque;
+ uint32_t portsc = s->portsc[port->index];
+
+ if (portsc & PORTSC_POWNER) {
+ USBPort *companion = s->companion_ports[port->index];
+ companion->ops->complete(companion, packet);
+ return;
+ }
+ q = container_of(packet, EHCIQueue, packet);
trace_usb_ehci_queue_action(q, "wakeup");
assert(q->async == EHCI_ASYNC_INFLIGHT);
q->async = EHCI_ASYNC_FINISHED;
@@ -1245,8 +1361,6 @@ static int ehci_execute(EHCIQueue *q)
port = &q->ehci->ports[i];
dev = port->dev;
- // TODO sometime we will also need to check if we are the port owner
-
if (!(q->ehci->portsc[i] &(PORTSC_CONNECT))) {
DPRINTF("Port %d, no exec, not connected(%08X)\n",
i, q->ehci->portsc[i]);
@@ -1339,8 +1453,6 @@ static int ehci_process_itd(EHCIState *ehci,
port = &ehci->ports[j];
dev = port->dev;
- // TODO sometime we will also need to check if we are the port owner
-
if (!(ehci->portsc[j] &(PORTSC_CONNECT))) {
continue;
}
@@ -2124,10 +2236,12 @@ static USBPortOps ehci_port_ops = {
.attach = ehci_attach,
.detach = ehci_detach,
.child_detach = ehci_child_detach,
+ .wakeup = ehci_wakeup,
.complete = ehci_async_complete_packet,
};
static USBBusOps ehci_bus_ops = {
+ .register_companion = ehci_register_companion,
};
static PCIDeviceInfo ehci_info = {
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 13/23] usb-uhci: Add support for being a companion controller
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (11 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 12/23] usb-ehci: Add support for registering companion controllers Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 14/23] usb-ohci: " Gerd Hoffmann
` (11 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
To use as a companion controller set the masterbus property.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-uhci.c | 41 ++++++++++++++++++++++++++++++++++++-----
1 files changed, 36 insertions(+), 5 deletions(-)
diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c
index a46d61a..925c03b 100644
--- a/hw/usb-uhci.c
+++ b/hw/usb-uhci.c
@@ -132,7 +132,7 @@ typedef struct UHCIPort {
struct UHCIState {
PCIDevice dev;
- USBBus bus;
+ USBBus bus; /* Note unused when we're a companion controller */
uint16_t cmd; /* cmd register */
uint16_t status;
uint16_t intr; /* interrupt enable register */
@@ -150,6 +150,10 @@ struct UHCIState {
/* Active packets */
QTAILQ_HEAD(,UHCIAsync) async_pending;
uint8_t num_ports_vmstate;
+
+ /* Properties */
+ char *masterbus;
+ uint32_t firstport;
};
typedef struct UHCI_TD {
@@ -1126,10 +1130,22 @@ static int usb_uhci_common_initfn(PCIDevice *dev)
pci_conf[PCI_INTERRUPT_PIN] = 4; // interrupt pin 3
pci_conf[USB_SBRN] = USB_RELEASE_1; // release number
- usb_bus_new(&s->bus, &uhci_bus_ops, &s->dev.qdev);
- for(i = 0; i < NB_PORTS; i++) {
- usb_register_port(&s->bus, &s->ports[i].port, s, i, &uhci_port_ops,
- USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
+ if (s->masterbus) {
+ USBPort *ports[NB_PORTS];
+ for(i = 0; i < NB_PORTS; i++) {
+ ports[i] = &s->ports[i].port;
+ }
+ if (usb_register_companion(s->masterbus, ports, NB_PORTS,
+ s->firstport, s, &uhci_port_ops,
+ USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL) != 0) {
+ return -1;
+ }
+ } else {
+ usb_bus_new(&s->bus, &uhci_bus_ops, &s->dev.qdev);
+ for (i = 0; i < NB_PORTS; i++) {
+ usb_register_port(&s->bus, &s->ports[i].port, s, i, &uhci_port_ops,
+ USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
+ }
}
s->frame_timer = qemu_new_timer_ns(vm_clock, uhci_frame_timer, s);
s->num_ports_vmstate = NB_PORTS;
@@ -1170,6 +1186,11 @@ static PCIDeviceInfo uhci_info[] = {
.device_id = PCI_DEVICE_ID_INTEL_82371SB_2,
.revision = 0x01,
.class_id = PCI_CLASS_SERIAL_USB,
+ .qdev.props = (Property[]) {
+ DEFINE_PROP_STRING("masterbus", UHCIState, masterbus),
+ DEFINE_PROP_UINT32("firstport", UHCIState, firstport, 0),
+ DEFINE_PROP_END_OF_LIST(),
+ },
},{
.qdev.name = "piix4-usb-uhci",
.qdev.size = sizeof(UHCIState),
@@ -1179,6 +1200,11 @@ static PCIDeviceInfo uhci_info[] = {
.device_id = PCI_DEVICE_ID_INTEL_82371AB_2,
.revision = 0x01,
.class_id = PCI_CLASS_SERIAL_USB,
+ .qdev.props = (Property[]) {
+ DEFINE_PROP_STRING("masterbus", UHCIState, masterbus),
+ DEFINE_PROP_UINT32("firstport", UHCIState, firstport, 0),
+ DEFINE_PROP_END_OF_LIST(),
+ },
},{
.qdev.name = "vt82c686b-usb-uhci",
.qdev.size = sizeof(UHCIState),
@@ -1188,6 +1214,11 @@ static PCIDeviceInfo uhci_info[] = {
.device_id = PCI_DEVICE_ID_VIA_UHCI,
.revision = 0x01,
.class_id = PCI_CLASS_SERIAL_USB,
+ .qdev.props = (Property[]) {
+ DEFINE_PROP_STRING("masterbus", UHCIState, masterbus),
+ DEFINE_PROP_UINT32("firstport", UHCIState, firstport, 0),
+ DEFINE_PROP_END_OF_LIST(),
+ },
},{
/* end of list */
}
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 14/23] usb-ohci: Add support for being a companion controller
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (12 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 13/23] usb-uhci: Add support for being a companion controller Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 15/23] pci: add ich9 usb controller ids Gerd Hoffmann
` (10 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Hans de Goede, Gerd Hoffmann
From: Hans de Goede <hdegoede@redhat.com>
To use as a companion controller, use pci-ohci as device and set the
masterbus and num-ports properties, ie:
-device usb-ehci,addr=0b.1,multifunction=on,id=ehci0
-device pci-ohci,addr=0b.0,multifunction=on,masterbus=ehci0.0,num-ports=4
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-ohci.c | 52 ++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 40 insertions(+), 12 deletions(-)
diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c
index 46f0bcb..c77a20e 100644
--- a/hw/usb-ohci.c
+++ b/hw/usb-ohci.c
@@ -1716,8 +1716,9 @@ static USBPortOps ohci_port_ops = {
static USBBusOps ohci_bus_ops = {
};
-static void usb_ohci_init(OHCIState *ohci, DeviceState *dev,
- int num_ports, uint32_t localmem_base)
+static int usb_ohci_init(OHCIState *ohci, DeviceState *dev,
+ int num_ports, uint32_t localmem_base,
+ char *masterbus, uint32_t firstport)
{
int i;
@@ -1737,38 +1738,58 @@ static void usb_ohci_init(OHCIState *ohci, DeviceState *dev,
usb_frame_time, usb_bit_time);
}
+ ohci->num_ports = num_ports;
+ if (masterbus) {
+ USBPort *ports[OHCI_MAX_PORTS];
+ for(i = 0; i < num_ports; i++) {
+ ports[i] = &ohci->rhport[i].port;
+ }
+ if (usb_register_companion(masterbus, ports, num_ports,
+ firstport, ohci, &ohci_port_ops,
+ USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL) != 0) {
+ return -1;
+ }
+ } else {
+ usb_bus_new(&ohci->bus, &ohci_bus_ops, dev);
+ for (i = 0; i < num_ports; i++) {
+ usb_register_port(&ohci->bus, &ohci->rhport[i].port,
+ ohci, i, &ohci_port_ops,
+ USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
+ }
+ }
+
ohci->mem = cpu_register_io_memory(ohci_readfn, ohci_writefn, ohci,
DEVICE_LITTLE_ENDIAN);
ohci->localmem_base = localmem_base;
ohci->name = dev->info->name;
- usb_bus_new(&ohci->bus, &ohci_bus_ops, dev);
- ohci->num_ports = num_ports;
- for (i = 0; i < num_ports; i++) {
- usb_register_port(&ohci->bus, &ohci->rhport[i].port, ohci, i, &ohci_port_ops,
- USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
- }
-
ohci->async_td = 0;
qemu_register_reset(ohci_reset, ohci);
+
+ return 0;
}
typedef struct {
PCIDevice pci_dev;
OHCIState state;
+ char *masterbus;
+ uint32_t num_ports;
+ uint32_t firstport;
} OHCIPCIState;
static int usb_ohci_initfn_pci(struct PCIDevice *dev)
{
OHCIPCIState *ohci = DO_UPCAST(OHCIPCIState, pci_dev, dev);
- int num_ports = 3;
ohci->pci_dev.config[PCI_CLASS_PROG] = 0x10; /* OHCI */
/* TODO: RST# value should be 0. */
ohci->pci_dev.config[PCI_INTERRUPT_PIN] = 0x01; /* interrupt pin 1 */
- usb_ohci_init(&ohci->state, &dev->qdev, num_ports, 0);
+ if (usb_ohci_init(&ohci->state, &dev->qdev, ohci->num_ports, 0,
+ ohci->masterbus, ohci->firstport) != 0) {
+ return -1;
+ }
ohci->state.irq = ohci->pci_dev.irq[0];
/* TODO: avoid cast below by using dev */
@@ -1792,7 +1813,8 @@ static int ohci_init_pxa(SysBusDevice *dev)
{
OHCISysBusState *s = FROM_SYSBUS(OHCISysBusState, dev);
- usb_ohci_init(&s->ohci, &dev->qdev, s->num_ports, s->dma_offset);
+ /* Cannot fail as we pass NULL for masterbus */
+ usb_ohci_init(&s->ohci, &dev->qdev, s->num_ports, s->dma_offset, NULL, 0);
sysbus_init_irq(dev, &s->ohci.irq);
sysbus_init_mmio(dev, 0x1000, s->ohci.mem);
@@ -1807,6 +1829,12 @@ static PCIDeviceInfo ohci_pci_info = {
.vendor_id = PCI_VENDOR_ID_APPLE,
.device_id = PCI_DEVICE_ID_APPLE_IPID_USB,
.class_id = PCI_CLASS_SERIAL_USB,
+ .qdev.props = (Property[]) {
+ DEFINE_PROP_STRING("masterbus", OHCIPCIState, masterbus),
+ DEFINE_PROP_UINT32("num-ports", OHCIPCIState, num_ports, 3),
+ DEFINE_PROP_UINT32("firstport", OHCIPCIState, firstport, 0),
+ DEFINE_PROP_END_OF_LIST(),
+ },
};
static SysBusDeviceInfo ohci_sysbus_info = {
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 15/23] pci: add ich9 usb controller ids
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (13 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 14/23] usb-ohci: " Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 16/23] uhci: add ich9 controllers Gerd Hoffmann
` (9 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/pci_ids.h | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/hw/pci_ids.h b/hw/pci_ids.h
index d94578c..927f2b0 100644
--- a/hw/pci_ids.h
+++ b/hw/pci_ids.h
@@ -109,5 +109,13 @@
#define PCI_DEVICE_ID_INTEL_82371AB 0x7111
#define PCI_DEVICE_ID_INTEL_82371AB_2 0x7112
#define PCI_DEVICE_ID_INTEL_82371AB_3 0x7113
+#define PCI_DEVICE_ID_INTEL_82801I_UHCI1 0x2934
+#define PCI_DEVICE_ID_INTEL_82801I_UHCI2 0x2935
+#define PCI_DEVICE_ID_INTEL_82801I_UHCI3 0x2936
+#define PCI_DEVICE_ID_INTEL_82801I_UHCI4 0x2937
+#define PCI_DEVICE_ID_INTEL_82801I_UHCI5 0x2938
+#define PCI_DEVICE_ID_INTEL_82801I_UHCI6 0x2939
+#define PCI_DEVICE_ID_INTEL_82801I_EHCI1 0x293a
+#define PCI_DEVICE_ID_INTEL_82801I_EHCI2 0x293c
#define PCI_VENDOR_ID_XENSOURCE 0x5853
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 16/23] uhci: add ich9 controllers
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (14 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 15/23] pci: add ich9 usb controller ids Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 17/23] ehci: fix port count Gerd Hoffmann
` (8 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Add ich9 controllers, Factor out properties to a separate
struct and reference it to reduce duplication.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-uhci.c | 54 +++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 39 insertions(+), 15 deletions(-)
diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c
index 925c03b..2ef4c5b 100644
--- a/hw/usb-uhci.c
+++ b/hw/usb-uhci.c
@@ -1176,6 +1176,12 @@ static int usb_uhci_vt82c686b_initfn(PCIDevice *dev)
return usb_uhci_common_initfn(dev);
}
+static Property uhci_properties[] = {
+ DEFINE_PROP_STRING("masterbus", UHCIState, masterbus),
+ DEFINE_PROP_UINT32("firstport", UHCIState, firstport, 0),
+ DEFINE_PROP_END_OF_LIST(),
+};
+
static PCIDeviceInfo uhci_info[] = {
{
.qdev.name = "piix3-usb-uhci",
@@ -1186,11 +1192,7 @@ static PCIDeviceInfo uhci_info[] = {
.device_id = PCI_DEVICE_ID_INTEL_82371SB_2,
.revision = 0x01,
.class_id = PCI_CLASS_SERIAL_USB,
- .qdev.props = (Property[]) {
- DEFINE_PROP_STRING("masterbus", UHCIState, masterbus),
- DEFINE_PROP_UINT32("firstport", UHCIState, firstport, 0),
- DEFINE_PROP_END_OF_LIST(),
- },
+ .qdev.props = uhci_properties,
},{
.qdev.name = "piix4-usb-uhci",
.qdev.size = sizeof(UHCIState),
@@ -1200,11 +1202,7 @@ static PCIDeviceInfo uhci_info[] = {
.device_id = PCI_DEVICE_ID_INTEL_82371AB_2,
.revision = 0x01,
.class_id = PCI_CLASS_SERIAL_USB,
- .qdev.props = (Property[]) {
- DEFINE_PROP_STRING("masterbus", UHCIState, masterbus),
- DEFINE_PROP_UINT32("firstport", UHCIState, firstport, 0),
- DEFINE_PROP_END_OF_LIST(),
- },
+ .qdev.props = uhci_properties,
},{
.qdev.name = "vt82c686b-usb-uhci",
.qdev.size = sizeof(UHCIState),
@@ -1214,11 +1212,37 @@ static PCIDeviceInfo uhci_info[] = {
.device_id = PCI_DEVICE_ID_VIA_UHCI,
.revision = 0x01,
.class_id = PCI_CLASS_SERIAL_USB,
- .qdev.props = (Property[]) {
- DEFINE_PROP_STRING("masterbus", UHCIState, masterbus),
- DEFINE_PROP_UINT32("firstport", UHCIState, firstport, 0),
- DEFINE_PROP_END_OF_LIST(),
- },
+ .qdev.props = uhci_properties,
+ },{
+ .qdev.name = "ich9-usb-uhci1",
+ .qdev.size = sizeof(UHCIState),
+ .qdev.vmsd = &vmstate_uhci,
+ .init = usb_uhci_common_initfn,
+ .vendor_id = PCI_VENDOR_ID_INTEL,
+ .device_id = PCI_DEVICE_ID_INTEL_82801I_UHCI1,
+ .revision = 0x03,
+ .class_id = PCI_CLASS_SERIAL_USB,
+ .qdev.props = uhci_properties,
+ },{
+ .qdev.name = "ich9-usb-uhci2",
+ .qdev.size = sizeof(UHCIState),
+ .qdev.vmsd = &vmstate_uhci,
+ .init = usb_uhci_common_initfn,
+ .vendor_id = PCI_VENDOR_ID_INTEL,
+ .device_id = PCI_DEVICE_ID_INTEL_82801I_UHCI2,
+ .revision = 0x03,
+ .class_id = PCI_CLASS_SERIAL_USB,
+ .qdev.props = uhci_properties,
+ },{
+ .qdev.name = "ich9-usb-uhci3",
+ .qdev.size = sizeof(UHCIState),
+ .qdev.vmsd = &vmstate_uhci,
+ .init = usb_uhci_common_initfn,
+ .vendor_id = PCI_VENDOR_ID_INTEL,
+ .device_id = PCI_DEVICE_ID_INTEL_82801I_UHCI3,
+ .revision = 0x03,
+ .class_id = PCI_CLASS_SERIAL_USB,
+ .qdev.props = uhci_properties,
},{
/* end of list */
}
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 17/23] ehci: fix port count.
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (15 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 16/23] uhci: add ich9 controllers Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 18/23] ehci: add ich9 controller Gerd Hoffmann
` (7 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
The ICH4 EHCI controller which we emulate has six ports not four.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-ehci.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c
index ec68c29..0b959ca 100644
--- a/hw/usb-ehci.c
+++ b/hw/usb-ehci.c
@@ -130,7 +130,7 @@
#define FRAME_TIMER_NS (1000000000 / FRAME_TIMER_FREQ)
#define NB_MAXINTRATE 8 // Max rate at which controller issues ints
-#define NB_PORTS 4 // Number of downstream ports
+#define NB_PORTS 6 // Number of downstream ports
#define BUFF_SIZE 5*4096 // Max bytes to transfer per transaction
#define MAX_ITERATIONS 20 // Max number of QH before we break the loop
#define MAX_QH 100 // Max allowable queue heads in a chain
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 18/23] ehci: add ich9 controller.
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (16 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 17/23] ehci: fix port count Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 19/23] usb: update documentation Gerd Hoffmann
` (6 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-ehci.c | 43 +++++++++++++++++++++++++++++--------------
1 files changed, 29 insertions(+), 14 deletions(-)
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c
index 0b959ca..a4758f9 100644
--- a/hw/usb-ehci.c
+++ b/hw/usb-ehci.c
@@ -2244,19 +2244,34 @@ static USBBusOps ehci_bus_ops = {
.register_companion = ehci_register_companion,
};
-static PCIDeviceInfo ehci_info = {
- .qdev.name = "usb-ehci",
- .qdev.size = sizeof(EHCIState),
- .init = usb_ehci_initfn,
- .vendor_id = PCI_VENDOR_ID_INTEL,
- .device_id = PCI_DEVICE_ID_INTEL_82801D,
- .revision = 0x10,
- .class_id = PCI_CLASS_SERIAL_USB,
- .qdev.props = (Property[]) {
- DEFINE_PROP_UINT32("freq", EHCIState, freq, FRAME_TIMER_FREQ),
- DEFINE_PROP_UINT32("maxframes", EHCIState, maxframes, 128),
- DEFINE_PROP_END_OF_LIST(),
- },
+static Property ehci_properties[] = {
+ DEFINE_PROP_UINT32("freq", EHCIState, freq, FRAME_TIMER_FREQ),
+ DEFINE_PROP_UINT32("maxframes", EHCIState, maxframes, 128),
+ DEFINE_PROP_END_OF_LIST(),
+};
+
+static PCIDeviceInfo ehci_info[] = {
+ {
+ .qdev.name = "usb-ehci",
+ .qdev.size = sizeof(EHCIState),
+ .init = usb_ehci_initfn,
+ .vendor_id = PCI_VENDOR_ID_INTEL,
+ .device_id = PCI_DEVICE_ID_INTEL_82801D, /* ich4 */
+ .revision = 0x10,
+ .class_id = PCI_CLASS_SERIAL_USB,
+ .qdev.props = ehci_properties,
+ },{
+ .qdev.name = "ich9-usb-ehci1",
+ .qdev.size = sizeof(EHCIState),
+ .init = usb_ehci_initfn,
+ .vendor_id = PCI_VENDOR_ID_INTEL,
+ .device_id = PCI_DEVICE_ID_INTEL_82801I_EHCI1,
+ .revision = 0x03,
+ .class_id = PCI_CLASS_SERIAL_USB,
+ .qdev.props = ehci_properties,
+ },{
+ /* end of list */
+ }
};
static int usb_ehci_initfn(PCIDevice *dev)
@@ -2335,7 +2350,7 @@ static int usb_ehci_initfn(PCIDevice *dev)
static void ehci_register(void)
{
- pci_qdev_register(&ehci_info);
+ pci_qdev_register_many(ehci_info);
}
device_init(ehci_register);
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 19/23] usb: update documentation
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (17 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 18/23] ehci: add ich9 controller Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 20/23] usb_register_port(): do not set port->opaque and port->index twice Gerd Hoffmann
` (5 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Add a paragraph on companion controller mode and a
configuration file which sets it all up for you.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
docs/ich9-ehci-uhci.cfg | 37 +++++++++++++++++++++++++++++++++++++
docs/usb2.txt | 33 ++++++++++++++++++++++++++++-----
2 files changed, 65 insertions(+), 5 deletions(-)
create mode 100644 docs/ich9-ehci-uhci.cfg
diff --git a/docs/ich9-ehci-uhci.cfg b/docs/ich9-ehci-uhci.cfg
new file mode 100644
index 0000000..a0e9b96
--- /dev/null
+++ b/docs/ich9-ehci-uhci.cfg
@@ -0,0 +1,37 @@
+###########################################################################
+#
+# You can pass this file directly to qemu using the -readconfig
+# command line switch.
+#
+# This config file creates a EHCI adapter with companion UHCI
+# controllers as multifunction device in PCI slot "1d".
+#
+# Specify "bus=ehci.0" when creating usb devices to hook them up
+# there.
+#
+
+[device "ehci"]
+ driver = "ich9-usb-ehci1"
+ addr = "1d.7"
+ multifunction = "on"
+
+[device "uhci-1"]
+ driver = "ich9-usb-uhci1"
+ addr = "1d.0"
+ multifunction = "on"
+ masterbus = "ehci.0"
+ firstport = "0"
+
+[device "uhci-2"]
+ driver = "ich9-usb-uhci2"
+ addr = "1d.1"
+ multifunction = "on"
+ masterbus = "ehci.0"
+ firstport = "2"
+
+[device "uhci-3"]
+ driver = "ich9-usb-uhci3"
+ addr = "1d.2"
+ multifunction = "on"
+ masterbus = "ehci.0"
+ firstport = "4"
diff --git a/docs/usb2.txt b/docs/usb2.txt
index 5950c71..228aa33 100644
--- a/docs/usb2.txt
+++ b/docs/usb2.txt
@@ -2,11 +2,13 @@
USB 2.0 Quick Start
===================
-The QEMU EHCI Adapter does *not* support companion controllers. That
-implies there are two completely separate USB busses: One USB 1.1 bus
-driven by the UHCI controller and one USB 2.0 bus driven by the EHCI
-controller. Devices must be attached to the correct controller
-manually.
+The QEMU EHCI Adapter can be used with and without companion
+controllers. See below for the companion controller mode.
+
+When not running in companion controller mode there are two completely
+separate USB busses: One USB 1.1 bus driven by the UHCI controller and
+one USB 2.0 bus driven by the EHCI controller. Devices must be
+attached to the correct controller manually.
The '-usb' switch will make qemu create the UHCI controller as part of
the PIIX3 chipset. The USB 1.1 bus will carry the name "usb.0".
@@ -32,6 +34,27 @@ This attaches a usb tablet to the UHCI adapter and a usb mass storage
device to the EHCI adapter.
+Companion controller support
+----------------------------
+
+Companion controller support has been added recently. The operational
+model described above with two completely separate busses still works
+fine. Additionally the UHCI and OHCI controllers got the ability to
+attach to a usb bus created by EHCI as companion controllers. This is
+done by specifying the masterbus and firstport properties. masterbus
+specifies the bus name the controller should attach to. firstport
+specifies the first port the controller should attach to, which is
+needed as usually one ehci controller with six ports has three uhci
+companion controllers with two ports each.
+
+There is a config file in docs which will do all this for you, just
+try ...
+
+ qemu -readconfig docs/ich9-ehci-uhci.cfg
+
+... then use "bus=ehci.0" to assign your usb devices to that bus.
+
+
More USB tips & tricks
======================
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 20/23] usb_register_port(): do not set port->opaque and port->index twice
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (18 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 19/23] usb: update documentation Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 21/23] usb: fixup bluetooth descriptors Gerd Hoffmann
` (4 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Jes Sorensen, Gerd Hoffmann
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-bus.c | 2 --
1 files changed, 0 insertions(+), 2 deletions(-)
diff --git a/hw/usb-bus.c b/hw/usb-bus.c
index c8347e9..f1dd55e 100644
--- a/hw/usb-bus.c
+++ b/hw/usb-bus.c
@@ -143,8 +143,6 @@ static void usb_fill_port(USBPort *port, void *opaque, int index,
{
port->opaque = opaque;
port->index = index;
- port->opaque = opaque;
- port->index = index;
port->ops = ops;
port->speedmask = speedmask;
usb_port_location(port, NULL, index + 1);
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 21/23] usb: fixup bluetooth descriptors
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (19 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 20/23] usb_register_port(): do not set port->opaque and port->index twice Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 22/23] usb-hub: remove unused descriptor arrays Gerd Hoffmann
` (3 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Commit 4696425cd05c7baa0a4b469d43ba4b8488bcfc0f changes some
endpoints from isocrounous to interrupt by mistake. Fix it.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-bt.c | 24 ++++++++++++------------
1 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/hw/usb-bt.c b/hw/usb-bt.c
index baae487..e364513 100644
--- a/hw/usb-bt.c
+++ b/hw/usb-bt.c
@@ -99,13 +99,13 @@ static const USBDescIface desc_iface_bluetooth[] = {
.eps = (USBDescEndpoint[]) {
{
.bEndpointAddress = USB_DIR_OUT | USB_SCO_EP,
- .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .bmAttributes = USB_ENDPOINT_XFER_ISOC,
.wMaxPacketSize = 0,
.bInterval = 0x01,
},
{
.bEndpointAddress = USB_DIR_IN | USB_SCO_EP,
- .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .bmAttributes = USB_ENDPOINT_XFER_ISOC,
.wMaxPacketSize = 0,
.bInterval = 0x01,
},
@@ -120,13 +120,13 @@ static const USBDescIface desc_iface_bluetooth[] = {
.eps = (USBDescEndpoint[]) {
{
.bEndpointAddress = USB_DIR_OUT | USB_SCO_EP,
- .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .bmAttributes = USB_ENDPOINT_XFER_ISOC,
.wMaxPacketSize = 0x09,
.bInterval = 0x01,
},
{
.bEndpointAddress = USB_DIR_IN | USB_SCO_EP,
- .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .bmAttributes = USB_ENDPOINT_XFER_ISOC,
.wMaxPacketSize = 0x09,
.bInterval = 0x01,
},
@@ -141,13 +141,13 @@ static const USBDescIface desc_iface_bluetooth[] = {
.eps = (USBDescEndpoint[]) {
{
.bEndpointAddress = USB_DIR_OUT | USB_SCO_EP,
- .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .bmAttributes = USB_ENDPOINT_XFER_ISOC,
.wMaxPacketSize = 0x11,
.bInterval = 0x01,
},
{
.bEndpointAddress = USB_DIR_IN | USB_SCO_EP,
- .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .bmAttributes = USB_ENDPOINT_XFER_ISOC,
.wMaxPacketSize = 0x11,
.bInterval = 0x01,
},
@@ -162,13 +162,13 @@ static const USBDescIface desc_iface_bluetooth[] = {
.eps = (USBDescEndpoint[]) {
{
.bEndpointAddress = USB_DIR_OUT | USB_SCO_EP,
- .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .bmAttributes = USB_ENDPOINT_XFER_ISOC,
.wMaxPacketSize = 0x19,
.bInterval = 0x01,
},
{
.bEndpointAddress = USB_DIR_IN | USB_SCO_EP,
- .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .bmAttributes = USB_ENDPOINT_XFER_ISOC,
.wMaxPacketSize = 0x19,
.bInterval = 0x01,
},
@@ -183,13 +183,13 @@ static const USBDescIface desc_iface_bluetooth[] = {
.eps = (USBDescEndpoint[]) {
{
.bEndpointAddress = USB_DIR_OUT | USB_SCO_EP,
- .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .bmAttributes = USB_ENDPOINT_XFER_ISOC,
.wMaxPacketSize = 0x21,
.bInterval = 0x01,
},
{
.bEndpointAddress = USB_DIR_IN | USB_SCO_EP,
- .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .bmAttributes = USB_ENDPOINT_XFER_ISOC,
.wMaxPacketSize = 0x21,
.bInterval = 0x01,
},
@@ -204,13 +204,13 @@ static const USBDescIface desc_iface_bluetooth[] = {
.eps = (USBDescEndpoint[]) {
{
.bEndpointAddress = USB_DIR_OUT | USB_SCO_EP,
- .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .bmAttributes = USB_ENDPOINT_XFER_ISOC,
.wMaxPacketSize = 0x31,
.bInterval = 0x01,
},
{
.bEndpointAddress = USB_DIR_IN | USB_SCO_EP,
- .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .bmAttributes = USB_ENDPOINT_XFER_ISOC,
.wMaxPacketSize = 0x31,
.bInterval = 0x01,
},
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 22/23] usb-hub: remove unused descriptor arrays
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (20 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 21/23] usb: fixup bluetooth descriptors Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 23/23] usb-ohci: raise interrupt on attach Gerd Hoffmann
` (2 subsequent siblings)
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Somehow they where left over when converting the hub
to the new usb descriptor infrastructure ...
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-hub.c | 68 ----------------------------------------------------------
1 files changed, 0 insertions(+), 68 deletions(-)
diff --git a/hw/usb-hub.c b/hw/usb-hub.c
index b7557ce..b49a2fe 100644
--- a/hw/usb-hub.c
+++ b/hw/usb-hub.c
@@ -138,74 +138,6 @@ static const USBDesc desc_hub = {
.str = desc_strings,
};
-static const uint8_t qemu_hub_dev_descriptor[] = {
- 0x12, /* u8 bLength; */
- 0x01, /* u8 bDescriptorType; Device */
- 0x10, 0x01, /* u16 bcdUSB; v1.1 */
-
- 0x09, /* u8 bDeviceClass; HUB_CLASSCODE */
- 0x00, /* u8 bDeviceSubClass; */
- 0x00, /* u8 bDeviceProtocol; [ low/full speeds only ] */
- 0x08, /* u8 bMaxPacketSize0; 8 Bytes */
-
- 0x00, 0x00, /* u16 idVendor; */
- 0x00, 0x00, /* u16 idProduct; */
- 0x01, 0x01, /* u16 bcdDevice */
-
- 0x03, /* u8 iManufacturer; */
- 0x02, /* u8 iProduct; */
- 0x01, /* u8 iSerialNumber; */
- 0x01 /* u8 bNumConfigurations; */
-};
-
-/* XXX: patch interrupt size */
-static const uint8_t qemu_hub_config_descriptor[] = {
-
- /* one configuration */
- 0x09, /* u8 bLength; */
- 0x02, /* u8 bDescriptorType; Configuration */
- 0x19, 0x00, /* u16 wTotalLength; */
- 0x01, /* u8 bNumInterfaces; (1) */
- 0x01, /* u8 bConfigurationValue; */
- 0x00, /* u8 iConfiguration; */
- 0xe0, /* u8 bmAttributes;
- Bit 7: must be set,
- 6: Self-powered,
- 5: Remote wakeup,
- 4..0: resvd */
- 0x00, /* u8 MaxPower; */
-
- /* USB 1.1:
- * USB 2.0, single TT organization (mandatory):
- * one interface, protocol 0
- *
- * USB 2.0, multiple TT organization (optional):
- * two interfaces, protocols 1 (like single TT)
- * and 2 (multiple TT mode) ... config is
- * sometimes settable
- * NOT IMPLEMENTED
- */
-
- /* one interface */
- 0x09, /* u8 if_bLength; */
- 0x04, /* u8 if_bDescriptorType; Interface */
- 0x00, /* u8 if_bInterfaceNumber; */
- 0x00, /* u8 if_bAlternateSetting; */
- 0x01, /* u8 if_bNumEndpoints; */
- 0x09, /* u8 if_bInterfaceClass; HUB_CLASSCODE */
- 0x00, /* u8 if_bInterfaceSubClass; */
- 0x00, /* u8 if_bInterfaceProtocol; [usb1.1 or single tt] */
- 0x00, /* u8 if_iInterface; */
-
- /* one endpoint (status change endpoint) */
- 0x07, /* u8 ep_bLength; */
- 0x05, /* u8 ep_bDescriptorType; Endpoint */
- 0x81, /* u8 ep_bEndpointAddress; IN Endpoint 1 */
- 0x03, /* u8 ep_bmAttributes; Interrupt */
- 0x02, 0x00, /* u16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8) */
- 0xff /* u8 ep_bInterval; (255ms -- usb 2.0 spec) */
-};
-
static const uint8_t qemu_hub_hub_descriptor[] =
{
0x00, /* u8 bLength; patched in later */
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* [Qemu-devel] [PATCH 23/23] usb-ohci: raise interrupt on attach
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (21 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 22/23] usb-hub: remove unused descriptor arrays Gerd Hoffmann
@ 2011-07-08 9:51 ` Gerd Hoffmann
2011-07-12 14:52 ` [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
2011-07-19 15:59 ` Anthony Liguori
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-08 9:51 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Got lost in commit 618c169b577db64ac6589ad48825d2e11760d1a6,
add it back in. Also fix codestyle while we are at it.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-ohci.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c
index c77a20e..8491d59 100644
--- a/hw/usb-ohci.c
+++ b/hw/usb-ohci.c
@@ -327,6 +327,7 @@ static void ohci_attach(USBPort *port1)
{
OHCIState *s = port1->opaque;
OHCIPort *port = &s->rhport[port1->index];
+ uint32_t old_state = port->ctrl;
/* set connect status */
port->ctrl |= OHCI_PORT_CCS | OHCI_PORT_CSC;
@@ -344,6 +345,10 @@ static void ohci_attach(USBPort *port1)
}
DPRINTF("usb-ohci: Attached port %d\n", port1->index);
+
+ if (old_state != port->ctrl) {
+ ohci_set_interrupt(s, OHCI_INTR_RHSC);
+ }
}
static void ohci_detach(USBPort *port1)
@@ -366,8 +371,9 @@ static void ohci_detach(USBPort *port1)
}
DPRINTF("usb-ohci: Detached port %d\n", port1->index);
- if (old_state != port->ctrl)
+ if (old_state != port->ctrl) {
ohci_set_interrupt(s, OHCI_INTR_RHSC);
+ }
}
static void ohci_wakeup(USBPort *port1)
--
1.7.1
^ permalink raw reply related [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (22 preceding siblings ...)
2011-07-08 9:51 ` [Qemu-devel] [PATCH 23/23] usb-ohci: raise interrupt on attach Gerd Hoffmann
@ 2011-07-12 14:52 ` Gerd Hoffmann
2011-07-19 15:59 ` Anthony Liguori
24 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-12 14:52 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
On 07/08/11 11:50, Gerd Hoffmann wrote:
> Hi,
>
> Here is the current usb patch queue. Most noteworthy is the usb
> companion controller support added. There are also a bunch of bug
> fixes, some from Hans which he found while doing the companion
> controller work and some have been found in patch review.
>
> please pull,
> Gerd
>
> The following changes since commit 9312805d33e8b106bae356d13a8071fb37d75554:
>
> pxa2xx_lcd: add proper rotation support (2011-07-04 22:12:21 +0200)
>
> are available in the git repository at:
> git://git.kraxel.org/qemu usb.19
ping?
cheers,
Gerd
^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (23 preceding siblings ...)
2011-07-12 14:52 ` [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
@ 2011-07-19 15:59 ` Anthony Liguori
24 siblings, 0 replies; 47+ messages in thread
From: Anthony Liguori @ 2011-07-19 15:59 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
On 07/08/2011 04:50 AM, Gerd Hoffmann wrote:
> Hi,
>
> Here is the current usb patch queue. Most noteworthy is the usb
> companion controller support added. There are also a bunch of bug
> fixes, some from Hans which he found while doing the companion
> controller work and some have been found in patch review.
Pulled. Thanks.
Regards,
Anthony Liguori
>
> please pull,
> Gerd
>
> The following changes since commit 9312805d33e8b106bae356d13a8071fb37d75554:
>
> pxa2xx_lcd: add proper rotation support (2011-07-04 22:12:21 +0200)
>
> are available in the git repository at:
> git://git.kraxel.org/qemu usb.19
>
> Gerd Hoffmann (8):
> pci: add ich9 usb controller ids
> uhci: add ich9 controllers
> ehci: fix port count.
> ehci: add ich9 controller.
> usb: update documentation
> usb: fixup bluetooth descriptors
> usb-hub: remove unused descriptor arrays
> usb-ohci: raise interrupt on attach
>
> Hans de Goede (13):
> usb: Add a usb_fill_port helper function
> usb: Move (initial) call of usb_port_location to usb_fill_port
> usb: Add a register_companion USB bus op.
> usb: Make port wakeup and complete ops take a USBPort instead of a Device
> usb: Replace device_destroy bus op with a child_detach port op
> usb-ehci: drop unused num-ports state member
> usb-ehci: Connect Status bit is read only, don't allow changing it by the guest
> usb-ehci: cleanup port reset handling
> usb: assert on calling usb_attach(port, NULL) on a port without a dev
> usb-ehci: Fix handling of PED and PEDC port status bits
> usb-ehci: Add support for registering companion controllers
> usb-uhci: Add support for being a companion controller
> usb-ohci: Add support for being a companion controller
>
> Jes Sorensen (1):
> usb_register_port(): do not set port->opaque and port->index twice
>
> Peter Maydell (1):
> hw/usb-musb.c: Don't misuse usb_packet_complete()
>
> docs/ich9-ehci-uhci.cfg | 37 +++++++
> docs/usb2.txt | 33 +++++-
> hw/milkymist-softusb.c | 9 ++-
> hw/pci_ids.h | 8 ++
> hw/usb-bt.c | 24 ++--
> hw/usb-bus.c | 46 +++++++-
> hw/usb-ehci.c | 270 ++++++++++++++++++++++++++++++++++-------------
> hw/usb-hub.c | 90 +++-------------
> hw/usb-musb.c | 24 +++--
> hw/usb-ohci.c | 89 +++++++++++-----
> hw/usb-uhci.c | 95 +++++++++++++----
> hw/usb.c | 13 +--
> hw/usb.h | 20 +++-
> 13 files changed, 523 insertions(+), 235 deletions(-)
> create mode 100644 docs/ich9-ehci-uhci.cfg
>
>
^ permalink raw reply [flat|nested] 47+ messages in thread
* [Qemu-devel] [PULL] usb patch queue
@ 2011-07-20 10:23 Gerd Hoffmann
0 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-07-20 10:23 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
Tiny usb patch queue with two small fixes.
please pull for 0.15,
Gerd
The following changes since commit 03ff09580ef6cbc4a893b6e3e6bbff33180ec70a:
Merge remote-tracking branch 'agraf/xen-next' into staging (2011-07-19 08:04:35 -0500)
are available in the git repository at:
git://git.kraxel.org/qemu usb.20
Gerd Hoffmann (2):
usb-hid: fixup changed tracking.
usb-uhci: fix irq handling on error.
hw/usb-hid.c | 9 ++++-----
hw/usb-uhci.c | 6 ++++++
2 files changed, 10 insertions(+), 5 deletions(-)
^ permalink raw reply [flat|nested] 47+ messages in thread
* [Qemu-devel] [PULL] usb patch queue
@ 2011-08-11 7:03 Gerd Hoffmann
2011-08-12 7:02 ` Michael Tokarev
2011-08-12 13:04 ` Anthony Liguori
0 siblings, 2 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-08-11 7:03 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
More usb and hid bits. Fixes a usb tablet regression with windows xp.
milkymist goes use the new, splitted hid code directly instead of
(ab-)using the usb-kbd device, which in turn allows to kill the
usb_hid_datain_cb callback as no users are left.
please pull,
Gerd
The following changes since commit b9c6cbff76061537b722d55f0e321dde2a612a23:
Merge remote-tracking branch 'pm-arm/for-upstream' into pm (2011-08-09 19:16:43 +0200)
are available in the git repository at:
git://git.kraxel.org/qemu usb.23
Gerd Hoffmann (2):
usb/hid: add hid_pointer_activate, use it
usb-hid: remove usb_hid_datain_cb
Michael Walle (4):
hid: register kbd hander in init()
hid: introduce hid vmstate macros
usb-hid: use hid vmstate macro
milkymist-softusb: use hid code directly
hw/hid.c | 76 +++++++++++++++++++++++++++--
hw/hid.h | 1 +
hw/hw.h | 20 ++++++++
hw/milkymist-softusb.c | 122 +++++++++++++++---------------------------------
hw/usb-hid.c | 58 ++---------------------
hw/usb.h | 3 -
6 files changed, 134 insertions(+), 146 deletions(-)
^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-08-11 7:03 Gerd Hoffmann
@ 2011-08-12 7:02 ` Michael Tokarev
2011-08-12 7:57 ` Gerd Hoffmann
2011-08-12 13:04 ` Anthony Liguori
1 sibling, 1 reply; 47+ messages in thread
From: Michael Tokarev @ 2011-08-12 7:02 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
11.08.2011 11:03, Gerd Hoffmann wrote:
> Hi,
>
> More usb and hid bits. Fixes a usb tablet regression with windows xp.
> milkymist goes use the new, splitted hid code directly instead of
> (ab-)using the usb-kbd device, which in turn allows to kill the
> usb_hid_datain_cb callback as no users are left.
The same question as about spice queue: should
at least the regression fix go to stable?
Thanks,
/mjt
^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-08-12 7:02 ` Michael Tokarev
@ 2011-08-12 7:57 ` Gerd Hoffmann
0 siblings, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-08-12 7:57 UTC (permalink / raw)
To: Michael Tokarev; +Cc: qemu-devel
On 08/12/11 09:02, Michael Tokarev wrote:
> 11.08.2011 11:03, Gerd Hoffmann wrote:
>> Hi,
>>
>> More usb and hid bits. Fixes a usb tablet regression with windows xp.
>> milkymist goes use the new, splitted hid code directly instead of
>> (ab-)using the usb-kbd device, which in turn allows to kill the
>> usb_hid_datain_cb callback as no users are left.
>
> The same question as about spice queue: should
> at least the regression fix go to stable?
Same answer ;)
The regression is present in master only, so no.
cheers,
Gerd
^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-08-11 7:03 Gerd Hoffmann
2011-08-12 7:02 ` Michael Tokarev
@ 2011-08-12 13:04 ` Anthony Liguori
1 sibling, 0 replies; 47+ messages in thread
From: Anthony Liguori @ 2011-08-12 13:04 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
On 08/11/2011 02:03 AM, Gerd Hoffmann wrote:
> Hi,
>
> More usb and hid bits. Fixes a usb tablet regression with windows xp.
> milkymist goes use the new, splitted hid code directly instead of
> (ab-)using the usb-kbd device, which in turn allows to kill the
> usb_hid_datain_cb callback as no users are left.
>
> please pull,
> Gerd
>
> The following changes since commit b9c6cbff76061537b722d55f0e321dde2a612a23:
>
> Merge remote-tracking branch 'pm-arm/for-upstream' into pm (2011-08-09 19:16:43 +0200)
Pulled. Thanks.
Regards,
Anthony Liguori
>
> are available in the git repository at:
>
> git://git.kraxel.org/qemu usb.23
>
> Gerd Hoffmann (2):
> usb/hid: add hid_pointer_activate, use it
> usb-hid: remove usb_hid_datain_cb
>
> Michael Walle (4):
> hid: register kbd hander in init()
> hid: introduce hid vmstate macros
> usb-hid: use hid vmstate macro
> milkymist-softusb: use hid code directly
>
> hw/hid.c | 76 +++++++++++++++++++++++++++--
> hw/hid.h | 1 +
> hw/hw.h | 20 ++++++++
> hw/milkymist-softusb.c | 122 +++++++++++++++---------------------------------
> hw/usb-hid.c | 58 ++---------------------
> hw/usb.h | 3 -
> 6 files changed, 134 insertions(+), 146 deletions(-)
>
>
^ permalink raw reply [flat|nested] 47+ messages in thread
* [Qemu-devel] [PULL] usb patch queue
@ 2011-09-02 9:56 Gerd Hoffmann
2011-09-07 8:41 ` Gerd Hoffmann
2011-09-08 14:23 ` Anthony Liguori
0 siblings, 2 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-09-02 9:56 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
This is the current use patch queue with the following changes:
* musb improvements (qdev windup)
* fix ehci emulation for FreeBSD guests.
* a bunch if usb-host fixes.
* misc minir tweaks.
please pull,
Gerd
Gerd Hoffmann (15):
usb-host: start tracing support
usb-host: reapurb error report fix
usb-host: fix halted endpoints
usb-host: limit open retries
usb-host: fix configuration tracking.
usb-host: claim port
usb-host: endpoint table fixup
usb-ehci: handle siTDs
usb-host: constify port
usb-host: parse port in /proc/bus/usb/devices scan
usb: fix use after free
usb-ccid: switch to USBDesc*
usb-ccid: remote wakeup support
usb: claim port at device initialization time.
usb-host: tag as unmigratable
Juha Riihimäki (1):
usb-musb: Add reset function
Peter Maydell (2):
usb: Remove leading underscores from __musb_irq_max
usb-musb: Take a DeviceState* in init function
hw/tusb6010.c | 11 +-
hw/usb-bus.c | 110 ++++++++------
hw/usb-ccid.c | 248 +++++++++++---------------------
hw/usb-desc.h | 2 +-
hw/usb-ehci.c | 65 +++++++--
hw/usb-hub.c | 12 +--
hw/usb-musb.c | 26 +++-
hw/usb-ohci.c | 4 +-
hw/usb-uhci.c | 11 +-
hw/usb.c | 37 +++---
hw/usb.h | 11 +-
trace-events | 32 ++++
usb-linux.c | 448 ++++++++++++++++++++++++++++++++++-----------------------
13 files changed, 561 insertions(+), 456 deletions(-)
The following changes since commit 625f9e1f54cd78ee98ac22030da527c9a1cc9d2b:
Merge remote-tracking branch 'stefanha/trivial-patches' into staging (2011-09-01 13:57:19 -0500)
are available in the git repository at:
git://git.kraxel.org/qemu usb.25
Gerd Hoffmann (15):
usb-host: start tracing support
usb-host: reapurb error report fix
usb-host: fix halted endpoints
usb-host: limit open retries
usb-host: fix configuration tracking.
usb-host: claim port
usb-host: endpoint table fixup
usb-ehci: handle siTDs
usb-host: constify port
usb-host: parse port in /proc/bus/usb/devices scan
usb: fix use after free
usb-ccid: switch to USBDesc*
usb-ccid: remote wakeup support
usb: claim port at device initialization time.
usb-host: tag as unmigratable
Juha Riihimäki (1):
usb-musb: Add reset function
Peter Maydell (2):
usb: Remove leading underscores from __musb_irq_max
usb-musb: Take a DeviceState* in init function
hw/tusb6010.c | 11 +-
hw/usb-bus.c | 110 ++++++++------
hw/usb-ccid.c | 248 +++++++++++---------------------
hw/usb-desc.h | 2 +-
hw/usb-ehci.c | 65 +++++++--
hw/usb-hub.c | 12 +--
hw/usb-musb.c | 26 +++-
hw/usb-ohci.c | 4 +-
hw/usb-uhci.c | 11 +-
hw/usb.c | 37 +++---
hw/usb.h | 11 +-
trace-events | 32 ++++
usb-linux.c | 448 ++++++++++++++++++++++++++++++++++-----------------------
13 files changed, 561 insertions(+), 456 deletions(-)
^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-09-02 9:56 Gerd Hoffmann
@ 2011-09-07 8:41 ` Gerd Hoffmann
2011-09-08 14:23 ` Anthony Liguori
1 sibling, 0 replies; 47+ messages in thread
From: Gerd Hoffmann @ 2011-09-07 8:41 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
Hi,
> are available in the git repository at:
>
> git://git.kraxel.org/qemu usb.25
Pushed new branch usb.26.
Rebased to latest master, solved conflicts due to tracing merge, adapted
to tracing changes ("disabled" not needed any more in trace-events).
Squashed in a warning fix (init port variable) here:
> usb-host: parse port in /proc/bus/usb/devices scan
Don't feel like spamming the list with these minor changes. But can do
a full repost if prefered.
please pull,
Gerd
^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-09-02 9:56 Gerd Hoffmann
2011-09-07 8:41 ` Gerd Hoffmann
@ 2011-09-08 14:23 ` Anthony Liguori
1 sibling, 0 replies; 47+ messages in thread
From: Anthony Liguori @ 2011-09-08 14:23 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
On 09/02/2011 04:56 AM, Gerd Hoffmann wrote:
> Hi,
>
> This is the current use patch queue with the following changes:
>
> * musb improvements (qdev windup)
> * fix ehci emulation for FreeBSD guests.
> * a bunch if usb-host fixes.
> * misc minir tweaks.
>
> please pull,
> Gerd
Pulled. Thanks.
Regards,
Anthony Liguori
>
> Gerd Hoffmann (15):
> usb-host: start tracing support
> usb-host: reapurb error report fix
> usb-host: fix halted endpoints
> usb-host: limit open retries
> usb-host: fix configuration tracking.
> usb-host: claim port
> usb-host: endpoint table fixup
> usb-ehci: handle siTDs
> usb-host: constify port
> usb-host: parse port in /proc/bus/usb/devices scan
> usb: fix use after free
> usb-ccid: switch to USBDesc*
> usb-ccid: remote wakeup support
> usb: claim port at device initialization time.
> usb-host: tag as unmigratable
>
> Juha Riihimäki (1):
> usb-musb: Add reset function
>
> Peter Maydell (2):
> usb: Remove leading underscores from __musb_irq_max
> usb-musb: Take a DeviceState* in init function
>
> hw/tusb6010.c | 11 +-
> hw/usb-bus.c | 110 ++++++++------
> hw/usb-ccid.c | 248 +++++++++++---------------------
> hw/usb-desc.h | 2 +-
> hw/usb-ehci.c | 65 +++++++--
> hw/usb-hub.c | 12 +--
> hw/usb-musb.c | 26 +++-
> hw/usb-ohci.c | 4 +-
> hw/usb-uhci.c | 11 +-
> hw/usb.c | 37 +++---
> hw/usb.h | 11 +-
> trace-events | 32 ++++
> usb-linux.c | 448 ++++++++++++++++++++++++++++++++++-----------------------
> 13 files changed, 561 insertions(+), 456 deletions(-)
>
> The following changes since commit 625f9e1f54cd78ee98ac22030da527c9a1cc9d2b:
>
> Merge remote-tracking branch 'stefanha/trivial-patches' into staging (2011-09-01 13:57:19 -0500)
>
> are available in the git repository at:
>
> git://git.kraxel.org/qemu usb.25
>
> Gerd Hoffmann (15):
> usb-host: start tracing support
> usb-host: reapurb error report fix
> usb-host: fix halted endpoints
> usb-host: limit open retries
> usb-host: fix configuration tracking.
> usb-host: claim port
> usb-host: endpoint table fixup
> usb-ehci: handle siTDs
> usb-host: constify port
> usb-host: parse port in /proc/bus/usb/devices scan
> usb: fix use after free
> usb-ccid: switch to USBDesc*
> usb-ccid: remote wakeup support
> usb: claim port at device initialization time.
> usb-host: tag as unmigratable
>
> Juha Riihimäki (1):
> usb-musb: Add reset function
>
> Peter Maydell (2):
> usb: Remove leading underscores from __musb_irq_max
> usb-musb: Take a DeviceState* in init function
>
> hw/tusb6010.c | 11 +-
> hw/usb-bus.c | 110 ++++++++------
> hw/usb-ccid.c | 248 +++++++++++---------------------
> hw/usb-desc.h | 2 +-
> hw/usb-ehci.c | 65 +++++++--
> hw/usb-hub.c | 12 +--
> hw/usb-musb.c | 26 +++-
> hw/usb-ohci.c | 4 +-
> hw/usb-uhci.c | 11 +-
> hw/usb.c | 37 +++---
> hw/usb.h | 11 +-
> trace-events | 32 ++++
> usb-linux.c | 448 ++++++++++++++++++++++++++++++++++-----------------------
> 13 files changed, 561 insertions(+), 456 deletions(-)
>
>
^ permalink raw reply [flat|nested] 47+ messages in thread
* [Qemu-devel] [PULL] usb patch queue
@ 2011-10-13 11:08 Gerd Hoffmann
2011-10-14 16:25 ` Anthony Liguori
0 siblings, 1 reply; 47+ messages in thread
From: Gerd Hoffmann @ 2011-10-13 11:08 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
Here comes the usb patch queue with a bunch of bug fixes.
Check the individual patches for details.
please pull,
Gerd
The following changes since commit ebffe2afceb1a17b5d134b5debf553955fe5ea1a:
Merge remote-tracking branch 'qmp/queue/qmp' into staging (2011-10-10 08:21:46 -0500)
are available in the git repository at:
git://git.kraxel.org/qemu usb.28
Gerd Hoffmann (7):
usb-storage: fix NULL pointer dereference.
usb-hub: need to check dev->attached
usb: fix port reset
usb-host: factor out code
usb-host: handle USBDEVFS_SETCONFIGURATION returning EBUSY
usb-hid: activate usb tablet / mouse after migration.
usb-hub: don't trigger assert on packet completion.
Peter Maydell (2):
hw/usb-ohci: Fix OHCI_TD_T1 bit position definition
hw/usb-ohci: Honour endpoint maximum packet size
hw/usb-ehci.c | 4 +-
hw/usb-hid.c | 11 ++++
hw/usb-hub.c | 12 +++-
hw/usb-msd.c | 5 +-
hw/usb-ohci.c | 41 +++++++++----
hw/usb-uhci.c | 2 +-
hw/usb.c | 12 ++++
hw/usb.h | 1 +
usb-linux.c | 176 ++++++++++++++++++++++++++++++++++++---------------------
9 files changed, 180 insertions(+), 84 deletions(-)
^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-10-13 11:08 Gerd Hoffmann
@ 2011-10-14 16:25 ` Anthony Liguori
0 siblings, 0 replies; 47+ messages in thread
From: Anthony Liguori @ 2011-10-14 16:25 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
On 10/13/2011 06:08 AM, Gerd Hoffmann wrote:
> Hi,
>
> Here comes the usb patch queue with a bunch of bug fixes.
> Check the individual patches for details.
>
> please pull,
> Gerd
Pulled. Thanks.
Regards,
Anthony Liguori
>
> The following changes since commit ebffe2afceb1a17b5d134b5debf553955fe5ea1a:
>
> Merge remote-tracking branch 'qmp/queue/qmp' into staging (2011-10-10 08:21:46 -0500)
>
> are available in the git repository at:
>
> git://git.kraxel.org/qemu usb.28
>
> Gerd Hoffmann (7):
> usb-storage: fix NULL pointer dereference.
> usb-hub: need to check dev->attached
> usb: fix port reset
> usb-host: factor out code
> usb-host: handle USBDEVFS_SETCONFIGURATION returning EBUSY
> usb-hid: activate usb tablet / mouse after migration.
> usb-hub: don't trigger assert on packet completion.
>
> Peter Maydell (2):
> hw/usb-ohci: Fix OHCI_TD_T1 bit position definition
> hw/usb-ohci: Honour endpoint maximum packet size
>
> hw/usb-ehci.c | 4 +-
> hw/usb-hid.c | 11 ++++
> hw/usb-hub.c | 12 +++-
> hw/usb-msd.c | 5 +-
> hw/usb-ohci.c | 41 +++++++++----
> hw/usb-uhci.c | 2 +-
> hw/usb.c | 12 ++++
> hw/usb.h | 1 +
> usb-linux.c | 176 ++++++++++++++++++++++++++++++++++++---------------------
> 9 files changed, 180 insertions(+), 84 deletions(-)
>
>
^ permalink raw reply [flat|nested] 47+ messages in thread
* [Qemu-devel] [PULL] usb patch queue
@ 2011-11-01 14:56 Gerd Hoffmann
2011-11-01 18:13 ` Anthony Liguori
0 siblings, 1 reply; 47+ messages in thread
From: Gerd Hoffmann @ 2011-11-01 14:56 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
Three little usb patches for 1.0.
please pull,
Gerd
The following changes since commit ff74c5a9a91c6dbf1017195462aa4176f7381240:
Merge remote-tracking branch 'riku/linux-user-for-upstream' into staging (2011-10-31 15:05:40 -0500)
are available in the git repository at:
git://git.kraxel.org/qemu usb.29
Gerd Hoffmann (2):
usb-hub: wakeup on attach
usb-host: fix host close
Roy Tam (1):
usb: change VID/PID for usb-hub and usb-msd to prevent conflict
hw/usb-hub.c | 5 +++--
hw/usb-msd.c | 4 ++--
usb-linux.c | 6 ++++--
3 files changed, 9 insertions(+), 6 deletions(-)
^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-11-01 14:56 Gerd Hoffmann
@ 2011-11-01 18:13 ` Anthony Liguori
0 siblings, 0 replies; 47+ messages in thread
From: Anthony Liguori @ 2011-11-01 18:13 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
On 11/01/2011 09:56 AM, Gerd Hoffmann wrote:
> Hi,
>
> Three little usb patches for 1.0.
>
> please pull,
> Gerd
>
> The following changes since commit ff74c5a9a91c6dbf1017195462aa4176f7381240:
>
> Merge remote-tracking branch 'riku/linux-user-for-upstream' into staging (2011-10-31 15:05:40 -0500)
Pulled. Thanks.
Regards,
Anthony Liguori
> are available in the git repository at:
>
> git://git.kraxel.org/qemu usb.29
>
> Gerd Hoffmann (2):
> usb-hub: wakeup on attach
> usb-host: fix host close
>
> Roy Tam (1):
> usb: change VID/PID for usb-hub and usb-msd to prevent conflict
>
> hw/usb-hub.c | 5 +++--
> hw/usb-msd.c | 4 ++--
> usb-linux.c | 6 ++++--
> 3 files changed, 9 insertions(+), 6 deletions(-)
>
>
^ permalink raw reply [flat|nested] 47+ messages in thread
* [Qemu-devel] [PULL] usb patch queue
@ 2012-02-28 10:20 Gerd Hoffmann
2012-02-29 21:07 ` Anthony Liguori
0 siblings, 1 reply; 47+ messages in thread
From: Gerd Hoffmann @ 2012-02-28 10:20 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
Next batch of usb updates. This one brings packet queuing for uhci and
xhci, so we have per-endpoint queues at usb-bus level now. Need to
bring those to the usb drivers as next step, so they (especially
usb-host) can pipeline requests.
Also a bunch of bugfixes in ehci, smartcard emulation and usb redirect.
cheers,
Gerd
The following changes since commit b4bd0b168e9f4898b98308f4a8a089f647a86d16:
audio: Add some fall through comments (2012-02-25 18:16:11 +0400)
are available in the git repository at:
git://git.kraxel.org/qemu usb.39
Alon Levy (4):
usb-desc: fix user trigerrable segfaults (!config)
libcacard: link with glib for g_strndup
usb-ccid: advertise SELF_POWERED
libcacard: fix reported ATR length
Gerd Hoffmann (10):
usb-hid: fix tablet activation
usb-ehci: fix reset
usb-uhci: cleanup UHCIAsync allocation & initialization.
usb-uhci: add UHCIQueue
usb-uhci: process uhci_handle_td return code via switch.
usb-uhci: implement packet queuing
usb-xhci: enable packet queuing
usb: add tracepoint for usb packet state changes.
usb-ehci: sanity-check iso xfers
ehci: drop old stuff
Hans de Goede (6):
usb-ehci: Handle ISO packets failing with an error other then NAK
usb-redir: Fix printing of device version
usb-redir: Always clear device state on filter reject
usb-redir: Let the usb-host know about our device filtering
usb-redir: Limit return values returned by iso packets
usb-redir: Return USB_RET_NAK when we've no data for an interrupt endpoint
Jan Kiszka (1):
usb: Resolve warnings about unassigned bus on usb device creation
configure | 6 +-
hw/usb-bt.c | 4 +-
hw/usb-bus.c | 18 +---
hw/usb-ccid.c | 2 +-
hw/usb-desc.c | 20 +++-
hw/usb-ehci.c | 71 ++++++-------
hw/usb-hid.c | 3 +
hw/usb-msd.c | 4 +-
hw/usb-net.c | 4 +-
hw/usb-serial.c | 8 +-
hw/usb-uhci.c | 314 +++++++++++++++++++++++++++++++---------------------
hw/usb-xhci.c | 6 -
hw/usb.c | 27 +----
hw/usb.h | 7 +-
libcacard/vcardt.h | 4 +-
trace-events | 3 +
usb-bsd.c | 4 +-
usb-linux.c | 4 +-
usb-redir.c | 46 ++++++--
vl.c | 7 +-
20 files changed, 317 insertions(+), 245 deletions(-)
^ permalink raw reply [flat|nested] 47+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2012-02-28 10:20 Gerd Hoffmann
@ 2012-02-29 21:07 ` Anthony Liguori
0 siblings, 0 replies; 47+ messages in thread
From: Anthony Liguori @ 2012-02-29 21:07 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
On 02/28/2012 04:20 AM, Gerd Hoffmann wrote:
> Hi,
>
> Next batch of usb updates. This one brings packet queuing for uhci and
> xhci, so we have per-endpoint queues at usb-bus level now. Need to
> bring those to the usb drivers as next step, so they (especially
> usb-host) can pipeline requests.
>
> Also a bunch of bugfixes in ehci, smartcard emulation and usb redirect.
Regards,
Anthony Liguori
>
> cheers,
> Gerd
>
> The following changes since commit b4bd0b168e9f4898b98308f4a8a089f647a86d16:
>
> audio: Add some fall through comments (2012-02-25 18:16:11 +0400)
>
> are available in the git repository at:
> git://git.kraxel.org/qemu usb.39
>
> Alon Levy (4):
> usb-desc: fix user trigerrable segfaults (!config)
> libcacard: link with glib for g_strndup
> usb-ccid: advertise SELF_POWERED
> libcacard: fix reported ATR length
>
> Gerd Hoffmann (10):
> usb-hid: fix tablet activation
> usb-ehci: fix reset
> usb-uhci: cleanup UHCIAsync allocation& initialization.
> usb-uhci: add UHCIQueue
> usb-uhci: process uhci_handle_td return code via switch.
> usb-uhci: implement packet queuing
> usb-xhci: enable packet queuing
> usb: add tracepoint for usb packet state changes.
> usb-ehci: sanity-check iso xfers
> ehci: drop old stuff
>
> Hans de Goede (6):
> usb-ehci: Handle ISO packets failing with an error other then NAK
> usb-redir: Fix printing of device version
> usb-redir: Always clear device state on filter reject
> usb-redir: Let the usb-host know about our device filtering
> usb-redir: Limit return values returned by iso packets
> usb-redir: Return USB_RET_NAK when we've no data for an interrupt endpoint
>
> Jan Kiszka (1):
> usb: Resolve warnings about unassigned bus on usb device creation
>
> configure | 6 +-
> hw/usb-bt.c | 4 +-
> hw/usb-bus.c | 18 +---
> hw/usb-ccid.c | 2 +-
> hw/usb-desc.c | 20 +++-
> hw/usb-ehci.c | 71 ++++++-------
> hw/usb-hid.c | 3 +
> hw/usb-msd.c | 4 +-
> hw/usb-net.c | 4 +-
> hw/usb-serial.c | 8 +-
> hw/usb-uhci.c | 314 +++++++++++++++++++++++++++++++---------------------
> hw/usb-xhci.c | 6 -
> hw/usb.c | 27 +----
> hw/usb.h | 7 +-
> libcacard/vcardt.h | 4 +-
> trace-events | 3 +
> usb-bsd.c | 4 +-
> usb-linux.c | 4 +-
> usb-redir.c | 46 ++++++--
> vl.c | 7 +-
> 20 files changed, 317 insertions(+), 245 deletions(-)
>
>
^ permalink raw reply [flat|nested] 47+ messages in thread
end of thread, other threads:[~2012-02-29 21:07 UTC | newest]
Thread overview: 47+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-08 9:50 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 01/23] hw/usb-musb.c: Don't misuse usb_packet_complete() Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 02/23] usb: Add a usb_fill_port helper function Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 03/23] usb: Move (initial) call of usb_port_location to usb_fill_port Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 04/23] usb: Add a register_companion USB bus op Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 05/23] usb: Make port wakeup and complete ops take a USBPort instead of a Device Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 06/23] usb: Replace device_destroy bus op with a child_detach port op Gerd Hoffmann
2011-07-08 9:50 ` [Qemu-devel] [PATCH 07/23] usb-ehci: drop unused num-ports state member Gerd Hoffmann
2011-07-08 9:50 ` [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 9:50 ` [Qemu-devel] [PATCH 09/23] usb-ehci: cleanup port reset handling Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 10/23] usb: assert on calling usb_attach(port, NULL) on a port without a dev Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 11/23] usb-ehci: Fix handling of PED and PEDC port status bits Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 12/23] usb-ehci: Add support for registering companion controllers Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 13/23] usb-uhci: Add support for being a companion controller Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 14/23] usb-ohci: " Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 15/23] pci: add ich9 usb controller ids Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 16/23] uhci: add ich9 controllers Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 17/23] ehci: fix port count Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 18/23] ehci: add ich9 controller Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 19/23] usb: update documentation Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 20/23] usb_register_port(): do not set port->opaque and port->index twice Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 21/23] usb: fixup bluetooth descriptors Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 22/23] usb-hub: remove unused descriptor arrays Gerd Hoffmann
2011-07-08 9:51 ` [Qemu-devel] [PATCH 23/23] usb-ohci: raise interrupt on attach Gerd Hoffmann
2011-07-12 14:52 ` [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
2011-07-19 15:59 ` Anthony Liguori
-- strict thread matches above, loose matches on Subject: below --
2012-02-28 10:20 Gerd Hoffmann
2012-02-29 21:07 ` Anthony Liguori
2011-11-01 14:56 Gerd Hoffmann
2011-11-01 18:13 ` Anthony Liguori
2011-10-13 11:08 Gerd Hoffmann
2011-10-14 16:25 ` Anthony Liguori
2011-09-02 9:56 Gerd Hoffmann
2011-09-07 8:41 ` Gerd Hoffmann
2011-09-08 14:23 ` Anthony Liguori
2011-08-11 7:03 Gerd Hoffmann
2011-08-12 7:02 ` Michael Tokarev
2011-08-12 7:57 ` Gerd Hoffmann
2011-08-12 13:04 ` Anthony Liguori
2011-07-20 10:23 Gerd Hoffmann
2011-06-24 10:59 Gerd Hoffmann
2011-06-24 13:30 ` Hans de Goede
2011-06-27 20:19 ` Anthony Liguori
2011-06-14 11:05 Gerd Hoffmann
2011-06-15 14:17 ` Anthony Liguori
2011-05-04 15:41 Gerd Hoffmann
2011-05-05 18:28 ` 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).