From 5fdf0f2cfb0ef7e7a15a7d67e7819c23244723ff Mon Sep 17 00:00:00 2001 From: patacongo Date: Mon, 27 Oct 2008 13:13:09 +0000 Subject: Make trace data enable-able by id git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1080 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/drivers/usbdev/usbdev_trace.c | 413 ++++++++++++++++++------------------ 1 file changed, 203 insertions(+), 210 deletions(-) (limited to 'nuttx/drivers/usbdev') diff --git a/nuttx/drivers/usbdev/usbdev_trace.c b/nuttx/drivers/usbdev/usbdev_trace.c index 5b70e6f72..810500f27 100644 --- a/nuttx/drivers/usbdev/usbdev_trace.c +++ b/nuttx/drivers/usbdev/usbdev_trace.c @@ -47,8 +47,6 @@ #include #undef usbtrace -#ifdef CONFIG_USBDEV_TRACE - /**************************************************************************** * Definitions ****************************************************************************/ @@ -71,10 +69,15 @@ * Private Data ****************************************************************************/ -static uint16 g_disablecount = 0; /* != 0 means tracing is disabled */ +#ifdef CONFIG_USBDEV_TRACE static struct usbtrace_s g_trace[CONFIG_USBDEV_TRACE_NRECORDS]; static uint16 g_head = 0; static uint16 g_tail = 0; +#endif + +#if defined(CONFIG_USBDEV_TRACE) || (defined(CONFIG_DEBUG) && defined(CONFIG_DEBUG_USB)) +static usbtrace_idset_t g_maskedidset = 0; +#endif /**************************************************************************** * Private Functions @@ -88,32 +91,35 @@ static uint16 g_tail = 0; * Name: usbtrace_enable * * Description: - * Enable/disable tracing + * Enable/disable tracing per trace ID. The initial state is all IDs enabled. + * + * Input Parameters: + * idset - The bitset of IDs to be masked. TRACE_ALLIDS enables all IDS; zero + * masks all IDs. + * + * Returned Value: + * The previous idset value. * * Assumptions: - * - Initial state is enabled * - May be called from an interrupt handler * *******************************************************************************/ -void usbtrace_enable(boolean enable) +#if defined(CONFIG_USBDEV_TRACE) || (defined(CONFIG_DEBUG) && defined(CONFIG_DEBUG_USB)) +usbtrace_idset_t usbtrace_enable(usbtrace_idset_t idset) { irqstate_t flags; + usbtrace_idset_t ret; - flags = irqsave(); - if (enable) - { - if (g_disablecount < 0xffff) - { - g_disablecount++; - } - } - else if (g_disablecount > 0) - { - g_disablecount--; - } + /* The following read and write must be atomic */ + + flags = irqsave(); + ret = g_maskedidset; + g_maskedidset = idset; irqrestore(flags); + return ret; } +#endif /* CONFIG_USBDEV_TRACE || CONFIG_DEBUG && CONFIG_DEBUG_USB */ /******************************************************************************* * Name: usbtrace @@ -126,15 +132,17 @@ void usbtrace_enable(boolean enable) * *******************************************************************************/ +#if defined(CONFIG_USBDEV_TRACE) || (defined(CONFIG_DEBUG) && defined(CONFIG_DEBUG_USB)) void usbtrace(uint16 event, uint16 value) { irqstate_t flags; - /* Check if tracing is enabled */ + /* Check if tracing is enabled for this ID */ flags = irqsave(); - if (!g_disablecount) + if ((g_maskedidset & TRACE_ID2BIT(event)) != 0) { +#ifdef CONFIG_USBDEV_TRACE /* Yes... save the new trace data at the nead */ g_trace[g_head].event = event; @@ -154,9 +162,183 @@ void usbtrace(uint16 event, uint16 value) g_tail = 0; } } +#else + switch (event) + { + case TRACE_DEVINIT: + lldbg("USB controller initialization: %04x\n", value); + break; + + case TRACE_DEVUNINIT: + lldbg("USB controller un-initialization: %04x\n", value); + break; + + case TRACE_DEVREGISTER: + lldbg("usbdev_register(): %04x\n", value); + break; + + case TRACE_DEVUNREGISTER: + lldbg("usbdev_unregister(): %04x\n", value); + break; + + case TRACE_EPCONFIGURE: + lldbg("Endpoint configure(): %04x\n", value); + break; + + case TRACE_EPDISABLE: + lldbg("Endpoint disable(): %04x\n", value); + break; + + case TRACE_EPALLOCREQ: + lldbg("Endpoint allocreq(): %04x\n", value); + break; + + case TRACE_EPFREEREQ: + lldbg("Endpoint freereq(): %04x\n", value); + break; + + case TRACE_EPALLOCBUFFER: + lldbg("Endpoint allocbuffer(): %04x\n", value); + break; + + case TRACE_EPFREEBUFFER: + lldbg("Endpoint freebuffer(): %04x\n", value); + break; + + case TRACE_EPSUBMIT: + lldbg("Endpoint submit(): %04x\n", value); + break; + + case TRACE_EPCANCEL: + lldbg("Endpoint cancel(): %04x\n", value); + break; + + case TRACE_EPSTALL: + lldbg("Endpoint stall(TRUE): %04x\n", value); + break; + + case TRACE_EPRESUME: + lldbg("Endpoint stall(FALSE): %04x\n", value); + break; + + case TRACE_DEVALLOCEP: + lldbg("Device allocep(): %04x\n", value); + break; + + case TRACE_DEVFREEEP: + lldbg("Device freeep(): %04x\n", value); + break; + + case TRACE_DEVGETFRAME: + lldbg("Device getframe(): %04x\n", value); + break; + + case TRACE_DEVWAKEUP: + lldbg("Device wakeup(): %04x\n", value); + break; + + case TRACE_DEVSELFPOWERED: + lldbg("Device selfpowered(): %04x\n", value); + break; + + case TRACE_DEVPULLUP: + lldbg("Device pullup(): %04x\n", value); + break; + + case TRACE_CLASSBIND: + lldbg("Class bind(): %04x\n", value); + break; + + case TRACE_CLASSUNBIND: + lldbg("Class unbind(): %04x\n", value); + break; + + case TRACE_CLASSDISCONNECT: + lldbg("Class disconnect(): %04x\n", value); + break; + + case TRACE_CLASSSETUP: + lldbg("Class setup(): %04x\n", value); + break; + + case TRACE_CLASSSUSPEND: + lldbg("Class suspend(): %04x\n", value); + break; + + case TRACE_CLASSRESUME: + lldbg("Class resume(): %04x\n", value); + break; + + case TRACE_CLASSRDCOMPLETE: + lldbg("Class RD request complete: %04x\n", value); + break; + + case TRACE_CLASSWRCOMPLETE: + lldbg("Class WR request complete: %04x\n", value); + break; + + default: + switch (TRACE_ID(event)) + { + case TRACE_CLASSAPI_ID: /* Other class driver system API calls */ + lldbg("Class API call %d: %04x\n", TRACE_DATA(event), value); + break; + + case TRACE_CLASSSTATE_ID: /* Track class driver state changes */ + lldbg("Class state %d: %04x\n", TRACE_DATA(event), value); + break; + + case TRACE_INTENTRY_ID: /* Interrupt handler entry */ + lldbg("Interrrupt %d entry: %04x\n", TRACE_DATA(event), value); + break; + + case TRACE_INTDECODE_ID: /* Decoded interrupt event */ + lldbg("Interrrupt decode %d: %04x\n", TRACE_DATA(event), value); + break; + + case TRACE_INTEXIT_ID: /* Interrupt handler exit */ + lldbg("Interrrupt %d exit: %04x\n", TRACE_DATA(event), value); + break; + + case TRACE_OUTREQQUEUED_ID: /* Request queued for OUT endpoint */ + lldbg("EP%d OUT request queued: %04x\n", TRACE_DATA(event), value); + break; + + case TRACE_INREQQUEUED_ID: /* Request queued for IN endpoint */ + lldbg("EP%d IN request queued: %04x\n", TRACE_DATA(event), value); + break; + + case TRACE_READ_ID: /* Read (OUT) action */ + lldbg("EP%d OUT read: %04x\n", TRACE_DATA(event), value); + break; + + case TRACE_WRITE_ID: /* Write (IN) action */ + lldbg("EP%d IN write: %04x\n", TRACE_DATA(event), value); + break; + + case TRACE_COMPLETE_ID: /* Request completed */ + lldbg("EP%d request complete: %04x\n", TRACE_DATA(event), value); + break; + + case TRACE_DEVERROR_ID: /* USB controller driver error event */ + lldbg("Controller error: %02x:%04x\n", TRACE_DATA(event), value); + break; + + case TRACE_CLSERROR_ID: /* USB class driver error event */ + lldbg("Class error: %02x:%04x\n", TRACE_DATA(event), value); + break; + + default: + lldbg("Unrecognized event: %02x:%02x:%04x\n", + TRACE_ID(event) >> 8, TRACE_DATA(event), value); + break; + } + } +#endif /* CONFIG_USBDEV_TRACE */ } irqrestore(flags); } +#endif /* CONFIG_USBDEV_TRACE || CONFIG_DEBUG && CONFIG_DEBUG_USB */ /******************************************************************************* * Name: usbtrace_enumerate @@ -169,6 +351,7 @@ void usbtrace(uint16 event, uint16 value) * *******************************************************************************/ +#ifdef CONFIG_USBDEV_TRACE int usbtrace_enumerate(trace_callback_t callback, void *arg) { uint16 ndx = g_tail; @@ -202,194 +385,4 @@ int usbtrace_enumerate(trace_callback_t callback, void *arg) return ret; } - -#else - -/******************************************************************************* - * Name: usbtrace - * - * Description: - * Map trace to simple debug output - * - *******************************************************************************/ - -void usbtrace(uint16 event, uint16 value) -{ -#if defined(CONFIG_DEBUG) && defined(CONFIG_DEBUG_USB) - irqstate_t flags; - flags = irqsave(); - switch (event) - { - case TRACE_DEVINIT: - lldbg("USB controller initialization: %04x\n", value); - break; - - case TRACE_DEVUNINIT: - lldbg("USB controller un-initialization: %04x\n", value); - break; - - case TRACE_DEVREGISTER: - lldbg("usbdev_register(): %04x\n", value); - break; - - case TRACE_DEVUNREGISTER: - lldbg("usbdev_unregister(): %04x\n", value); - break; - - case TRACE_EPCONFIGURE: - lldbg("Endpoint configure(): %04x\n", value); - break; - - case TRACE_EPDISABLE: - lldbg("Endpoint disable(): %04x\n", value); - break; - - case TRACE_EPALLOCREQ: - lldbg("Endpoint allocreq(): %04x\n", value); - break; - - case TRACE_EPFREEREQ: - lldbg("Endpoint freereq(): %04x\n", value); - break; - - case TRACE_EPALLOCBUFFER: - lldbg("Endpoint allocbuffer(): %04x\n", value); - break; - - case TRACE_EPFREEBUFFER: - lldbg("Endpoint freebuffer(): %04x\n", value); - break; - - case TRACE_EPSUBMIT: - lldbg("Endpoint submit(): %04x\n", value); - break; - - case TRACE_EPCANCEL: - lldbg("Endpoint cancel(): %04x\n", value); - break; - - case TRACE_EPSTALL: - lldbg("Endpoint stall(TRUE): %04x\n", value); - break; - - case TRACE_EPRESUME: - lldbg("Endpoint stall(FALSE): %04x\n", value); - break; - - case TRACE_DEVALLOCEP: - lldbg("Device allocep(): %04x\n", value); - break; - - case TRACE_DEVFREEEP: - lldbg("Device freeep(): %04x\n", value); - break; - - case TRACE_DEVGETFRAME: - lldbg("Device getframe(): %04x\n", value); - break; - - case TRACE_DEVWAKEUP: - lldbg("Device wakeup(): %04x\n", value); - break; - - case TRACE_DEVSELFPOWERED: - lldbg("Device selfpowered(): %04x\n", value); - break; - - case TRACE_DEVPULLUP: - lldbg("Device pullup(): %04x\n", value); - break; - - case TRACE_CLASSBIND: - lldbg("Class bind(): %04x\n", value); - break; - - case TRACE_CLASSUNBIND: - lldbg("Class unbind(): %04x\n", value); - break; - - case TRACE_CLASSDISCONNECT: - lldbg("Class disconnect(): %04x\n", value); - break; - - case TRACE_CLASSSETUP: - lldbg("Class setup(): %04x\n", value); - break; - - case TRACE_CLASSSUSPEND: - lldbg("Class suspend(): %04x\n", value); - break; - - case TRACE_CLASSRESUME: - lldbg("Class resume(): %04x\n", value); - break; - - case TRACE_CLASSRDCOMPLETE: - lldbg("Class RD request complete: %04x\n", value); - break; - - case TRACE_CLASSWRCOMPLETE: - lldbg("Class WR request complete: %04x\n", value); - break; - - default: - switch (TRACE_ID(event)) - { - case TRACE_CLASSAPI_ID: /* Other class driver system API calls */ - lldbg("Class API call %d: %04x\n", TRACE_DATA(event), value); - break; - - case TRACE_CLASSSTATE_ID: /* Track class driver state changes */ - lldbg("Class state %d: %04x\n", TRACE_DATA(event), value); - - case TRACE_INTENTRY_ID: /* Interrupt handler entry */ - lldbg("Interrrupt %d entry: %04x\n", TRACE_DATA(event), value); - break; - - case TRACE_INTDECODE_ID: /* Decoded interrupt event */ - lldbg("Interrrupt decode %d: %04x\n", TRACE_DATA(event), value); - break; - - case TRACE_INTEXIT_ID: /* Interrupt handler exit */ - lldbg("Interrrupt %d exit: %04x\n", TRACE_DATA(event), value); - break; - - case TRACE_OUTREQQUEUED_ID: /* Request queued for OUT endpoint */ - lldbg("EP%d OUT request queued: %04x\n", TRACE_DATA(event), value); - break; - - case TRACE_INREQQUEUED_ID: /* Request queued for IN endpoint */ - lldbg("EP%d IN request queued: %04x\n", TRACE_DATA(event), value); - break; - - case TRACE_READ_ID: /* Read (OUT) action */ - lldbg("EP%d OUT read: %04x\n", TRACE_DATA(event), value); - break; - - case TRACE_WRITE_ID: /* Write (IN) action */ - lldbg("EP%d IN write: %04x\n", TRACE_DATA(event), value); - break; - - case TRACE_COMPLETE_ID: /* Request completed */ - lldbg("EP%d request complete: %04x\n", TRACE_DATA(event), value); - break; - - case TRACE_DEVERROR_ID: /* USB controller driver error event */ - lldbg("Controller error: %02x:%04x\n", TRACE_DATA(event), value); - break; - - case TRACE_CLSERROR_ID: /* USB class driver error event */ - lldbg("Class error: %02x:%04x\n", TRACE_DATA(event), value); - break; - - default: - lldbg("Unrecognized event: %02x:%02x:%04x\n", - TRACE_ID(event) >> 8, TRACE_DATA(event), value); - break; - } - } - irqrestore(flags); -#endif /* CONFIG_DEBUG && CONFIG_DEBUG_USB */ -} - #endif /* CONFIG_USBDEV_TRACE */ -- cgit v1.2.3