aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-3945.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2010-04-29 03:53:29 -0400
committerReinette Chatre <reinette.chatre@intel.com>2010-05-10 18:09:02 -0400
commit2c810ccdbac434ae38f4ec5331d3f047dc90f98a (patch)
treee1bd92e76baf88d5ac3f4af37e709f8c746fd623 /drivers/net/wireless/iwlwifi/iwl-3945.c
parenta6a0345c837346d1b74f4907d4747e6c1053a99f (diff)
iwlwifi: rework broadcast station management
Currently, the broadcast station is managed along with the interface type, rather than always being present. That leads to a bug with injection -- it is currently not possible to inject frames when the only virtual interface is a monitor, because in that the required broadcast station is missing. Additionally, allocating and deallocating the broadcast station's LQ all the time is wasteful, and the code to support this is fairly complex. So this changes completely the way we manage the broadcast station. Rather than manage it along with any interface, we now allocate it when we bring the device up, and remove it again when we bring the device down. When we bring the device up, we don't immediately program the broadcast station into it, instead we just mark it active and rely on the next restore cycle to upload it to the device. This works because an unassociated RXON is always required at least once to set up device parameters, which implies a reprogramming of stations into the device. As we now manage all stations properly, there no longer is a need for forcing a clearing of them via iwl_clear_ucode_stations(), which can become a lot simpler. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-3945.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-3945.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index 05d808b28777..7fb159565f68 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -1992,7 +1992,7 @@ static int iwl3945_commit_rxon(struct iwl_priv *priv)
1992 "configuration (%d).\n", rc); 1992 "configuration (%d).\n", rc);
1993 return rc; 1993 return rc;
1994 } 1994 }
1995 iwl_clear_ucode_stations(priv, false); 1995 iwl_clear_ucode_stations(priv);
1996 iwl_restore_stations(priv); 1996 iwl_restore_stations(priv);
1997 } 1997 }
1998 1998
@@ -2025,7 +2025,7 @@ static int iwl3945_commit_rxon(struct iwl_priv *priv)
2025 memcpy(active_rxon, staging_rxon, sizeof(*active_rxon)); 2025 memcpy(active_rxon, staging_rxon, sizeof(*active_rxon));
2026 2026
2027 if (!new_assoc) { 2027 if (!new_assoc) {
2028 iwl_clear_ucode_stations(priv, false); 2028 iwl_clear_ucode_stations(priv);
2029 iwl_restore_stations(priv); 2029 iwl_restore_stations(priv);
2030 } 2030 }
2031 2031
@@ -2853,7 +2853,6 @@ static struct iwl_lib_ops iwl3945_lib = {
2853 .isr = iwl_isr_legacy, 2853 .isr = iwl_isr_legacy,
2854 .config_ap = iwl3945_config_ap, 2854 .config_ap = iwl3945_config_ap,
2855 .manage_ibss_station = iwl3945_manage_ibss_station, 2855 .manage_ibss_station = iwl3945_manage_ibss_station,
2856 .add_bcast_station = iwl3945_add_bcast_station,
2857 .check_plcp_health = iwl3945_good_plcp_health, 2856 .check_plcp_health = iwl3945_good_plcp_health,
2858 2857
2859 .debugfs_ops = { 2858 .debugfs_ops = {