[PATCH] libertas: split module into two (libertas.ko and usb8xxx.ko)
Dan Williams
dcbw at redhat.com
Sat Mar 17 00:56:30 EDT 2007
On Sat, 2007-02-24 at 16:58 +0100, Holger Schurig wrote:
> * 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
Applied.
> Signed-off-by: Holger Schurig <hs4233 at mail.mn-solutions.de>
> ---
> drivers/net/wireless/Kconfig | 13 ++++++--
> drivers/net/wireless/libertas/Makefile | 4 +-
> drivers/net/wireless/libertas/cmd.c | 1 +
> drivers/net/wireless/libertas/decl.h | 8 +----
> drivers/net/wireless/libertas/fw.c | 14 +++-----
> drivers/net/wireless/libertas/if_usb.c | 52 +++++++++++++++++++-------------
> drivers/net/wireless/libertas/main.c | 44 +++++++++++----------------
> drivers/net/wireless/libertas/rx.c | 1 +
> drivers/net/wireless/libertas/tx.c | 1 +
> 9 files changed, 71 insertions(+), 67 deletions(-)
>
> diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig
> index cee3297..1146f3d 100644
> --- a/drivers/net/wireless/Kconfig
> +++ b/drivers/net/wireless/Kconfig
> @@ -280,16 +280,23 @@ config IPW2200_DEBUG
>
> If you are not sure, say N here.
>
> +config LIBERTAS
> + tristate "Marvell 8xxx Libertas WLAN driver support"
> + depends on NET_RADIO
> + select FW_LOADER
> + ---help---
> + A library for Marvell Libertas 8xxx devices.
> +
> config LIBERTAS_USB
> - tristate "Marvell Libertas 8388 802.11a/b/g cards"
> - depends on NET_RADIO && USB
> + tristate "Marvell Libertas 8388 USB 802.11b/g cards"
> + depends on LIBERTAS && USB
> select FW_LOADER
> ---help---
> A driver for Marvell Libertas 8388 USB devices.
>
> config LIBERTAS_DEBUG
> bool "Enable full debugging output in the Libertas module."
> - depends on LIBERTAS_USB
> + depends on LIBERTAS
> ---help---
> Debugging support.
>
> diff --git a/drivers/net/wireless/libertas/Makefile b/drivers/net/wireless/libertas/Makefile
> index a909e82..71c5a25 100644
> --- a/drivers/net/wireless/libertas/Makefile
> +++ b/drivers/net/wireless/libertas/Makefile
> @@ -1,6 +1,6 @@
> # EXTRA_CFLAGS += -Wpacked
>
> -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 \
> @@ -16,5 +16,5 @@ endif
> usb8xxx-objs += if_bootcmd.o
> usb8xxx-objs += if_usb.o
>
> +obj-$(CONFIG_LIBERTAS) += libertas.o
> obj-$(CONFIG_LIBERTAS_USB) += usb8xxx.o
> -
> diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c
> index ac9a982..32904a4 100644
> --- a/drivers/net/wireless/libertas/cmd.c
> +++ b/drivers/net/wireless/libertas/cmd.c
> @@ -1458,6 +1458,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
> diff --git a/drivers/net/wireless/libertas/decl.h b/drivers/net/wireless/libertas/decl.h
> index efb50a2..9c79054 100644
> --- a/drivers/net/wireless/libertas/decl.h
> +++ b/drivers/net/wireless/libertas/decl.h
> @@ -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 *libertas_add_card(void *card);
> -int libertas_activate_card(wlan_private *priv);
> +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);
>
> -/* preliminary here */
> -int if_usb_register(void);
> -void if_usb_unregister(void);
> -
>
> #endif /* _WLAN_DECL_H_ */
> diff --git a/drivers/net/wireless/libertas/fw.c b/drivers/net/wireless/libertas/fw.c
> index 04c2d47..2635ab5 100644
> --- a/drivers/net/wireless/libertas/fw.c
> +++ b/drivers/net/wireless/libertas/fw.c
> @@ -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;
> }
>
> @@ -250,7 +246,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;
> @@ -269,7 +265,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;
> }
> diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c
> index 7c23689..d19b390 100644
> --- a/drivers/net/wireless/libertas/if_usb.c
> +++ b/drivers/net/wireless/libertas/if_usb.c
> @@ -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>
> @@ -15,6 +16,11 @@
> #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];
> @@ -207,7 +213,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 dealloc;
>
> if (libertas_found < MAX_DEVS) {
> @@ -953,33 +959,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);
> @@ -987,4 +988,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");
> diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
> index 5ade47e..6913280 100644
> --- a/drivers/net/wireless/libertas/main.c
> +++ b/drivers/net/wireless/libertas/main.c
> @@ -25,7 +25,7 @@
> /* 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 */
> @@ -166,8 +166,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
> */
> @@ -813,6 +811,7 @@ done:
> lbs_deb_leave_args(LBS_DEB_NET, "priv %p", priv);
> return priv;
> }
> +EXPORT_SYMBOL_GPL(libertas_add_card);
>
> /**
> * @brief This function starts the thread and other logic
> @@ -826,7 +825,7 @@ done:
> * @param card A pointer to card
> * @return 0 if successful, -X otherwise
> */
> -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;
> @@ -853,7 +852,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;
> }
> @@ -883,6 +882,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
> @@ -942,6 +943,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)
> {
> @@ -1017,6 +1019,8 @@ out:
> lbs_deb_leave(LBS_DEB_NET);
> return 0;
> }
> +EXPORT_SYMBOL_GPL(libertas_remove_card);
> +
>
> void libertas_remove_mesh(wlan_private *priv)
> {
> @@ -1041,6 +1045,7 @@ void libertas_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
> @@ -1135,41 +1140,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");
> diff --git a/drivers/net/wireless/libertas/rx.c b/drivers/net/wireless/libertas/rx.c
> index 6a8823f..ca16411 100644
> --- a/drivers/net/wireless/libertas/rx.c
> +++ b/drivers/net/wireless/libertas/rx.c
> @@ -283,6 +283,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
> diff --git a/drivers/net/wireless/libertas/tx.c b/drivers/net/wireless/libertas/tx.c
> index 106fb76..89bf76c 100644
> --- a/drivers/net/wireless/libertas/tx.c
> +++ b/drivers/net/wireless/libertas/tx.c
> @@ -281,3 +281,4 @@ void libertas_send_tx_feedback(wlan_private * priv)
> if (priv->adapter->connect_status == libertas_connected)
> netif_wake_queue(priv->wlan_dev.netdev);
> }
> +EXPORT_SYMBOL_GPL(libertas_send_tx_feedback);
More information about the libertas-dev
mailing list