This allows us to extend struct qTD with non hardware specific
fields.

Signed-off-by: Sascha Hauer <[email protected]>
---
 drivers/usb/host/ehci-hcd.c |   22 +++++++++++-----------
 drivers/usb/host/ehci.h     |    6 +++++-
 2 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 425406d..929c8a6 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -293,11 +293,11 @@ ehci_submit_async(struct usb_device *dev, unsigned long 
pipe, void *buffer,
            (dev->portnr << 23) |
            (dev->parent->devnum << 16) | (0 << 8) | (0 << 0);
        qh->qh_endpt2 = cpu_to_hc32(endpt);
-       qh->qh_overlay.qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
-       qh->qh_overlay.qt_altnext = cpu_to_hc32(QT_NEXT_TERMINATE);
+       qh->qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
+       qh->qt_altnext = cpu_to_hc32(QT_NEXT_TERMINATE);
 
        td = NULL;
-       tdp = &qh->qh_overlay.qt_next;
+       tdp = &qh->qt_next;
 
        toggle =
            usb_gettoggle(dev, usb_pipeendpoint(pipe), usb_pipeout(pipe));
@@ -391,7 +391,7 @@ ehci_submit_async(struct usb_device *dev, unsigned long 
pipe, void *buffer,
                        ehci_writel(&ehci->hcor->or_usbcmd, cmd);
 
                        ret = handshake(&ehci->hcor->or_usbsts, STD_ASS, 0, 100 
* 1000);
-                       ehci_writel(&qh->qh_overlay.qt_token, 0);
+                       ehci_writel(&qh->qt_token, 0);
                        return -ETIMEDOUT;
                }
        } while (token & 0x80);
@@ -410,7 +410,7 @@ ehci_submit_async(struct usb_device *dev, unsigned long 
pipe, void *buffer,
 
        ehci->qh_list->qh_link = cpu_to_hc32((uint32_t)ehci->qh_list | 
QH_LINK_TYPE_QH);
 
-       token = hc32_to_cpu(qh->qh_overlay.qt_token);
+       token = hc32_to_cpu(qh->qt_token);
        if (!(token & 0x80)) {
                debug("TOKEN=0x%08x\n", token);
                switch (token & 0xfc) {
@@ -448,10 +448,10 @@ ehci_submit_async(struct usb_device *dev, unsigned long 
pipe, void *buffer,
 
 fail:
        printf("fail1\n");
-       td = (void *)hc32_to_cpu(qh->qh_overlay.qt_next);
+       td = (void *)hc32_to_cpu(qh->qt_next);
        while (td != (void *)QT_NEXT_TERMINATE) {
-               qh->qh_overlay.qt_next = td->qt_next;
-               td = (void *)hc32_to_cpu(qh->qh_overlay.qt_next);
+               qh->qt_next = td->qt_next;
+               td = (void *)hc32_to_cpu(qh->qt_next);
        }
        return -1;
 }
@@ -767,9 +767,9 @@ static int ehci_init(struct usb_host *host)
        ehci->qh_list->qh_link = cpu_to_hc32((uint32_t)ehci->qh_list | 
QH_LINK_TYPE_QH);
        ehci->qh_list->qh_endpt1 = cpu_to_hc32((1 << 15) | (USB_SPEED_HIGH << 
12));
        ehci->qh_list->qh_curtd = cpu_to_hc32(QT_NEXT_TERMINATE);
-       ehci->qh_list->qh_overlay.qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
-       ehci->qh_list->qh_overlay.qt_altnext = cpu_to_hc32(QT_NEXT_TERMINATE);
-       ehci->qh_list->qh_overlay.qt_token = cpu_to_hc32(0x40);
+       ehci->qh_list->qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
+       ehci->qh_list->qt_altnext = cpu_to_hc32(QT_NEXT_TERMINATE);
+       ehci->qh_list->qt_token = cpu_to_hc32(0x40);
 
        /* Set async. queue head pointer. */
        ehci_writel(&ehci->hcor->or_asynclistaddr, (uint32_t)ehci->qh_list);
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h
index eac93db..76a3c85 100644
--- a/drivers/usb/host/ehci.h
+++ b/drivers/usb/host/ehci.h
@@ -179,7 +179,11 @@ struct QH {
        uint32_t qh_endpt1;
        uint32_t qh_endpt2;
        uint32_t qh_curtd;
-       struct qTD qh_overlay;
+        /* qtd overlay (hardware parts of a struct qTD) */
+       uint32_t qt_next;
+       uint32_t qt_altnext;
+       uint32_t qt_token;
+       uint32_t qt_buffer[5];
        /*
         * Add dummy fill value to make the size of this struct
         * aligned to 32 bytes
-- 
1.7.10


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to