diff options
Diffstat (limited to 'drivers/net/wireless/b43/main.c')
-rw-r--r-- | drivers/net/wireless/b43/main.c | 43 |
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"); | |||
67 | MODULE_LICENSE("GPL"); | 67 | MODULE_LICENSE("GPL"); |
68 | 68 | ||
69 | MODULE_FIRMWARE(B43_SUPPORTED_FIRMWARE_ID); | 69 | MODULE_FIRMWARE(B43_SUPPORTED_FIRMWARE_ID); |
70 | 70 | MODULE_FIRMWARE("b43/ucode11.fw"); | |
71 | MODULE_FIRMWARE("b43/ucode13.fw"); | ||
72 | MODULE_FIRMWARE("b43/ucode14.fw"); | ||
73 | MODULE_FIRMWARE("b43/ucode15.fw"); | ||
74 | MODULE_FIRMWARE("b43/ucode5.fw"); | ||
75 | MODULE_FIRMWARE("b43/ucode9.fw"); | ||
71 | 76 | ||
72 | static int modparam_bad_frames_preempt; | 77 | static int modparam_bad_frames_preempt; |
73 | module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444); | 78 | module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444); |
@@ -102,6 +107,9 @@ int b43_modparam_verbose = B43_VERBOSITY_DEFAULT; | |||
102 | module_param_named(verbose, b43_modparam_verbose, int, 0644); | 107 | module_param_named(verbose, b43_modparam_verbose, int, 0644); |
103 | MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug"); | 108 | MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug"); |
104 | 109 | ||
110 | static int modparam_pio; | ||
111 | module_param_named(pio, modparam_pio, int, 0444); | ||
112 | MODULE_PARM_DESC(pio, "enable(1) / disable(0) PIO mode"); | ||
105 | 113 | ||
106 | static const struct ssb_device_id b43_ssb_tbl[] = { | 114 | static 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 | ||
4390 | static int b43_op_add_interface(struct ieee80211_hw *hw, | 4399 | static 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 | ||
4430 | static void b43_op_remove_interface(struct ieee80211_hw *hw, | 4439 | static 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; |