aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/b43/main.c')
-rw-r--r--drivers/net/wireless/b43/main.c43
1 files changed, 26 insertions, 17 deletions
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index 19b4eae47b59..c238468bca7f 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -67,7 +67,12 @@ MODULE_AUTHOR("Gábor Stefanik");
67MODULE_LICENSE("GPL"); 67MODULE_LICENSE("GPL");
68 68
69MODULE_FIRMWARE(B43_SUPPORTED_FIRMWARE_ID); 69MODULE_FIRMWARE(B43_SUPPORTED_FIRMWARE_ID);
70 70MODULE_FIRMWARE("b43/ucode11.fw");
71MODULE_FIRMWARE("b43/ucode13.fw");
72MODULE_FIRMWARE("b43/ucode14.fw");
73MODULE_FIRMWARE("b43/ucode15.fw");
74MODULE_FIRMWARE("b43/ucode5.fw");
75MODULE_FIRMWARE("b43/ucode9.fw");
71 76
72static int modparam_bad_frames_preempt; 77static int modparam_bad_frames_preempt;
73module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444); 78module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444);
@@ -102,6 +107,9 @@ int b43_modparam_verbose = B43_VERBOSITY_DEFAULT;
102module_param_named(verbose, b43_modparam_verbose, int, 0644); 107module_param_named(verbose, b43_modparam_verbose, int, 0644);
103MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug"); 108MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug");
104 109
110static int modparam_pio;
111module_param_named(pio, modparam_pio, int, 0444);
112MODULE_PARM_DESC(pio, "enable(1) / disable(0) PIO mode");
105 113
106static const struct ssb_device_id b43_ssb_tbl[] = { 114static const struct ssb_device_id b43_ssb_tbl[] = {
107 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5), 115 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5),
@@ -110,6 +118,7 @@ static const struct ssb_device_id b43_ssb_tbl[] = {
110 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 9), 118 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 9),
111 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 10), 119 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 10),
112 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 11), 120 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 11),
121 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 12),
113 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 13), 122 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 13),
114 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 15), 123 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 15),
115 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 16), 124 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 16),
@@ -1786,8 +1795,8 @@ static void b43_do_interrupt_thread(struct b43_wldev *dev)
1786 dma_reason[4], dma_reason[5]); 1795 dma_reason[4], dma_reason[5]);
1787 b43err(dev->wl, "This device does not support DMA " 1796 b43err(dev->wl, "This device does not support DMA "
1788 "on your system. Please use PIO instead.\n"); 1797 "on your system. Please use PIO instead.\n");
1789 b43err(dev->wl, "CONFIG_B43_FORCE_PIO must be set in " 1798 b43err(dev->wl, "Unload the b43 module and reload "
1790 "your kernel configuration.\n"); 1799 "with 'pio=1'\n");
1791 return; 1800 return;
1792 } 1801 }
1793 if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) { 1802 if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) {
@@ -4353,7 +4362,7 @@ static int b43_wireless_core_init(struct b43_wldev *dev)
4353 4362
4354 if ((dev->dev->bus->bustype == SSB_BUSTYPE_PCMCIA) || 4363 if ((dev->dev->bus->bustype == SSB_BUSTYPE_PCMCIA) ||
4355 (dev->dev->bus->bustype == SSB_BUSTYPE_SDIO) || 4364 (dev->dev->bus->bustype == SSB_BUSTYPE_SDIO) ||
4356 B43_FORCE_PIO) { 4365 modparam_pio) {
4357 dev->__using_pio_transfers = 1; 4366 dev->__using_pio_transfers = 1;
4358 err = b43_pio_init(dev); 4367 err = b43_pio_init(dev);
4359 } else { 4368 } else {
@@ -4388,7 +4397,7 @@ err_busdown:
4388} 4397}
4389 4398
4390static int b43_op_add_interface(struct ieee80211_hw *hw, 4399static int b43_op_add_interface(struct ieee80211_hw *hw,
4391 struct ieee80211_if_init_conf *conf) 4400 struct ieee80211_vif *vif)
4392{ 4401{
4393 struct b43_wl *wl = hw_to_b43_wl(hw); 4402 struct b43_wl *wl = hw_to_b43_wl(hw);
4394 struct b43_wldev *dev; 4403 struct b43_wldev *dev;
@@ -4396,24 +4405,24 @@ static int b43_op_add_interface(struct ieee80211_hw *hw,
4396 4405
4397 /* TODO: allow WDS/AP devices to coexist */ 4406 /* TODO: allow WDS/AP devices to coexist */
4398 4407
4399 if (conf->type != NL80211_IFTYPE_AP && 4408 if (vif->type != NL80211_IFTYPE_AP &&
4400 conf->type != NL80211_IFTYPE_MESH_POINT && 4409 vif->type != NL80211_IFTYPE_MESH_POINT &&
4401 conf->type != NL80211_IFTYPE_STATION && 4410 vif->type != NL80211_IFTYPE_STATION &&
4402 conf->type != NL80211_IFTYPE_WDS && 4411 vif->type != NL80211_IFTYPE_WDS &&
4403 conf->type != NL80211_IFTYPE_ADHOC) 4412 vif->type != NL80211_IFTYPE_ADHOC)
4404 return -EOPNOTSUPP; 4413 return -EOPNOTSUPP;
4405 4414
4406 mutex_lock(&wl->mutex); 4415 mutex_lock(&wl->mutex);
4407 if (wl->operating) 4416 if (wl->operating)
4408 goto out_mutex_unlock; 4417 goto out_mutex_unlock;
4409 4418
4410 b43dbg(wl, "Adding Interface type %d\n", conf->type); 4419 b43dbg(wl, "Adding Interface type %d\n", vif->type);
4411 4420
4412 dev = wl->current_dev; 4421 dev = wl->current_dev;
4413 wl->operating = 1; 4422 wl->operating = 1;
4414 wl->vif = conf->vif; 4423 wl->vif = vif;
4415 wl->if_type = conf->type; 4424 wl->if_type = vif->type;
4416 memcpy(wl->mac_addr, conf->mac_addr, ETH_ALEN); 4425 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
4417 4426
4418 b43_adjust_opmode(dev); 4427 b43_adjust_opmode(dev);
4419 b43_set_pretbtt(dev); 4428 b43_set_pretbtt(dev);
@@ -4428,17 +4437,17 @@ static int b43_op_add_interface(struct ieee80211_hw *hw,
4428} 4437}
4429 4438
4430static void b43_op_remove_interface(struct ieee80211_hw *hw, 4439static void b43_op_remove_interface(struct ieee80211_hw *hw,
4431 struct ieee80211_if_init_conf *conf) 4440 struct ieee80211_vif *vif)
4432{ 4441{
4433 struct b43_wl *wl = hw_to_b43_wl(hw); 4442 struct b43_wl *wl = hw_to_b43_wl(hw);
4434 struct b43_wldev *dev = wl->current_dev; 4443 struct b43_wldev *dev = wl->current_dev;
4435 4444
4436 b43dbg(wl, "Removing Interface type %d\n", conf->type); 4445 b43dbg(wl, "Removing Interface type %d\n", vif->type);
4437 4446
4438 mutex_lock(&wl->mutex); 4447 mutex_lock(&wl->mutex);
4439 4448
4440 B43_WARN_ON(!wl->operating); 4449 B43_WARN_ON(!wl->operating);
4441 B43_WARN_ON(wl->vif != conf->vif); 4450 B43_WARN_ON(wl->vif != vif);
4442 wl->vif = NULL; 4451 wl->vif = NULL;
4443 4452
4444 wl->operating = 0; 4453 wl->operating = 0;