diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-3945-rs.c')
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-3945-rs.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-rs.c b/drivers/net/wireless/iwlwifi/iwl-3945-rs.c index 9b60a0c5de5f..21c841847d88 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-3945-rs.c | |||
| @@ -638,12 +638,16 @@ static void rs_get_rate(void *priv_r, struct ieee80211_sta *sta, | |||
| 638 | s8 scale_action = 0; | 638 | s8 scale_action = 0; |
| 639 | unsigned long flags; | 639 | unsigned long flags; |
| 640 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; | 640 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; |
| 641 | u16 fc, rate_mask; | 641 | u16 fc; |
| 642 | u16 rate_mask = 0; | ||
| 642 | struct iwl3945_priv *priv = (struct iwl3945_priv *)priv_r; | 643 | struct iwl3945_priv *priv = (struct iwl3945_priv *)priv_r; |
| 643 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | 644 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); |
| 644 | 645 | ||
| 645 | IWL_DEBUG_RATE("enter\n"); | 646 | IWL_DEBUG_RATE("enter\n"); |
| 646 | 647 | ||
| 648 | if (sta) | ||
| 649 | rate_mask = sta->supp_rates[sband->band]; | ||
| 650 | |||
| 647 | /* Send management frames and broadcast/multicast data using lowest | 651 | /* Send management frames and broadcast/multicast data using lowest |
| 648 | * rate. */ | 652 | * rate. */ |
| 649 | fc = le16_to_cpu(hdr->frame_control); | 653 | fc = le16_to_cpu(hdr->frame_control); |
| @@ -651,11 +655,15 @@ static void rs_get_rate(void *priv_r, struct ieee80211_sta *sta, | |||
| 651 | is_multicast_ether_addr(hdr->addr1) || | 655 | is_multicast_ether_addr(hdr->addr1) || |
| 652 | !sta || !priv_sta) { | 656 | !sta || !priv_sta) { |
| 653 | IWL_DEBUG_RATE("leave: No STA priv data to update!\n"); | 657 | IWL_DEBUG_RATE("leave: No STA priv data to update!\n"); |
| 654 | info->control.rates[0].idx = rate_lowest_index(sband, sta); | 658 | if (!rate_mask) |
| 659 | info->control.rates[0].idx = | ||
| 660 | rate_lowest_index(sband, NULL); | ||
| 661 | else | ||
| 662 | info->control.rates[0].idx = | ||
| 663 | rate_lowest_index(sband, sta); | ||
| 655 | return; | 664 | return; |
| 656 | } | 665 | } |
| 657 | 666 | ||
| 658 | rate_mask = sta->supp_rates[sband->band]; | ||
| 659 | index = min(rs_sta->last_txrate_idx & 0xffff, IWL_RATE_COUNT - 1); | 667 | index = min(rs_sta->last_txrate_idx & 0xffff, IWL_RATE_COUNT - 1); |
| 660 | 668 | ||
| 661 | if (sband->band == IEEE80211_BAND_5GHZ) | 669 | if (sband->band == IEEE80211_BAND_5GHZ) |
