aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorGregory Greenman <gregory.greenman@intel.com>2008-01-23 13:15:21 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-31 22:26:44 -0500
commit76f3915b4cbadf5f7dc80d3df6d3a7492914675a (patch)
treeee2d85eb6ef92543cc18e518f04311daf1a8f883 /drivers/net/wireless
parent25c03d8e8c13c5468155c58013b03841161b4559 (diff)
iwlwifi: Fix uCode error on association
The problem is that priv->assoc_id is set when assoc. resp frame is received. But, when it is set, LQ cmd is still not sent to the uCode, it is done from bg_post_assoc, which is called through a workqueue. On the other hand, when a tx arrives at the moment when this flag is set, but LQ is still not sent, the if condition in tx_skb will not hold and the frame will not be dropped. Thus, it will be sent through which is still not in the sta table in the uCoded. Signed-off-by: Gregory Greenman <gregory.greenman@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-3945.h1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl3945-base.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl4965-base.c6
3 files changed, 5 insertions, 4 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.h b/drivers/net/wireless/iwlwifi/iwl-3945.h
index 4b07db9cd407..1da14f9bbe0f 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.h
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.h
@@ -790,7 +790,6 @@ struct iwl3945_priv {
790 u16 active_rate_basic; 790 u16 active_rate_basic;
791 791
792 u8 call_post_assoc_from_beacon; 792 u8 call_post_assoc_from_beacon;
793 u8 assoc_station_added;
794 /* Rate scaling data */ 793 /* Rate scaling data */
795 s8 data_retry_limit; 794 s8 data_retry_limit;
796 u8 retry_rate; 795 u8 retry_rate;
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index f644c6bba85f..5d8965e0b900 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -2806,7 +2806,7 @@ static int iwl3945_tx_skb(struct iwl3945_priv *priv,
2806#endif 2806#endif
2807 2807
2808 /* drop all data frame if we are not associated */ 2808 /* drop all data frame if we are not associated */
2809 if (!iwl3945_is_associated(priv) && !priv->assoc_id && 2809 if ((!iwl3945_is_associated(priv) || !priv->assoc_id) &&
2810 ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)) { 2810 ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)) {
2811 IWL_DEBUG_DROP("Dropping - !iwl3945_is_associated\n"); 2811 IWL_DEBUG_DROP("Dropping - !iwl3945_is_associated\n");
2812 goto drop_unlock; 2812 goto drop_unlock;
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c
index 131cf5adbd79..abdce17f60e6 100644
--- a/drivers/net/wireless/iwlwifi/iwl4965-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c
@@ -2933,8 +2933,10 @@ static int iwl4965_tx_skb(struct iwl4965_priv *priv,
2933#endif 2933#endif
2934 2934
2935 /* drop all data frame if we are not associated */ 2935 /* drop all data frame if we are not associated */
2936 if (!iwl4965_is_associated(priv) && !priv->assoc_id && 2936 if (((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) &&
2937 ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)) { 2937 (!iwl4965_is_associated(priv) ||
2938 !priv->assoc_id ||
2939 !priv->assoc_station_added)) {
2938 IWL_DEBUG_DROP("Dropping - !iwl4965_is_associated\n"); 2940 IWL_DEBUG_DROP("Dropping - !iwl4965_is_associated\n");
2939 goto drop_unlock; 2941 goto drop_unlock;
2940 } 2942 }