summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-03-09 12:59:00 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-03-09 12:59:00 +0000
commited75882857639faaa26d47ff90aecee0b3213273 (patch)
treee61ec88d49f75e09fbc5fd44664d482fb28b8cce
parent500e9b7aa4aa148f86236ff64e5280e50e7ecd1e (diff)
downloadnuttx-ed75882857639faaa26d47ff90aecee0b3213273.tar.gz
nuttx-ed75882857639faaa26d47ff90aecee0b3213273.tar.bz2
nuttx-ed75882857639faaa26d47ff90aecee0b3213273.zip
RTL8187 driver update
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3356 42af7a65-404d-4744-a932-0658087f49c3
-rwxr-xr-xnuttx/configs/detron/nsh/defconfig28
-rwxr-xr-xnuttx/configs/detron/src/up_nsh.c7
-rwxr-xr-xnuttx/configs/detron/wlan/defconfig11
-rwxr-xr-xnuttx/configs/olimex-lpc1766stk/wlan/defconfig11
-rwxr-xr-xnuttx/drivers/usbhost/usbhost_enumerate.c5
-rwxr-xr-xnuttx/drivers/usbhost/usbhost_rtl8187.c148
6 files changed, 150 insertions, 60 deletions
diff --git a/nuttx/configs/detron/nsh/defconfig b/nuttx/configs/detron/nsh/defconfig
index 95d6e0c40..1d0ea610f 100755
--- a/nuttx/configs/detron/nsh/defconfig
+++ b/nuttx/configs/detron/nsh/defconfig
@@ -54,7 +54,7 @@
# CONFIG_DRAM_SIZE - Describes the installed DRAM.
# CONFIG_DRAM_START - The start address of DRAM (physical)
# CONFIG_DRAM_END - Last address+1 of installed RAM
-# CONFIG_ARCH_IRQPRIO - The ST32F103Z supports interrupt prioritization
+# CONFIG_ARCH_IRQPRIO - The LPC17xx supports interrupt prioritization
# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
# stack. If defined, this symbol is the size of the interrupt
# stack in bytes. If not defined, the user task stacks will be
@@ -209,6 +209,7 @@ CONFIG_PHY_KS8721=y
CONFIG_PHY_AUTONEG=y
CONFIG_PHY_SPEED100=n
CONFIG_PHY_FDUPLEX=y
+CONFIG_NET_REGDEBUG=n
#
# General build options
@@ -241,6 +242,8 @@ CONFIG_HAVE_LIBM=n
# CONFIG_DEBUG_VERBOSE - enables verbose debug output
# CONFIG_DEBUG_SYMBOLS - build without optimization and with
# debug symbols (needed for use with a debugger).
+# CONFIG_DEBUG_NET - enable network debug output
+# CONFIG_DEBUG_USB - enable usb debug output
# CONFIG_MM_REGIONS - If the architecture includes multiple
# regions of memory to allocate from, this specifies the
# number of memory regions that the memory manager must
@@ -328,15 +331,16 @@ CONFIG_APP_DIR=examples/nsh
CONFIG_DEBUG=n
CONFIG_DEBUG_VERBOSE=n
CONFIG_DEBUG_SYMBOLS=n
+CONFIG_DEBUG_NET=n
CONFIG_DEBUG_USB=n
CONFIG_MM_REGIONS=2
CONFIG_ARCH_LOWPUTC=y
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_INSTRUMENTATION=n
CONFIG_TASK_NAME_SIZE=0
-CONFIG_START_YEAR=2010
-CONFIG_START_MONTH=12
-CONFIG_START_DAY=22
+CONFIG_START_YEAR=2011
+CONFIG_START_MONTH=3
+CONFIG_START_DAY=8
CONFIG_GREGORIAN_TIME=n
CONFIG_JULIAN_TIME=n
CONFIG_DEV_CONSOLE=y
@@ -531,16 +535,17 @@ CONFIG_MMCSD_HAVECARDDETECT=n
# CONFIG_NET_BROADCAST - Broadcast support
# CONFIG_NET_LLH_LEN - The link level header length
# CONFIG_NET_FWCACHE_SIZE - number of packets to remember when looking for duplicates
+# CONFIG_NET_WLAN - Enable or disable WLAN network interface
#
-CONFIG_NET=n
+CONFIG_NET=y
CONFIG_NET_IPv6=n
-CONFIG_NSOCKET_DESCRIPTORS=0
+CONFIG_NSOCKET_DESCRIPTORS=2
CONFIG_NET_SOCKOPTS=y
CONFIG_NET_BUFSIZE=420
-CONFIG_NET_TCP=n
+CONFIG_NET_TCP=y
CONFIG_NET_TCP_CONNS=40
CONFIG_NET_MAX_LISTENPORTS=40
-CONFIG_NET_UDP=n
+CONFIG_NET_UDP=y
CONFIG_NET_UDP_CHECKSUMS=y
#CONFIG_NET_UDP_CONNS=10
CONFIG_NET_ICMP=n
@@ -552,6 +557,7 @@ CONFIG_NET_STATISTICS=y
CONFIG_NET_BROADCAST=n
#CONFIG_NET_LLH_LEN=14
#CONFIG_NET_FWCACHE_SIZE=2
+CONFIG_NET_WLAN=y
#
# UIP Network Utilities
@@ -898,3 +904,9 @@ CONFIG_PTHREAD_STACK_MIN=256
CONFIG_PTHREAD_STACK_DEFAULT=2048
CONFIG_HEAP_BASE=
CONFIG_HEAP_SIZE=
+
+#
+# USB WLAN device identification
+#
+CONFIG_USB_WLAN_VID=0x0bda
+CONFIG_USB_WLAN_PID=0x8189
diff --git a/nuttx/configs/detron/src/up_nsh.c b/nuttx/configs/detron/src/up_nsh.c
index 650bf9276..cac549ee7 100755
--- a/nuttx/configs/detron/src/up_nsh.c
+++ b/nuttx/configs/detron/src/up_nsh.c
@@ -213,6 +213,13 @@ static int nsh_usbhostinitialize(void)
message("nsh_usbhostinitialize: Failed to register the mass storage class\n");
}
+ message("nsh_usbhostinitialize: Register device specific drivers\n");
+ ret = usbhost_wlaninit();
+ if (ret != OK)
+ {
+ message("nsh_usbhostinitialize: Failed to register the WLAN device\n");
+ }
+
/* Then get an instance of the USB host interface */
message("nsh_usbhostinitialize: Initialize USB host\n");
diff --git a/nuttx/configs/detron/wlan/defconfig b/nuttx/configs/detron/wlan/defconfig
index 3e6f60177..142c25393 100755
--- a/nuttx/configs/detron/wlan/defconfig
+++ b/nuttx/configs/detron/wlan/defconfig
@@ -241,6 +241,8 @@ CONFIG_HAVE_LIBM=n
# CONFIG_DEBUG_VERBOSE - enables verbose debug output
# CONFIG_DEBUG_SYMBOLS - build without optimization and with
# debug symbols (needed for use with a debugger).
+# CONFIG_DEBUG_NET - enable network debug output
+# CONFIG_DEBUG_USB - enable usb debug output
# CONFIG_MM_REGIONS - If the architecture includes multiple
# regions of memory to allocate from, this specifies the
# number of memory regions that the memory manager must
@@ -328,6 +330,7 @@ CONFIG_APP_DIR=examples/wlan
CONFIG_DEBUG=n
CONFIG_DEBUG_VERBOSE=n
CONFIG_DEBUG_SYMBOLS=n
+CONFIG_DEBUG_NET=n
CONFIG_DEBUG_USB=n
CONFIG_MM_REGIONS=2
CONFIG_ARCH_LOWPUTC=y
@@ -336,7 +339,7 @@ CONFIG_SCHED_INSTRUMENTATION=n
CONFIG_TASK_NAME_SIZE=0
CONFIG_START_YEAR=2011
CONFIG_START_MONTH=3
-CONFIG_START_DAY=6
+CONFIG_START_DAY=8
CONFIG_GREGORIAN_TIME=n
CONFIG_JULIAN_TIME=n
CONFIG_DEV_CONSOLE=y
@@ -900,3 +903,9 @@ CONFIG_PTHREAD_STACK_MIN=256
CONFIG_PTHREAD_STACK_DEFAULT=2048
CONFIG_HEAP_BASE=
CONFIG_HEAP_SIZE=
+
+#
+# USB WLAN device identification
+#
+CONFIG_USB_WLAN_VID=0x0bda
+CONFIG_USB_WLAN_PID=0x8189
diff --git a/nuttx/configs/olimex-lpc1766stk/wlan/defconfig b/nuttx/configs/olimex-lpc1766stk/wlan/defconfig
index e676a66ca..089800e38 100755
--- a/nuttx/configs/olimex-lpc1766stk/wlan/defconfig
+++ b/nuttx/configs/olimex-lpc1766stk/wlan/defconfig
@@ -240,6 +240,8 @@ CONFIG_HAVE_LIBM=n
# CONFIG_DEBUG_VERBOSE - enables verbose debug output
# CONFIG_DEBUG_SYMBOLS - build without optimization and with
# debug symbols (needed for use with a debugger).
+# CONFIG_DEBUG_NET - enable network debug output
+# CONFIG_DEBUG_USB - enable usb debug output
# CONFIG_MM_REGIONS - If the architecture includes multiple
# regions of memory to allocate from, this specifies the
# number of memory regions that the memory manager must
@@ -327,6 +329,7 @@ CONFIG_APP_DIR=examples/wlan
CONFIG_DEBUG=n
CONFIG_DEBUG_VERBOSE=n
CONFIG_DEBUG_SYMBOLS=n
+CONFIG_DEBUG_NET=n
CONFIG_DEBUG_USB=n
CONFIG_MM_REGIONS=2
CONFIG_ARCH_LOWPUTC=y
@@ -335,7 +338,7 @@ CONFIG_SCHED_INSTRUMENTATION=n
CONFIG_TASK_NAME_SIZE=0
CONFIG_START_YEAR=2011
CONFIG_START_MONTH=3
-CONFIG_START_DAY=6
+CONFIG_START_DAY=8
CONFIG_GREGORIAN_TIME=n
CONFIG_JULIAN_TIME=n
CONFIG_DEV_CONSOLE=y
@@ -894,3 +897,9 @@ CONFIG_PTHREAD_STACK_MIN=256
CONFIG_PTHREAD_STACK_DEFAULT=2048
CONFIG_HEAP_BASE=
CONFIG_HEAP_SIZE=
+
+#
+# USB WLAN device identification
+#
+CONFIG_USB_WLAN_VID=0x0bda
+CONFIG_USB_WLAN_PID=0x8189
diff --git a/nuttx/drivers/usbhost/usbhost_enumerate.c b/nuttx/drivers/usbhost/usbhost_enumerate.c
index 82c65c8bf..4c8c9c8c3 100755
--- a/nuttx/drivers/usbhost/usbhost_enumerate.c
+++ b/nuttx/drivers/usbhost/usbhost_enumerate.c
@@ -229,11 +229,6 @@ static inline int usbhost_classbind(FAR struct usbhost_driver_s *drvr,
const struct usbhost_registry_s *reg;
int ret = -EINVAL;
- if (id->base == USB_CLASS_VENDOR_SPEC)
- {
- udbg("BUG: More logic needed to extract VID and PID\n");
- }
-
/* Is there is a class implementation registered to support this device. */
reg = usbhost_findclass(id);
diff --git a/nuttx/drivers/usbhost/usbhost_rtl8187.c b/nuttx/drivers/usbhost/usbhost_rtl8187.c
index 81944df17..87b798c87 100755
--- a/nuttx/drivers/usbhost/usbhost_rtl8187.c
+++ b/nuttx/drivers/usbhost/usbhost_rtl8187.c
@@ -34,7 +34,7 @@
*
****************************************************************************/
-/* @TODO TEMPORARILY. REMOVE LATER!!! */
+/* @TODO REMOVE LATER!!! */
#define CONFIG_WLAN_IRQ 1
/****************************************************************************
@@ -265,6 +265,11 @@ static int wlan_addmac(struct uip_driver_s *dev, FAR const uint8_t *mac);
static int wlan_rmmac(struct uip_driver_s *dev, FAR const uint8_t *mac);
#endif
+/* Register and unregister network device */
+
+static int wlan_initialize(int intf);
+static int wlan_uninitialize(int intf);
+
#endif /* CONFIG_NET && CONFIG_NET_WLAN */
/****************************************************************************
@@ -278,10 +283,10 @@ static int wlan_rmmac(struct uip_driver_s *dev, FAR const uint8_t *mac);
static const const struct usbhost_id_s g_id =
{
USB_CLASS_VENDOR_SPEC, /* base */
- 0xff, /* subclass */
- 0xff, /* proto */
- 0x0bda, /* vid */
- 0x8189 /* pid */
+ 0xff, /* subclass */
+ 0xff, /* proto */
+ CONFIG_USB_WLAN_VID, /* vid */
+ CONFIG_USB_WLAN_PID /* pid */
};
/* This is the USB host wireless LAN class's registry entry */
@@ -738,12 +743,13 @@ static inline int usbhost_devinit(FAR struct usbhost_state_s *priv)
uvdbg("Register block driver\n");
usbhost_mkdevname(priv, devname);
+ ret = wlan_initialize(0);
// ret = register_blockdriver(devname, &g_bops, 0, priv);
}
/* Check if we successfully initialized. We now have to be concerned
* about asynchronous modification of crefs because the block
- * driver has been registerd.
+ * driver has been registered.
*/
if (ret == OK)
@@ -1131,6 +1137,10 @@ static int usbhost_disconnected(struct usbhost_class_s *class)
}
}
+ /* Unregister WLAN network interface */
+
+ wlan_uninitialize(0);
+
irqrestore(flags);
return OK;
}
@@ -1617,40 +1627,6 @@ static int wlan_rmmac(struct uip_driver_s *dev, FAR const uint8_t *mac)
}
#endif
-#endif /* CONFIG_NET && CONFIG_NET_WLAN */
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: usbhost_wlaninit
- *
- * Description:
- * Initialize the USB class driver. This function should be called
- * be platform-specific code in order to initialize and register support
- * for the USB host class device.
- *
- * Input Parameters:
- * None
- *
- * Returned Values:
- * On success this function will return zero (OK); A negated errno value
- * will be returned on failure.
- *
- ****************************************************************************/
-
-int usbhost_wlaninit(void)
-{
- /* Perform any one-time initialization of the class implementation */
-
- /* Advertise our availability to support (certain) devices */
-
- return usbhost_registerclass(&g_wlan);
-}
-
-#if defined(CONFIG_NET) && defined(CONFIG_NET_WLAN)
-
/****************************************************************************
* Function: wlan_initialize
*
@@ -1668,25 +1644,27 @@ int usbhost_wlaninit(void)
*
****************************************************************************/
-int wlan_initialize(int intf)
+static int wlan_initialize(int intf)
{
struct wlan_driver_s *priv;
/* Get the interface structure associated with this interface number. */
- DEBUGASSERT(inf < CONFIG_WLAN_NINTERFACES);
+ DEBUGASSERT(intf < CONFIG_WLAN_NINTERFACES);
priv = &g_wlan1[intf];
/* Check if a WLAN chip is recognized at its I/O base */
/* Attach the IRQ to the driver */
+#if 0 /* @TODO resolve this */
if (irq_attach(CONFIG_WLAN_IRQ, wlan_interrupt))
{
/* We could not attach the ISR to the the interrupt */
return -EAGAIN;
}
+#endif
/* Initialize the driver structure */
@@ -1718,19 +1696,99 @@ int wlan_initialize(int intf)
}
/****************************************************************************
+ * Function: wlan_initialize
+ *
+ * Description:
+ * Initialize the WLAN controller and driver
+ *
+ * Parameters:
+ * intf - In the case where there are multiple EMACs, this value
+ * identifies which EMAC is to be initialized.
+ *
+ * Returned Value:
+ * OK on success; Negated errno on failure.
+ *
+ * Assumptions:
+ *
+ ****************************************************************************/
+
+static int wlan_uninitialize(int intf)
+{
+ struct wlan_driver_s *priv;
+
+ /* Get the interface structure associated with this interface number. */
+
+ DEBUGASSERT(intf < CONFIG_WLAN_NINTERFACES);
+ priv = &g_wlan1[intf];
+
+ /* Check if a WLAN chip is recognized at its I/O base */
+
+ /* Detach the IRQ from the driver */
+
+// irq_detach(CONFIG_WLAN_IRQ); /* @TODO enable this code */
+
+ /* Unregister the device */
+
+// (void)netdev_unregister(&priv->wl_dev); /* @TODO implement this */
+
+ /* Uninitialize the driver structure */
+
+ memset(priv, 0, sizeof(struct wlan_driver_s));
+
+ return OK;
+}
+
+#endif /* CONFIG_NET && CONFIG_NET_WLAN */
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: usbhost_wlaninit
+ *
+ * Description:
+ * Initialize the USB class driver. This function should be called
+ * be platform-specific code in order to initialize and register support
+ * for the USB host class device.
+ *
+ * Input Parameters:
+ * None
+ *
+ * Returned Values:
+ * On success this function will return zero (OK); A negated errno value
+ * will be returned on failure.
+ *
+ ****************************************************************************/
+
+int usbhost_wlaninit(void)
+{
+ /* Perform any one-time initialization of the class implementation */
+
+ /* Advertise our availability to support (certain) devices */
+
+ return usbhost_registerclass(&g_wlan);
+}
+
+#if defined(CONFIG_NET) && defined(CONFIG_NET_WLAN)
+
+/****************************************************************************
* Name: up_netinitialize
*
* Description:
* Initialize the first network interface. If there are more than one
- * interface in the device, then device-specific logic will have to provide
- * this function to determine which, if any, WLAN controllers should
+ * interface in the chip, then board-specific logic will have to provide
+ * this function to determine which, if any, Ethernet controllers should
* be initialized.
*
****************************************************************************/
+#ifndef CONFIG_LPC17_ETHERNET
void up_netinitialize(void)
{
- (void)wlan_initialize(0);
+ /* stub */
}
+#endif
+
#endif /* CONFIG_NET && CONFIG_NET_WLAN */