[PATCH] libertas: split module into two (libertas.ko and usb8xxx.ko)
authorHolger Schurig <hs4233@mail.mn-solutions.de>
Fri, 25 May 2007 16:37:58 +0000 (12:37 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 11 Jun 2007 18:28:39 +0000 (14:28 -0400)
* add CONFIG_LIBERTAS to Kconfig
* remove global variable libertas_fw_name, the USB module might want to
    use a different default FW name than the CF module, so libertas_fw_name
    is now local to if_usb.c
* exported some symbols as GPL

Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/Kconfig
drivers/net/wireless/libertas/Makefile
drivers/net/wireless/libertas/cmd.c
drivers/net/wireless/libertas/decl.h
drivers/net/wireless/libertas/fw.c
drivers/net/wireless/libertas/if_usb.c
drivers/net/wireless/libertas/main.c
drivers/net/wireless/libertas/rx.c
drivers/net/wireless/libertas/tx.c

index e3f5bb0fe603cf66eab0dc6118bbd1d6a4e34e21..89514f3e06c8f474537683e3fd5ce4a01a90108f 100644 (file)
@@ -266,16 +266,22 @@ config IPW2200_DEBUG
 
          If you are not sure, say N here.
 
-config LIBERTAS_USB
-       tristate "Marvell Libertas 8388 802.11a/b/g cards"
-       depends on USB && WLAN_80211
+config LIBERTAS
+       tristate "Marvell 8xxx Libertas WLAN driver support"
+       depends on WLAN_80211
        select FW_LOADER
+       ---help---
+         A library for Marvell Libertas 8xxx devices.
+
+config LIBERTAS_USB
+       tristate "Marvell Libertas 8388 USB 802.11b/g cards"
+       depends on LIBERTAS && USB
        ---help---
          A driver for Marvell Libertas 8388 USB devices.
 
-config LIBERTAS_USB_DEBUG
-       bool "Enable full debugging output in the Libertas USB module."
-       depends on LIBERTAS_USB
+config LIBERTAS_DEBUG
+       bool "Enable full debugging output in the Libertas module."
+       depends on LIBERTAS
        ---help---
          Debugging support.
 
index 56a8ea1fbf041a6c24d8baea4efd298c089bb248..a1097f59fd4667241e3a2331de83b9ec06dbb41a 100644 (file)
@@ -1,4 +1,4 @@
-usb8xxx-objs := main.o fw.o wext.o \
+libertas-objs := main.o fw.o wext.o \
                rx.o tx.o cmd.o           \
                cmdresp.o scan.o          \
                join.o 11d.o              \
@@ -8,5 +8,5 @@ usb8xxx-objs := main.o fw.o wext.o \
 usb8xxx-objs += if_bootcmd.o
 usb8xxx-objs += if_usb.o
 
+obj-$(CONFIG_LIBERTAS)     += libertas.o
 obj-$(CONFIG_LIBERTAS_USB) += usb8xxx.o
-
index 899b115f4c14575b8f31b15108a4008bb80a73ef..c6e50195d65c5fe4c3b084a722aa3ef45478a602 100644 (file)
@@ -1459,6 +1459,7 @@ done:
        lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret);
        return ret;
 }
+EXPORT_SYMBOL_GPL(libertas_prepare_and_send_command);
 
 /**
  *  @brief This function allocates the command buffer and link
index 8b34336ff3db5a4fe2b310bb42da7601956f0db1..d6fcb339f5c24610643e699fbc2246b4928a8a94 100644 (file)
@@ -74,20 +74,16 @@ void libertas_mac_event_disconnected(wlan_private * priv);
 void libertas_send_iwevcustom_event(wlan_private * priv, s8 * str);
 
 /* fw.c */
-int libertas_init_fw(wlan_private * priv);
+int libertas_init_fw(wlan_private * priv, char *fw_name);
 
 /* main.c */
 struct chan_freq_power *libertas_get_region_cfp_table(u8 region, u8 band,
                                                             int *cfp_no);
-wlan_private *wlan_add_card(void *card);
-int libertas_activate_card(wlan_private *priv);
-int wlan_remove_card(wlan_private *priv);
-int wlan_add_mesh(wlan_private *priv);
-void wlan_remove_mesh(wlan_private *priv);
-
-/* preliminary here */
-int if_usb_register(void);
-void if_usb_unregister(void);
+wlan_private *libertas_add_card(void *card);
+int libertas_activate_card(wlan_private *priv, char *fw_name);
+int libertas_remove_card(wlan_private *priv);
+int libertas_add_mesh(wlan_private *priv);
+void libertas_remove_mesh(wlan_private *priv);
 
 
 #endif                         /* _WLAN_DECL_H_ */
