Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rtlwifi: rtl8821ae: Switch to use common rate control routine

With this change, all of the drivers now use the common routine. As this
driver has VHT capability, an additional parameter is needed, thus all the
drivers had to be modified.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>

authored by

Larry Finger and committed by
Kalle Valo
fd3cb22a a160ba06

+88 -242
+74 -2
drivers/net/wireless/rtlwifi/base.c
··· 881 881 * N rate: 882 882 * (rx_status->flag & RX_FLAG_HT) = 1, 883 883 * DESC_RATEMCS0-->DESC_RATEMCS15 ==> idx is 0-->15 884 + * 885 + * VHT rates: 886 + * DESC_RATEVHT1SS_MCS0-->DESC_RATEVHT1SS_MCS9 ==> idx is 0-->9 887 + * DESC_RATEVHT2SS_MCS0-->DESC_RATEVHT2SS_MCS9 ==> idx is 0-->9 884 888 */ 885 - int rtlwifi_rate_mapping(struct ieee80211_hw *hw, 886 - bool isht, u8 desc_rate) 889 + int rtlwifi_rate_mapping(struct ieee80211_hw *hw, bool isht, bool isvht, 890 + u8 desc_rate) 887 891 { 888 892 int rate_idx; 889 893 894 + if (isvht) { 895 + switch (desc_rate) { 896 + case DESC_RATEVHT1SS_MCS0: 897 + rate_idx = 0; 898 + break; 899 + case DESC_RATEVHT1SS_MCS1: 900 + rate_idx = 1; 901 + break; 902 + case DESC_RATEVHT1SS_MCS2: 903 + rate_idx = 2; 904 + break; 905 + case DESC_RATEVHT1SS_MCS3: 906 + rate_idx = 3; 907 + break; 908 + case DESC_RATEVHT1SS_MCS4: 909 + rate_idx = 4; 910 + break; 911 + case DESC_RATEVHT1SS_MCS5: 912 + rate_idx = 5; 913 + break; 914 + case DESC_RATEVHT1SS_MCS6: 915 + rate_idx = 6; 916 + break; 917 + case DESC_RATEVHT1SS_MCS7: 918 + rate_idx = 7; 919 + break; 920 + case DESC_RATEVHT1SS_MCS8: 921 + rate_idx = 8; 922 + break; 923 + case DESC_RATEVHT1SS_MCS9: 924 + rate_idx = 9; 925 + break; 926 + case DESC_RATEVHT2SS_MCS0: 927 + rate_idx = 0; 928 + break; 929 + case DESC_RATEVHT2SS_MCS1: 930 + rate_idx = 1; 931 + break; 932 + case DESC_RATEVHT2SS_MCS2: 933 + rate_idx = 2; 934 + break; 935 + case DESC_RATEVHT2SS_MCS3: 936 + rate_idx = 3; 937 + break; 938 + case DESC_RATEVHT2SS_MCS4: 939 + rate_idx = 4; 940 + break; 941 + case DESC_RATEVHT2SS_MCS5: 942 + rate_idx = 5; 943 + break; 944 + case DESC_RATEVHT2SS_MCS6: 945 + rate_idx = 6; 946 + break; 947 + case DESC_RATEVHT2SS_MCS7: 948 + rate_idx = 7; 949 + break; 950 + case DESC_RATEVHT2SS_MCS8: 951 + rate_idx = 8; 952 + break; 953 + case DESC_RATEVHT2SS_MCS9: 954 + rate_idx = 9; 955 + break; 956 + default: 957 + rate_idx = 0; 958 + break; 959 + } 960 + return rate_idx; 961 + } 890 962 if (false == isht) { 891 963 if (IEEE80211_BAND_2GHZ == hw->conf.chandef.chan->band) { 892 964 switch (desc_rate) {
+2 -2
drivers/net/wireless/rtlwifi/base.h
··· 123 123 void rtl_deinit_deferred_work(struct ieee80211_hw *hw); 124 124 125 125 bool rtl_action_proc(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx); 126 - int rtlwifi_rate_mapping(struct ieee80211_hw *hw, 127 - bool isht, u8 desc_rate); 126 + int rtlwifi_rate_mapping(struct ieee80211_hw *hw, bool isht, 127 + bool isvht, u8 desc_rate); 128 128 bool rtl_tx_mgmt_proc(struct ieee80211_hw *hw, struct sk_buff *skb); 129 129 u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx); 130 130
+1 -1
drivers/net/wireless/rtlwifi/rtl8188ee/trx.c
··· 473 473 * Notice: this is diff with windows define 474 474 */ 475 475 rx_status->rate_idx = rtlwifi_rate_mapping(hw, status->is_ht, 476 - status->rate); 476 + false, status->rate); 477 477 478 478 rx_status->mactime = status->timestamp_low; 479 479 if (phystatus == true) {
+1 -1
drivers/net/wireless/rtlwifi/rtl8192ce/trx.c
··· 401 401 * Notice: this is diff with windows define 402 402 */ 403 403 rx_status->rate_idx = rtlwifi_rate_mapping(hw, stats->is_ht, 404 - stats->rate); 404 + false, stats->rate); 405 405 406 406 rx_status->mactime = stats->timestamp_low; 407 407 if (phystatus) {
+2 -2
drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
··· 340 340 if (stats->decrypted) 341 341 rx_status->flag |= RX_FLAG_DECRYPTED; 342 342 rx_status->rate_idx = rtlwifi_rate_mapping(hw, stats->is_ht, 343 - stats->rate); 343 + false, stats->rate); 344 344 rx_status->mactime = GET_RX_DESC_TSFL(pdesc); 345 345 if (phystatus) { 346 346 p_drvinfo = (struct rx_fwinfo_92c *)(skb->data + ··· 407 407 rx_status->flag |= RX_FLAG_HT; 408 408 /* Data rate */ 409 409 rx_status->rate_idx = rtlwifi_rate_mapping(hw, stats.is_ht, 410 - stats.rate); 410 + false, stats.rate); 411 411 /* There is a phy status after this rx descriptor. */ 412 412 if (GET_RX_DESC_PHY_STATUS(rxdesc)) { 413 413 p_drvinfo = (struct rx_fwinfo_92c *)(rxdesc + RTL_RX_DESC_SIZE);
+1 -1
drivers/net/wireless/rtlwifi/rtl8192de/trx.c
··· 514 514 if (stats->decrypted) 515 515 rx_status->flag |= RX_FLAG_DECRYPTED; 516 516 rx_status->rate_idx = rtlwifi_rate_mapping(hw, stats->is_ht, 517 - stats->rate); 517 + false, stats->rate); 518 518 rx_status->mactime = GET_RX_DESC_TSFL(pdesc); 519 519 if (phystatus) { 520 520 p_drvinfo = (struct rx_fwinfo_92d *)(skb->data +
+1 -1
drivers/net/wireless/rtlwifi/rtl8192ee/trx.c
··· 419 419 * Notice: this is diff with windows define 420 420 */ 421 421 rx_status->rate_idx = rtlwifi_rate_mapping(hw, status->is_ht, 422 - status->rate); 422 + false, status->rate); 423 423 424 424 rx_status->mactime = status->timestamp_low; 425 425 if (phystatus) {
+1 -1
drivers/net/wireless/rtlwifi/rtl8192se/trx.c
··· 319 319 } 320 320 321 321 rx_status->rate_idx = rtlwifi_rate_mapping(hw, stats->is_ht, 322 - stats->rate); 322 + false, stats->rate); 323 323 324 324 rx_status->mactime = stats->timestamp_low; 325 325 if (phystatus) {
+1 -1
drivers/net/wireless/rtlwifi/rtl8723ae/trx.c
··· 346 346 * Notice: this is diff with windows define 347 347 */ 348 348 rx_status->rate_idx = rtlwifi_rate_mapping(hw, status->is_ht, 349 - status->rate); 349 + false, status->rate); 350 350 351 351 rx_status->mactime = status->timestamp_low; 352 352 if (phystatus == true) {
+1 -1
drivers/net/wireless/rtlwifi/rtl8723be/trx.c
··· 401 401 * are use (RX_FLAG_HT) 402 402 */ 403 403 rx_status->rate_idx = rtlwifi_rate_mapping(hw, status->is_ht, 404 - status->rate); 404 + false, status->rate); 405 405 406 406 rx_status->mactime = status->timestamp_low; 407 407 if (phystatus) {
+3 -229
drivers/net/wireless/rtlwifi/rtl8821ae/trx.c
··· 48 48 return skb->priority; 49 49 } 50 50 51 - /* mac80211's rate_idx is like this: 52 - * 53 - * 2.4G band:rx_status->band == IEEE80211_BAND_2GHZ 54 - * 55 - * B/G rate: 56 - * (rx_status->flag & RX_FLAG_HT) = 0, 57 - * DESC_RATE1M-->DESC_RATE54M ==> idx is 0-->11, 58 - * 59 - * N rate: 60 - * (rx_status->flag & RX_FLAG_HT) = 1, 61 - * DESC_RATEMCS0-->DESC_RATEMCS15 ==> idx is 0-->15 62 - * 63 - * 5G band:rx_status->band == IEEE80211_BAND_5GHZ 64 - * A rate: 65 - * (rx_status->flag & RX_FLAG_HT) = 0, 66 - * DESC_RATE6M-->DESC_RATE54M ==> idx is 0-->7, 67 - * 68 - * N rate: 69 - * (rx_status->flag & RX_FLAG_HT) = 1, 70 - * DESC_RATEMCS0-->DESC_RATEMCS15 ==> idx is 0-->15 71 - */ 72 - static int _rtl8821ae_rate_mapping(struct ieee80211_hw *hw, 73 - bool isht, bool isvht, u8 desc_rate) 74 - { 75 - int rate_idx; 76 - 77 - if (!isht) { 78 - if (IEEE80211_BAND_2GHZ == hw->conf.chandef.chan->band) { 79 - switch (desc_rate) { 80 - case DESC_RATE1M: 81 - rate_idx = 0; 82 - break; 83 - case DESC_RATE2M: 84 - rate_idx = 1; 85 - break; 86 - case DESC_RATE5_5M: 87 - rate_idx = 2; 88 - break; 89 - case DESC_RATE11M: 90 - rate_idx = 3; 91 - break; 92 - case DESC_RATE6M: 93 - rate_idx = 4; 94 - break; 95 - case DESC_RATE9M: 96 - rate_idx = 5; 97 - break; 98 - case DESC_RATE12M: 99 - rate_idx = 6; 100 - break; 101 - case DESC_RATE18M: 102 - rate_idx = 7; 103 - break; 104 - case DESC_RATE24M: 105 - rate_idx = 8; 106 - break; 107 - case DESC_RATE36M: 108 - rate_idx = 9; 109 - break; 110 - case DESC_RATE48M: 111 - rate_idx = 10; 112 - break; 113 - case DESC_RATE54M: 114 - rate_idx = 11; 115 - break; 116 - default: 117 - rate_idx = 0; 118 - break; 119 - } 120 - } else { 121 - switch (desc_rate) { 122 - case DESC_RATE6M: 123 - rate_idx = 0; 124 - break; 125 - case DESC_RATE9M: 126 - rate_idx = 1; 127 - break; 128 - case DESC_RATE12M: 129 - rate_idx = 2; 130 - break; 131 - case DESC_RATE18M: 132 - rate_idx = 3; 133 - break; 134 - case DESC_RATE24M: 135 - rate_idx = 4; 136 - break; 137 - case DESC_RATE36M: 138 - rate_idx = 5; 139 - break; 140 - case DESC_RATE48M: 141 - rate_idx = 6; 142 - break; 143 - case DESC_RATE54M: 144 - rate_idx = 7; 145 - break; 146 - default: 147 - rate_idx = 0; 148 - break; 149 - } 150 - } 151 - } else { 152 - switch (desc_rate) { 153 - case DESC_RATEMCS0: 154 - rate_idx = 0; 155 - break; 156 - case DESC_RATEMCS1: 157 - rate_idx = 1; 158 - break; 159 - case DESC_RATEMCS2: 160 - rate_idx = 2; 161 - break; 162 - case DESC_RATEMCS3: 163 - rate_idx = 3; 164 - break; 165 - case DESC_RATEMCS4: 166 - rate_idx = 4; 167 - break; 168 - case DESC_RATEMCS5: 169 - rate_idx = 5; 170 - break; 171 - case DESC_RATEMCS6: 172 - rate_idx = 6; 173 - break; 174 - case DESC_RATEMCS7: 175 - rate_idx = 7; 176 - break; 177 - case DESC_RATEMCS8: 178 - rate_idx = 8; 179 - break; 180 - case DESC_RATEMCS9: 181 - rate_idx = 9; 182 - break; 183 - case DESC_RATEMCS10: 184 - rate_idx = 10; 185 - break; 186 - case DESC_RATEMCS11: 187 - rate_idx = 11; 188 - break; 189 - case DESC_RATEMCS12: 190 - rate_idx = 12; 191 - break; 192 - case DESC_RATEMCS13: 193 - rate_idx = 13; 194 - break; 195 - case DESC_RATEMCS14: 196 - rate_idx = 14; 197 - break; 198 - case DESC_RATEMCS15: 199 - rate_idx = 15; 200 - break; 201 - default: 202 - rate_idx = 0; 203 - break; 204 - } 205 - } 206 - 207 - if (isvht) { 208 - switch (desc_rate) { 209 - case DESC_RATEVHT1SS_MCS0: 210 - rate_idx = 0; 211 - break; 212 - case DESC_RATEVHT1SS_MCS1: 213 - rate_idx = 1; 214 - break; 215 - case DESC_RATEVHT1SS_MCS2: 216 - rate_idx = 2; 217 - break; 218 - case DESC_RATEVHT1SS_MCS3: 219 - rate_idx = 3; 220 - break; 221 - case DESC_RATEVHT1SS_MCS4: 222 - rate_idx = 4; 223 - break; 224 - case DESC_RATEVHT1SS_MCS5: 225 - rate_idx = 5; 226 - break; 227 - case DESC_RATEVHT1SS_MCS6: 228 - rate_idx = 6; 229 - break; 230 - case DESC_RATEVHT1SS_MCS7: 231 - rate_idx = 7; 232 - break; 233 - case DESC_RATEVHT1SS_MCS8: 234 - rate_idx = 8; 235 - break; 236 - case DESC_RATEVHT1SS_MCS9: 237 - rate_idx = 9; 238 - break; 239 - case DESC_RATEVHT2SS_MCS0: 240 - rate_idx = 0; 241 - break; 242 - case DESC_RATEVHT2SS_MCS1: 243 - rate_idx = 1; 244 - break; 245 - case DESC_RATEVHT2SS_MCS2: 246 - rate_idx = 2; 247 - break; 248 - case DESC_RATEVHT2SS_MCS3: 249 - rate_idx = 3; 250 - break; 251 - case DESC_RATEVHT2SS_MCS4: 252 - rate_idx = 4; 253 - break; 254 - case DESC_RATEVHT2SS_MCS5: 255 - rate_idx = 5; 256 - break; 257 - case DESC_RATEVHT2SS_MCS6: 258 - rate_idx = 6; 259 - break; 260 - case DESC_RATEVHT2SS_MCS7: 261 - rate_idx = 7; 262 - break; 263 - case DESC_RATEVHT2SS_MCS8: 264 - rate_idx = 8; 265 - break; 266 - case DESC_RATEVHT2SS_MCS9: 267 - rate_idx = 9; 268 - break; 269 - default: 270 - rate_idx = 0; 271 - break; 272 - } 273 - } 274 - return rate_idx; 275 - } 276 - 277 51 static u16 odm_cfo(char value) 278 52 { 279 53 int ret_val; ··· 540 766 * supported rates or MCS index if HT rates 541 767 * are use (RX_FLAG_HT) 542 768 */ 543 - rx_status->rate_idx = 544 - _rtl8821ae_rate_mapping(hw, status->is_ht, 545 - status->is_vht, status->rate); 769 + rx_status->rate_idx = rtlwifi_rate_mapping(hw, status->is_ht, 770 + status->is_vht, 771 + status->rate); 546 772 547 773 rx_status->mactime = status->timestamp_low; 548 774 if (phystatus) {