Staging: wlan-ng: Consolidate wlan-ng into a single module.
authorSolomon Peachy <pizza@shaftnet.org>
Wed, 29 Oct 2008 14:42:59 +0000 (10:42 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 6 Jan 2009 21:51:57 +0000 (13:51 -0800)
There's no point in having a separate 'p80211' module, as nobody else is
ever going to use it.  Push everyting into a single module, and get rid
of all exports.

Signed-off-by: Solomon Peachy <pizza@shaftnet.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/wlan-ng/Makefile
drivers/staging/wlan-ng/p80211conv.c
drivers/staging/wlan-ng/p80211mod.c [deleted file]
drivers/staging/wlan-ng/p80211netdev.c
drivers/staging/wlan-ng/prism2_usb.c [deleted file]
drivers/staging/wlan-ng/prism2sta.c
drivers/staging/wlan-ng/prism2usb.c [new file with mode: 0644]

index 777b5111b3d0dc700dd10745f0eacebdf17eef44..5edac5c8d4eeb0b103d3e8bbe8065d4a94b83fcf 100644 (file)
@@ -1,7 +1,6 @@
 obj-$(CONFIG_PRISM2_USB) += prism2_usb.o
-obj-$(CONFIG_PRISM2_USB) += p80211.o
 
-p80211-objs := p80211mod.o \
+prism2_usb-objs := prism2usb.o \
                p80211conv.o \
                p80211req.o \
                p80211wep.o \
index 8996e52b51c23c1c2b2b400732c98c3d98e8ced6..e7cc89f8e7a8f6dec97b02f27c1ab0eb3365eaed 100644 (file)
@@ -52,9 +52,6 @@
 /*================================================================*/
 /* System Includes */
 
-#define __NO_VERSION__         /* prevent the static definition */
-
-
 #include <linux/version.h>
 
 #include <linux/module.h>
diff --git a/drivers/staging/wlan-ng/p80211mod.c b/drivers/staging/wlan-ng/p80211mod.c
deleted file mode 100644 (file)
index 80354e3..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/* src/p80211/p80211mod.c
-*
-* Module entry and exit for p80211
-*
-* Copyright (C) 1999 AbsoluteValue Systems, Inc.  All Rights Reserved.
-* --------------------------------------------------------------------
-*
-* linux-wlan
-*
-*   The contents of this file are subject to the Mozilla Public
-*   License Version 1.1 (the "License"); you may not use this file
-*   except in compliance with the License. You may obtain a copy of
-*   the License at http://www.mozilla.org/MPL/
-*
-*   Software distributed under the License is distributed on an "AS
-*   IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-*   implied. See the License for the specific language governing
-*   rights and limitations under the License.
-*
-*   Alternatively, the contents of this file may be used under the
-*   terms of the GNU Public License version 2 (the "GPL"), in which
-*   case the provisions of the GPL are applicable instead of the
-*   above.  If you wish to allow the use of your version of this file
-*   only under the terms of the GPL and not to allow others to use
-*   your version of this file under the MPL, indicate your decision
-*   by deleting the provisions above and replace them with the notice
-*   and other provisions required by the GPL.  If you do not delete
-*   the provisions above, a recipient may use your version of this
-*   file under either the MPL or the GPL.
-*
-* --------------------------------------------------------------------
-*
-* Inquiries regarding the linux-wlan Open Source project can be
-* made directly to:
-*
-* AbsoluteValue Systems Inc.
-* info@linux-wlan.com
-* http://www.linux-wlan.com
-*
-* --------------------------------------------------------------------
-*
-* Portions of the development of this software were funded by
-* Intersil Corporation as part of PRISM(R) chipset product development.
-*
-* --------------------------------------------------------------------
-*
-* This file contains the p80211.o entry and exit points defined for linux
-* kernel modules.
-*
-* Notes:
-* - all module parameters for  p80211.o should be defined here.
-*
-* --------------------------------------------------------------------
-*/
-
-/*================================================================*/
-/* System Includes */
-
-
-#include <linux/version.h>
-
-#include <linux/module.h>
-#include <linux/moduleparam.h>
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/types.h>
-#include <linux/wireless.h>
-#include <linux/netdevice.h>
-
-#include "wlan_compat.h"
-
-/*================================================================*/
-/* Project Includes */
-
-#include "p80211types.h"
-#include "p80211hdr.h"
-#include "p80211mgmt.h"
-#include "p80211conv.h"
-#include "p80211msg.h"
-#include "p80211netdev.h"
-#include "p80211req.h"
-
-/*================================================================*/
-/* Local Constants */
-
-
-/*================================================================*/
-/* Local Macros */
-
-
-/*================================================================*/
-/* Local Types */
-
-
-/*================================================================*/
-/* Local Static Definitions */
-
-/*----------------------------------------------------------------*/
-/* --Module Parameters */
-
-int wlan_watchdog = 5000;
-module_param(wlan_watchdog, int, 0644);
-MODULE_PARM_DESC(wlan_watchdog, "transmit timeout in milliseconds");
-
-int wlan_wext_write = 1;
-module_param(wlan_wext_write, int, 0644);
-MODULE_PARM_DESC(wlan_wext_write, "enable write wireless extensions");
-
-#ifdef WLAN_INCLUDE_DEBUG
-int wlan_debug=0;
-module_param(wlan_debug, int, 0644);
-MODULE_PARM_DESC(wlan_debug, "p80211 debug level");
-#endif
-
-MODULE_LICENSE("Dual MPL/GPL");
-
-/*================================================================*/
-/* Local Function Declarations */
-
-int    init_module(void);
-void   cleanup_module(void);
-
-/*================================================================*/
-/* Function Definitions */
-
-/*----------------------------------------------------------------
-* init_module
-*
-* Module initialization routine, called once at module load time.
-*
-* Arguments:
-*      none
-*
-* Returns:
-*      0       - success
-*      ~0      - failure, module is unloaded.
-*
-* Side effects:
-*      TODO: define
-*
-* Call context:
-*      process thread (insmod or modprobe)
-----------------------------------------------------------------*/
-int init_module(void)
-{
-        DBFENTER;
-
-       p80211netdev_startup();
-
-        DBFEXIT;
-        return 0;
-}
-
-
-/*----------------------------------------------------------------
-* cleanup_module
-*
-* Called at module unload time.  This is our last chance to
-* clean up after ourselves.
-*
-* Arguments:
-*      none
-*
-* Returns:
-*      nothing
-*
-* Side effects:
-*      TODO: define
-*
-* Call context:
-*      process thread
-*
-----------------------------------------------------------------*/
-void cleanup_module(void)
-{
-        DBFENTER;
-
-       p80211netdev_shutdown();
-
-        DBFEXIT;
-        return;
-}
-
-EXPORT_SYMBOL(p80211netdev_hwremoved);
-EXPORT_SYMBOL(register_wlandev);
-EXPORT_SYMBOL(p80211netdev_rx);
-EXPORT_SYMBOL(unregister_wlandev);
-EXPORT_SYMBOL(wlan_setup);
-EXPORT_SYMBOL(wlan_unsetup);
-
-EXPORT_SYMBOL(p80211skb_free);
-EXPORT_SYMBOL(p80211skb_rxmeta_attach);
-
-EXPORT_SYMBOL(p80211wext_event_associated);
index c050c56805ecf1d2ee026e39339a2af2b39e61e8..41b62a3fe5454def9c028a73c4d5d1df703b65bb 100644 (file)
 /*================================================================*/
 /* Local Types */
 
-/*================================================================*/
-/* Local Static Definitions */
-
-#define __NO_VERSION__         /* prevent the static definition */
-
 /*================================================================*/
 /* Local Function Declarations */
 
@@ -130,48 +125,22 @@ static int p80211knetdev_set_mac_address(netdevice_t *dev, void *addr);
 static void p80211knetdev_tx_timeout(netdevice_t *netdev);
 static int p80211_rx_typedrop( wlandevice_t *wlandev, u16 fc);
 
+int wlan_watchdog = 5000;
+module_param(wlan_watchdog, int, 0644);
+MODULE_PARM_DESC(wlan_watchdog, "transmit timeout in milliseconds");
 
-/*================================================================*/
-/* Function Definitions */
+int wlan_wext_write = 1;
+module_param(wlan_wext_write, int, 0644);
+MODULE_PARM_DESC(wlan_wext_write, "enable write wireless extensions");
 
-/*----------------------------------------------------------------
-* p80211knetdev_startup
-*
-* Initialize the wlandevice/netdevice part of 802.11 services at
-* load time.
-*
-* Arguments:
-*      none
-*
-* Returns:
-*      nothing
-----------------------------------------------------------------*/
-void p80211netdev_startup(void)
-{
-       DBFENTER;
-
-       DBFEXIT;
-       return;
-}
+#ifdef WLAN_INCLUDE_DEBUG
+int wlan_debug=0;
+module_param(wlan_debug, int, 0644);
+MODULE_PARM_DESC(wlan_debug, "p80211 debug level");
+#endif
 
-/*----------------------------------------------------------------
-* p80211knetdev_shutdown
-*
-* Shutdown the wlandevice/netdevice part of 802.11 services at
-* unload time.
-*
-* Arguments:
-*      none
-*
-* Returns:
-*      nothing
-----------------------------------------------------------------*/
-void
-p80211netdev_shutdown(void)
-{
-       DBFENTER;
-       DBFEXIT;
-}
+/*================================================================*/
+/* Function Definitions */
 
 /*----------------------------------------------------------------
 * p80211knetdev_init
diff --git a/drivers/staging/wlan-ng/prism2_usb.c b/drivers/staging/wlan-ng/prism2_usb.c
deleted file mode 100644 (file)
index 8d4959f..0000000
+++ /dev/null
@@ -1,298 +0,0 @@
-#include "hfa384x_usb.c"
-#include "prism2mgmt.c"
-#include "prism2mib.c"
-#include "prism2sta.c"
-
-#define PRISM_USB_DEVICE(vid, pid, name) \
-           USB_DEVICE(vid, pid),  \
-           .driver_info = (unsigned long) name
-
-static struct usb_device_id usb_prism_tbl[] = {
-       {PRISM_USB_DEVICE(0x04bb, 0x0922, "IOData AirPort WN-B11/USBS")},
-       {PRISM_USB_DEVICE(0x07aa, 0x0012, "Corega Wireless LAN USB Stick-11")},
-       {PRISM_USB_DEVICE(0x09aa, 0x3642, "Prism2.x 11Mbps WLAN USB Adapter")},
-       {PRISM_USB_DEVICE(0x1668, 0x0408, "Actiontec Prism2.5 11Mbps WLAN USB Adapter")},
-       {PRISM_USB_DEVICE(0x1668, 0x0421, "Actiontec Prism2.5 11Mbps WLAN USB Adapter")},
-       {PRISM_USB_DEVICE(0x1915, 0x2236, "Linksys WUSB11v3.0 11Mbps WLAN USB Adapter")},
-       {PRISM_USB_DEVICE(0x066b, 0x2212, "Linksys WUSB11v2.5 11Mbps WLAN USB Adapter")},
-       {PRISM_USB_DEVICE(0x066b, 0x2213, "Linksys WUSB12v1.1 11Mbps WLAN USB Adapter")},
-       {PRISM_USB_DEVICE(0x067c, 0x1022, "Siemens SpeedStream 1022 11Mbps WLAN USB Adapter")},
-       {PRISM_USB_DEVICE(0x049f, 0x0033, "Compaq/Intel W100 PRO/Wireless 11Mbps multiport WLAN Adapter")},
-       {PRISM_USB_DEVICE(0x0411, 0x0016, "Melco WLI-USB-S11 11Mbps WLAN Adapter")},
-       {PRISM_USB_DEVICE(0x08de, 0x7a01, "PRISM25 IEEE 802.11 Mini USB Adapter")},
-       {PRISM_USB_DEVICE(0x8086, 0x1111, "Intel PRO/Wireless 2011B LAN USB Adapter")},
-       {PRISM_USB_DEVICE(0x0d8e, 0x7a01, "PRISM25 IEEE 802.11 Mini USB Adapter")},
-       {PRISM_USB_DEVICE(0x045e, 0x006e, "Microsoft MN510 Wireless USB Adapter")},
-       {PRISM_USB_DEVICE(0x0967, 0x0204, "Acer Warplink USB Adapter")},
-       {PRISM_USB_DEVICE(0x0cde, 0x0002, "Z-Com 725/726 Prism2.5 USB/USB Integrated")},
-       {PRISM_USB_DEVICE(0x0cde, 0x0005, "Z-Com Xl735 Wireless 802.11b USB Adapter")},
-       {PRISM_USB_DEVICE(0x413c, 0x8100, "Dell TrueMobile 1180 Wireless USB Adapter")},
-       {PRISM_USB_DEVICE(0x0b3b, 0x1601, "ALLNET 0193 11Mbps WLAN USB Adapter")},
-       {PRISM_USB_DEVICE(0x0b3b, 0x1602, "ZyXEL ZyAIR B200 Wireless USB Adapter")},
-       {PRISM_USB_DEVICE(0x0baf, 0x00eb, "USRobotics USR1120 Wireless USB Adapter")},
-       {PRISM_USB_DEVICE(0x0411, 0x0027, "Melco WLI-USB-KS11G 11Mbps WLAN Adapter")},
-        {PRISM_USB_DEVICE(0x04f1, 0x3009, "JVC MP-XP7250 Builtin USB WLAN Adapter")},
-       {PRISM_USB_DEVICE(0x0846, 0x4110, "NetGear MA111")},
-        {PRISM_USB_DEVICE(0x03f3, 0x0020, "Adaptec AWN-8020 USB WLAN Adapter")},
-//     {PRISM_USB_DEVICE(0x0ace, 0x1201, "ZyDAS ZD1201 Wireless USB Adapter")},
-       {PRISM_USB_DEVICE(0x2821, 0x3300, "ASUS-WL140 Wireless USB Adapter")},
-       {PRISM_USB_DEVICE(0x2001, 0x3700, "DWL-122 Wireless USB Adapter")},
-       {PRISM_USB_DEVICE(0x2001, 0x3702, "DWL-120 Rev F Wireless USB Adapter")},
-       {PRISM_USB_DEVICE(0x50c2, 0x4013, "Averatec USB WLAN Adapter")},
-       {PRISM_USB_DEVICE(0x2c02, 0x14ea, "Planex GW-US11H WLAN USB Adapter")},
-       {PRISM_USB_DEVICE(0x124a, 0x168b, "Airvast PRISM3 WLAN USB Adapter")},
-       {PRISM_USB_DEVICE(0x083a, 0x3503, "T-Sinus 111 USB WLAN Adapter")},
-       {PRISM_USB_DEVICE(0x2821, 0x3300, "Hawking HighDB USB Adapter")},
-       {PRISM_USB_DEVICE(0x0411, 0x0044, "Melco WLI-USB-KB11 11Mbps WLAN Adapter")},
-       {PRISM_USB_DEVICE(0x1668, 0x6106, "ROPEX FreeLan 802.11b USB Adapter")},
-       {PRISM_USB_DEVICE(0x124a, 0x4017, "Pheenet WL-503IA 802.11b USB Adapter")},
-       {PRISM_USB_DEVICE(0x0bb2, 0x0302, "Ambit Microsystems Corp.")},
-       {PRISM_USB_DEVICE(0x9016, 0x182d, "Sitecom WL-022 802.11b USB Adapter")},
-       {PRISM_USB_DEVICE(0x0543, 0x0f01, "ViewSonic Airsync USB Adapter 11Mbps (Prism2.5)")},
-       { /* terminator */ }
-};
-
-MODULE_DEVICE_TABLE(usb, usb_prism_tbl);
-
-/*----------------------------------------------------------------
-* prism2sta_probe_usb
-*
-* Probe routine called by the USB subsystem.
-*
-* Arguments:
-*      dev             ptr to the usb_device struct
-*      ifnum           interface number being offered
-*
-* Returns:
-*      NULL            - we're not claiming the device+interface
-*      non-NULL        - we are claiming the device+interface and
-*                        this is a ptr to the data we want back
-*                        when disconnect is called.
-*
-* Side effects:
-*
-* Call context:
-*      I'm not sure, assume it's interrupt.
-*
-----------------------------------------------------------------*/
-static int prism2sta_probe_usb(
-       struct usb_interface *interface,
-       const struct usb_device_id *id)
-{
-       struct usb_device *dev;
-
-       wlandevice_t    *wlandev = NULL;
-       hfa384x_t       *hw = NULL;
-       int              result = 0;
-
-       DBFENTER;
-
-       dev = interface_to_usbdev(interface);
-
-       if ((wlandev = create_wlan()) == NULL) {
-               WLAN_LOG_ERROR("%s: Memory allocation failure.\n", dev_info);
-               result = -EIO;
-               goto failed;
-       }
-       hw = wlandev->priv;
-
-       if ( wlan_setup(wlandev) != 0 ) {
-               WLAN_LOG_ERROR("%s: wlan_setup() failed.\n", dev_info);
-               result = -EIO;
-               goto failed;
-       }
-
-       /* Initialize the hw data */
-       hfa384x_create(hw, dev);
-       hw->wlandev = wlandev;
-
-       /* Register the wlandev, this gets us a name and registers the
-        * linux netdevice.
-        */
-       SET_NETDEV_DEV(wlandev->netdev, &(interface->dev));
-        if ( register_wlandev(wlandev) != 0 ) {
-               WLAN_LOG_ERROR("%s: register_wlandev() failed.\n", dev_info);
-               result = -EIO;
-               goto failed;
-        }
-
-       /* Do a chip-level reset on the MAC */
-       if (prism2_doreset) {
-               result = hfa384x_corereset(hw,
-                               prism2_reset_holdtime,
-                               prism2_reset_settletime, 0);
-               if (result != 0) {
-                       unregister_wlandev(wlandev);
-                       hfa384x_destroy(hw);
-                       result = -EIO;
-                       WLAN_LOG_ERROR(
-                               "%s: hfa384x_corereset() failed.\n",
-                               dev_info);
-                       goto failed;
-               }
-       }
-
-       usb_get_dev(dev);
-
-       wlandev->msdstate = WLAN_MSD_HWPRESENT;
-
-       goto done;
-
- failed:
-       if (wlandev)    kfree(wlandev);
-       if (hw)         kfree(hw);
-       wlandev = NULL;
-
- done:
-       DBFEXIT;
-
-       usb_set_intfdata(interface, wlandev);
-       return result;
-}
-
-
-/*----------------------------------------------------------------
-* prism2sta_disconnect_usb
-*
-* Called when a device previously claimed by probe is removed
-* from the USB.
-*
-* Arguments:
-*      dev             ptr to the usb_device struct
-*      ptr             ptr returned by probe() when the device
-*                       was claimed.
-*
-* Returns:
-*      Nothing
-*
-* Side effects:
-*
-* Call context:
-*      process
-----------------------------------------------------------------*/
-static void
-prism2sta_disconnect_usb(struct usb_interface *interface)
-{
-       wlandevice_t            *wlandev;
-
-        DBFENTER;
-
-       wlandev = (wlandevice_t *) usb_get_intfdata(interface);
-
-       if ( wlandev != NULL ) {
-               LIST_HEAD(cleanlist);
-               struct list_head        *entry;
-               struct list_head        *temp;
-               unsigned long           flags;
-
-               hfa384x_t               *hw = wlandev->priv;
-
-               if (!hw)
-                       goto exit;
-
-               spin_lock_irqsave(&hw->ctlxq.lock, flags);
-
-               p80211netdev_hwremoved(wlandev);
-               list_splice_init(&hw->ctlxq.reapable, &cleanlist);
-               list_splice_init(&hw->ctlxq.completing, &cleanlist);
-               list_splice_init(&hw->ctlxq.pending, &cleanlist);
-               list_splice_init(&hw->ctlxq.active, &cleanlist);
-
-               spin_unlock_irqrestore(&hw->ctlxq.lock, flags);
-
-               /* There's no hardware to shutdown, but the driver
-                * might have some tasks or tasklets that must be
-                * stopped before we can tear everything down.
-                */
-               prism2sta_ifstate(wlandev, P80211ENUM_ifstate_disable);
-
-               del_singleshot_timer_sync(&hw->throttle);
-               del_singleshot_timer_sync(&hw->reqtimer);
-               del_singleshot_timer_sync(&hw->resptimer);
-
-               /* Unlink all the URBs. This "removes the wheels"
-                * from the entire CTLX handling mechanism.
-                */
-               usb_kill_urb(&hw->rx_urb);
-               usb_kill_urb(&hw->tx_urb);
-               usb_kill_urb(&hw->ctlx_urb);
-
-               tasklet_kill(&hw->completion_bh);
-               tasklet_kill(&hw->reaper_bh);
-
-               flush_scheduled_work();
-
-               /* Now we complete any outstanding commands
-                * and tell everyone who is waiting for their
-                * responses that we have shut down.
-                */
-               list_for_each(entry, &cleanlist) {
-                       hfa384x_usbctlx_t       *ctlx;
-
-                       ctlx = list_entry(entry, hfa384x_usbctlx_t, list);
-                       complete(&ctlx->done);
-               }
-
-               /* Give any outstanding synchronous commands
-                * a chance to complete. All they need to do
-                * is "wake up", so that's easy.
-                * (I'd like a better way to do this, really.)
-                */
-               msleep(100);
-
-               /* Now delete the CTLXs, because no-one else can now. */
-               list_for_each_safe(entry, temp, &cleanlist) {
-                       hfa384x_usbctlx_t *ctlx;
-
-                       ctlx = list_entry(entry, hfa384x_usbctlx_t, list);
-                       kfree(ctlx);
-               }
-
-               /* Unhook the wlandev */
-               unregister_wlandev(wlandev);
-               wlan_unsetup(wlandev);
-
-               usb_put_dev(hw->usb);
-
-               hfa384x_destroy(hw);
-               kfree(hw);
-
-               kfree(wlandev);
-       }
-
- exit:
-
-       usb_set_intfdata(interface, NULL);
-       DBFEXIT;
-}
-
-
-static struct usb_driver prism2_usb_driver = {
-       .name = "prism2_usb",
-       .probe = prism2sta_probe_usb,
-       .disconnect = prism2sta_disconnect_usb,
-       .id_table = usb_prism_tbl,
-       /* fops, minor? */
-};
-
-static int __init prism2usb_init(void)
-{
-        DBFENTER;
-
-       /* This call will result in calls to prism2sta_probe_usb. */
-       return usb_register(&prism2_usb_driver);
-
-       DBFEXIT;
-};
-
-static void __exit prism2usb_cleanup(void)
-{
-        DBFENTER;
-
-       usb_deregister(&prism2_usb_driver);
-
-       DBFEXIT;
-};
-
-module_init(prism2usb_init);
-module_exit(prism2usb_cleanup);
index 46a95b9e56bb4accc7d802c675ad80f7b17a7b7b..b279c97cbc025d8b1584c67577189c452d55fe95 100644 (file)
 /*================================================================*/
 /* Local Static Definitions */
 
