summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-01-01 15:08:18 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-01-01 15:08:18 +0000
commit0b0417e93ff7d0ffa1e17fcefb8906ebbd41bd11 (patch)
tree437759c826057f0d8ecbb2af94f5666df6802e28
parent9bdb91ec537f8a7889a816cf989e6d91054effe5 (diff)
downloadnuttx-0b0417e93ff7d0ffa1e17fcefb8906ebbd41bd11.tar.gz
nuttx-0b0417e93ff7d0ffa1e17fcefb8906ebbd41bd11.tar.bz2
nuttx-0b0417e93ff7d0ffa1e17fcefb8906ebbd41bd11.zip
Misc debug fixes
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3227 42af7a65-404d-4744-a932-0658087f49c3
-rwxr-xr-xnuttx/arch/arm/src/lpc17xx/lpc17_usbhost.c36
-rw-r--r--nuttx/drivers/usbhost/usbhost_storage.c6
-rwxr-xr-xnuttx/include/nuttx/usb/ohci.h4
-rw-r--r--nuttx/include/nuttx/usb/usbhost.h7
4 files changed, 35 insertions, 18 deletions
diff --git a/nuttx/arch/arm/src/lpc17xx/lpc17_usbhost.c b/nuttx/arch/arm/src/lpc17xx/lpc17_usbhost.c
index 0a566c9fe..0d6b3c23e 100755
--- a/nuttx/arch/arm/src/lpc17xx/lpc17_usbhost.c
+++ b/nuttx/arch/arm/src/lpc17xx/lpc17_usbhost.c
@@ -246,7 +246,7 @@ static int lpc17_usbinterrupt(int irq, FAR void *context);
static int lpc17_wait(FAR struct usbhost_driver_s *drvr, bool connected);
static int lpc17_enumerate(FAR struct usbhost_driver_s *drvr);
-static int lpc17_ep0configure(FAR struct usbhost_driver_s *drvr, uint8_t funcno,
+static int lpc17_ep0configure(FAR struct usbhost_driver_s *drvr, uint8_t funcaddr,
uint16_t maxpacketsize);
static int lpc17_alloc(FAR struct usbhost_driver_s *drvr,
FAR uint8_t **buffer, FAR size_t *maxlen);
@@ -617,7 +617,7 @@ static void lpc17_enqueuetd(volatile struct lpc17_hced_s *ed, uint32_t dirpid,
TDHEAD->bufend = (uint32_t)(buffer + (buflen - 1));
TDTAIL->bufend = 0;
- ed->headtd = (uint32_t)TDHEAD | ((ed->headtd) & 0x00000002);
+ ed->headtd = (uint32_t)TDHEAD | ((ed->headtd) & ED_HEADP_C);
ed->tailtd = (uint32_t)TDTAIL;
ed->next = 0;
}
@@ -966,7 +966,7 @@ static int lpc17_enumerate(FAR struct usbhost_driver_s *drvr)
* Input Parameters:
* drvr - The USB host driver instance obtained as a parameter from the call to
* the class create() method.
- * funcno - The USB address of the function containing the endpoint that EP0
+ * funcaddr - The USB address of the function containing the endpoint that EP0
* controls
* maxpacketsize - The maximum number of bytes that can be sent to or
* received from the endpoint in a single data packet
@@ -980,11 +980,11 @@ static int lpc17_enumerate(FAR struct usbhost_driver_s *drvr)
*
************************************************************************************/
-static int lpc17_ep0configure(FAR struct usbhost_driver_s *drvr, uint8_t funcno,
+static int lpc17_ep0configure(FAR struct usbhost_driver_s *drvr, uint8_t funcaddr,
uint16_t maxpacketsize)
{
- DEBUGASSERT(drvr && funcno < 128 && maxpacketsize < 2048);
- EDCTRL->ctrl = (uint32_t)funcno << ED_CONTROL_FA_SHIFT |
+ DEBUGASSERT(drvr && funcaddr < 128 && maxpacketsize < 2048);
+ EDCTRL->ctrl = (uint32_t)funcaddr << ED_CONTROL_FA_SHIFT |
(uint32_t)maxpacketsize << ED_CONTROL_MPS_SHIFT;
return OK;
}
@@ -1203,11 +1203,15 @@ static int lpc17_transfer(FAR struct usbhost_driver_s *drvr,
#endif
int ret = -ENOMEM;
+ DEBUGASSERT(drvr && ep && buffer && buflen > 0);
+ uvdbg("EP%d %s maxpacket:%d buflen:%d\n",
+ ep->addr, ep->in ? "IN" : "OUT", ep->mxpacketsize, buflen);
+
/* 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))
+ (uintptr_t)buffer >= (LPC17_SRAM_BANK0 + LPC17_BANK0_SIZE + LPC17_BANK1_SIZE))
{
/* Will the transfer fit in an IO buffer? */
@@ -1242,14 +1246,15 @@ static int lpc17_transfer(FAR struct usbhost_driver_s *drvr,
ed = lpc17_edalloc(priv);
if (!ed)
{
- uvdbg("ED allocation failed\n");
+ udbg("ED allocation failed\n");
goto errout;
}
/* Format the endpoint descriptor */
lpc17_edinit(ed);
- ed->ctrl = (uint32_t)(ep->addr) << ED_CONTROL_EN_SHIFT |
+ ed->ctrl = (uint32_t)(ep->funcaddr) << ED_CONTROL_FA_SHIFT |
+ (uint32_t)(ep->addr) << ED_CONTROL_EN_SHIFT |
(uint32_t)(ep->mxpacketsize) << ED_CONTROL_MPS_SHIFT;
/* Get the direction of the endpoint */
@@ -1280,7 +1285,7 @@ static int lpc17_transfer(FAR struct usbhost_driver_s *drvr,
* TDs on the Bulk list.
*/
- regval = lpc17_getreg(LPC17_USBHOST_CMDST);
+ regval = lpc17_getreg(LPC17_USBHOST_CMDST);
regval |= OHCI_CMDST_BLF;
lpc17_putreg(regval, LPC17_USBHOST_CMDST);
@@ -1290,7 +1295,7 @@ static int lpc17_transfer(FAR struct usbhost_driver_s *drvr,
* should never modify the bulk list while BLE is set.
*/
- regval = lpc17_getreg(LPC17_USBHOST_CTRL);
+ regval = lpc17_getreg(LPC17_USBHOST_CTRL);
regval |= OHCI_CTRL_BLE;
lpc17_putreg(regval, LPC17_USBHOST_CTRL);
@@ -1437,12 +1442,15 @@ FAR struct usbhost_driver_s *usbhost_initialize(int controller)
sem_init(&priv->rhssem, 0, 0);
sem_init(&priv->wdhsem, 0, 0);
- /* Enable power by setting PCUSB in the PCONP register */
+ /* Enable power by setting PCUSB in the PCONP register. Disable interrupts
+ * because this register may be shared with other drivers.
+ */
flags = irqsave();
regval = lpc17_getreg(LPC17_SYSCON_PCONP);
regval |= SYSCON_PCONP_PCUSB;
lpc17_putreg(regval, LPC17_SYSCON_PCONP);
+ irqrestore(flags);
/* Enable clocking on USB (USB PLL clocking was initialized in very low-
* evel clock setup logic (see lpc17_clockconfig.c)). We do still need
@@ -1582,7 +1590,9 @@ FAR struct usbhost_driver_s *usbhost_initialize(int controller)
return NULL;
}
- /* Enable USB interrupts at the SYCON controller */
+ /* Enable USB interrupts at the SYCON controller. Disable interrupts
+ * because this register may be shared with other drivers.
+ */
flags = irqsave();
regval = lpc17_getreg(LPC17_SYSCON_USBINTST);
diff --git a/nuttx/drivers/usbhost/usbhost_storage.c b/nuttx/drivers/usbhost/usbhost_storage.c
index 89b969b30..c544d8dcc 100644
--- a/nuttx/drivers/usbhost/usbhost_storage.c
+++ b/nuttx/drivers/usbhost/usbhost_storage.c
@@ -1384,7 +1384,10 @@ static int usbhost_connect(FAR struct usbhost_class_s *class,
priv->bulkout.addr = epdesc->addr & USB_EP_ADDR_NUMBER_MASK;
priv->bulkout.in = false;
+ priv->bulkout.funcaddr = 1;
priv->bulkout.mxpacketsize = usbhost_getle16(epdesc->mxpacketsize);
+ uvdbg("Bulk OUT EP addr:%d mxpacketsize:%d\n",
+ priv->bulkout.addr, priv->bulkout.mxpacketsize);
}
else
{
@@ -1402,7 +1405,10 @@ static int usbhost_connect(FAR struct usbhost_class_s *class,
priv->bulkin.addr = epdesc->addr & USB_EP_ADDR_NUMBER_MASK;
priv->bulkin.in = true;
+ priv->bulkin.funcaddr = 1;
priv->bulkin.mxpacketsize = usbhost_getle16(epdesc->mxpacketsize);
+ uvdbg("Bulk IN EP addr:%d mxpacketsize:%d\n",
+ priv->bulkin.addr, priv->bulkin.mxpacketsize);
}
}
}
diff --git a/nuttx/include/nuttx/usb/ohci.h b/nuttx/include/nuttx/usb/ohci.h
index 2dc95aecc..99cf843a9 100755
--- a/nuttx/include/nuttx/usb/ohci.h
+++ b/nuttx/include/nuttx/usb/ohci.h
@@ -281,8 +281,8 @@
#define ED_CONTROL_MPS_SHIFT (16) /* Bits 16-26: Maximum packet size */
#define ED_CONTROL_MPS_MASK (0x7ff << ED_CONTROL_MPS_SHIFT)
-#define ED_TAILP_H (1 << 0) /* Bit 0: Halted */
-#define ED_TAILP_C (1 << 1) /* Bit 1: Toggle carry */
+#define ED_HEADP_H (1 << 0) /* Bit 0: Halted */
+#define ED_HEADP_C (1 << 1) /* Bit 1: Toggle carry */
/* General Transfer Descriptor Offsets (4.3.1) */
diff --git a/nuttx/include/nuttx/usb/usbhost.h b/nuttx/include/nuttx/usb/usbhost.h
index 18753e1b8..9d7919839 100644
--- a/nuttx/include/nuttx/usb/usbhost.h
+++ b/nuttx/include/nuttx/usb/usbhost.h
@@ -206,7 +206,7 @@
* Input Parameters:
* drvr - The USB host driver instance obtained as a parameter from the call to
* the class create() method.
- * funcno - The USB address of the function containing the endpoint that EP0
+ * funcaddr - The USB address of the function containing the endpoint that EP0
* controls
* mps (maxpacketsize) - The maximum number of bytes that can be sent to or
* received from the endpoint in a single data packet
@@ -220,7 +220,7 @@
*
************************************************************************************/
-#define DRVR_EP0CONFIGURE(drvr,funcno,mps) ((drvr)->ep0configure(drvr,funcno,mps))
+#define DRVR_EP0CONFIGURE(drvr,funcaddr,mps) ((drvr)->ep0configure(drvr,funcaddr,mps))
/************************************************************************************
* Name: DRVR_ALLOC
@@ -465,7 +465,7 @@ struct usbhost_driver_s
* an external implementation of the enumeration logic.
*/
- int (*ep0configure)(FAR struct usbhost_driver_s *drvr, uint8_t funcno,
+ int (*ep0configure)(FAR struct usbhost_driver_s *drvr, uint8_t funcaddr,
uint16_t maxpacketsize);
/* Some hardware supports special memory in which transfer descriptors can
@@ -523,6 +523,7 @@ struct usbhost_epdesc_s
{
uint8_t addr; /* Endpoint address */
bool in; /* Direction: TRUE = IN */
+ uint8_t funcaddr; /* USB address of function containing endpoint */
uint16_t mxpacketsize; /* Max packetsize */
};