diff options
author | Gregory Greenman <gregory.greenman@intel.com> | 2008-01-23 13:15:21 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-31 22:26:44 -0500 |
commit | 76f3915b4cbadf5f7dc80d3df6d3a7492914675a (patch) | |
tree | ee2d85eb6ef92543cc18e518f04311daf1a8f883 /drivers/net/wireless | |
parent | 25c03d8e8c13c5468155c58013b03841161b4559 (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.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl3945-base.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl4965-base.c | 6 |
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 | } |