SAMA5: Add tracing support to the OHCI driver
This commit is contained in:
parent
92aa5785bf
commit
9f3e2e3bec
@ -54,6 +54,7 @@
|
|||||||
#include <nuttx/usb/usb.h>
|
#include <nuttx/usb/usb.h>
|
||||||
#include <nuttx/usb/ohci.h>
|
#include <nuttx/usb/ohci.h>
|
||||||
#include <nuttx/usb/usbhost.h>
|
#include <nuttx/usb/usbhost.h>
|
||||||
|
#include <nuttx/usb/usbhost_trace.h>
|
||||||
|
|
||||||
#include <arch/irq.h>
|
#include <arch/irq.h>
|
||||||
|
|
||||||
@ -1003,7 +1004,7 @@ static inline int sam_addinted(const FAR struct usbhost_epdesc_s *epdesc,
|
|||||||
|
|
||||||
interval = sam_getinterval(epdesc->interval);
|
interval = sam_getinterval(epdesc->interval);
|
||||||
ed->interval = interval;
|
ed->interval = interval;
|
||||||
uvdbg("interval: %d->%d\n", epdesc->interval, interval);
|
usbhost_vtrace2(OHCI_VTRACE2_INTERVAL, epdesc->interval, interval);
|
||||||
|
|
||||||
/* Get the offset associated with the ED direction. IN EDs get the even
|
/* Get the offset associated with the ED direction. IN EDs get the even
|
||||||
* entries, OUT EDs get the odd entries.
|
* entries, OUT EDs get the odd entries.
|
||||||
@ -1037,7 +1038,7 @@ static inline int sam_addinted(const FAR struct usbhost_epdesc_s *epdesc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uvdbg("Min interval: %d offset: %d\n", interval, offset);
|
usbhost_vtrace2(OHCI_VTRACE2_MININTERVAL, interval, offset);
|
||||||
|
|
||||||
/* Get the (physical) head of the first of the duplicated entries. The
|
/* Get the (physical) head of the first of the duplicated entries. The
|
||||||
* first offset entry is always guaranteed to contain the common ED list
|
* first offset entry is always guaranteed to contain the common ED list
|
||||||
@ -1062,7 +1063,7 @@ static inline int sam_addinted(const FAR struct usbhost_epdesc_s *epdesc,
|
|||||||
physed = sam_physramaddr((uintptr_t)ed);
|
physed = sam_physramaddr((uintptr_t)ed);
|
||||||
sam_setinttab((uint32_t)physed, interval, offset);
|
sam_setinttab((uint32_t)physed, interval, offset);
|
||||||
|
|
||||||
uvdbg("head: %08x next: %08x\n", physed, physhead);
|
usbhost_vtrace1(OHCI_VTRACE1_PHYSED, physed);
|
||||||
|
|
||||||
/* Re-enable periodic list processing */
|
/* Re-enable periodic list processing */
|
||||||
|
|
||||||
@ -1138,8 +1139,12 @@ static inline int sam_reminted(struct sam_ed_s *ed)
|
|||||||
physhead = g_hcca.inttbl[offset];
|
physhead = g_hcca.inttbl[offset];
|
||||||
head = (struct sam_ed_s *)sam_virtramaddr((uintptr_t)physhead);
|
head = (struct sam_ed_s *)sam_virtramaddr((uintptr_t)physhead);
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST_TRACE
|
||||||
|
usbhost_vtrace1(OHCI_VTRACE1_VIRTED, (uintptr_t)ed);
|
||||||
|
#else
|
||||||
uvdbg("ed: %08x head: %08x next: %08x offset: %d\n",
|
uvdbg("ed: %08x head: %08x next: %08x offset: %d\n",
|
||||||
ed, physhead, head ? head->hw.nexted : 0, offset);
|
ed, physhead, head ? head->hw.nexted : 0, offset);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Find the ED to be removed in the ED list */
|
/* Find the ED to be removed in the ED list */
|
||||||
|
|
||||||
@ -1174,8 +1179,12 @@ static inline int sam_reminted(struct sam_ed_s *ed)
|
|||||||
prev->hw.nexted = ed->hw.nexted;
|
prev->hw.nexted = ed->hw.nexted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST_TRACE
|
||||||
|
usbhost_vtrace1(OHCI_VTRACE1_VIRTED, (uintptr_t)ed);
|
||||||
|
#else
|
||||||
uvdbg("ed: %08x head: %08x next: %08x\n",
|
uvdbg("ed: %08x head: %08x next: %08x\n",
|
||||||
ed, physhead, head ? head->hw.nexted : 0);
|
ed, physhead, head ? head->hw.nexted : 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Calculate the new minimum interval for this list */
|
/* Calculate the new minimum interval for this list */
|
||||||
|
|
||||||
@ -1188,7 +1197,7 @@ static inline int sam_reminted(struct sam_ed_s *ed)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uvdbg("Min interval: %d offset: %d\n", interval, offset);
|
usbhost_vtrace2(OHCI_VTRACE2_MININTERVAL, interval, offset);
|
||||||
|
|
||||||
/* Save the new minimum interval */
|
/* Save the new minimum interval */
|
||||||
|
|
||||||
@ -1630,7 +1639,7 @@ static int sam_ctrltd(struct sam_rhport_s *rhport, uint32_t dirpid,
|
|||||||
ret = sam_wdhwait(rhport, edctrl);
|
ret = sam_wdhwait(rhport, edctrl);
|
||||||
if (ret != OK)
|
if (ret != OK)
|
||||||
{
|
{
|
||||||
udbg("ERROR: Device disconnected\n");
|
usbhost_trace1(OHCI_TRACE1_DEVDISCONN, rhport->rhpndx + 1);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1698,7 +1707,8 @@ static int sam_ctrltd(struct sam_rhport_s *rhport, uint32_t dirpid,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
udbg("ERROR: Bad TD completion status: %d\n", edctrl->tdstatus);
|
usbhost_trace2(OHCI_TRACE2_BADTDSTATUS, rhport->rhpndx + 1,
|
||||||
|
edctrl->tdstatus);
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1733,12 +1743,12 @@ static void sam_rhsc_bottomhalf(void)
|
|||||||
regaddr = SAM_USBHOST_RHPORTST(rhpndx+1);
|
regaddr = SAM_USBHOST_RHPORTST(rhpndx+1);
|
||||||
rhportst = sam_getreg(regaddr);
|
rhportst = sam_getreg(regaddr);
|
||||||
|
|
||||||
uvdbg("RHPORTST%d: %08x\n", rhpndx + 1, rhportst);
|
usbhost_vtrace2(OHCI_VTRACE2_RHPORTST, rhpndx + 1, (uint16_t)rhportst);
|
||||||
|
|
||||||
if ((rhportst & OHCI_RHPORTST_CSC) != 0)
|
if ((rhportst & OHCI_RHPORTST_CSC) != 0)
|
||||||
{
|
{
|
||||||
uint32_t rhstatus = sam_getreg(SAM_USBHOST_RHSTATUS);
|
uint32_t rhstatus = sam_getreg(SAM_USBHOST_RHSTATUS);
|
||||||
uvdbg("Connect Status Change, RHSTATUS: %08x\n", rhstatus);
|
usbhost_vtrace1(OHCI_VTRACE1_CSC, rhstatus);
|
||||||
|
|
||||||
/* If DRWE is set, Connect Status Change indicates a remote
|
/* If DRWE is set, Connect Status Change indicates a remote
|
||||||
* wake-up event
|
* wake-up event
|
||||||
@ -1746,7 +1756,7 @@ static void sam_rhsc_bottomhalf(void)
|
|||||||
|
|
||||||
if (rhstatus & OHCI_RHSTATUS_DRWE)
|
if (rhstatus & OHCI_RHSTATUS_DRWE)
|
||||||
{
|
{
|
||||||
uvdbg("DRWE: Remote wake-up\n");
|
usbhost_vtrace1(OHCI_VTRACE1_DRWE, rhstatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Otherwise... Not a remote wake-up event */
|
/* Otherwise... Not a remote wake-up event */
|
||||||
@ -1765,7 +1775,7 @@ static void sam_rhsc_bottomhalf(void)
|
|||||||
|
|
||||||
rhport->connected = true;
|
rhport->connected = true;
|
||||||
|
|
||||||
uvdbg("RHPort%d connected, rhswait: %d\n",
|
usbhost_vtrace2(OHCI_VTRACE2_CONNECTED,
|
||||||
rhpndx + 1, g_ohci.rhswait);
|
rhpndx + 1, g_ohci.rhswait);
|
||||||
|
|
||||||
/* Notify any waiters */
|
/* Notify any waiters */
|
||||||
@ -1778,7 +1788,7 @@ static void sam_rhsc_bottomhalf(void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uvdbg("Spurious status change (connected)\n");
|
usbhost_vtrace1(OHCI_VTRACE1_ALREADYCONN, rhportst);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The LSDA (Low speed device attached) bit is valid
|
/* The LSDA (Low speed device attached) bit is valid
|
||||||
@ -1786,7 +1796,7 @@ static void sam_rhsc_bottomhalf(void)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
rhport->lowspeed = (rhportst & OHCI_RHPORTST_LSDA) != 0;
|
rhport->lowspeed = (rhportst & OHCI_RHPORTST_LSDA) != 0;
|
||||||
uvdbg("Speed: %s\n", rhport->lowspeed ? "LOW" : "FULL");
|
usbhost_vtrace1(OHCI_VTRACE1_SPEED, rhport->lowspeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if we are now disconnected */
|
/* Check if we are now disconnected */
|
||||||
@ -1795,7 +1805,9 @@ static void sam_rhsc_bottomhalf(void)
|
|||||||
{
|
{
|
||||||
/* Yes.. disconnect the device */
|
/* Yes.. disconnect the device */
|
||||||
|
|
||||||
uvdbg("RHport%d disconnected\n", rhpndx+1);
|
usbhost_vtrace2(OHCI_VTRACE2_DISCONNECTED,
|
||||||
|
rhpndx + 1, g_ohci.rhswait);
|
||||||
|
|
||||||
rhport->connected = false;
|
rhport->connected = false;
|
||||||
rhport->lowspeed = false;
|
rhport->lowspeed = false;
|
||||||
|
|
||||||
@ -1821,7 +1833,7 @@ static void sam_rhsc_bottomhalf(void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uvdbg("Spurious status change (disconnected)\n");
|
usbhost_vtrace1(OHCI_VTRACE1_ALREADYDISCONN, rhportst);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1903,7 +1915,7 @@ static void sam_wdh_bottomhalf(void)
|
|||||||
eplist = ed->eplist;
|
eplist = ed->eplist;
|
||||||
DEBUGASSERT(eplist != NULL);
|
DEBUGASSERT(eplist != NULL);
|
||||||
|
|
||||||
/* Also nvalidate the control ED so that it two will be re-read from
|
/* Also invalidate the control ED so that it two will be re-read from
|
||||||
* memory.
|
* memory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -1916,13 +1928,12 @@ static void sam_wdh_bottomhalf(void)
|
|||||||
|
|
||||||
ed->tdstatus = (td->hw.ctrl & GTD_STATUS_CC_MASK) >> GTD_STATUS_CC_SHIFT;
|
ed->tdstatus = (td->hw.ctrl & GTD_STATUS_CC_MASK) >> GTD_STATUS_CC_SHIFT;
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_USB
|
#if defined(CONFIG_DEBUG_USB) || defined(CONFIG_USBHOST_TRACE)
|
||||||
if (ed->tdstatus != TD_CC_NOERROR)
|
if (ed->tdstatus != TD_CC_NOERROR)
|
||||||
{
|
{
|
||||||
/* The transfer failed for some reason... dump some diagnostic info. */
|
/* The transfer failed for some reason... dump some diagnostic info. */
|
||||||
|
|
||||||
udbg("ERROR: ED xfrtype: %d TD CTRL: %08x/CC: %d\n",
|
usbhost_trace2(OHCI_TRACE2_WHDTDSTATUS, ed->tdstatus, ed->xfrtype);
|
||||||
ed->xfrtype, td->hw.ctrl, ed->tdstatus);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1970,7 +1981,7 @@ static void sam_ohci_bottomhalf(void *arg)
|
|||||||
{
|
{
|
||||||
/* Handle root hub status change on each root port */
|
/* Handle root hub status change on each root port */
|
||||||
|
|
||||||
uvdbg("Root Hub Status Change\n");
|
usbhost_vtrace1(OHCI_VTRACE1_RHSC, pending);
|
||||||
sam_rhsc_bottomhalf();
|
sam_rhsc_bottomhalf();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1983,7 +1994,7 @@ static void sam_ohci_bottomhalf(void *arg)
|
|||||||
* in the preceding frame.
|
* in the preceding frame.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
uvdbg("Writeback Done Head interrupt\n");
|
usbhost_vtrace1(OHCI_VTRACE1_WDHINTR, pending);
|
||||||
sam_wdh_bottomhalf();
|
sam_wdh_bottomhalf();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2002,12 +2013,12 @@ static void sam_ohci_bottomhalf(void *arg)
|
|||||||
* interrupt will not be occurring).
|
* interrupt will not be occurring).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
udbg("ERROR: Unrecoverable error. pending: %08x\n", pending);
|
usbhost_trace1(OHCI_TRACE1_INTRUNRECOVERABLE, pending);
|
||||||
sam_wdh_bottomhalf();
|
sam_wdh_bottomhalf();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
udbg("ERROR: Unhandled interrupts pending: %08x\n", pending);
|
usbhost_trace1(OHCI_TRACE1_INTRUNHANDLED, pending);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2090,10 +2101,8 @@ static int sam_wait(FAR struct usbhost_connection_s *conn,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
irqrestore(flags);
|
irqrestore(flags);
|
||||||
|
usbhost_vtrace2(OHCI_VTRACE2_WAKEUP,
|
||||||
uvdbg("RHPort%d connected: %s\n",
|
rhpndx + 1, g_ohci.rhport[rhpndx].connected);
|
||||||
rhpndx + 1, g_ohci.rhport[rhpndx].connected ? "YES" : "NO");
|
|
||||||
|
|
||||||
return rhpndx;
|
return rhpndx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2153,7 +2162,7 @@ static int sam_enumerate(FAR struct usbhost_connection_s *conn, int rhpndx)
|
|||||||
{
|
{
|
||||||
/* No, return an error */
|
/* No, return an error */
|
||||||
|
|
||||||
uvdbg("Not connected\n");
|
usbhost_vtrace1(OHCI_VTRACE1_ENUMDISCONN, rhport->rhpndx + 1);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2164,7 +2173,8 @@ static int sam_enumerate(FAR struct usbhost_connection_s *conn, int rhpndx)
|
|||||||
ret = sam_ep0enqueue(rhport);
|
ret = sam_ep0enqueue(rhport);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
udbg("ERROR: Failed to enqueue EP0\n");
|
usbhost_trace2(OHCI_TRACE2_EP0ENQUEUE_FAILED, rhport->rhpndx + 1,
|
||||||
|
-ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2177,7 +2187,9 @@ static int sam_enumerate(FAR struct usbhost_connection_s *conn, int rhpndx)
|
|||||||
|
|
||||||
up_mdelay(100);
|
up_mdelay(100);
|
||||||
|
|
||||||
/* Put the root hub port in reset (the SAMA5 supports three downstream ports) */
|
/* Put the root hub port in reset (the SAMA5 supports three downstream
|
||||||
|
* ports)
|
||||||
|
*/
|
||||||
|
|
||||||
regaddr = SAM_USBHOST_RHPORTST(rhpndx+1);
|
regaddr = SAM_USBHOST_RHPORTST(rhpndx+1);
|
||||||
sam_putreg(OHCI_RHPORTST_PRS, regaddr);
|
sam_putreg(OHCI_RHPORTST_PRS, regaddr);
|
||||||
@ -2195,8 +2207,14 @@ static int sam_enumerate(FAR struct usbhost_connection_s *conn, int rhpndx)
|
|||||||
* FunctionAddress (USB address) is set to the root hub port number for now.
|
* FunctionAddress (USB address) is set to the root hub port number for now.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
uvdbg("Enumerate the device\n");
|
usbhost_vtrace2(OHCI_VTRACE2_CLASSENUM, rhpndx+1, rhpndx+1);
|
||||||
return usbhost_enumerate(&g_ohci.rhport[rhpndx].drvr, rhpndx+1, &rhport->class);
|
ret = usbhost_enumerate(&g_ohci.rhport[rhpndx].drvr, rhpndx+1, &rhport->class);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
usbhost_trace2(OHCI_TRACE2_CLASSENUM_FAILED, rhpndx+1, -ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
@ -2261,7 +2279,8 @@ static int sam_ep0configure(FAR struct usbhost_driver_s *drvr, uint8_t funcaddr,
|
|||||||
(uintptr_t)edctrl + sizeof(struct ohci_ed_s) - 1);
|
(uintptr_t)edctrl + sizeof(struct ohci_ed_s) - 1);
|
||||||
sam_givesem(&g_ohci.exclsem);
|
sam_givesem(&g_ohci.exclsem);
|
||||||
|
|
||||||
uvdbg("RHPort%d EP0 CTRL: %08x\n", rhport->rhpndx + 1, edctrl->hw.ctrl);
|
usbhost_vtrace2(OHCI_VTRACE2_EP0CONFIGURE,
|
||||||
|
rhport->rhpndx + 1, (uint16_t)edctrl->hw.ctrl);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2339,7 +2358,7 @@ static int sam_epalloc(FAR struct usbhost_driver_s *drvr,
|
|||||||
eplist = (struct sam_eplist_s *)kzalloc(sizeof(struct sam_eplist_s));
|
eplist = (struct sam_eplist_s *)kzalloc(sizeof(struct sam_eplist_s));
|
||||||
if (!eplist)
|
if (!eplist)
|
||||||
{
|
{
|
||||||
udbg("ERROR: Failed to allocate EP list\n");
|
usbhost_trace1(OHCI_TRACE1_EPLISTALLOC_FAILED, 0);
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2358,14 +2377,14 @@ static int sam_epalloc(FAR struct usbhost_driver_s *drvr,
|
|||||||
ed = sam_edalloc();
|
ed = sam_edalloc();
|
||||||
if (!ed)
|
if (!ed)
|
||||||
{
|
{
|
||||||
udbg("ERROR: Failed to allocate ED\n");
|
usbhost_trace1(OHCI_TRACE1_EDALLOC_FAILED, 0);
|
||||||
goto errout_with_semaphore;
|
goto errout_with_semaphore;
|
||||||
}
|
}
|
||||||
|
|
||||||
td = sam_tdalloc();
|
td = sam_tdalloc();
|
||||||
if (!td)
|
if (!td)
|
||||||
{
|
{
|
||||||
udbg("ERROR: Failed to allocate TD\n");
|
usbhost_trace1(OHCI_TRACE1_TDALLOC_FAILED, 0);
|
||||||
goto errout_with_ed;
|
goto errout_with_ed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2413,7 +2432,7 @@ static int sam_epalloc(FAR struct usbhost_driver_s *drvr,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
ed->eplist = eplist;
|
ed->eplist = eplist;
|
||||||
uvdbg("EP%d CTRL: %08x\n", epdesc->addr, ed->hw.ctrl);
|
usbhost_vtrace2(OHCI_VTRACE2_EPALLOC, epdesc->addr, (uint16_t)ed->hw.ctrl);
|
||||||
|
|
||||||
/* Configure the tail descriptor. */
|
/* Configure the tail descriptor. */
|
||||||
|
|
||||||
@ -2461,7 +2480,7 @@ static int sam_epalloc(FAR struct usbhost_driver_s *drvr,
|
|||||||
{
|
{
|
||||||
/* No.. destroy it and report the error */
|
/* No.. destroy it and report the error */
|
||||||
|
|
||||||
udbg("ERROR: Failed to queue ED for transfer type: %d\n", ed->xfrtype);
|
usbhost_trace2(OHCI_TRACE2_EDENQUEUE_FAILED, ed->xfrtype, -ret);
|
||||||
goto errout_with_td;
|
goto errout_with_td;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2764,9 +2783,14 @@ static int sam_ctrlin(FAR struct usbhost_driver_s *drvr,
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
DEBUGASSERT(rhport && req);
|
DEBUGASSERT(rhport && req);
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST_TRACE
|
||||||
|
usbhost_vtrace2(OHCI_VTRACE2_CTRLIN, rhport->rhpndx + 1, req->req);
|
||||||
|
#else
|
||||||
uvdbg("RHPort%d type: %02x req: %02x value: %02x%02x index: %02x%02x len: %02x%02x\n",
|
uvdbg("RHPort%d type: %02x req: %02x value: %02x%02x index: %02x%02x len: %02x%02x\n",
|
||||||
rhport->rhpndx + 1, req->type, req->req, req->value[1], req->value[0],
|
rhport->rhpndx + 1, req->type, req->req, req->value[1], req->value[0],
|
||||||
req->index[1], req->index[0], req->len[1], req->len[0]);
|
req->index[1], req->index[0], req->len[1], req->len[0]);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* We must have exclusive access to EP0 and the control list */
|
/* We must have exclusive access to EP0 and the control list */
|
||||||
|
|
||||||
@ -2805,9 +2829,14 @@ static int sam_ctrlout(FAR struct usbhost_driver_s *drvr,
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
DEBUGASSERT(rhport && req);
|
DEBUGASSERT(rhport && req);
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST_TRACE
|
||||||
|
usbhost_vtrace2(OHCI_VTRACE2_CTRLOUT, rhport->rhpndx + 1, req->req);
|
||||||
|
#else
|
||||||
uvdbg("RHPort%d type: %02x req: %02x value: %02x%02x index: %02x%02x len: %02x%02x\n",
|
uvdbg("RHPort%d type: %02x req: %02x value: %02x%02x index: %02x%02x len: %02x%02x\n",
|
||||||
rhport->rhpndx + 1, req->type, req->req, req->value[1], req->value[0],
|
rhport->rhpndx + 1, req->type, req->req, req->value[1], req->value[0],
|
||||||
req->index[1], req->index[0], req->len[1], req->len[0]);
|
req->index[1], req->index[0], req->len[1], req->len[0]);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* We must have exclusive access to EP0 and the control list */
|
/* We must have exclusive access to EP0 and the control list */
|
||||||
|
|
||||||
@ -2887,12 +2916,18 @@ static int sam_transfer(FAR struct usbhost_driver_s *drvr, usbhost_ep_t ep,
|
|||||||
ed = eplist->ed;
|
ed = eplist->ed;
|
||||||
in = (ed->hw.ctrl & ED_CONTROL_D_MASK) == ED_CONTROL_D_IN;
|
in = (ed->hw.ctrl & ED_CONTROL_D_MASK) == ED_CONTROL_D_IN;
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST_TRACE
|
||||||
|
usbhost_vtrace2(OHCI_VTRACE2_TRANSFER,
|
||||||
|
(ed->hw.ctrl & ED_CONTROL_EN_MASK) >> ED_CONTROL_EN_SHIFT,
|
||||||
|
(uint16_t)buflen);
|
||||||
|
#else
|
||||||
uvdbg("EP%d %s toggle: %d maxpacket: %d buflen: %d\n",
|
uvdbg("EP%d %s toggle: %d maxpacket: %d buflen: %d\n",
|
||||||
(ed->hw.ctrl & ED_CONTROL_EN_MASK) >> ED_CONTROL_EN_SHIFT,
|
(ed->hw.ctrl & ED_CONTROL_EN_MASK) >> ED_CONTROL_EN_SHIFT,
|
||||||
in ? "IN" : "OUT",
|
in ? "IN" : "OUT",
|
||||||
(ed->hw.headp & ED_HEADP_C) != 0 ? 1 : 0,
|
(ed->hw.headp & ED_HEADP_C) != 0 ? 1 : 0,
|
||||||
(ed->hw.ctrl & ED_CONTROL_MPS_MASK) >> ED_CONTROL_MPS_SHIFT,
|
(ed->hw.ctrl & ED_CONTROL_MPS_MASK) >> ED_CONTROL_MPS_SHIFT,
|
||||||
buflen);
|
buflen);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* We must have exclusive access to the endpoint, the TD pool, the I/O buffer
|
/* We must have exclusive access to the endpoint, the TD pool, the I/O buffer
|
||||||
* pool, the bulk and interrupt lists, and the HCCA interrupt table.
|
* pool, the bulk and interrupt lists, and the HCCA interrupt table.
|
||||||
@ -2907,7 +2942,7 @@ static int sam_transfer(FAR struct usbhost_driver_s *drvr, usbhost_ep_t ep,
|
|||||||
ret = sam_wdhwait(rhport, ed);
|
ret = sam_wdhwait(rhport, ed);
|
||||||
if (ret != OK)
|
if (ret != OK)
|
||||||
{
|
{
|
||||||
udbg("ERROR: Device disconnected\n");
|
usbhost_trace1(OHCI_TRACE1_DEVDISCONN, rhport->rhpndx + 1);
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2990,7 +3025,8 @@ static int sam_transfer(FAR struct usbhost_driver_s *drvr, usbhost_ep_t ep,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
udbg("ERROR: Bad TD completion status: %d\n", ed->tdstatus);
|
usbhost_trace2(OHCI_TRACE2_BADTDSTATUS, rhport->rhpndx + 1,
|
||||||
|
ed->tdstatus);
|
||||||
ret = ed->tdstatus == TD_CC_STALL ? -EPERM : -EIO;
|
ret = ed->tdstatus == TD_CC_STALL ? -EPERM : -EIO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3150,7 +3186,7 @@ FAR struct usbhost_connection_s *sam_ohci_initialize(int controller)
|
|||||||
* dedicated function
|
* dedicated function
|
||||||
*/
|
*/
|
||||||
|
|
||||||
uvdbg("Initializing OHCI Stack\n");
|
usbhost_vtrace1(OHCI_VTRACE1_INITIALIZING, 0);
|
||||||
|
|
||||||
/* Initialize all the HCCA to 0 */
|
/* Initialize all the HCCA to 0 */
|
||||||
|
|
||||||
@ -3256,7 +3292,7 @@ FAR struct usbhost_connection_s *sam_ohci_initialize(int controller)
|
|||||||
|
|
||||||
if (irq_attach(SAM_IRQ_UHPHS, sam_ohci_tophalf) != 0)
|
if (irq_attach(SAM_IRQ_UHPHS, sam_ohci_tophalf) != 0)
|
||||||
{
|
{
|
||||||
udbg("ERROR: Failed to attach IRQ\n");
|
usbhost_trace1(OHCI_TRACE1_IRQATTACH, SAM_IRQ_UHPHS);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3290,8 +3326,8 @@ FAR struct usbhost_connection_s *sam_ohci_initialize(int controller)
|
|||||||
regval = sam_getreg(SAM_USBHOST_RHPORTST(i));
|
regval = sam_getreg(SAM_USBHOST_RHPORTST(i));
|
||||||
g_ohci.rhport[i].connected = ((regval & OHCI_RHPORTST_CCS) != 0);
|
g_ohci.rhport[i].connected = ((regval & OHCI_RHPORTST_CCS) != 0);
|
||||||
|
|
||||||
uvdbg("RHPort%d Device connected: %s\n",
|
usbhost_vtrace2(OHCI_VTRACE2_INITCONNECTED,
|
||||||
i+1, g_ohci.rhport[i].connected ? "YES" : "NO");
|
i+1, g_ohci.rhport[i].connected);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enable interrupts at the interrupt controller. If ECHI is enabled,
|
/* Enable interrupts at the interrupt controller. If ECHI is enabled,
|
||||||
@ -3302,7 +3338,7 @@ FAR struct usbhost_connection_s *sam_ohci_initialize(int controller)
|
|||||||
|
|
||||||
#endif /* CONFIG_SAMA5_EHCI */
|
#endif /* CONFIG_SAMA5_EHCI */
|
||||||
|
|
||||||
uvdbg("USB OHCI Initialized\n");
|
usbhost_vtrace1(OHCI_VTRACE1_INITIALIZED, 0);
|
||||||
|
|
||||||
/* Initialize and return the connection interface */
|
/* Initialize and return the connection interface */
|
||||||
|
|
||||||
@ -3331,7 +3367,7 @@ int sam_ohci_tophalf(int irq, FAR void *context)
|
|||||||
|
|
||||||
intst = sam_getreg(SAM_USBHOST_INTST);
|
intst = sam_getreg(SAM_USBHOST_INTST);
|
||||||
inten = sam_getreg(SAM_USBHOST_INTEN);
|
inten = sam_getreg(SAM_USBHOST_INTEN);
|
||||||
ullvdbg("INST: %08x INTEN: %08x\n", intst, inten);
|
usbhost_vtrace1(OHCI_VTRACE1_INTRPENDING, intst & inten);
|
||||||
|
|
||||||
#ifdef CONFIG_SAMA5_EHCI
|
#ifdef CONFIG_SAMA5_EHCI
|
||||||
/* Check the Master Interrupt Enable bit (MIE). It this function is called
|
/* Check the Master Interrupt Enable bit (MIE). It this function is called
|
||||||
|
@ -87,7 +87,28 @@ struct sam_usbhost_trace_s
|
|||||||
static const struct sam_usbhost_trace_s g_trace1[TRACE1_NSTRINGS] =
|
static const struct sam_usbhost_trace_s g_trace1[TRACE1_NSTRINGS] =
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SAMA5_OHCI
|
#ifdef CONFIG_SAMA5_OHCI
|
||||||
|
TRENTRY(OHCI_TRACE1_DEVDISCONN, TR_OHCI, TR_FMT1, "OHCI ERROR: RHport%d Device disconnected\n"),
|
||||||
|
TRENTRY(OHCI_TRACE1_INTRUNRECOVERABLE, TR_OHCI, TR_FMT1, "OHCI ERROR: Unrecoverable error. pending: %06x\n"),
|
||||||
|
TRENTRY(OHCI_TRACE1_INTRUNHANDLED, TR_OHCI, TR_FMT1, "OHCI ERROR: Unhandled interrupts pending: %06x\n"),
|
||||||
|
TRENTRY(OHCI_TRACE1_EPLISTALLOC_FAILED, TR_OHCI, TR_FMT1, "OHCI ERROR: Failed to allocate EP list\n"),
|
||||||
|
TRENTRY(OHCI_TRACE1_EDALLOC_FAILED, TR_OHCI, TR_FMT1, "OHCI ERROR: Failed to allocate ED\n"),
|
||||||
|
TRENTRY(OHCI_TRACE1_TDALLOC_FAILED, TR_OHCI, TR_FMT1, "OHCI ERROR: Failed to allocate TD\n"),
|
||||||
|
TRENTRY(OHCI_TRACE1_IRQATTACH, TR_OHCI, TR_FMT1, "OHCI ERROR: Failed to attach IRQ%d\n"),
|
||||||
|
|
||||||
#ifdef CONFIG_USBHOST_TRACE_VERBOSE
|
#ifdef CONFIG_USBHOST_TRACE_VERBOSE
|
||||||
|
TRENTRY(OHCI_VTRACE1_PHYSED, TR_OHCI, TR_FMT1, "OHCI physed: %06x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE1_VIRTED, TR_OHCI, TR_FMT1, "OHCI ed: %06x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE1_CSC, TR_OHCI, TR_FMT1, "OHCI Connect Status Change, RHSTATUS: %06x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE1_DRWE, TR_OHCI, TR_FMT1, "OHCI DRWE: Remote wake-up, RHSTATUS: %06x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE1_ALREADYCONN, TR_OHCI, TR_FMT1, "OHCI Already connected, RHPORTST%d: %06x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE1_SPEED, TR_OHCI, TR_FMT1, "OHCI Low speed: %d\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE1_ALREADYDISCONN, TR_OHCI, TR_FMT1, "OHCI Already disconnected, RHPORTST%d: %06x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE1_RHSC, TR_OHCI, TR_FMT1, "OHCI Root Hub Status Change. Pending: %06x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE1_WDHINTR, TR_OHCI, TR_FMT1, "OHCI Writeback Done Head interrupt. Pending: %06x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE1_ENUMDISCONN, TR_OHCI, TR_FMT1, "OHCI RHport%dNot connected\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE1_INITIALIZING, TR_OHCI, TR_FMT1, "OHCI Initializing Stack\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE1_INITIALIZED, TR_OHCI, TR_FMT1, "OHCI Initialized\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE1_INTRPENDING, TR_OHCI, TR_FMT1, "OHCI Interrupts pending: %06x\n"),
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -117,6 +138,7 @@ static const struct sam_usbhost_trace_s g_trace1[TRACE1_NSTRINGS] =
|
|||||||
TRENTRY(EHCI_TRACE1_RESET_FAILED, TR_EHCI, TR_FMT1, "EHCI ERROR: sam_reset failed: %d\n"),
|
TRENTRY(EHCI_TRACE1_RESET_FAILED, TR_EHCI, TR_FMT1, "EHCI ERROR: sam_reset failed: %d\n"),
|
||||||
TRENTRY(EHCI_TRACE1_RUN_FAILED, TR_EHCI, TR_FMT1, "EHCI ERROR: EHCI Failed to run: USBSTS=%08x\n"),
|
TRENTRY(EHCI_TRACE1_RUN_FAILED, TR_EHCI, TR_FMT1, "EHCI ERROR: EHCI Failed to run: USBSTS=%08x\n"),
|
||||||
TRENTRY(EHCI_TRACE1_IRQATTACH_FAILED, TR_EHCI, TR_FMT1, "EHCI ERROR: Failed to attach IRQ%d\n"),
|
TRENTRY(EHCI_TRACE1_IRQATTACH_FAILED, TR_EHCI, TR_FMT1, "EHCI ERROR: Failed to attach IRQ%d\n"),
|
||||||
|
|
||||||
#ifdef CONFIG_USBHOST_TRACE_VERBOSE
|
#ifdef CONFIG_USBHOST_TRACE_VERBOSE
|
||||||
TRENTRY(EHCI_VTRACE1_PORTSC_CSC, TR_EHCI, TR_FMT1, "EHCI Connect Status Change: %06x\n"),
|
TRENTRY(EHCI_VTRACE1_PORTSC_CSC, TR_EHCI, TR_FMT1, "EHCI Connect Status Change: %06x\n"),
|
||||||
TRENTRY(EHCI_VTRACE1_PORTSC_CONNALREADY, TR_EHCI, TR_FMT1, "EHCI Already connected: %06x\n"),
|
TRENTRY(EHCI_VTRACE1_PORTSC_CONNALREADY, TR_EHCI, TR_FMT1, "EHCI Already connected: %06x\n"),
|
||||||
@ -135,7 +157,26 @@ static const struct sam_usbhost_trace_s g_trace1[TRACE1_NSTRINGS] =
|
|||||||
static const struct sam_usbhost_trace_s g_trace2[TRACE2_NSTRINGS] =
|
static const struct sam_usbhost_trace_s g_trace2[TRACE2_NSTRINGS] =
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SAMA5_OHCI
|
#ifdef CONFIG_SAMA5_OHCI
|
||||||
|
TRENTRY(OHCI_TRACE2_BADTDSTATUS, TR_OHCI, TR_FMT2, "OHCI ERROR: RHport%d Bad TD completion status: %d\n"),
|
||||||
|
TRENTRY(OHCI_TRACE2_WHDTDSTATUS, TR_OHCI, TR_FMT2, "OHCI ERROR: WHD Bad TD completion status: %d xfrtype: %d\n"),
|
||||||
|
TRENTRY(OHCI_TRACE2_EP0ENQUEUE_FAILED, TR_OHCI, TR_FMT2, "OHCI ERROR: RHport%d Failed to enqueue EP0: %d\n"),
|
||||||
|
TRENTRY(OHCI_TRACE2_EDENQUEUE_FAILED, TR_OHCI, TR_FMT2, "OHCI ERROR: Failed to queue ED for transfer type %d: %d\n"),
|
||||||
|
TRENTRY(OHCI_TRACE2_CLASSENUM_FAILED, TR_OHCI, TR_FMT2, "OHCI RHport%d usbhost_enumerate() failed: %d\n"),
|
||||||
|
|
||||||
#ifdef CONFIG_USBHOST_TRACE_VERBOSE
|
#ifdef CONFIG_USBHOST_TRACE_VERBOSE
|
||||||
|
TRENTRY(OHCI_VTRACE2_INTERVAL, TR_OHCI, TR_FMT2, "OHCI interval: %d->%d\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE2_MININTERVAL, TR_OHCI, TR_FMT2, "OHCI MIN interval: %d offset: %d\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE2_RHPORTST, TR_OHCI, TR_FMT2, "OHCI RHPORTST%d: %04x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE2_CONNECTED, TR_OHCI, TR_FMT2, "OHCI RHPort%d connected, rhswait: %d\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE2_DISCONNECTED, TR_OHCI, TR_FMT2, "OHCI RHPort%d disconnected, rhswait: %d\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE2_WAKEUP, TR_OHCI, TR_FMT2, "OHCI RHPort%d connected: %d\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE2_CLASSENUM, TR_OHCI, TR_FMT2, "OHCI RHPort%d: Enumerate the device, devaddr=%02x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE2_EP0CONFIGURE, TR_OHCI, TR_FMT2, "OHCI RHPort%d EP0 CTRL: %04x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE2_EPALLOC, TR_OHCI, TR_FMT2, "OHCI EP%d CTRL: %04x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE2_CTRLIN, TR_OHCI, TR_FMT2, "OHCI CTRLIN RHPort%d req: %02x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE2_CTRLOUT, TR_OHCI, TR_FMT2, "OHCI CTRLOUT RHPort%d req: %02x\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE2_TRANSFER, TR_OHCI, TR_FMT2, "OHCI EP%d buflen: %d\n"),
|
||||||
|
TRENTRY(OHCI_VTRACE2_INITCONNECTED, TR_OHCI, TR_FMT2, "OHCI RHPort%d Device connected: %d\n"),
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -68,13 +68,36 @@
|
|||||||
|
|
||||||
enum usbhost_trace1codes_e
|
enum usbhost_trace1codes_e
|
||||||
{
|
{
|
||||||
|
__TRACE1_BASEVALUE = 0, /* This will force the first value to be 1 */
|
||||||
|
|
||||||
#ifdef CONFIG_SAMA5_OHCI
|
#ifdef CONFIG_SAMA5_OHCI
|
||||||
|
OHCI_TRACE1_DEVDISCONN, /* OHCI ERROR: RHport Device disconnected */
|
||||||
|
OHCI_TRACE1_INTRUNRECOVERABLE, /* OHCI ERROR: Unrecoverable error */
|
||||||
|
OHCI_TRACE1_INTRUNHANDLED, /* OHCI ERROR: Unhandled interrupts */
|
||||||
|
OHCI_TRACE1_EPLISTALLOC_FAILED, /* OHCI ERROR: Failed to allocate EP list */
|
||||||
|
OHCI_TRACE1_EDALLOC_FAILED, /* OHCI ERROR: Failed to allocate ED */
|
||||||
|
OHCI_TRACE1_TDALLOC_FAILED, /* OHCI ERROR: Failed to allocate TD */
|
||||||
|
OHCI_TRACE1_IRQATTACH, /* OHCI ERROR: Failed to attach IRQ */
|
||||||
|
|
||||||
#ifdef CONFIG_USBHOST_TRACE_VERBOSE
|
#ifdef CONFIG_USBHOST_TRACE_VERBOSE
|
||||||
|
OHCI_VTRACE1_PHYSED, /* OHCI physed */
|
||||||
|
OHCI_VTRACE1_VIRTED, /* OHCI ed */
|
||||||
|
OHCI_VTRACE1_CSC, /* OHCI Connect Status Change */
|
||||||
|
OHCI_VTRACE1_DRWE, /* OHCI DRWE: Remote wake-up */
|
||||||
|
OHCI_VTRACE1_ALREADYCONN, /* OHCI Already connected */
|
||||||
|
OHCI_VTRACE1_SPEED, /* OHCI Low speed */
|
||||||
|
OHCI_VTRACE1_ALREADYDISCONN, /* OHCI Already disconnected */
|
||||||
|
OHCI_VTRACE1_RHSC, /* OHCI Root Hub Status Change */
|
||||||
|
OHCI_VTRACE1_WDHINTR, /* OHCI Writeback Done Head interrupt */
|
||||||
|
OHCI_VTRACE1_ENUMDISCONN, /* OHCI RHport Not connected */
|
||||||
|
OHCI_VTRACE1_INITIALIZING, /* OHCI Initializing Stack */
|
||||||
|
OHCI_VTRACE1_INITIALIZED, /* OHCI Initialized */
|
||||||
|
OHCI_VTRACE1_INTRPENDING, /* OHCI Interrupts pending */
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SAMA5_EHCI
|
#ifdef CONFIG_SAMA5_EHCI
|
||||||
EHCI_TRACE1_SYSTEMERROR = 0, /* EHCI ERROR: System error */
|
EHCI_TRACE1_SYSTEMERROR, /* EHCI ERROR: System error */
|
||||||
EHCI_TRACE1_QTDFOREACH_FAILED, /* EHCI ERROR: sam_qtd_foreach failed */
|
EHCI_TRACE1_QTDFOREACH_FAILED, /* EHCI ERROR: sam_qtd_foreach failed */
|
||||||
EHCI_TRACE1_QHALLOC_FAILED, /* EHCI ERROR: Failed to allocate a QH */
|
EHCI_TRACE1_QHALLOC_FAILED, /* EHCI ERROR: Failed to allocate a QH */
|
||||||
EHCI_TRACE1_BUFTOOBIG, /* EHCI ERROR: Buffer too big */
|
EHCI_TRACE1_BUFTOOBIG, /* EHCI ERROR: Buffer too big */
|
||||||
@ -114,10 +137,29 @@ enum usbhost_trace1codes_e
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__TRACE1_NSTRINGS,
|
__TRACE1_NSTRINGS, /* Separates the format 1 from the format 2 strings */
|
||||||
|
|
||||||
#ifdef CONFIG_SAMA5_OHCI
|
#ifdef CONFIG_SAMA5_OHCI
|
||||||
|
OHCI_TRACE2_BADTDSTATUS, /* OHCI ERROR: RHport Bad TD completion status */
|
||||||
|
OHCI_TRACE2_WHDTDSTATUS, /* OHCI ERROR: WDH Bad TD completion status */
|
||||||
|
OHCI_TRACE2_EP0ENQUEUE_FAILED, /* OHCI ERROR: RHport Failed to enqueue EP0 */
|
||||||
|
OHCI_TRACE2_EDENQUEUE_FAILED, /* OHCI ERROR: Failed to queue ED for transfer type */
|
||||||
|
OHCI_TRACE2_CLASSENUM_FAILED, /* OHCI usbhost_enumerate() failed */
|
||||||
|
|
||||||
#ifdef CONFIG_USBHOST_TRACE_VERBOSE
|
#ifdef CONFIG_USBHOST_TRACE_VERBOSE
|
||||||
|
OHCI_VTRACE2_INTERVAL, /* OHCI interval */
|
||||||
|
OHCI_VTRACE2_MININTERVAL, /* OHCI MIN interval/offset */
|
||||||
|
OHCI_VTRACE2_RHPORTST, /* OHCI RHPORTST */
|
||||||
|
OHCI_VTRACE2_CONNECTED, /* OHCI RHPort connected */
|
||||||
|
OHCI_VTRACE2_DISCONNECTED, /* OHCI RHPort disconnected */
|
||||||
|
OHCI_VTRACE2_WAKEUP, /* OHCI RHPort connected */
|
||||||
|
OHCI_VTRACE2_CLASSENUM, /* OHCI Enumerate the device */
|
||||||
|
OHCI_VTRACE2_EP0CONFIGURE, /* OHCI RHPort EP0 CTRL */
|
||||||
|
OHCI_VTRACE2_EPALLOC, /* OHCI EP CTRL */
|
||||||
|
OHCI_VTRACE2_CTRLIN, /* OHCI CTRLIN */
|
||||||
|
OHCI_VTRACE2_CTRLOUT, /* OHCI CTRLOUT */
|
||||||
|
OHCI_VTRACE2_TRANSFER, /* OHCI EP buflen */
|
||||||
|
OHCI_VTRACE2_INITCONNECTED, /* OHCI RHPort Device connected */
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -142,14 +184,14 @@ enum usbhost_trace1codes_e
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__TRACE2_NSTRINGS
|
__TRACE2_NSTRINGS /* Total number of enumeration values */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TRACE1_FIRST 0
|
#define TRACE1_FIRST ((int)__TRACE1_BASEVALUE + 1)
|
||||||
#define TRACE1_INDEX(id) ((int)(id) - TRACE1_FIRST)
|
#define TRACE1_INDEX(id) ((int)(id) - TRACE1_FIRST)
|
||||||
#define TRACE1_NSTRINGS TRACE1_INDEX(__TRACE1_NSTRINGS)
|
#define TRACE1_NSTRINGS TRACE1_INDEX(__TRACE1_NSTRINGS)
|
||||||
|
|
||||||
#define TRACE2_FIRST (__TRACE1_NSTRINGS + 1)
|
#define TRACE2_FIRST ((int)__TRACE1_NSTRINGS + 1)
|
||||||
#define TRACE2_INDEX(id) ((int)(id) - TRACE2_FIRST)
|
#define TRACE2_INDEX(id) ((int)(id) - TRACE2_FIRST)
|
||||||
#define TRACE2_NSTRINGS TRACE2_INDEX(__TRACE2_NSTRINGS)
|
#define TRACE2_NSTRINGS TRACE2_INDEX(__TRACE2_NSTRINGS)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user