[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 08/25] usb-ehci: switch to usb_find_device()
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 08/25] usb-ehci: switch to usb_find_device() |
Date: |
Mon, 23 Jan 2012 15:54:54 +0100 |
Switch over EHCI to use the new usb_find_device()
function for device lookup.
Signed-off-by: Gerd Hoffmann <address@hidden>
---
hw/usb-ehci.c | 69 ++++++++++++++++++++++++---------------------------------
1 files changed, 29 insertions(+), 40 deletions(-)
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c
index 7c75510..797b333 100644
--- a/hw/usb-ehci.c
+++ b/hw/usb-ehci.c
@@ -850,6 +850,26 @@ static int ehci_register_companion(USBBus *bus, USBPort
*ports[],
return 0;
}
+static USBDevice *ehci_find_device(EHCIState *ehci, uint8_t addr)
+{
+ USBDevice *dev;
+ USBPort *port;
+ int i;
+
+ for (i = 0; i < NB_PORTS; i++) {
+ port = &ehci->ports[i];
+ if (!(ehci->portsc[i] & PORTSC_PED)) {
+ DPRINTF("Port %d not enabled\n", i);
+ continue;
+ }
+ dev = usb_find_device(port, addr);
+ if (dev != NULL) {
+ return dev;
+ }
+ }
+ return NULL;
+}
+
/* 4.1 host controller initialization */
static void ehci_reset(void *opaque)
{
@@ -1336,10 +1356,8 @@ err:
static int ehci_execute(EHCIQueue *q)
{
- USBPort *port;
USBDevice *dev;
int ret;
- int i;
int endp;
int devadr;
@@ -1375,27 +1393,12 @@ static int ehci_execute(EHCIQueue *q)
usb_packet_map(&q->packet, &q->sgl);
// TO-DO: associating device with ehci port
- for(i = 0; i < NB_PORTS; i++) {
- port = &q->ehci->ports[i];
- dev = port->dev;
-
- if (!(q->ehci->portsc[i] &(PORTSC_CONNECT))) {
- DPRINTF("Port %d, no exec, not connected(%08X)\n",
- i, q->ehci->portsc[i]);
- continue;
- }
-
- ret = usb_handle_packet(dev, &q->packet);
-
- DPRINTF("submit: qh %x next %x qtd %x pid %x len %zd "
- "(total %d) endp %x ret %d\n",
- q->qhaddr, q->qh.next, q->qtdaddr, q->pid,
- q->packet.iov.size, q->tbytes, endp, ret);
-
- if (ret != USB_RET_NODEV) {
- break;
- }
- }
+ dev = ehci_find_device(q->ehci, q->packet.devaddr);
+ ret = usb_handle_packet(dev, &q->packet);
+ DPRINTF("submit: qh %x next %x qtd %x pid %x len %zd "
+ "(total %d) endp %x ret %d\n",
+ q->qhaddr, q->qh.next, q->qtdaddr, q->pid,
+ q->packet.iov.size, q->tbytes, endp, ret);
if (ret > BUFF_SIZE) {
fprintf(stderr, "ret from usb_handle_packet > BUFF_SIZE\n");
@@ -1411,10 +1414,9 @@ static int ehci_execute(EHCIQueue *q)
static int ehci_process_itd(EHCIState *ehci,
EHCIitd *itd)
{
- USBPort *port;
USBDevice *dev;
int ret;
- uint32_t i, j, len, pid, dir, devaddr, endp;
+ uint32_t i, len, pid, dir, devaddr, endp;
uint32_t pg, off, ptr1, ptr2, max, mult;
dir =(itd->bufptr[1] & ITD_BUFPTR_DIRECTION);
@@ -1455,21 +1457,8 @@ static int ehci_process_itd(EHCIState *ehci,
usb_packet_setup(&ehci->ipacket, pid, devaddr, endp);
usb_packet_map(&ehci->ipacket, &ehci->isgl);
- ret = USB_RET_NODEV;
- for (j = 0; j < NB_PORTS; j++) {
- port = &ehci->ports[j];
- dev = port->dev;
-
- if (!(ehci->portsc[j] &(PORTSC_CONNECT))) {
- continue;
- }
-
- ret = usb_handle_packet(dev, &ehci->ipacket);
-
- if (ret != USB_RET_NODEV) {
- break;
- }
- }
+ dev = ehci_find_device(ehci, ehci->ipacket.devaddr);
+ ret = usb_handle_packet(dev, &ehci->ipacket);
usb_packet_unmap(&ehci->ipacket);
qemu_sglist_destroy(&ehci->isgl);
--
1.7.1
- [Qemu-devel] [PATCH 07/25] usb-uhci: switch to usb_find_device(), (continued)
- [Qemu-devel] [PATCH 07/25] usb-uhci: switch to usb_find_device(), Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 13/25] usb: fold usb_generic_handle_packet into usb_handle_packet, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 03/25] usb: kill usb_send_msg, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 11/25] usb-xhci: switch to usb_find_device(), Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 05/25] usb-hub: implement find_device, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 12/25] usb: kill handle_packet callback, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 09/25] usb-ohci: switch to usb_find_device(), Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 14/25] usb: USBPacket: add status, rename owner -> ep, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 06/25] usb: handle dev == NULL in usb_handle_packet(), Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 20/25] xhci: signal low- and fullspeed support, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 08/25] usb-ehci: switch to usb_find_device(),
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 10/25] usb-musb: switch to usb_find_device(), Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 22/25] xhci: stop on errors, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 23/25] xhci: kill port arg from xhci_setup_packet, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 19/25] usb: add USBBusOps->wakeup_endpoint, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 18/25] usb: pass USBEndpoint to usb_wakeup, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 17/25] usb: maintain async packet list per endpoint, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 24/25] xhci: remote wakeup support, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 21/25] xhci: add trb type name lookup support., Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 25/25] xhci: handle USB_RET_NAK, Gerd Hoffmann, 2012/01/23
- [Qemu-devel] [PATCH 15/25] usb: add USBEndpoint->{nr,pid}, Gerd Hoffmann, 2012/01/23