aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/iwlwifi')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965-rs.c31
1 files changed, 15 insertions, 16 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c
index b9d7ad8b70e5..bad746613f5b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c
@@ -115,6 +115,7 @@ struct iwl_rate_scale_priv {
115 u8 is_dup; 115 u8 is_dup;
116 u8 phymode; 116 u8 phymode;
117 u8 ibss_sta_added; 117 u8 ibss_sta_added;
118 u32 supp_rates;
118 u16 active_rate; 119 u16 active_rate;
119 u16 active_siso_rate; 120 u16 active_siso_rate;
120 u16 active_mimo_rate; 121 u16 active_mimo_rate;
@@ -132,8 +133,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
132 struct sta_info *sta); 133 struct sta_info *sta);
133static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data, 134static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data,
134 struct iwl_rate *tx_mcs, 135 struct iwl_rate *tx_mcs,
135 struct iwl_link_quality_cmd *tbl, 136 struct iwl_link_quality_cmd *tbl);
136 struct sta_info *sta);
137 137
138 138
139static s32 expected_tpt_A[IWL_RATE_COUNT] = { 139static s32 expected_tpt_A[IWL_RATE_COUNT] = {
@@ -542,14 +542,13 @@ static u16 rs_get_adjacent_rate(u8 index, u16 rate_mask, int rate_type)
542 542
543static int rs_get_lower_rate(struct iwl_rate_scale_priv *lq_data, 543static int rs_get_lower_rate(struct iwl_rate_scale_priv *lq_data,
544 struct iwl_scale_tbl_info *tbl, u8 scale_index, 544 struct iwl_scale_tbl_info *tbl, u8 scale_index,
545 u8 ht_possible, struct iwl_rate *mcs_rate, 545 u8 ht_possible, struct iwl_rate *mcs_rate)
546 struct sta_info *sta)
547{ 546{
548 u8 is_green = lq_data->is_green;
549 s32 low; 547 s32 low;
550 u16 rate_mask; 548 u16 rate_mask;
551 u16 high_low; 549 u16 high_low;
552 u8 switch_to_legacy = 0; 550 u8 switch_to_legacy = 0;
551 u8 is_green = lq_data->is_green;
553 552
554 /* check if we need to switch from HT to legacy rates. 553 /* check if we need to switch from HT to legacy rates.
555 * assumption is that mandatory rates (1Mbps or 6Mbps) 554 * assumption is that mandatory rates (1Mbps or 6Mbps)
@@ -576,9 +575,9 @@ static int rs_get_lower_rate(struct iwl_rate_scale_priv *lq_data,
576 if (is_legacy(tbl->lq_type)) { 575 if (is_legacy(tbl->lq_type)) {
577 if (lq_data->phymode == (u8) MODE_IEEE80211A) 576 if (lq_data->phymode == (u8) MODE_IEEE80211A)
578 rate_mask = (u16)(rate_mask & 577 rate_mask = (u16)(rate_mask &
579 (sta->supp_rates << IWL_FIRST_OFDM_RATE)); 578 (lq_data->supp_rates << IWL_FIRST_OFDM_RATE));
580 else 579 else
581 rate_mask = (u16)(rate_mask & sta->supp_rates); 580 rate_mask = (u16)(rate_mask & lq_data->supp_rates);
582 } 581 }
583 582
584 /* if we did switched from HT to legacy check current rate */ 583 /* if we did switched from HT to legacy check current rate */
@@ -1391,10 +1390,10 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
1391 if (is_legacy(tbl->lq_type)) { 1390 if (is_legacy(tbl->lq_type)) {
1392 if (lq_data->phymode == (u8) MODE_IEEE80211A) 1391 if (lq_data->phymode == (u8) MODE_IEEE80211A)
1393 rate_scale_index_msk = (u16) (rate_mask & 1392 rate_scale_index_msk = (u16) (rate_mask &
1394 (sta->supp_rates << IWL_FIRST_OFDM_RATE)); 1393 (lq_data->supp_rates << IWL_FIRST_OFDM_RATE));
1395 else 1394 else
1396 rate_scale_index_msk = (u16) (rate_mask & 1395 rate_scale_index_msk = (u16) (rate_mask &
1397 sta->supp_rates); 1396 lq_data->supp_rates);
1398 1397
1399 } else 1398 } else
1400 rate_scale_index_msk = rate_mask; 1399 rate_scale_index_msk = rate_mask;
@@ -1434,7 +1433,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
1434 rs_stay_in_table(lq_data); 1433 rs_stay_in_table(lq_data);
1435 if (update_lq) { 1434 if (update_lq) {
1436 rs_mcs_from_tbl(&mcs_rate, tbl, index, is_green); 1435 rs_mcs_from_tbl(&mcs_rate, tbl, index, is_green);
1437 rs_fill_link_cmd(lq_data, &mcs_rate, &lq_data->lq, sta); 1436 rs_fill_link_cmd(lq_data, &mcs_rate, &lq_data->lq);
1438 rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC); 1437 rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC);
1439 } 1438 }
1440 goto out; 1439 goto out;
@@ -1558,7 +1557,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
1558 lq_update: 1557 lq_update:
1559 if (update_lq) { 1558 if (update_lq) {
1560 rs_mcs_from_tbl(&mcs_rate, tbl, index, is_green); 1559 rs_mcs_from_tbl(&mcs_rate, tbl, index, is_green);
1561 rs_fill_link_cmd(lq_data, &mcs_rate, &lq_data->lq, sta); 1560 rs_fill_link_cmd(lq_data, &mcs_rate, &lq_data->lq);
1562 rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC); 1561 rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC);
1563 } 1562 }
1564 rs_stay_in_table(lq_data); 1563 rs_stay_in_table(lq_data);
@@ -1584,7 +1583,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
1584 IWL_DEBUG_HT("Switch current mcs: %X index: %d\n", 1583 IWL_DEBUG_HT("Switch current mcs: %X index: %d\n",
1585 tbl->current_rate.rate_n_flags, index); 1584 tbl->current_rate.rate_n_flags, index);
1586 rs_fill_link_cmd(lq_data, &tbl->current_rate, 1585 rs_fill_link_cmd(lq_data, &tbl->current_rate,
1587 &(lq_data->lq), sta); 1586 &lq_data->lq);
1588 rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC); 1587 rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC);
1589 } 1588 }
1590 tbl1 = &(lq_data->lq_info[lq_data->active_tbl]); 1589 tbl1 = &(lq_data->lq_info[lq_data->active_tbl]);
@@ -1680,7 +1679,7 @@ static void rs_initialize_lq(struct iwl_priv *priv,
1680 rs_mcs_from_tbl(&mcs_rate, tbl, rate_idx, use_green); 1679 rs_mcs_from_tbl(&mcs_rate, tbl, rate_idx, use_green);
1681 tbl->current_rate.rate_n_flags = mcs_rate.rate_n_flags; 1680 tbl->current_rate.rate_n_flags = mcs_rate.rate_n_flags;
1682 rs_get_expected_tpt_table(lq, tbl); 1681 rs_get_expected_tpt_table(lq, tbl);
1683 rs_fill_link_cmd(lq, &mcs_rate, &(lq->lq), sta); 1682 rs_fill_link_cmd(lq, &mcs_rate, &lq->lq);
1684 rs_send_lq_cmd(priv, &lq->lq, CMD_ASYNC); 1683 rs_send_lq_cmd(priv, &lq->lq, CMD_ASYNC);
1685 out: 1684 out:
1686 return; 1685 return;
@@ -1799,6 +1798,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,
1799 struct iwl_rate_scale_priv *crl = priv_sta; 1798 struct iwl_rate_scale_priv *crl = priv_sta;
1800 1799
1801 crl->flush_timer = 0; 1800 crl->flush_timer = 0;
1801 crl->supp_rates = sta->supp_rates;
1802 sta->txrate = 3; 1802 sta->txrate = 3;
1803 for (j = 0; j < LQ_SIZE; j++) 1803 for (j = 0; j < LQ_SIZE; j++)
1804 for (i = 0; i < IWL_RATE_COUNT; i++) 1804 for (i = 0; i < IWL_RATE_COUNT; i++)
@@ -1875,8 +1875,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,
1875 1875
1876static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data, 1876static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data,
1877 struct iwl_rate *tx_mcs, 1877 struct iwl_rate *tx_mcs,
1878 struct iwl_link_quality_cmd *lq_cmd, 1878 struct iwl_link_quality_cmd *lq_cmd)
1879 struct sta_info *sta)
1880{ 1879{
1881 int index = 0; 1880 int index = 0;
1882 int rc = 0; 1881 int rc = 0;
@@ -1934,7 +1933,7 @@ static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data,
1934 lq_cmd->general_params.mimo_delimiter = index; 1933 lq_cmd->general_params.mimo_delimiter = index;
1935 1934
1936 rs_get_lower_rate(lq_data, &tbl_type, rate_idx, 1935 rs_get_lower_rate(lq_data, &tbl_type, rate_idx,
1937 use_ht_possible, &new_rate, sta); 1936 use_ht_possible, &new_rate);
1938 1937
1939 if (is_legacy(tbl_type.lq_type)) { 1938 if (is_legacy(tbl_type.lq_type)) {
1940 if (ant_toggle_count < NUM_TRY_BEFORE_ANTENNA_TOGGLE) 1939 if (ant_toggle_count < NUM_TRY_BEFORE_ANTENNA_TOGGLE)