From ed75882857639faaa26d47ff90aecee0b3213273 Mon Sep 17 00:00:00 2001 From: patacongo Date: Wed, 9 Mar 2011 12:59:00 +0000 Subject: RTL8187 driver update git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3356 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/configs/detron/nsh/defconfig | 28 +++-- nuttx/configs/detron/src/up_nsh.c | 7 ++ nuttx/configs/detron/wlan/defconfig | 11 +- nuttx/configs/olimex-lpc1766stk/wlan/defconfig | 11 +- nuttx/drivers/usbhost/usbhost_enumerate.c | 5 - nuttx/drivers/usbhost/usbhost_rtl8187.c | 148 +++++++++++++++++-------- 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 */ @@ -1717,20 +1695,100 @@ int wlan_initialize(int intf) return OK; } +/**************************************************************************** + * 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 */ -- cgit v1.2.3