Skip to content

Commit

Permalink
[PATCH] libertas: split module into two (libertas.ko and usb8xxx.ko)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
Holger Schurig authored and John W. Linville committed Jun 11, 2007
1 parent ed45703 commit 084708b
Show file tree
Hide file tree
Showing 9 changed files with 86 additions and 83 deletions.
18 changes: 12 additions & 6 deletions drivers/net/wireless/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
4 changes: 2 additions & 2 deletions drivers/net/wireless/libertas/Makefile
Original file line number Diff line number Diff line change
@@ -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 \
Expand All @@ -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

1 change: 1 addition & 0 deletions drivers/net/wireless/libertas/cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1459,6 +1459,7 @@ int libertas_prepare_and_send_command(wlan_private * priv,
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
Expand Down
16 changes: 6 additions & 10 deletions drivers/net/wireless/libertas/decl.h
Original file line number Diff line number Diff line change
Expand Up @@ -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_ */
14 changes: 5 additions & 9 deletions drivers/net/wireless/libertas/fw.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
/**
* This file contains the initialization for FW and HW
*/
#include <linux/moduleparam.h>
#include <linux/firmware.h>

#include "host.h"
Expand All @@ -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.
*
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
Expand All @@ -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;
}
Expand Down
62 changes: 36 additions & 26 deletions drivers/net/wireless/libertas/if_usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -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];
Expand Down Expand Up @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -964,38 +970,42 @@ 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);
}

/* 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");
Loading

0 comments on commit 084708b

Please sign in to comment.