index aa63a967635e13ebd35bb14f45033e46125c245c..08c914b62bae4a08f5994b0f832edc061d0e4165 100644 (file)
@@ -1,7 +1,6 @@
 /**
   * This file contains the initialization for FW and HW
   */
-#include <linux/moduleparam.h>
 #include <linux/firmware.h>
 
 #include "host.h"
@@ -11,9 +10,6 @@
 #include "wext.h"
 #include "if_usb.h"
 
-char *libertas_fw_name = NULL;
-module_param_named(fw_name, libertas_fw_name, charp, 0644);
-
 /**
  *  @brief This function checks the validity of Boot2/FW image.
  *
@@ -67,18 +63,18 @@ static int check_fwfile_format(u8 *data, u32 totlen)
  *  @param priv    A pointer to wlan_private structure
  *  @return       0 or -1
  */
-static int wlan_setup_station_hw(wlan_private * priv)
+static int wlan_setup_station_hw(wlan_private * priv, char *fw_name)
 {
        int ret = -1;
        wlan_adapter *adapter = priv->adapter;
 
        lbs_deb_enter(LBS_DEB_FW);
 
-       if ((ret = request_firmware(&priv->firmware, libertas_fw_name,
+       if ((ret = request_firmware(&priv->firmware, fw_name,
                                    priv->hotplug_device)) < 0) {
                lbs_pr_err("request_firmware() failed with %#x\n",
                       ret);
-               lbs_pr_err("firmware %s not found\n", libertas_fw_name);
+               lbs_pr_err("firmware %s not found\n", fw_name);
                goto done;
        }
 
@@ -247,7 +243,7 @@ static void wlan_init_adapter(wlan_private * priv)
 
 static void command_timer_fn(unsigned long data);
 
-int libertas_init_fw(wlan_private * priv)
+int libertas_init_fw(wlan_private * priv, char *fw_name)
 {
        int ret = -1;
        wlan_adapter *adapter = priv->adapter;
@@ -266,7 +262,7 @@ int libertas_init_fw(wlan_private * priv)
                        (unsigned long)priv);
 
        /* download fimrware etc. */
-       if ((ret = wlan_setup_station_hw(priv)) != 0) {
+       if ((ret = wlan_setup_station_hw(priv, fw_name)) != 0) {
                del_timer_sync(&adapter->command_timer);
                goto done;
        }
index 5b0e0f76f4045e349c82298e8da0581148d90ff3..ca5d01296a08179d6da33401a44ac504e14b0033 100644 (file)
@@ -2,6 +2,7 @@
   * This file contains functions used in USB interface module.
   */
 #include <linux/delay.h>
+#include <linux/moduleparam.h>
 #include <linux/firmware.h>
 #include <linux/netdevice.h>
 #include <linux/usb.h>
 #define MESSAGE_HEADER_LEN     4
 
 static const char usbdriver_name[] = "usb8xxx";
+static u8 *default_fw_name = "usb8388.bin";
+
+char *libertas_fw_name = NULL;
+module_param_named(fw_name, libertas_fw_name, charp, 0644);
+
 
 #define MAX_DEVS 5
 static struct net_device *libertas_devs[MAX_DEVS];
@@ -195,14 +201,14 @@ static int if_usb_probe(struct usb_interface *intf,
        }
 
 
-       /* At this point wlan_add_card() will be called.  Don't worry
+       /* At this point libertas_add_card() will be called.  Don't worry
         * about keeping pwlanpriv around since it will be set on our
         * usb device data in -> add() -> hw_register_dev() -> if_usb_register_dev.
         */
-       if (!(priv = wlan_add_card(usb_cardp)))
+       if (!(priv = libertas_add_card(usb_cardp)))
                goto dealloc;
 
-       if (wlan_add_mesh(priv))
+       if (libertas_add_mesh(priv))
                goto err_add_mesh;
 
        priv->hw_register_dev = if_usb_register_dev;
@@ -212,7 +218,7 @@ static int if_usb_probe(struct usb_interface *intf,
        priv->hw_get_int_status = if_usb_get_int_status;
        priv->hw_read_event_cause = if_usb_read_event_cause;
 
-       if (libertas_activate_card(priv))
+       if (libertas_activate_card(priv, libertas_fw_name))
                goto err_activate_card;
 
        if (libertas_found < MAX_DEVS) {
@@ -273,8 +279,8 @@ static void if_usb_disconnect(struct usb_interface *intf)
 
        /* card is removed and we can call wlan_remove_card */
        lbs_deb_usbd(&cardp->udev->dev, "call remove card\n");
-       wlan_remove_mesh(priv);
-       wlan_remove_card(priv);
+       libertas_remove_mesh(priv);
+       libertas_remove_card(priv);
 
        /* Unlink and free urb */
        if_usb_free(cardp);
@@ -964,33 +970,28 @@ static struct usb_driver if_usb_driver = {
        .resume = if_usb_resume,
 };
 
-/**
- *  @brief This function registers driver.
- *  @param add         pointer to add_card callback function
- *  @param remove      pointer to remove card callback function
- *  @param arg         pointer to call back function parameter
- *  @return            dummy success variable
- */
-int if_usb_register(void)
+static int if_usb_init_module(void)
 {
-       /*
-        * API registers the Marvell USB driver
-        * to the USB system
-        */
-       usb_register(&if_usb_driver);
+       int ret = 0;
 
-       /* Return success to wlan layer */
-       return 0;
+       lbs_deb_enter(LBS_DEB_MAIN);
+
+       if (libertas_fw_name == NULL) {
+               libertas_fw_name = default_fw_name;
+       }
+
+       ret = usb_register(&if_usb_driver);
+
+       lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret);
+       return ret;
 }
 
-/**
- *  @brief This function removes usb driver.
- *  @return            N/A
- */
-void if_usb_unregister(void)
+static void if_usb_exit_module(void)
 {
        int i;
 
+       lbs_deb_enter(LBS_DEB_MAIN);
+
        for (i = 0; i<libertas_found; i++) {
                wlan_private *priv = libertas_devs[i]->priv;
                reset_device(priv);
@@ -998,4 +999,13 @@ void if_usb_unregister(void)
 
        /* API unregisters the driver from USB subsystem */
        usb_deregister(&if_usb_driver);
+
+       lbs_deb_leave(LBS_DEB_MAIN);
 }
+
+module_init(if_usb_init_module);
+module_exit(if_usb_exit_module);
+
+MODULE_DESCRIPTION("8388 USB WLAN Driver");
+MODULE_AUTHOR("Marvell International Ltd.");
+MODULE_LICENSE("GPL");
index c9d155ce98a06d2509a84ca84ef1361e2c371d2d..8c1f0e1e890c65c9efd609bf65a7d31b746c1c7f 100644 (file)
@@ -32,7 +32,7 @@ const char libertas_driver_version[] = "COMM-USB8388-" DRIVER_RELEASE_VERSION
 /* Module parameters */
 unsigned int libertas_debug = 0;
 module_param(libertas_debug, int, 0644);
-
+EXPORT_SYMBOL_GPL(libertas_debug);
 
 
 #define WLAN_TX_PWR_DEFAULT            20      /*100mW */
@@ -173,8 +173,6 @@ u8 libertas_adhoc_rates_b[4] = { 0x82, 0x84, 0x8b, 0x96 };
 u16 libertas_region_code_to_index[MRVDRV_MAX_REGION_CODE] =
     { 0x10, 0x20, 0x30, 0x31, 0x32, 0x40 };
 
-static u8 *default_fw_name = "usb8388.bin";
-
 /**
  * Attributes exported through sysfs
  */
@@ -766,7 +764,7 @@ static int wlan_service_main_thread(void *data)
  *  @param card    A pointer to card
  *  @return       A pointer to wlan_private structure
  */
-wlan_private *wlan_add_card(void *card)
+wlan_private *libertas_add_card(void *card)
 {
        struct net_device *dev = NULL;
        wlan_private *priv = NULL;
@@ -826,8 +824,9 @@ done:
        lbs_deb_leave_args(LBS_DEB_NET, "priv %p", priv);
        return priv;
 }
+EXPORT_SYMBOL_GPL(libertas_add_card);
 
-int libertas_activate_card(wlan_private *priv)
+int libertas_activate_card(wlan_private *priv, char *fw_name)
 {
        struct net_device *dev = priv->wlan_dev.netdev;
        int ret = -1;
@@ -854,7 +853,7 @@ int libertas_activate_card(wlan_private *priv)
        }
 
        /* init FW and HW */
-       if (libertas_init_fw(priv)) {
+       if (fw_name && libertas_init_fw(priv, fw_name)) {
                lbs_pr_err("firmware init failed\n");
                goto err_registerdev;
        }
@@ -884,6 +883,8 @@ done:
        lbs_deb_leave_args(LBS_DEB_NET, "ret %d", ret);
        return ret;
 }
+EXPORT_SYMBOL_GPL(libertas_activate_card);
+
 
 /**
  * @brief This function adds mshX interface
@@ -891,7 +892,7 @@ done:
  *  @param priv    A pointer to the wlan_private structure
  *  @return       0 if successful, -X otherwise
  */
-int wlan_add_mesh(wlan_private *priv)
+int libertas_add_mesh(wlan_private *priv)
 {
        struct net_device *mesh_dev = NULL;
        int ret = 0;
@@ -949,6 +950,7 @@ done:
        lbs_deb_leave_args(LBS_DEB_MESH, "ret %d", ret);
        return ret;
 }
+EXPORT_SYMBOL_GPL(libertas_add_mesh);
 
 static void wake_pending_cmdnodes(wlan_private *priv)
 {
@@ -966,7 +968,7 @@ static void wake_pending_cmdnodes(wlan_private *priv)
 }
 
 
-int wlan_remove_card(wlan_private *priv)
+int libertas_remove_card(wlan_private *priv)
 {
        wlan_adapter *adapter;
        struct net_device *dev;
@@ -1022,8 +1024,10 @@ out:
        lbs_deb_leave(LBS_DEB_NET);
        return 0;
 }
+EXPORT_SYMBOL_GPL(libertas_remove_card);
 
-void wlan_remove_mesh(wlan_private *priv)
+
+void libertas_remove_mesh(wlan_private *priv)
 {
        struct net_device *mesh_dev;
 
@@ -1046,6 +1050,7 @@ void wlan_remove_mesh(wlan_private *priv)
 out:
        lbs_deb_leave(LBS_DEB_NET);
 }
+EXPORT_SYMBOL_GPL(libertas_remove_mesh);
 
 /**
  *  @brief This function finds the CFP in
@@ -1141,41 +1146,28 @@ void libertas_interrupt(struct net_device *dev)
 
        lbs_deb_leave(LBS_DEB_THREAD);
 }
+EXPORT_SYMBOL_GPL(libertas_interrupt);
 
-static int wlan_init_module(void)
+static int libertas_init_module(void)
 {
-       int ret = 0;
-
        lbs_deb_enter(LBS_DEB_MAIN);
-
-       if (libertas_fw_name == NULL) {
-               libertas_fw_name = default_fw_name;
-       }
-
        libertas_debugfs_init();
-
-       if (if_usb_register()) {
-               ret = -1;
-               libertas_debugfs_remove();
-       }
-
-       lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret);
-       return ret;
+       lbs_deb_leave(LBS_DEB_MAIN);
+       return 0;
 }
 
-static void wlan_cleanup_module(void)
+static void libertas_exit_module(void)
 {
        lbs_deb_enter(LBS_DEB_MAIN);
 
-       if_usb_unregister();
        libertas_debugfs_remove();
 
        lbs_deb_leave(LBS_DEB_MAIN);
 }
 
-module_init(wlan_init_module);
-module_exit(wlan_cleanup_module);
+module_init(libertas_init_module);
+module_exit(libertas_exit_module);
 
-MODULE_DESCRIPTION("M-WLAN Driver");
+MODULE_DESCRIPTION("Libertas WLAN Driver Library");
 MODULE_AUTHOR("Marvell International Ltd.");
 MODULE_LICENSE("GPL");
index a0779dc78285ad504393caf0daa4acbefe0a844f..0b7854d797c4dd13e938aafacdd7289060ab870d 100644 (file)
@@ -277,6 +277,7 @@ done:
        lbs_deb_leave_args(LBS_DEB_RX, "ret %d", ret);
        return ret;
 }
+EXPORT_SYMBOL_GPL(libertas_process_rxed_packet);
 
 /**
  *  @brief This function converts Tx/Rx rates from the Marvell WLAN format
index 1993e8e79c454a691ea61e8adf1a2db3627a7d7f..138668ea9cf6cd56daefa77a3c7d266f9450a8c3 100644 (file)
@@ -287,3 +287,4 @@ void libertas_send_tx_feedback(wlan_private * priv)
                netif_wake_queue(priv->mesh_dev);
        }
 }
+EXPORT_SYMBOL_GPL(libertas_send_tx_feedback);