diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-agn-rs.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c index d03b4734c89..91f26556ac2 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /****************************************************************************** | 1 | /****************************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2005 - 2010 Intel Corporation. All rights reserved. | 3 | * Copyright(c) 2005 - 2011 Intel Corporation. All rights reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms of version 2 of the GNU General Public License as | 6 | * under the terms of version 2 of the GNU General Public License as |
@@ -115,13 +115,18 @@ const struct iwl_rate_info iwl_rates[IWL_RATE_COUNT] = { | |||
115 | /* FIXME:RS: ^^ should be INV (legacy) */ | 115 | /* FIXME:RS: ^^ should be INV (legacy) */ |
116 | }; | 116 | }; |
117 | 117 | ||
118 | static inline u8 rs_extract_rate(u32 rate_n_flags) | ||
119 | { | ||
120 | return (u8)(rate_n_flags & RATE_MCS_RATE_MSK); | ||
121 | } | ||
122 | |||
118 | static int iwl_hwrate_to_plcp_idx(u32 rate_n_flags) | 123 | static int iwl_hwrate_to_plcp_idx(u32 rate_n_flags) |
119 | { | 124 | { |
120 | int idx = 0; | 125 | int idx = 0; |
121 | 126 | ||
122 | /* HT rate format */ | 127 | /* HT rate format */ |
123 | if (rate_n_flags & RATE_MCS_HT_MSK) { | 128 | if (rate_n_flags & RATE_MCS_HT_MSK) { |
124 | idx = (rate_n_flags & 0xff); | 129 | idx = rs_extract_rate(rate_n_flags); |
125 | 130 | ||
126 | if (idx >= IWL_RATE_MIMO3_6M_PLCP) | 131 | if (idx >= IWL_RATE_MIMO3_6M_PLCP) |
127 | idx = idx - IWL_RATE_MIMO3_6M_PLCP; | 132 | idx = idx - IWL_RATE_MIMO3_6M_PLCP; |
@@ -138,7 +143,8 @@ static int iwl_hwrate_to_plcp_idx(u32 rate_n_flags) | |||
138 | /* legacy rate format, search for match in table */ | 143 | /* legacy rate format, search for match in table */ |
139 | } else { | 144 | } else { |
140 | for (idx = 0; idx < ARRAY_SIZE(iwl_rates); idx++) | 145 | for (idx = 0; idx < ARRAY_SIZE(iwl_rates); idx++) |
141 | if (iwl_rates[idx].plcp == (rate_n_flags & 0xFF)) | 146 | if (iwl_rates[idx].plcp == |
147 | rs_extract_rate(rate_n_flags)) | ||
142 | return idx; | 148 | return idx; |
143 | } | 149 | } |
144 | 150 | ||
@@ -239,11 +245,6 @@ static const struct iwl_rate_mcs_info iwl_rate_mcs[IWL_RATE_COUNT] = { | |||
239 | 245 | ||
240 | #define MCS_INDEX_PER_STREAM (8) | 246 | #define MCS_INDEX_PER_STREAM (8) |
241 | 247 | ||
242 | static inline u8 rs_extract_rate(u32 rate_n_flags) | ||
243 | { | ||
244 | return (u8)(rate_n_flags & 0xFF); | ||
245 | } | ||
246 | |||
247 | static void rs_rate_scale_clear_window(struct iwl_rate_scale_data *window) | 248 | static void rs_rate_scale_clear_window(struct iwl_rate_scale_data *window) |
248 | { | 249 | { |
249 | window->data = 0; | 250 | window->data = 0; |
@@ -2770,16 +2771,13 @@ static void rs_get_rate(void *priv_r, struct ieee80211_sta *sta, void *priv_sta, | |||
2770 | static void *rs_alloc_sta(void *priv_rate, struct ieee80211_sta *sta, | 2771 | static void *rs_alloc_sta(void *priv_rate, struct ieee80211_sta *sta, |
2771 | gfp_t gfp) | 2772 | gfp_t gfp) |
2772 | { | 2773 | { |
2773 | struct iwl_lq_sta *lq_sta; | ||
2774 | struct iwl_station_priv *sta_priv = (struct iwl_station_priv *) sta->drv_priv; | 2774 | struct iwl_station_priv *sta_priv = (struct iwl_station_priv *) sta->drv_priv; |
2775 | struct iwl_priv *priv; | 2775 | struct iwl_priv *priv; |
2776 | 2776 | ||
2777 | priv = (struct iwl_priv *)priv_rate; | 2777 | priv = (struct iwl_priv *)priv_rate; |
2778 | IWL_DEBUG_RATE(priv, "create station rate scale window\n"); | 2778 | IWL_DEBUG_RATE(priv, "create station rate scale window\n"); |
2779 | 2779 | ||
2780 | lq_sta = &sta_priv->lq_sta; | 2780 | return &sta_priv->lq_sta; |
2781 | |||
2782 | return lq_sta; | ||
2783 | } | 2781 | } |
2784 | 2782 | ||
2785 | /* | 2783 | /* |
@@ -2912,7 +2910,8 @@ static void rs_fill_link_cmd(struct iwl_priv *priv, | |||
2912 | ant_toggle_cnt = 1; | 2910 | ant_toggle_cnt = 1; |
2913 | repeat_rate = IWL_NUMBER_TRY; | 2911 | repeat_rate = IWL_NUMBER_TRY; |
2914 | } else { | 2912 | } else { |
2915 | repeat_rate = IWL_HT_NUMBER_TRY; | 2913 | repeat_rate = min(IWL_HT_NUMBER_TRY, |
2914 | LINK_QUAL_AGG_DISABLE_START_DEF - 1); | ||
2916 | } | 2915 | } |
2917 | 2916 | ||
2918 | lq_cmd->general_params.mimo_delimiter = | 2917 | lq_cmd->general_params.mimo_delimiter = |
@@ -3087,7 +3086,7 @@ static ssize_t rs_sta_dbgfs_scale_table_write(struct file *file, | |||
3087 | struct iwl_lq_sta *lq_sta = file->private_data; | 3086 | struct iwl_lq_sta *lq_sta = file->private_data; |
3088 | struct iwl_priv *priv; | 3087 | struct iwl_priv *priv; |
3089 | char buf[64]; | 3088 | char buf[64]; |
3090 | int buf_size; | 3089 | size_t buf_size; |
3091 | u32 parsed_rate; | 3090 | u32 parsed_rate; |
3092 | struct iwl_station_priv *sta_priv = | 3091 | struct iwl_station_priv *sta_priv = |
3093 | container_of(lq_sta, struct iwl_station_priv, lq_sta); | 3092 | container_of(lq_sta, struct iwl_station_priv, lq_sta); |
@@ -3257,7 +3256,6 @@ static ssize_t rs_sta_dbgfs_rate_scale_data_read(struct file *file, | |||
3257 | { | 3256 | { |
3258 | char buff[120]; | 3257 | char buff[120]; |
3259 | int desc = 0; | 3258 | int desc = 0; |
3260 | ssize_t ret; | ||
3261 | 3259 | ||
3262 | struct iwl_lq_sta *lq_sta = file->private_data; | 3260 | struct iwl_lq_sta *lq_sta = file->private_data; |
3263 | struct iwl_priv *priv; | 3261 | struct iwl_priv *priv; |
@@ -3274,8 +3272,7 @@ static ssize_t rs_sta_dbgfs_rate_scale_data_read(struct file *file, | |||
3274 | "Bit Rate= %d Mb/s\n", | 3272 | "Bit Rate= %d Mb/s\n", |
3275 | iwl_rates[lq_sta->last_txrate_idx].ieee >> 1); | 3273 | iwl_rates[lq_sta->last_txrate_idx].ieee >> 1); |
3276 | 3274 | ||
3277 | ret = simple_read_from_buffer(user_buf, count, ppos, buff, desc); | 3275 | return simple_read_from_buffer(user_buf, count, ppos, buff, desc); |
3278 | return ret; | ||
3279 | } | 3276 | } |
3280 | 3277 | ||
3281 | static const struct file_operations rs_sta_dbgfs_rate_scale_data_ops = { | 3278 | static const struct file_operations rs_sta_dbgfs_rate_scale_data_ops = { |