summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2010-12-21 01:10:29 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2010-12-21 01:10:29 +0000
commit664abdf0fcc8e3b16397014c5fa127a24b870bc5 (patch)
tree71b7ce44dbf2af0f8cd506aaa855bd3e4ecd276e
parent712c36e2070ad37dd4625e859209dc663976a5b2 (diff)
downloadnuttx-664abdf0fcc8e3b16397014c5fa127a24b870bc5.tar.gz
nuttx-664abdf0fcc8e3b16397014c5fa127a24b870bc5.tar.bz2
nuttx-664abdf0fcc8e3b16397014c5fa127a24b870bc5.zip
Final cleanup before testing
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3203 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--nuttx/ChangeLog6
-rw-r--r--nuttx/Documentation/NuttX.html183
-rwxr-xr-xnuttx/arch/arm/src/lpc17xx/lpc17_usbhost.c237
-rw-r--r--nuttx/drivers/usbhost/usbhost_storage.c9
-rwxr-xr-xnuttx/include/nuttx/usb/usbhost_trace.h411
5 files changed, 286 insertions, 560 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog
index 06a824954..e0133196c 100644
--- a/nuttx/ChangeLog
+++ b/nuttx/ChangeLog
@@ -1410,3 +1410,9 @@
* include/nuttx/usb -- Created new directory. Moved all usb-related header
files to this new directory. Created a skeleton for a new USB host header
file
+ * drivers/usbhost -- Add USB host "registry" where connect devices can be
+ matched with the correct USB class driver. Add a USB host class driver
+ for the (Bulk-Only) USB Mass Storage Class. Untested on initial check-iin
+ * arc/arc/src/lpc17xx/lpc17_usbhost.c -- Add a simple USB host driver for
+ the NXP lpc17xx. Untested on initial check-in.
+
diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html
index 74391630b..d34ce8bba 100644
--- a/nuttx/Documentation/NuttX.html
+++ b/nuttx/Documentation/NuttX.html
@@ -8,7 +8,7 @@
<tr align="center" bgcolor="#e4e4e4">
<td>
<h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
- <p>Last Updated: December 13, 2010</p>
+ <p>Last Updated: December 20, 2010</p>
</td>
</tr>
</table>
@@ -786,48 +786,48 @@
Important bugfxes included:
<ul>
<li>
- Additional fixes needed with the TCP sequence number problem &quot;fixed&quot; in nuttx-5.14.
- </li>
- <li>
- In the <code>send()</code> logic, now checks if the destination IP address is in the ARP table before sending the packet;
- an ARP request will go out instead of the TCP packet.
- This improves behavior, for example, on the first on the first GET request from a browser
- </li>
- <li>
- All USB class drivers need to call DEV_CONNECT() when they are ready to be enumerated.
- That is, (1) initially when bound to the USB driver, and (2) after a USB reset.
- </li>
- <li>
- The SPI_SETBITS macro was calling the SPI setmode method.
- </li>
- <li>
- And several other bug fixes of lower criticality (see the ChangeLog for details).
- </li>
+ Additional fixes needed with the TCP sequence number problem &quot;fixed&quot; in nuttx-5.14.
+ </li>
+ <li>
+ In the <code>send()</code> logic, now checks if the destination IP address is in the ARP table before sending the packet;
+ an ARP request will go out instead of the TCP packet.
+ This improves behavior, for example, on the first on the first GET request from a browser
+ </li>
+ <li>
+ All USB class drivers need to call DEV_CONNECT() when they are ready to be enumerated.
+ That is, (1) initially when bound to the USB driver, and (2) after a USB reset.
+ </li>
+ <li>
+ The SPI_SETBITS macro was calling the SPI setmode method.
+ </li>
+ <li>
+ And several other bug fixes of lower criticality (see the ChangeLog for details).
+ </li>
</ul>
</p>
<p>
And feature enhancements:
<ul>
- <li>
- The LPC176x Ethernet driver was using all of AHB SRAM Bank0 for Ethernet packet buffers (16Kb).
- An option was added to limit the amount of SRAM used for packet buffering and to re-use any extra Bank0 memory for heap.
- </li>
- <li>
- Enabled networking and SD/MMC card support in the Olimex LPC1766-STK NuttShell (NSH) configuration.
- </li>
- <li>
- The LPC176x USB driver is now fully fully functional.
- </li>
- <li>
- Added an optional <code>cmddata()</code> method to the SPI interface.
- Some devices require an additional out-of-band bit to specify if the next word sent to the device is a command or data.
- The <code>cmddata()</code> method provides selection of command or data.
- </li>
- <li>
- A driver for the Nokia 6100 LCD (with either the Phillips PCF8833 LCD controller and for the Epson S1D15G10 LCD controller)
- and an NX graphics configuration for the Olimex LPC1766-STK have been added.
- However, neither the LCD driver nor the NX configuration have been verified as of the this release.
- </li>
+ <li>
+ The LPC176x Ethernet driver was using all of AHB SRAM Bank0 for Ethernet packet buffers (16Kb).
+ An option was added to limit the amount of SRAM used for packet buffering and to re-use any extra Bank0 memory for heap.
+ </li>
+ <li>
+ Enabled networking and SD/MMC card support in the Olimex LPC1766-STK NuttShell (NSH) configuration.
+ </li>
+ <li>
+ The LPC176x USB driver is now fully fully functional.
+ </li>
+ <li>
+ Added an optional <code>cmddata()</code> method to the SPI interface.
+ Some devices require an additional out-of-band bit to specify if the next word sent to the device is a command or data.
+ The <code>cmddata()</code> method provides selection of command or data.
+ </li>
+ <li>
+ A driver for the Nokia 6100 LCD (with either the Phillips PCF8833 LCD controller and for the Epson S1D15G10 LCD controller)
+ and an NX graphics configuration for the Olimex LPC1766-STK have been added.
+ However, neither the LCD driver nor the NX configuration have been verified as of the this release.
+ </li>
</ul>
</p>
@@ -1272,10 +1272,10 @@
<ul>
<p>
<b>STATUS:</b>
- </p>
- <p>
+ </p>
+ <p>
<b>Nucleus2G LPC1768</b>.
- Some initial files for the LPC17xx family were released in NuttX 5.6, but the first
+ Some initial files for the LPC17xx family were released in NuttX 5.6, but the first
functional release for the NXP LPC1768/Nucleus2G occured with NuttX 5.7 with some
additional enhancements through NuttX-5.9.
That initial, 5.6, basic release included <i>timer</i> interrupts and a <i>serial console</i> and was
@@ -1288,21 +1288,21 @@
(Although they have since been verfiied on other platforms; this needs to be revisited on the Nucleus2G).
</p>
<p>
- <b>mbed LPC1768</b>.
+ <b>mbed LPC1768</b>.
Support for the mbed board was contributed by Dave Marples and released in NuttX-5.11.
This port includes a NuttX OS test configuration (see <code>examples/ostest</code>).
</p>
<p>
- <b>Olimex LPC1766-STK</b>.
+ <b>Olimex LPC1766-STK</b>.
Support for that Olimex-LPC1766-STK board was added to NuttX 5.13.
The NuttX-5.14 release extended that support with an <i>Ethernet driver</i>.
- And the NuttX-5.15 release further extended the support with a functional <i>USB driver</i> and <i>SPI-based micro-SD</i>.
+ And the NuttX-5.15 release further extended the support with a functional <i>USB driver</i> and <i>SPI-based micro-SD</i>.
Verified configurations are now available for the NuttX OS test,
for the NuttShell with networking and microSD support(NSH, see the <a href="ttp://www.nuttx.org/NuttShell.html">NSH User Guide</a>),
for the NuttX network test, for the <a href="http://acme.com/software/thttpd">THTTPD</a> webserver,
- and for USB serial and USB storage examples.
- A driver for the <i>Nokia 6100 LCD</i> and an NX graphics configuration for the Olimex LPC1766-STK have been added.
- However, neither the LCD driver nor the NX configuration have been verified as of the the NuttX-5.15 release.
+ and for USB serial and USB storage examples.
+ A driver for the <i>Nokia 6100 LCD</i> and an NX graphics configuration for the Olimex LPC1766-STK have been added.
+ However, neither the LCD driver nor the NX configuration have been verified as of the the NuttX-5.15 release.
</p>
<p>
<b>Development Environments:</b>
@@ -1940,48 +1940,48 @@ Other memory:
<ul><pre>
5.15 2010-12-12 Gregory Nutt &lt;spudmonkey@racsa.co.cr&gt;
- * net/uip/uip_tcpaddsend.c and net/send.c -- Another place where the TCP sequence
- number problem &quot;fixed&quot; in 5.14 might occur.
- * net/send.c -- Check if the destination IP address is in the ARP table. If
- not, then don't consider the packet sent. It won't be, an ARP packet will go
- out instead. This improves behavior, for example, on the first GET request
- from a browser.
- * arch/arm/src/lpc17xx/lpc17_emacram.h and lpc17_allocateheap.c -- The Ethernet
- logic was using all of AHB SRAM Bank0 for Ethernet packet buffers (16Kb). An
- option was added to limit the amount of SRAM used for packet buffering and to
- re-use any extra Bank0 memory for heap. configs/olimex-lpc1766stk/nettest
- now uses only 8Kb at the beginning of Bank0; the 8Kb at the end of Bank0 is
- included in the heap
- * arch/arm/src/lpc17xx/lpc17_ssp.c -- Fix compilation errors when SSP1 is
- selected.
- * configs/olimex-lpc1766stk/nsh -- Enable network and SD/MMC card support in
- NSH. Networking and telnetd interface as well as SPI-based microSD are
- now functional.
- * examples/nsh/nsh_netinit.c -- Fix NSH bug. If CONFIG_NET is selected, but
- CONFIG_EXAMPLES_NSH_TELNETD is not selected, then the network is never
- initialized and bad things happen if you try to ping.
- * drivers/lcd -- Add header files for the Phillips PCF8833 LCD controller and
- for the Epson S1D15G10 LCD controller. A driver for the Nokia 6100 LCD is
- coming.
- * include/nuttx/spi.h and almost all other SPI files -- Added an optional
- cmddata() method to the SPI interface. Some devices require an additional
- out-of-band bit to specify if the next word sent to the device is a command
- or data. This is typical, for example, in &quot;9-bit&quot; displays where the 9th bit
- is the CMD/DATA bit. The cmddata method provides selection of command or data.
- * drivers/lcd/p14201.c -- Now uses the cmddata() method of the SPI interface.
- * arch/arm/src/lpc17xx/lpc17_usbdev.c -- LPC17xx USB driver now appears to
- to be fully functional. examples/usbstorage configuration verified (the
- examples/usbserial configuration is untested).
- * drivers/usbdev/usbserial.c and usbstorage.c -- All USB class drivers need
- to call DEV_CONNECT() when they are ready to be enumerated. That is,
- (1) initially when bound to the USB driver, and (2) after a USB reset.
- * drivers/lcd/nokia6100.c -- A driver for the Nokia 6100 LCD. This driver
- has not be verified as of the initial check-in.
- * configs/olimex-lpc1766stk/nx -- A NX graphics configuration for the Olimex
- LPC1766-STK board using the Nokia 6100 LCD driver. This configuration has
- not been verified as of the initial check-in.
- * include/nuttx/spi.h -- the SPI_SETBITS macro was calling the setmode method.
- This is a very important bug-fix in some usages.
+ * net/uip/uip_tcpaddsend.c and net/send.c -- Another place where the TCP sequence
+ number problem &quot;fixed&quot; in 5.14 might occur.
+ * net/send.c -- Check if the destination IP address is in the ARP table. If
+ not, then don't consider the packet sent. It won't be, an ARP packet will go
+ out instead. This improves behavior, for example, on the first GET request
+ from a browser.
+ * arch/arm/src/lpc17xx/lpc17_emacram.h and lpc17_allocateheap.c -- The Ethernet
+ logic was using all of AHB SRAM Bank0 for Ethernet packet buffers (16Kb). An
+ option was added to limit the amount of SRAM used for packet buffering and to
+ re-use any extra Bank0 memory for heap. configs/olimex-lpc1766stk/nettest
+ now uses only 8Kb at the beginning of Bank0; the 8Kb at the end of Bank0 is
+ included in the heap
+ * arch/arm/src/lpc17xx/lpc17_ssp.c -- Fix compilation errors when SSP1 is
+ selected.
+ * configs/olimex-lpc1766stk/nsh -- Enable network and SD/MMC card support in
+ NSH. Networking and telnetd interface as well as SPI-based microSD are
+ now functional.
+ * examples/nsh/nsh_netinit.c -- Fix NSH bug. If CONFIG_NET is selected, but
+ CONFIG_EXAMPLES_NSH_TELNETD is not selected, then the network is never
+ initialized and bad things happen if you try to ping.
+ * drivers/lcd -- Add header files for the Phillips PCF8833 LCD controller and
+ for the Epson S1D15G10 LCD controller. A driver for the Nokia 6100 LCD is
+ coming.
+ * include/nuttx/spi.h and almost all other SPI files -- Added an optional
+ cmddata() method to the SPI interface. Some devices require an additional
+ out-of-band bit to specify if the next word sent to the device is a command
+ or data. This is typical, for example, in &quot;9-bit&quot; displays where the 9th bit
+ is the CMD/DATA bit. The cmddata method provides selection of command or data.
+ * drivers/lcd/p14201.c -- Now uses the cmddata() method of the SPI interface.
+ * arch/arm/src/lpc17xx/lpc17_usbdev.c -- LPC17xx USB driver now appears to
+ to be fully functional. examples/usbstorage configuration verified (the
+ examples/usbserial configuration is untested).
+ * drivers/usbdev/usbserial.c and usbstorage.c -- All USB class drivers need
+ to call DEV_CONNECT() when they are ready to be enumerated. That is,
+ (1) initially when bound to the USB driver, and (2) after a USB reset.
+ * drivers/lcd/nokia6100.c -- A driver for the Nokia 6100 LCD. This driver
+ has not be verified as of the initial check-in.
+ * configs/olimex-lpc1766stk/nx -- A NX graphics configuration for the Olimex
+ LPC1766-STK board using the Nokia 6100 LCD driver. This configuration has
+ not been verified as of the initial check-in.
+ * include/nuttx/spi.h -- the SPI_SETBITS macro was calling the setmode method.
+ This is a very important bug-fix in some usages.
pascal-2.0 2009-12-21 Gregory Nutt &lt;spudmonkey@racsa.co.cr&gt;
@@ -2016,6 +2016,11 @@ nuttx-5.16 2011-xx-xx Gregory Nutt &lt;spudmonkey@racsa.co.cr&gt;
* include/nuttx/usb -- Created new directory. Moved all usb-related header
files to this new directory. Created a skeleton for a new USB host header
file
+ * drivers/usbhost -- Add USB host "registry" where connect devices can be
+ matched with the correct USB class driver. Add a USB host class driver
+ for the (Bulk-Only) USB Mass Storage Class. Untested on initial check-iin
+ * arc/arc/src/lpc17xx/lpc17_usbhost.c -- Add a simple USB host driver for
+ the NXP lpc17xx. Untested on initial check-in.
pascal-2.1 2010-xx-xx Gregory Nutt &lt;spudmonkey@racsa.co.cr&gt;
diff --git a/nuttx/arch/arm/src/lpc17xx/lpc17_usbhost.c b/nuttx/arch/arm/src/lpc17xx/lpc17_usbhost.c
index fb2b4f9bf..454fd7b98 100755
--- a/nuttx/arch/arm/src/lpc17xx/lpc17_usbhost.c
+++ b/nuttx/arch/arm/src/lpc17xx/lpc17_usbhost.c
@@ -53,7 +53,6 @@
#include <nuttx/usb/usb.h>
#include <nuttx/usb/ohci.h>
#include <nuttx/usb/usbhost.h>
-#include <nuttx/usb/usbhost_trace.h>
#include <arch/irq.h>
#include <arch/board/board.h>
@@ -71,6 +70,17 @@
* Definitions
*******************************************************************************/
+/* I think it is the case that all I/O buffers must lie in AHB SRAM because of
+ * the OHCI DMA. But this definition has here so that I can experiment later
+ * to see if this really required.
+ */
+
+#define CONFIG_UBHOST_AHBIOBUFFERS 1
+
+#if defined(CONFIG_UBHOST_AHBIOBUFFERS) && LPC17_IOBUFFERS < 1
+# error "No IO buffers allocated"
+#endif
+
/* Frame Interval */
#define FI (12000-1) /* 12000 bits per frame (-1) */
@@ -178,9 +188,9 @@ struct lpc17_edlist_s
uint32_t pad[3]; /* To make the same size as struct lpc17_hced_s */
};
-struct lpc17_tdlist_s
+struct lpc17_buflist_s
{
- struct lpc17_tdlist_s *flink; /* Link to next TD buffer in the list */
+ struct lpc17_buflist_s *flink; /* Link to next buffer in the list */
/* Variable length buffer data follows */
};
@@ -214,6 +224,12 @@ static void lpc17_putle16(uint8_t *dest, uint16_t val);
static struct lpc17_hced_s *lpc17_edalloc(struct lpc17_usbhost_s *priv);
static void lpc17_edfree(struct lpc17_usbhost_s *priv, struct lpc17_hced_s *ed);
+static uint8_t *lpc17_tdalloc(struct lpc17_usbhost_s *priv);
+static void lpc17_tdfree(struct lpc17_usbhost_s *priv, uint8_t *buffer);
+#ifdef CONFIG_UBHOST_AHBIOBUFFERS
+static uint8_t *lpc17_ioalloc(struct lpc17_usbhost_s *priv);
+static void lpc17_iofree(struct lpc17_usbhost_s *priv, uint8_t *buffer);
+#endif
static void lpc17_enqueuetd(volatile struct lpc17_hced_s *ed, uint32_t dirpid,
uint32_t toggle, volatile uint8_t *buffer,
size_t buflen);
@@ -281,8 +297,11 @@ static struct lpc17_usbhost_s g_usbhost =
/* This is a free list of EDs and TD buffers */
-static struct lpc17_edlist_s *g_edfree;
-static struct lpc17_tdlist_s *g_tdfree;
+static struct lpc17_edlist_s *g_edfree;
+static struct lpc17_buflist_s *g_tdfree;
+#ifdef CONFIG_UBHOST_AHBIOBUFFERS
+static struct lpc17_buflist_s *g_iofree;
+#endif
/*******************************************************************************
* Public Data
@@ -503,6 +522,10 @@ static void lpc17_edfree(struct lpc17_usbhost_s *priv, struct lpc17_hced_s *ed)
* Description:
* Allocate an TD buffer from the free list
*
+ * Assumptions:
+ * - Called from a single thread so no mutual exclusion is required.
+ * - Never called from an interrupt handler.
+ *
*******************************************************************************/
static uint8_t *lpc17_tdalloc(struct lpc17_usbhost_s *priv)
@@ -510,7 +533,7 @@ static uint8_t *lpc17_tdalloc(struct lpc17_usbhost_s *priv)
uint8_t *ret = (uint8_t *)g_tdfree;
if (ret)
{
- g_tdfree = ((struct lpc17_tdlist_s*)ret)->flink;
+ g_tdfree = ((struct lpc17_buflist_s*)ret)->flink;
}
return ret;
}
@@ -525,12 +548,53 @@ static uint8_t *lpc17_tdalloc(struct lpc17_usbhost_s *priv)
static void lpc17_tdfree(struct lpc17_usbhost_s *priv, uint8_t *buffer)
{
- struct lpc17_tdlist_s *tdfree = (struct lpc17_tdlist_s *)buffer;
- tdfree->flink = g_tdfree;
- g_tdfree = tdfree;
+ struct lpc17_buflist_s *tdfree = (struct lpc17_buflist_s *)buffer;
+ tdfree->flink = g_tdfree;
+ g_tdfree = tdfree;
}
/*******************************************************************************
+ * Name: lpc17_ioalloc
+ *
+ * Description:
+ * Allocate an IO buffer from the free list
+ *
+ * Assumptions:
+ * - Called from a single thread so no mutual exclusion is required.
+ * - Never called from an interrupt handler.
+ *
+ *******************************************************************************/
+
+#ifdef CONFIG_UBHOST_AHBIOBUFFERS
+static uint8_t *lpc17_ioalloc(struct lpc17_usbhost_s *priv)
+{
+ uint8_t *ret = (uint8_t *)g_iofree;
+ if (ret)
+ {
+ g_iofree = ((struct lpc17_buflist_s*)ret)->flink;
+ }
+ return ret;
+}
+#endif
+
+/*******************************************************************************
+ * Name: lpc17_tdfree
+ *
+ * Description:
+ * Return an TD buffer to the free list
+ *
+ *******************************************************************************/
+
+#ifdef CONFIG_UBHOST_AHBIOBUFFERS
+static void lpc17_iofree(struct lpc17_usbhost_s *priv, uint8_t *buffer)
+{
+ struct lpc17_buflist_s *iofree = (struct lpc17_buflist_s *)buffer;
+ iofree->flink = g_iofree;
+ g_iofree = iofree;
+}
+#endif
+
+/*******************************************************************************
* Name: lpc17_enqueuetd
*
* Description:
@@ -758,7 +822,6 @@ static int lpc17_usbinterrupt(int irq, FAR void *context)
/* Read the device interrupt status register */
- usbtrace(TRACE_INTENTRY(LPC17_TRACEINTID_USB), 0xbeef);
uint32_t intstatus;
uint32_t intenable;
@@ -775,12 +838,12 @@ static int lpc17_usbinterrupt(int irq, FAR void *context)
if ((intstatus & OHCI_INT_RHSC) != 0)
{
uint32_t rhportst1 = lpc17_getreg(LPC17_USBHOST_RHPORTST1);
- ullvdbg("Root Hub Status Change, RHPORTST: %08x\n", portstatus);
+ ullvdbg("Root Hub Status Change, RHPORTST: %08x\n", rhportst1);
if ((rhportst1 & OHCI_RHPORTST_CSC) != 0)
{
uint32_t rhstatus = lpc17_getreg(LPC17_USBHOST_RHSTATUS);
- ullvdbg("Connect Status Change, RHSTATUS: %08x\n", portstatus);
+ ullvdbg("Connect Status Change, RHSTATUS: %08x\n", rhportst1);
/* If DRWE is set, Connect Status Change indicates a remote wake-up event */
@@ -867,7 +930,7 @@ static int lpc17_usbinterrupt(int irq, FAR void *context)
lpc17_putreg(intstatus, LPC17_USBHOST_INTST);
}
- usbtrace(TRACE_INTEXIT(LPC17_TRACEINTID_USB), 0);
+
return OK;
}
@@ -898,7 +961,9 @@ static int lpc17_usbinterrupt(int irq, FAR void *context)
* returned indicating the nature of the failure
*
* Assumptions:
- * This function will *not* be called from an interrupt handler.
+ * - Only a single class bound to a single device is supported.
+ * - Called from a single thread so no mutual exclusion is required.
+ * - Never called from an interrupt handler.
*
*******************************************************************************/
@@ -1081,7 +1146,8 @@ errout:
* returned indicating the nature of the failure
*
* Assumptions:
- * This function will *not* be called from an interrupt handler.
+ * - Called from a single thread so no mutual exclusion is required.
+ * - Never called from an interrupt handler.
*
*******************************************************************************/
@@ -1119,7 +1185,8 @@ static int lpc17_alloc(FAR struct usbhost_driver_s *drvr,
* returned indicating the nature of the failure
*
* Assumptions:
- * This function will *not* be called from an interrupt handler.
+ * - Called from a single thread so no mutual exclusion is required.
+ * - Never called from an interrupt handler.
*
*******************************************************************************/
@@ -1158,7 +1225,9 @@ static int lpc17_free(FAR struct usbhost_driver_s *drvr, FAR uint8_t *buffer)
* returned indicating the nature of the failure
*
* Assumptions:
- * This function will *not* be called from an interrupt handler.
+ * - Only a single class bound to a single device is supported.
+ * - Called from a single thread so no mutual exclusion is required.
+ * - Never called from an interrupt handler.
*
*******************************************************************************/
@@ -1238,7 +1307,9 @@ static int lpc17_ctrlout(FAR struct usbhost_driver_s *drvr,
* returned indicating the nature of the failure
*
* Assumptions:
- * This function will *not* be called from an interrupt handler.
+ * - Only a single class bound to a single device is supported.
+ * - Called from a single thread so no mutual exclusion is required.
+ * - Never called from an interrupt handler.
*
*******************************************************************************/
@@ -1247,64 +1318,111 @@ static int lpc17_transfer(FAR struct usbhost_driver_s *drvr,
FAR uint8_t *buffer, size_t buflen)
{
struct lpc17_usbhost_s *priv = (struct lpc17_usbhost_s *)drvr;
- struct lpc17_hced_s *ed;
+ struct lpc17_hced_s *ed = NULL;
uint32_t dirpid;
uint32_t regval;
+#ifdef CONFIG_UBHOST_AHBIOBUFFERS
+ uint8_t *origbuf = NULL;
+#endif
int ret = -ENOMEM;
+ /* Allocate an IO buffer if the user buffer does not lie in AHB SRAM */
+
+#ifdef CONFIG_UBHOST_AHBIOBUFFERS
+ if ((uintptr_t)buffer >= LPC17_SRAM_BANK0 &&
+ (uintptr_t)buffer < (LPC17_SRAM_BANK0 + LPC17_SRAM_BANK0 + LPC17_SRAM_BANK0))
+ {
+ /* Allocate an IO buffer in AHB SRAM */
+
+ origbuf = buffer;
+ buffer = lpc17_ioalloc(priv);
+ if (!buffer)
+ {
+ goto errout;
+ }
+
+ /* Copy the user data into the AHB SRAM IO buffer. Sad... so
+ * inefficient. But without exposing the AHB SRAM to the final,
+ * end-user client I don't know of any way around this copy.
+ */
+
+ memcpy(buffer, origbuf, buflen);
+ }
+#endif
+
/* Allocate an ED */
ed = lpc17_edalloc(priv);
- if (ed)
+ if (!ed)
{
- /* Format the endpoint descriptor */
+ goto errout;
+ }
+
+ /* Format the endpoint descriptor */
- lpc17_edinit(ed);
- ed->ctrl = (uint32_t)(ep->addr) << ED_CONTROL_EN_SHIFT |
- (uint32_t)(ep->mxpacketsize) << ED_CONTROL_MPS_SHIFT;
+ lpc17_edinit(ed);
+ ed->ctrl = (uint32_t)(ep->addr) << ED_CONTROL_EN_SHIFT |
+ (uint32_t)(ep->mxpacketsize) << ED_CONTROL_MPS_SHIFT;
- /* Get the direction of the endpoint */
+ /* Get the direction of the endpoint */
- if (ep->in)
- {
- ed->ctrl |= ED_CONTROL_D_IN;
- dirpid = GTD_STATUS_DP_IN;
- }
- else
- {
- ed->ctrl |= ED_CONTROL_D_OUT;
- dirpid = GTD_STATUS_DP_OUT;
- }
+ if (ep->in)
+ {
+ ed->ctrl |= ED_CONTROL_D_IN;
+ dirpid = GTD_STATUS_DP_IN;
+ }
+ else
+ {
+ ed->ctrl |= ED_CONTROL_D_OUT;
+ dirpid = GTD_STATUS_DP_OUT;
+ }
- /* Then enqueue the transfer */
+ /* Then enqueue the transfer */
- lpc17_enqueuetd(ed, dirpid, GTD_STATUS_T_TOGGLE, buffer, buflen);
+ lpc17_enqueuetd(ed, dirpid, GTD_STATUS_T_TOGGLE, buffer, buflen);
- lpc17_putreg((uint32_t)ed, LPC17_USBHOST_BULKHEADED);
+ lpc17_putreg((uint32_t)ed, LPC17_USBHOST_BULKHEADED);
- regval = lpc17_getreg(LPC17_USBHOST_CMDST);
- regval |= OHCI_CMDST_BLF;
- lpc17_putreg(regval, LPC17_USBHOST_CMDST);
+ regval = lpc17_getreg(LPC17_USBHOST_CMDST);
+ regval |= OHCI_CMDST_BLF;
+ lpc17_putreg(regval, LPC17_USBHOST_CMDST);
- regval = lpc17_getreg(LPC17_USBHOST_CTRL);
- regval |= OHCI_CTRL_BLE;
- lpc17_putreg(regval, LPC17_USBHOST_CTRL);
+ regval = lpc17_getreg(LPC17_USBHOST_CTRL);
+ regval |= OHCI_CTRL_BLE;
+ lpc17_putreg(regval, LPC17_USBHOST_CTRL);
+
+ /* Wait for the Writeback Done Head interrupt */
- /* Wait for the Writeback Done Head interrupt */
+ lpc17_takesem(&priv->wdhsem);
- lpc17_takesem(&priv->wdhsem);
+ /* Check the TDHEAD completion status bits */
- /* Check the TDHEAD completion status bits */
+ if (priv->tdstatus == 0)
+ {
+ ret = OK;
+ }
+ else
+ {
+ ret = -EIO;
+ }
- if (priv->tdstatus == 0)
- {
- ret = OK;
- }
- else
- {
- ret = -EIO;
- }
+errout:
+ /* Free any temporary IO buffers */
+
+#ifdef CONFIG_UBHOST_AHBIOBUFFERS
+ if (buffer && origbuf)
+ {
+ lpc17_iofree(priv, buffer);
}
+#endif
+
+ /* Free the endpoint descriptor */
+
+ if (ed)
+ {
+ lpc17_edfree(priv, ed);
+ }
+
return ret;
}
@@ -1326,7 +1444,9 @@ static int lpc17_transfer(FAR struct usbhost_driver_s *drvr,
* None
*
* Assumptions:
- * This function will *not* be called from an interrupt handler.
+ * - Only a single class bound to a single device is supported.
+ * - Called from a single thread so no mutual exclusion is required.
+ * - Never called from an interrupt handler.
*
*******************************************************************************/
@@ -1393,8 +1513,6 @@ void up_usbhostinitialize(void)
irqstate_t flags;
int i;
- usbtrace(TRACE_DEVINIT, 0);
-
/* Initialize the state data structure */
sem_init(&priv->rhssem, 0, 0);
@@ -1508,8 +1626,7 @@ void up_usbhostinitialize(void)
if (irq_attach(LPC17_IRQ_USB, lpc17_usbinterrupt) != 0)
{
- usbtrace(TRACE_DEVERROR(LPC17_TRACEERR_IRQREGISTRATION),
- (uint16_t)LPC17_IRQ_USB);
+ udbg("Failed to attach IRQ\n");
return;
}
diff --git a/nuttx/drivers/usbhost/usbhost_storage.c b/nuttx/drivers/usbhost/usbhost_storage.c
index 149a8a7af..f807da758 100644
--- a/nuttx/drivers/usbhost/usbhost_storage.c
+++ b/nuttx/drivers/usbhost/usbhost_storage.c
@@ -98,6 +98,7 @@
#define USBHOST_ALLFOUND 0x07
#define USBHOST_MAX_RETRIES 100
+#define USBHOST_MAX_CREFS 0x7fff
/****************************************************************************
* Private Types
@@ -1532,7 +1533,7 @@ static int usbhost_open(FAR struct inode *inode)
{
/* Otherwise, just increment the reference count on the driver */
- DEBUGASSERT(priv->crefs < MAX_CREFS);
+ DEBUGASSERT(priv->crefs > 0 && priv->crefs < USBHOST_MAX_CREFS);
usbhost_takesem(&priv->exclsem);
priv->crefs++;
usbhost_givesem(&priv->exclsem);
@@ -1559,7 +1560,7 @@ static int usbhost_close(FAR struct inode *inode)
/* Decrement the reference count on the block driver */
- DEBUGASSERT(priv->crefs > 0);
+ DEBUGASSERT(priv->crefs > 1);
usbhost_takesem(&priv->exclsem);
priv->crefs--;
@@ -1645,7 +1646,7 @@ static ssize_t usbhost_read(FAR struct inode *inode, unsigned char *buffer,
if (result == OK)
{
/* Receive the user data */
-#warning "For lpc17xx, I think this buffer needs to lie in BANK1"
+
result = DRVR_TRANSFER(priv->drvr, &priv->bulkin,
buffer, priv->blocksize * nsectors);
if (result == OK)
@@ -1737,7 +1738,7 @@ static ssize_t usbhost_write(FAR struct inode *inode, const unsigned char *buffe
if (result == OK)
{
/* Send the user data */
-#warning "For lpc17xx, I think this buffer needs to lie in BANK1"
+
result = DRVR_TRANSFER(priv->drvr, &priv->bulkout,
(uint8_t*)buffer, priv->blocksize * nsectors);
if (result == OK)
diff --git a/nuttx/include/nuttx/usb/usbhost_trace.h b/nuttx/include/nuttx/usb/usbhost_trace.h
index cd14414ed..d0c6db93e 100755
--- a/nuttx/include/nuttx/usb/usbhost_trace.h
+++ b/nuttx/include/nuttx/usb/usbhost_trace.h
@@ -42,354 +42,19 @@
#include <nuttx/config.h>
-#include <stdint.h>
+/* NOTE: Trace debug capability has not been implemented for USB host. It
+ * should be a simple port of the USB device trace logic. But that has not
+ * yet been done.
+ */
/****************************************************************************
* Preprocessor definitions
****************************************************************************/
-/* Event encoding/decoding macros *******************************************/
-
-#define TRACE_EVENT(id,data) ((uint16_t)(id)|(data))
-#define TRACE_ID(event) ((event)&0xff00)
-#define TRACE_DATA(event) ((event)&0x00ff)
-
-/* Events ******************************************************************/
-
-/* Event class IDs */
-
-#define TRACE_INIT_ID (0x0000) /* Initialization events */
-#define TRACE_EP_ID (0x0100) /* Endpoint API calls */
-#define TRACE_DEV_ID (0x0200) /* USB device API calls */
-#define TRACE_CLASS_ID (0x0300) /* USB class driver API calls */
-#define TRACE_CLASSAPI_ID (0x0400) /* Other class driver system API calls */
-#define TRACE_CLASSSTATE_ID (0x0500) /* Track class driver state changes */
-#define TRACE_INTENTRY_ID (0x0600) /* Interrupt handler entry */
-#define TRACE_INTDECODE_ID (0x0700) /* Decoded interrupt event */
-#define TRACE_INTEXIT_ID (0x0800) /* Interrupt handler exit */
-#define TRACE_OUTREQQUEUED_ID (0x0900) /* Request queued for OUT endpoint */
-#define TRACE_INREQQUEUED_ID (0x0a00) /* Request queued for IN endpoint */
-#define TRACE_READ_ID (0x0b00) /* Read (OUT) action */
-#define TRACE_WRITE_ID (0x0c00) /* Write (IN) action */
-#define TRACE_COMPLETE_ID (0x0d00) /* Request completed */
-#define TRACE_DEVERROR_ID (0x0e00) /* USB controller driver error event */
-#define TRACE_CLSERROR_ID (0x0f00) /* USB class driver error event */
-
-#define TRACE_NIDS 16 /* Cannot exceed bits in usbtrace_idset_t */
-
-/* Bit settings for usbtrace_enable */
-
-#define TRACE_ID2BIT(id) ((1) << ((id) >> 8))
-#define TRACE_INIT_BIT TRACE_ID2BIT(TRACE_INIT_ID)
-#define TRACE_EP_BIT TRACE_ID2BIT(TRACE_EP_ID)
-#define TRACE_DEV_BIT TRACE_ID2BIT(TRACE_DEV_ID)
-#define TRACE_CLASS_BIT TRACE_ID2BIT(TRACE_CLASS_ID)
-#define TRACE_CLASSAPI_BIT TRACE_ID2BIT(TRACE_CLASSAPI_ID)
-#define TRACE_CLASSSTATE_BIT TRACE_ID2BIT(TRACE_CLASSSTATE_ID)
-#define TRACE_INTENTRY_BIT TRACE_ID2BIT(TRACE_INTENTRY_ID)
-#define TRACE_INTDECODE_BIT TRACE_ID2BIT(TRACE_INTDECODE_ID)
-#define TRACE_INTEXIT_BIT TRACE_ID2BIT(TRACE_INTEXIT_ID)
-#define TRACE_OUTREQQUEUED_BIT TRACE_ID2BIT(TRACE_OUTREQQUEUED_ID)
-#define TRACE_INREQQUEUED_BIT TRACE_ID2BIT(TRACE_INREQQUEUED_ID)
-#define TRACE_READ_BIT TRACE_ID2BIT(TRACE_READ_ID)
-#define TRACE_WRITE_BIT TRACE_ID2BIT(TRACE_WRITE_ID)
-#define TRACE_COMPLETE_BIT TRACE_ID2BIT(TRACE_COMPLETE_ID)
-#define TRACE_DEVERROR_BIT TRACE_ID2BIT(TRACE_DEVERROR_ID)
-#define TRACE_CLSERROR_BIT TRACE_ID2BIT(TRACE_CLSERROR_ID)
-#define TRACE_ALLBITS ((usbtrace_idset_t)-1)
-
-/* Initialization events */
-
-#define TRACE_DEVINIT TRACE_EVENT(TRACE_INIT_ID, 0x0001)
-#define TRACE_DEVUNINIT TRACE_EVENT(TRACE_INIT_ID, 0x0002)
-#define TRACE_DEVREGISTER TRACE_EVENT(TRACE_INIT_ID, 0x0003)
-#define TRACE_DEVUNREGISTER TRACE_EVENT(TRACE_INIT_ID, 0x0004)
-
-/* API calls (see usbdev.h) */
-
-#define TRACE_EPCONFIGURE TRACE_EVENT(TRACE_EP_ID, 0x0001)
-#define TRACE_EPDISABLE TRACE_EVENT(TRACE_EP_ID, 0x0002)
-#define TRACE_EPALLOCREQ TRACE_EVENT(TRACE_EP_ID, 0x0003)
-#define TRACE_EPFREEREQ TRACE_EVENT(TRACE_EP_ID, 0x0004)
-#define TRACE_EPALLOCBUFFER TRACE_EVENT(TRACE_EP_ID, 0x0005)
-#define TRACE_EPFREEBUFFER TRACE_EVENT(TRACE_EP_ID, 0x0006)
-#define TRACE_EPSUBMIT TRACE_EVENT(TRACE_EP_ID, 0x0007)
-#define TRACE_EPCANCEL TRACE_EVENT(TRACE_EP_ID, 0x0008)
-#define TRACE_EPSTALL TRACE_EVENT(TRACE_EP_ID, 0x0009)
-#define TRACE_EPRESUME TRACE_EVENT(TRACE_EP_ID, 0x000a)
-
-#define TRACE_DEVALLOCEP TRACE_EVENT(TRACE_DEV_ID, 0x0001)
-#define TRACE_DEVFREEEP TRACE_EVENT(TRACE_DEV_ID, 0x0002)
-#define TRACE_DEVGETFRAME TRACE_EVENT(TRACE_DEV_ID, 0x0003)
-#define TRACE_DEVWAKEUP TRACE_EVENT(TRACE_DEV_ID, 0x0004)
-#define TRACE_DEVSELFPOWERED TRACE_EVENT(TRACE_DEV_ID, 0x0005)
-#define TRACE_DEVPULLUP TRACE_EVENT(TRACE_DEV_ID, 0x0006)
-
-#define TRACE_CLASSBIND TRACE_EVENT(TRACE_CLASS_ID, 0x0001)
-#define TRACE_CLASSUNBIND TRACE_EVENT(TRACE_CLASS_ID, 0x0002)
-#define TRACE_CLASSDISCONNECT TRACE_EVENT(TRACE_CLASS_ID, 0x0003)
-#define TRACE_CLASSSETUP TRACE_EVENT(TRACE_CLASS_ID, 0x0004)
-#define TRACE_CLASSSUSPEND TRACE_EVENT(TRACE_CLASS_ID, 0x0005)
-#define TRACE_CLASSRESUME TRACE_EVENT(TRACE_CLASS_ID, 0x0006)
-
-#define TRACE_CLASSRDCOMPLETE TRACE_EVENT(TRACE_CLASS_ID, 0x0007)
-#define TRACE_CLASSWRCOMPLETE TRACE_EVENT(TRACE_CLASS_ID, 0x0008)
-
-#define TRACE_CLASSAPI(id) TRACE_EVENT(TRACE_CLASSAPI_ID, id)
-
-#define TRACE_CLASSSTATE(id) TRACE_EVENT(TRACE_CLASSSTATE_ID, id)
-
-/* USB device controller interrupt events. The 'id' is specific to the driver.
- * Particular values for 'id' are unique for a given implementation of a
- * controller driver
- */
-
-#define TRACE_INTENTRY(id) TRACE_EVENT(TRACE_INTENTRY_ID, id)
-#define TRACE_INTDECODE(id) TRACE_EVENT(TRACE_INTDECODE_ID, id)
-#define TRACE_INTEXIT(id) TRACE_EVENT(TRACE_INTEXIT_ID, id)
-
-/* Controller data transfer */
-
-#define TRACE_OUTREQQUEUED(ep) TRACE_EVENT(TRACE_OUTREQQUEUED_ID, ep)
-#define TRACE_INREQQUEUED(ep) TRACE_EVENT(TRACE_INREQQUEUED_ID, ep)
-#define TRACE_READ(ep) TRACE_EVENT(TRACE_READ_ID, ep)
-#define TRACE_WRITE(ep) TRACE_EVENT(TRACE_WRITE_ID, ep)
-#define TRACE_COMPLETE(ep) TRACE_EVENT(TRACE_COMPLETE_ID, ep)
-
-/* USB device controller error events. The 'id' is specific to the driver.
- * Particular values for 'id' are unique for a given implementation of a
- * controller driver
- */
-
-#define TRACE_DEVERROR(id) TRACE_EVENT(TRACE_DEVERROR_ID, id)
-
-/* USB class driver error events. The 'id' is specific to the class driver,
- * but common to all driver controller instances.
- */
-
-#define TRACE_CLSERROR(id) TRACE_EVENT(TRACE_CLSERROR_ID, id)
-
-/* USB Serial driver class events *******************************************/
-
-/* UART interface API calls */
-
-#define USBSER_TRACECLASSAPI_SETUP 0x0001
-#define USBSER_TRACECLASSAPI_SHUTDOWN 0x0002
-#define USBSER_TRACECLASSAPI_ATTACH 0x0003
-#define USBSER_TRACECLASSAPI_DETACH 0x0004
-#define USBSER_TRACECLASSAPI_IOCTL 0x0005
-#define USBSER_TRACECLASSAPI_RECEIVE 0x0006
-#define USBSER_TRACECLASSAPI_RXINT 0x0007
-#define USBSER_TRACECLASSAPI_RXAVAILABLE 0x0008
-#define USBSER_TRACECLASSAPI_SEND 0x0009
-#define USBSER_TRACECLASSAPI_TXINT 0x000a
-#define USBSER_TRACECLASSAPI_TXREADY 0x000b
-#define USBSER_TRACECLASSAPI_TXEMPTY 0x000c
-
-/* Values of the class error ID used by the USB serial driver */
-
-#define USBSER_TRACEERR_ALLOCCTRLREQ 0x0001
-#define USBSER_TRACEERR_ALLOCDEVSTRUCT 0x0002
-#define USBSER_TRACEERR_ALREADYCLOSED 0x0003
-#define USBSER_TRACEERR_ALREADYCONFIGURED 0x0004
-#define USBSER_TRACEERR_CONFIGIDBAD 0x0005
-#define USBSER_TRACEERR_CONFIGNONE 0x0006
-#define USBSER_TRACEERR_CONSOLEREGISTER 0x0007
-#define USBSER_TRACEERR_DEVREGISTER 0x0008
-#define USBSER_TRACEERR_EPRESPQ 0x0009
-#define USBSER_TRACEERR_GETUNKNOWNDESC 0x000a
-#define USBSER_TRACEERR_INVALIDARG 0x000b
-#define USBSER_TRACEERR_EP0NOTBOUND 0x000c
-#define USBSER_TRACEERR_EPBULKINALLOCFAIL 0x000d
-#define USBSER_TRACEERR_EPBULKINCONFIGFAIL 0x000e
-#define USBSER_TRACEERR_EPBULKOUTALLOCFAIL 0x000f
-#define USBSER_TRACEERR_EPINTINALLOCFAIL 0x0010
-#define USBSER_TRACEERR_EPINTINCONFIGFAIL 0x0011
-#define USBSER_TRACEERR_EPBULKOUTCONFIGFAIL 0x0012
-#define USBSER_TRACEERR_RDALLOCREQ 0x0013
-#define USBSER_TRACEERR_RDSHUTDOWN 0x0014
-#define USBSER_TRACEERR_RDSUBMIT 0x0015
-#define USBSER_TRACEERR_RDUNEXPECTED 0x0016
-#define USBSER_TRACEERR_REQRESULT 0x0017
-#define USBSER_TRACEERR_RXOVERRUN 0x0018
-#define USBSER_TRACEERR_SETUPNOTCONNECTED 0x0019
-#define USBSER_TRACEERR_SUBMITFAIL 0x001a
-#define USBSER_TRACEERR_UARTREGISTER 0x001b
-#define USBSER_TRACEERR_UNSUPPORTEDCTRLREQ 0x001c
-#define USBSER_TRACEERR_UNSUPPORTEDRWREQ 0x001d
-#define USBSER_TRACEERR_UNSUPPORTEDSTDREQ 0x001e
-#define USBSER_TRACEERR_UNSUPPORTEDTYPE 0x001f
-#define USBSER_TRACEERR_WRALLOCREQ 0x0020
-#define USBSER_TRACEERR_WRSHUTDOWN 0x0021
-#define USBSER_TRACEERR_WRUNEXPECTED 0x0022
-
-/* USB Storage driver class events ******************************************/
-
-/* State transitions */
-
-#define USBSTRG_CLASSSTATE_IDLECMDPARSE 0x0001
-#define USBSTRG_CLASSSTATE_CMDPARSECMDFINISH 0x0002
-#define USBSTRG_CLASSSTATE_CMDPARSECMDREAD6 0x0003
-#define USBSTRG_CLASSSTATE_CMDPARSECMDREAD10 0x0004
-#define USBSTRG_CLASSSTATE_CMDPARSECMDREAD12 0x0005
-#define USBSTRG_CLASSSTATE_CMDPARSECMDWRITE6 0x0006
-#define USBSTRG_CLASSSTATE_CMDPARSECMDWRITE10 0x0007
-#define USBSTRG_CLASSSTATE_CMDPARSECMDWRITE12 0x0008
-#define USBSTRG_CLASSSTATE_CMDREAD 0x0009
-#define USBSTRG_CLASSSTATE_CMDREADCMDFINISH 0x000a
-#define USBSTRG_CLASSSTATE_CMDWRITE 0x000b
-#define USBSTRG_CLASSSTATE_CMDWRITECMDFINISH 0x000c
-#define USBSTRG_CLASSSTATE_CMDFINISHCMDSTATUS 0x000d
-#define USBSTRG_CLASSSTATE_CMDSTATUSIDLE 0x000e
-
-/* Values of the class error ID used by the USB storage driver */
-
-#define USBSTRG_TRACEERR_ALLOCCTRLREQ 0x0001
-#define USBSTRG_TRACEERR_ALLOCDEVSTRUCT 0x0002
-#define USBSTRG_TRACEERR_ALLOCIOBUFFER 0x0003
-#define USBSTRG_TRACEERR_ALREADYCONFIGURED 0x0004
-#define USBSTRG_TRACEERR_ALREADYUNINIT 0x0005
-#define USBSTRG_TRACEERR_BADREQUEST 0x0006
-#define USBSTRG_TRACEERR_BINDLUNINVALIDARGS2 0x0007
-#define USBSTRG_TRACEERR_BINDLUNINVALIDARGS3 0x0008
-#define USBSTRG_TRACEERR_BINDLUNINVALIDARGS4 0x0009
-#define USBSTRG_TRACEERR_BINLUNINVALIDARGS1 0x000a
-#define USBSTRG_TRACEERR_BLKDRVEOPEN 0x000b
-#define USBSTRG_TRACEERR_CMDBADLUN 0x000c
-#define USBSTRG_TRACEERR_CMDFINISHRESIDUE 0x000d
-#define USBSTRG_TRACEERR_CMDFINISHRQEMPTY 0x000e
-#define USBSTRG_TRACEERR_CMDFINISHSHORTPKT 0x000f
-#define USBSTRG_TRACEERR_CMDFINISHSUBMIT 0x0010
-#define USBSTRG_TRACEERR_CMDFINSHDIR 0x0011
-#define USBSTRG_TRACEERR_CMDFINSHSUBMIT 0x0012
-#define USBSTRG_TRACEERR_CMDPARSEWRREQLISTEMPTY 0x0013
-#define USBSTRG_TRACEERR_CMDREADREADFAIL 0x0014
-#define USBSTRG_TRACEERR_CMDREADSUBMIT 0x0015
-#define USBSTRG_TRACEERR_CMDREADWRRQEMPTY 0x0016
-#define USBSTRG_TRACEERR_CMDSTATUSRDREQLISTEMPTY 0x0017
-#define USBSTRG_TRACEERR_CMDUNEVIOLATION 0x0018
-#define USBSTRG_TRACEERR_CMDWRITERDSUBMIT 0x0019
-#define USBSTRG_TRACEERR_CMDWRITERDRQEMPTY 0x001a
-#define USBSTRG_TRACEERR_CMDWRITEWRITEFAIL 0x001b
-#define USBSTRG_TRACEERR_CONFIGIDBAD 0x001c
-#define USBSTRG_TRACEERR_CONFIGNONE 0x001d
-#define USBSTRG_TRACEERR_DEFERREDRESPINVALIDARGS 0x001e
-#define USBSTRG_TRACEERR_DEFERREDRESPSTALLED 0x001f
-#define USBSTRG_TRACEERR_DEFERREDRESPSUBMIT 0x0020
-#define USBSTRG_TRACEERR_DEVREGISTER 0x0021
-#define USBSTRG_TRACEERR_DISCONNECTINVALIDARGS 0x0022
-#define USBSTRG_TRACEERR_EP0NOTBOUND1 0x0023
-#define USBSTRG_TRACEERR_EP0NOTBOUND2 0x0024
-#define USBSTRG_TRACEERR_EP0NOTBOUND3 0x0025
-#define USBSTRG_TRACEERR_EPBULKINALLOCFAIL 0x0026
-#define USBSTRG_TRACEERR_EPBULKINCONFIGFAIL 0x0027
-#define USBSTRG_TRACEERR_EPBULKOUTALLOCFAIL 0x0028
-#define USBSTRG_TRACEERR_EPBULKOUTCONFIGFAIL 0x0029
-#define USBSTRG_TRACEERR_EPRESPQ 0x002a
-#define USBSTRG_TRACEERR_EXPORTLUNSINVALIDARGS 0x002b
-#define USBSTRG_TRACEERR_GETMAXLUNNDX 0x002c
-#define USBSTRG_TRACEERR_GETUNKNOWNDESC 0x002d
-#define USBSTRG_TRACEERR_IDLERDREQLISTEMPTY 0x002e
-#define USBSTRG_TRACEERR_IDLERDSUBMIT 0x002f
-#define USBSTRG_TRACEERR_INQUIRYFLAGS 0x0030
-#define USBSTRG_TRACEERR_INTERNALCONFUSION1 0x0031
-#define USBSTRG_TRACEERR_INTERNALCONFUSION2 0x0032
-#define USBSTRG_TRACEERR_INVALIDCBWCONTENT 0x0033
-#define USBSTRG_TRACEERR_INVALIDCBWSIGNATURE 0x0034
-#define USBSTRG_TRACEERR_INVALIDSTATE 0x0035
-#define USBSTRG_TRACEERR_LUNALREADYBOUND 0x0036
-#define USBSTRG_TRACEERR_LUNNOTBOUND 0x0037
-#define USBSTRG_TRACEERR_MODEPAGEFLAGS 0x0038
-#define USBSTRG_TRACEERR_MODESENSE10FLAGS 0x0039
-#define USBSTRG_TRACEERR_MODESENSE6FLAGS 0x003a
-#define USBSTRG_TRACEERR_MSRESETNDX 0x003b
-#define USBSTRG_TRACEERR_NOGEOMETRY 0x003c
-#define USBSTRG_TRACEERR_NOTCONFIGURED 0x003d
-#define USBSTRG_TRACEERR_NOTREMOVABLE 0x003e
-#define USBSTRG_TRACEERR_PCSAVED 0x003f
-#define USBSTRG_TRACEERR_PHASEERROR1 0x0040
-#define USBSTRG_TRACEERR_PHASEERROR2 0x0041
-#define USBSTRG_TRACEERR_PHASEERROR3 0x0042
-#define USBSTRG_TRACEERR_PREVENTMEDIUMREMOVALPREVENT 0x0043
-#define USBSTRG_TRACEERR_RDALLOCREQ 0x0044
-#define USBSTRG_TRACEERR_RDCOMPLETEINVALIDARGS 0x0045
-#define USBSTRG_TRACEERR_RDCOMPLETERDSUBMIT 0x0046
-#define USBSTRG_TRACEERR_RDSHUTDOWN 0x0047
-#define USBSTRG_TRACEERR_RDSUBMIT 0x0048
-#define USBSTRG_TRACEERR_RDUNEXPECTED 0x0049
-#define USBSTRG_TRACEERR_READ10FLAGS 0x004a
-#define USBSTRG_TRACEERR_READ10LBARANGE 0x004b
-#define USBSTRG_TRACEERR_READ10MEDIANOTPRESENT 0x004c
-#define USBSTRG_TRACEERR_READ12FLAGS 0x004d
-#define USBSTRG_TRACEERR_READ12LBARANGE 0x004e
-#define USBSTRG_TRACEERR_READ12MEDIANOTPRESENT 0x004f
-#define USBSTRG_TRACEERR_READ6LBARANGE 0x0050
-#define USBSTRG_TRACEERR_READ6MEDIANOTPRESENT 0x0051
-#define USBSTRG_TRACEERR_READCAPACITYFLAGS 0x0052
-#define USBSTRG_TRACEERR_REALLOCIOBUFFER 0x0053
-#define USBSTRG_TRACEERR_REQRESULT 0x0054
-#define USBSTRG_TRACEERR_SCSICMDCONTROL 0x0055
-#define USBSTRG_TRACEERR_SETCONFIGINVALIDARGS 0x0056
-#define USBSTRG_TRACEERR_SETUPINVALIDARGS 0x0057
-#define USBSTRG_TRACEERR_SNDCSWFAIL 0x0058
-#define USBSTRG_TRACEERR_SNDPHERROR 0x0059
-#define USBSTRG_TRACEERR_SNDSTATUSSUBMIT 0x005a
-#define USBSTRG_TRACEERR_SYNCCACHEMEDIANOTPRESENT 0x005b
-#define USBSTRG_TRACEERR_THREADCREATE 0x005c
-#define USBSTRG_TRACEERR_TOOMANYLUNS 0x005d
-#define USBSTRG_TRACEERR_UNBINDINVALIDARGS 0x005e
-#define USBSTRG_TRACEERR_UNBINDLUNINVALIDARGS1 0x005f
-#define USBSTRG_TRACEERR_UNBINDLUNINVALIDARGS2 0x0060
-#define USBSTRG_TRACEERR_UNINITIALIZEINVALIDARGS 0x0061
-#define USBSTRG_TRACEERR_UNSUPPORTEDSTDREQ 0x0062
-#define USBSTRG_TRACEERR_VERIFY10FLAGS 0x0063
-#define USBSTRG_TRACEERR_VERIFY10LBARANGE 0x0064
-#define USBSTRG_TRACEERR_VERIFY10MEDIANOTPRESENT 0x0065
-#define USBSTRG_TRACEERR_VERIFY10NOBLOCKS 0x0066
-#define USBSTRG_TRACEERR_VERIFY10READFAIL 0x0067
-#define USBSTRG_TRACEERR_WRALLOCREQ 0x0068
-#define USBSTRG_TRACEERR_SNDPHERROR 0x0069
-#define USBSTRG_TRACEERR_WRCOMPLETEINVALIDARGS 0x006a
-#define USBSTRG_TRACEERR_WRITE10FLAGS 0x006b
-#define USBSTRG_TRACEERR_WRITE10LBARANGE 0x006c
-#define USBSTRG_TRACEERR_WRITE10MEDIANOTPRESENT 0x006d
-#define USBSTRG_TRACEERR_WRITE10READONLY 0x006e
-#define USBSTRG_TRACEERR_WRITE12FLAGS 0x006f
-#define USBSTRG_TRACEERR_WRITE12LBARANGE 0x0070
-#define USBSTRG_TRACEERR_WRITE12MEDIANOTPRESENT 0x0071
-#define USBSTRG_TRACEERR_WRITE12READONLY 0x0072
-#define USBSTRG_TRACEERR_WRITE6LBARANGE 0x0073
-#define USBSTRG_TRACEERR_WRITE6MEDIANOTPRESENT 0x0074
-#define USBSTRG_TRACEERR_WRITE6READONLY 0x0075
-#define USBSTRG_TRACEERR_WRSHUTDOWN 0x0076
-#define USBSTRG_TRACEERR_WRUNEXPECTED 0x0077
-
/****************************************************************************
* Public Types
****************************************************************************/
-/* The reported trace information */
-
-struct usbtrace_s
-{
- uint16_t event;
- uint16_t value;
-};
-
-/* Enumeration callback function signature */
-
-typedef int (*trace_callback_t)(struct usbtrace_s *trace, void *arg);
-
-/* Bit mask input type for usbtrace_enable(). If TRACE_NIDS grows beyond
- * 16, then this will have to be changed to uint32_t
- */
-
-typedef uint16_t usbtrace_idset_t;
-
-/* Print routine to use for usbdev_trprint() output */
-
-typedef int (*trprintf_t)(const char *fmt, ...);
-
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
@@ -402,74 +67,6 @@ extern "C" {
# define EXTERN extern
#endif
-/*******************************************************************************
- * Name: usbtrace_enable
- *
- * Description:
- * 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:
- * - May be called from an interrupt handler
- *
- *******************************************************************************/
-
-#if defined(CONFIG_USBDEV_TRACE) || (defined(CONFIG_DEBUG) && defined(CONFIG_DEBUG_USB))
-EXTERN usbtrace_idset_t usbtrace_enable(usbtrace_idset_t idset);
-#else
-# define usbtrace_enable(idset)
-#endif
-
-/*******************************************************************************
- * Name: usbtrace
- *
- * Description:
- * Record a USB event (tracing must be enabled)
- *
- * Assumptions:
- * May be called from an interrupt handler
- *
- *******************************************************************************/
-
-#if defined(CONFIG_USBDEV_TRACE) || (defined(CONFIG_DEBUG) && defined(CONFIG_DEBUG_USB))
-EXTERN void usbtrace(uint16_t event, uint16_t value);
-#else
-# define usbtrace(event, value)
-#endif
-
-/*******************************************************************************
- * Name: usbtrace_enumerate
- *
- * Description:
- * Enumerate all buffer trace data (will temporarily disable tracing)
- *
- * Assumptions:
- * NEVER called from an interrupt handler
- *
- *******************************************************************************/
-
-#ifdef CONFIG_USBDEV_TRACE
-EXTERN int usbtrace_enumerate(trace_callback_t callback, void *arg);
-#else
-# define usbtrace_enumerate(event)
-#endif
-
-/*******************************************************************************
- * Name: usbtrace_trprint
- *
- * Description:
- * Print the trace record using the supplied printing function
- *
- *******************************************************************************/
-
-EXTERN void usbtrace_trprintf(trprintf_t trprintf, uint16_t event, uint16_t value);
-
#undef EXTERN
#if defined(__cplusplus)
}