-typedef char* dev_info_t;
-
-static dev_info_t      dev_info = "prism2_usb";
+static char *dev_info = "prism2_usb";
 
 static wlandevice_t *create_wlan(void);
 
diff --git a/drivers/staging/wlan-ng/prism2usb.c b/drivers/staging/wlan-ng/prism2usb.c
new file mode 100644 (file)
index 0000000..8d4959f
--- /dev/null
@@ -0,0 +1,298 @@
+#include "hfa384x_usb.c"
+#include "prism2mgmt.c"
+#include "prism2mib.c"
+#include "prism2sta.c"
+
+#define PRISM_USB_DEVICE(vid, pid, name) \
+           USB_DEVICE(vid, pid),  \
+           .driver_info = (unsigned long) name
+
+static struct usb_device_id usb_prism_tbl[] = {
+       {PRISM_USB_DEVICE(0x04bb, 0x0922, "IOData AirPort WN-B11/USBS")},
+       {PRISM_USB_DEVICE(0x07aa, 0x0012, "Corega Wireless LAN USB Stick-11")},
+       {PRISM_USB_DEVICE(0x09aa, 0x3642, "Prism2.x 11Mbps WLAN USB Adapter")},
+       {PRISM_USB_DEVICE(0x1668, 0x0408, "Actiontec Prism2.5 11Mbps WLAN USB Adapter")},
+       {PRISM_USB_DEVICE(0x1668, 0x0421, "Actiontec Prism2.5 11Mbps WLAN USB Adapter")},
+       {PRISM_USB_DEVICE(0x1915, 0x2236, "Linksys WUSB11v3.0 11Mbps WLAN USB Adapter")},
+       {PRISM_USB_DEVICE(0x066b, 0x2212, "Linksys WUSB11v2.5 11Mbps WLAN USB Adapter")},
+       {PRISM_USB_DEVICE(0x066b, 0x2213, "Linksys WUSB12v1.1 11Mbps WLAN USB Adapter")},
+       {PRISM_USB_DEVICE(0x067c, 0x1022, "Siemens SpeedStream 1022 11Mbps WLAN USB Adapter")},
+       {PRISM_USB_DEVICE(0x049f, 0x0033, "Compaq/Intel W100 PRO/Wireless 11Mbps multiport WLAN Adapter")},
+       {PRISM_USB_DEVICE(0x0411, 0x0016, "Melco WLI-USB-S11 11Mbps WLAN Adapter")},
+       {PRISM_USB_DEVICE(0x08de, 0x7a01, "PRISM25 IEEE 802.11 Mini USB Adapter")},
+       {PRISM_USB_DEVICE(0x8086, 0x1111, "Intel PRO/Wireless 2011B LAN USB Adapter")},
+       {PRISM_USB_DEVICE(0x0d8e, 0x7a01, "PRISM25 IEEE 802.11 Mini USB Adapter")},
+       {PRISM_USB_DEVICE(0x045e, 0x006e, "Microsoft MN510 Wireless USB Adapter")},
+       {PRISM_USB_DEVICE(0x0967, 0x0204, "Acer Warplink USB Adapter")},
+       {PRISM_USB_DEVICE(0x0cde, 0x0002, "Z-Com 725/726 Prism2.5 USB/USB Integrated")},
+       {PRISM_USB_DEVICE(0x0cde, 0x0005, "Z-Com Xl735 Wireless 802.11b USB Adapter")},
+       {PRISM_USB_DEVICE(0x413c, 0x8100, "Dell TrueMobile 1180 Wireless USB Adapter")},
+       {PRISM_USB_DEVICE(0x0b3b, 0x1601, "ALLNET 0193 11Mbps WLAN USB Adapter")},
+       {PRISM_USB_DEVICE(0x0b3b, 0x1602, "ZyXEL ZyAIR B200 Wireless USB Adapter")},
+       {PRISM_USB_DEVICE(0x0baf, 0x00eb, "USRobotics USR1120 Wireless USB Adapter")},
+       {PRISM_USB_DEVICE(0x0411, 0x0027, "Melco WLI-USB-KS11G 11Mbps WLAN Adapter")},
+        {PRISM_USB_DEVICE(0x04f1, 0x3009, "JVC MP-XP7250 Builtin USB WLAN Adapter")},
+       {PRISM_USB_DEVICE(0x0846, 0x4110, "NetGear MA111")},
+        {PRISM_USB_DEVICE(0x03f3, 0x0020, "Adaptec AWN-8020 USB WLAN Adapter")},
+//     {PRISM_USB_DEVICE(0x0ace, 0x1201, "ZyDAS ZD1201 Wireless USB Adapter")},
+       {PRISM_USB_DEVICE(0x2821, 0x3300, "ASUS-WL140 Wireless USB Adapter")},
+       {PRISM_USB_DEVICE(0x2001, 0x3700, "DWL-122 Wireless USB Adapter")},
+       {PRISM_USB_DEVICE(0x2001, 0x3702, "DWL-120 Rev F Wireless USB Adapter")},
+       {PRISM_USB_DEVICE(0x50c2, 0x4013, "Averatec USB WLAN Adapter")},
+       {PRISM_USB_DEVICE(0x2c02, 0x14ea, "Planex GW-US11H WLAN USB Adapter")},
+       {PRISM_USB_DEVICE(0x124a, 0x168b, "Airvast PRISM3 WLAN USB Adapter")},
+       {PRISM_USB_DEVICE(0x083a, 0x3503, "T-Sinus 111 USB WLAN Adapter")},
+       {PRISM_USB_DEVICE(0x2821, 0x3300, "Hawking HighDB USB Adapter")},
+       {PRISM_USB_DEVICE(0x0411, 0x0044, "Melco WLI-USB-KB11 11Mbps WLAN Adapter")},
+       {PRISM_USB_DEVICE(0x1668, 0x6106, "ROPEX FreeLan 802.11b USB Adapter")},
+       {PRISM_USB_DEVICE(0x124a, 0x4017, "Pheenet WL-503IA 802.11b USB Adapter")},
+       {PRISM_USB_DEVICE(0x0bb2, 0x0302, "Ambit Microsystems Corp.")},
+       {PRISM_USB_DEVICE(0x9016, 0x182d, "Sitecom WL-022 802.11b USB Adapter")},
+       {PRISM_USB_DEVICE(0x0543, 0x0f01, "ViewSonic Airsync USB Adapter 11Mbps (Prism2.5)")},
+       { /* terminator */ }
+};
+
+MODULE_DEVICE_TABLE(usb, usb_prism_tbl);
+
+/*----------------------------------------------------------------
+* prism2sta_probe_usb
+*
+* Probe routine called by the USB subsystem.
+*
+* Arguments:
+*      dev             ptr to the usb_device struct
+*      ifnum           interface number being offered
+*
+* Returns:
+*      NULL            - we're not claiming the device+interface
+*      non-NULL        - we are claiming the device+interface and
+*                        this is a ptr to the data we want back
+*                        when disconnect is called.
+*
+* Side effects:
+*
+* Call context:
+*      I'm not sure, assume it's interrupt.
+*
+----------------------------------------------------------------*/
+static int prism2sta_probe_usb(
+       struct usb_interface *interface,
+       const struct usb_device_id *id)
+{
+       struct usb_device *dev;
+
+       wlandevice_t    *wlandev = NULL;
+       hfa384x_t       *hw = NULL;
+       int              result = 0;
+
+       DBFENTER;
+
+       dev = interface_to_usbdev(interface);
+
+       if ((wlandev = create_wlan()) == NULL) {
+               WLAN_LOG_ERROR("%s: Memory allocation failure.\n", dev_info);
+               result = -EIO;
+               goto failed;
+       }
+       hw = wlandev->priv;
+
+       if ( wlan_setup(wlandev) != 0 ) {
+               WLAN_LOG_ERROR("%s: wlan_setup() failed.\n", dev_info);
+               result = -EIO;
+               goto failed;
+       }
+
+       /* Initialize the hw data */
+       hfa384x_create(hw, dev);
+       hw->wlandev = wlandev;
+
+       /* Register the wlandev, this gets us a name and registers the
+        * linux netdevice.
+        */
+       SET_NETDEV_DEV(wlandev->netdev, &(interface->dev));
+        if ( register_wlandev(wlandev) != 0 ) {
+               WLAN_LOG_ERROR("%s: register_wlandev() failed.\n", dev_info);
+               result = -EIO;
+               goto failed;
+        }
+
+       /* Do a chip-level reset on the MAC */
+       if (prism2_doreset) {
+               result = hfa384x_corereset(hw,
+                               prism2_reset_holdtime,
+                               prism2_reset_settletime, 0);
+               if (result != 0) {
+                       unregister_wlandev(wlandev);
+                       hfa384x_destroy(hw);
+                       result = -EIO;
+                       WLAN_LOG_ERROR(
+                               "%s: hfa384x_corereset() failed.\n",
+                               dev_info);
+                       goto failed;
+               }
+       }
+
+       usb_get_dev(dev);
+
+       wlandev->msdstate = WLAN_MSD_HWPRESENT;
+
+       goto done;
+
+ failed:
+       if (wlandev)    kfree(wlandev);
+       if (hw)         kfree(hw);
+       wlandev = NULL;
+
+ done:
+       DBFEXIT;
+
+       usb_set_intfdata(interface, wlandev);
+       return result;
+}
+
+
+/*----------------------------------------------------------------
+* prism2sta_disconnect_usb
+*
+* Called when a device previously claimed by probe is removed
+* from the USB.
+*
+* Arguments:
+*      dev             ptr to the usb_device struct
+*      ptr             ptr returned by probe() when the device
+*                       was claimed.
+*
+* Returns:
+*      Nothing
+*
+* Side effects:
+*
+* Call context:
+*      process
+----------------------------------------------------------------*/
+static void
+prism2sta_disconnect_usb(struct usb_interface *interface)
+{
+       wlandevice_t            *wlandev;
+
+        DBFENTER;
+
+       wlandev = (wlandevice_t *) usb_get_intfdata(interface);
+
+       if ( wlandev != NULL ) {
+               LIST_HEAD(cleanlist);
+               struct list_head        *entry;
+               struct list_head        *temp;
+               unsigned long           flags;
+
+               hfa384x_t               *hw = wlandev->priv;
+
+               if (!hw)
+                       goto exit;
+
+               spin_lock_irqsave(&hw->ctlxq.lock, flags);
+
+               p80211netdev_hwremoved(wlandev);
+               list_splice_init(&hw->ctlxq.reapable, &cleanlist);
+               list_splice_init(&hw->ctlxq.completing, &cleanlist);
+               list_splice_init(&hw->ctlxq.pending, &cleanlist);
+               list_splice_init(&hw->ctlxq.active, &cleanlist);
+
+               spin_unlock_irqrestore(&hw->ctlxq.lock, flags);
+
+               /* There's no hardware to shutdown, but the driver
+                * might have some tasks or tasklets that must be
+                * stopped before we can tear everything down.
+                */
+               prism2sta_ifstate(wlandev, P80211ENUM_ifstate_disable);
+
+               del_singleshot_timer_sync(&hw->throttle);
+               del_singleshot_timer_sync(&hw->reqtimer);
+               del_singleshot_timer_sync(&hw->resptimer);
+
+               /* Unlink all the URBs. This "removes the wheels"
+                * from the entire CTLX handling mechanism.
+                */
+               usb_kill_urb(&hw->rx_urb);
+               usb_kill_urb(&hw->tx_urb);
+               usb_kill_urb(&hw->ctlx_urb);
+
+               tasklet_kill(&hw->completion_bh);
+               tasklet_kill(&hw->reaper_bh);
+
+               flush_scheduled_work();
+
+               /* Now we complete any outstanding commands
+                * and tell everyone who is waiting for their
+                * responses that we have shut down.
+                */
+               list_for_each(entry, &cleanlist) {
+                       hfa384x_usbctlx_t       *ctlx;
+
+                       ctlx = list_entry(entry, hfa384x_usbctlx_t, list);
+                       complete(&ctlx->done);
+               }
+
+               /* Give any outstanding synchronous commands
+                * a chance to complete. All they need to do
+                * is "wake up", so that's easy.
+                * (I'd like a better way to do this, really.)
+                */
+               msleep(100);
+
+               /* Now delete the CTLXs, because no-one else can now. */
+               list_for_each_safe(entry, temp, &cleanlist) {
+                       hfa384x_usbctlx_t *ctlx;
+
+                       ctlx = list_entry(entry, hfa384x_usbctlx_t, list);
+                       kfree(ctlx);
+               }
+
+               /* Unhook the wlandev */
+               unregister_wlandev(wlandev);
+               wlan_unsetup(wlandev);
+
+               usb_put_dev(hw->usb);
+
+               hfa384x_destroy(hw);
+               kfree(hw);
+
+               kfree(wlandev);
+       }
+
+ exit:
+
+       usb_set_intfdata(interface, NULL);
+       DBFEXIT;
+}
+
+
+static struct usb_driver prism2_usb_driver = {
+       .name = "prism2_usb",
+       .probe = prism2sta_probe_usb,
+       .disconnect = prism2sta_disconnect_usb,
+       .id_table = usb_prism_tbl,
+       /* fops, minor? */
+};
+
+static int __init prism2usb_init(void)
+{
+        DBFENTER;
+
+       /* This call will result in calls to prism2sta_probe_usb. */
+       return usb_register(&prism2_usb_driver);
+
+       DBFEXIT;
+};
+
+static void __exit prism2usb_cleanup(void)
+{
+        DBFENTER;
+
+       usb_deregister(&prism2_usb_driver);
+
+       DBFEXIT;
+};
+
+module_init(prism2usb_init);
+module_exit(prism2usb_cleanup);
This page took 0.035074 seconds and 5 git commands to generate.