aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
committerJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
commit8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch)
treea8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /drivers/net/wireless/rtlwifi/rtl8192cu/mac.c
parent406089d01562f1e2bf9f089fd7637009ebaad589 (diff)
Patched in Tegra support.
Diffstat (limited to 'drivers/net/wireless/rtlwifi/rtl8192cu/mac.c')
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/mac.c171
1 files changed, 98 insertions, 73 deletions
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c
index 32ff959a025..194fc693c1f 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c
@@ -1,6 +1,6 @@
1/****************************************************************************** 1/******************************************************************************
2 * 2 *
3 * Copyright(c) 2009-2012 Realtek Corporation. All rights reserved. 3 * Copyright(c) 2009-2010 Realtek 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
@@ -27,6 +27,10 @@
27 * 27 *
28****************************************************************************/ 28****************************************************************************/
29 29
30#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
31
32#include <linux/module.h>
33
30#include "../wifi.h" 34#include "../wifi.h"
31#include "../pci.h" 35#include "../pci.h"
32#include "../usb.h" 36#include "../usb.h"
@@ -40,13 +44,11 @@
40#include "mac.h" 44#include "mac.h"
41#include "trx.h" 45#include "trx.h"
42 46
43#include <linux/module.h>
44
45/* macro to shorten lines */ 47/* macro to shorten lines */
46 48
47#define LINK_Q ui_link_quality 49#define LINK_Q ui_link_quality
48#define RX_EVM rx_evm_percentage 50#define RX_EVM rx_evm_percentage
49#define RX_SIGQ rx_mimo_sig_qual 51#define RX_SIGQ rx_mimo_signalquality
50 52
51 53
52void rtl92c_read_chip_version(struct ieee80211_hw *hw) 54void rtl92c_read_chip_version(struct ieee80211_hw *hw)
@@ -55,7 +57,6 @@ void rtl92c_read_chip_version(struct ieee80211_hw *hw)
55 struct rtl_phy *rtlphy = &(rtlpriv->phy); 57 struct rtl_phy *rtlphy = &(rtlpriv->phy);
56 struct rtl_hal *rtlhal = rtl_hal(rtlpriv); 58 struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
57 enum version_8192c chip_version = VERSION_UNKNOWN; 59 enum version_8192c chip_version = VERSION_UNKNOWN;
58 const char *versionid;
59 u32 value32; 60 u32 value32;
60 61
61 value32 = rtl_read_dword(rtlpriv, REG_SYS_CFG); 62 value32 = rtl_read_dword(rtlpriv, REG_SYS_CFG);
@@ -83,69 +84,87 @@ void rtl92c_read_chip_version(struct ieee80211_hw *hw)
83 } 84 }
84 } 85 }
85 rtlhal->version = (enum version_8192c)chip_version; 86 rtlhal->version = (enum version_8192c)chip_version;
86 pr_info("Chip version 0x%x\n", chip_version);
87 switch (rtlhal->version) { 87 switch (rtlhal->version) {
88 case VERSION_NORMAL_TSMC_CHIP_92C_1T2R: 88 case VERSION_NORMAL_TSMC_CHIP_92C_1T2R:
89 versionid = "NORMAL_B_CHIP_92C"; 89 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
90 ("Chip Version ID: VERSION_B_CHIP_92C.\n"));
90 break; 91 break;
91 case VERSION_NORMAL_TSMC_CHIP_92C: 92 case VERSION_NORMAL_TSMC_CHIP_92C:
92 versionid = "NORMAL_TSMC_CHIP_92C"; 93 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
94 ("Chip Version ID: VERSION_NORMAL_TSMC_CHIP_92C.\n"));
93 break; 95 break;
94 case VERSION_NORMAL_TSMC_CHIP_88C: 96 case VERSION_NORMAL_TSMC_CHIP_88C:
95 versionid = "NORMAL_TSMC_CHIP_88C"; 97 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
98 ("Chip Version ID: VERSION_NORMAL_TSMC_CHIP_88C.\n"));
96 break; 99 break;
97 case VERSION_NORMAL_UMC_CHIP_92C_1T2R_A_CUT: 100 case VERSION_NORMAL_UMC_CHIP_92C_1T2R_A_CUT:
98 versionid = "NORMAL_UMC_CHIP_i92C_1T2R_A_CUT"; 101 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
102 ("Chip Version ID: VERSION_NORMAL_UMC_CHIP_i"
103 "92C_1T2R_A_CUT.\n"));
99 break; 104 break;
100 case VERSION_NORMAL_UMC_CHIP_92C_A_CUT: 105 case VERSION_NORMAL_UMC_CHIP_92C_A_CUT:
101 versionid = "NORMAL_UMC_CHIP_92C_A_CUT"; 106 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
107 ("Chip Version ID: VERSION_NORMAL_UMC_CHIP_"
108 "92C_A_CUT.\n"));
102 break; 109 break;
103 case VERSION_NORMAL_UMC_CHIP_88C_A_CUT: 110 case VERSION_NORMAL_UMC_CHIP_88C_A_CUT:
104 versionid = "NORMAL_UMC_CHIP_88C_A_CUT"; 111 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
112 ("Chip Version ID: VERSION_NORMAL_UMC_CHIP"
113 "_88C_A_CUT.\n"));
105 break; 114 break;
106 case VERSION_NORMAL_UMC_CHIP_92C_1T2R_B_CUT: 115 case VERSION_NORMAL_UMC_CHIP_92C_1T2R_B_CUT:
107 versionid = "NORMAL_UMC_CHIP_92C_1T2R_B_CUT"; 116 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
117 ("Chip Version ID: VERSION_NORMAL_UMC_CHIP"
118 "_92C_1T2R_B_CUT.\n"));
108 break; 119 break;
109 case VERSION_NORMAL_UMC_CHIP_92C_B_CUT: 120 case VERSION_NORMAL_UMC_CHIP_92C_B_CUT:
110 versionid = "NORMAL_UMC_CHIP_92C_B_CUT"; 121 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
122 ("Chip Version ID: VERSION_NORMAL_UMC_CHIP"
123 "_92C_B_CUT.\n"));
111 break; 124 break;
112 case VERSION_NORMAL_UMC_CHIP_88C_B_CUT: 125 case VERSION_NORMAL_UMC_CHIP_88C_B_CUT:
113 versionid = "NORMAL_UMC_CHIP_88C_B_CUT"; 126 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
127 ("Chip Version ID: VERSION_NORMAL_UMC_CHIP"
128 "_88C_B_CUT.\n"));
114 break; 129 break;
115 case VERSION_NORMA_UMC_CHIP_8723_1T1R_A_CUT: 130 case VERSION_NORMA_UMC_CHIP_8723_1T1R_A_CUT:
116 versionid = "NORMAL_UMC_CHIP_8723_1T1R_A_CUT"; 131 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
132 ("Chip Version ID: VERSION_NORMA_UMC_CHIP"
133 "_8723_1T1R_A_CUT.\n"));
117 break; 134 break;
118 case VERSION_NORMA_UMC_CHIP_8723_1T1R_B_CUT: 135 case VERSION_NORMA_UMC_CHIP_8723_1T1R_B_CUT:
119 versionid = "NORMAL_UMC_CHIP_8723_1T1R_B_CUT"; 136 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
137 ("Chip Version ID: VERSION_NORMA_UMC_CHIP"
138 "_8723_1T1R_B_CUT.\n"));
120 break; 139 break;
121 case VERSION_TEST_CHIP_92C: 140 case VERSION_TEST_CHIP_92C:
122 versionid = "TEST_CHIP_92C"; 141 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
142 ("Chip Version ID: VERSION_TEST_CHIP_92C.\n"));
123 break; 143 break;
124 case VERSION_TEST_CHIP_88C: 144 case VERSION_TEST_CHIP_88C:
125 versionid = "TEST_CHIP_88C"; 145 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
146 ("Chip Version ID: VERSION_TEST_CHIP_88C.\n"));
126 break; 147 break;
127 default: 148 default:
128 versionid = "UNKNOWN"; 149 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
150 ("Chip Version ID: ???????????????.\n"));
129 break; 151 break;
130 } 152 }
131 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
132 "Chip Version ID: %s\n", versionid);
133
134 if (IS_92C_SERIAL(rtlhal->version)) 153 if (IS_92C_SERIAL(rtlhal->version))
135 rtlphy->rf_type = 154 rtlphy->rf_type =
136 (IS_92C_1T2R(rtlhal->version)) ? RF_1T2R : RF_2T2R; 155 (IS_92C_1T2R(rtlhal->version)) ? RF_1T2R : RF_2T2R;
137 else 156 else
138 rtlphy->rf_type = RF_1T1R; 157 rtlphy->rf_type = RF_1T1R;
139 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 158 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
140 "Chip RF Type: %s\n", 159 ("Chip RF Type: %s\n", (rtlphy->rf_type == RF_2T2R) ?
141 rtlphy->rf_type == RF_2T2R ? "RF_2T2R" : "RF_1T1R"); 160 "RF_2T2R" : "RF_1T1R"));
142 if (get_rf_type(rtlphy) == RF_1T1R) 161 if (get_rf_type(rtlphy) == RF_1T1R)
143 rtlpriv->dm.rfpath_rxenable[0] = true; 162 rtlpriv->dm.rfpath_rxenable[0] = true;
144 else 163 else
145 rtlpriv->dm.rfpath_rxenable[0] = 164 rtlpriv->dm.rfpath_rxenable[0] =
146 rtlpriv->dm.rfpath_rxenable[1] = true; 165 rtlpriv->dm.rfpath_rxenable[1] = true;
147 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "VersionID = 0x%4x\n", 166 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, ("VersionID = 0x%4x\n",
148 rtlhal->version); 167 rtlhal->version));
149} 168}
150 169
151/** 170/**
@@ -172,8 +191,9 @@ bool rtl92c_llt_write(struct ieee80211_hw *hw, u32 address, u32 data)
172 break; 191 break;
173 if (count > POLLING_LLT_THRESHOLD) { 192 if (count > POLLING_LLT_THRESHOLD) {
174 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 193 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
175 "Failed to polling write LLT done at address %d! _LLT_OP_VALUE(%x)\n", 194 ("Failed to polling write LLT done at"
176 address, _LLT_OP_VALUE(value)); 195 " address %d! _LLT_OP_VALUE(%x)\n",
196 address, _LLT_OP_VALUE(value)));
177 status = false; 197 status = false;
178 break; 198 break;
179 } 199 }
@@ -251,7 +271,7 @@ void rtl92c_set_key(struct ieee80211_hw *hw, u32 key_index,
251 u8 cam_offset = 0; 271 u8 cam_offset = 0;
252 u8 clear_number = 5; 272 u8 clear_number = 5;
253 273
254 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "clear_all\n"); 274 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, ("clear_all\n"));
255 for (idx = 0; idx < clear_number; idx++) { 275 for (idx = 0; idx < clear_number; idx++) {
256 rtl_cam_mark_invalid(hw, cam_offset + idx); 276 rtl_cam_mark_invalid(hw, cam_offset + idx);
257 rtl_cam_empty_entry(hw, cam_offset + idx); 277 rtl_cam_empty_entry(hw, cam_offset + idx);
@@ -277,7 +297,7 @@ void rtl92c_set_key(struct ieee80211_hw *hw, u32 key_index,
277 break; 297 break;
278 default: 298 default:
279 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 299 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
280 "illegal switch case\n"); 300 ("iillegal switch case\n"));
281 enc_algo = CAM_TKIP; 301 enc_algo = CAM_TKIP;
282 break; 302 break;
283 } 303 }
@@ -296,26 +316,26 @@ void rtl92c_set_key(struct ieee80211_hw *hw, u32 key_index,
296 } 316 }
297 if (rtlpriv->sec.key_len[key_index] == 0) { 317 if (rtlpriv->sec.key_len[key_index] == 0) {
298 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, 318 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
299 "delete one entry\n"); 319 ("delete one entry\n"));
300 rtl_cam_delete_one_entry(hw, p_macaddr, entry_id); 320 rtl_cam_delete_one_entry(hw, p_macaddr, entry_id);
301 } else { 321 } else {
302 RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, 322 RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD,
303 "The insert KEY length is %d\n", 323 ("The insert KEY length is %d\n",
304 rtlpriv->sec.key_len[PAIRWISE_KEYIDX]); 324 rtlpriv->sec.key_len[PAIRWISE_KEYIDX]));
305 RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, 325 RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD,
306 "The insert KEY is %x %x\n", 326 ("The insert KEY is %x %x\n",
307 rtlpriv->sec.key_buf[0][0], 327 rtlpriv->sec.key_buf[0][0],
308 rtlpriv->sec.key_buf[0][1]); 328 rtlpriv->sec.key_buf[0][1]));
309 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, 329 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
310 "add one entry\n"); 330 ("add one entry\n"));
311 if (is_pairwise) { 331 if (is_pairwise) {
312 RT_PRINT_DATA(rtlpriv, COMP_SEC, DBG_LOUD, 332 RT_PRINT_DATA(rtlpriv, COMP_SEC, DBG_LOUD,
313 "Pairwise Key content", 333 "Pairwiase Key content :",
314 rtlpriv->sec.pairwise_key, 334 rtlpriv->sec.pairwise_key,
315 rtlpriv->sec. 335 rtlpriv->sec.
316 key_len[PAIRWISE_KEYIDX]); 336 key_len[PAIRWISE_KEYIDX]);
317 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, 337 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
318 "set Pairwise key\n"); 338 ("set Pairwiase key\n"));
319 339
320 rtl_cam_add_one_entry(hw, macaddr, key_index, 340 rtl_cam_add_one_entry(hw, macaddr, key_index,
321 entry_id, enc_algo, 341 entry_id, enc_algo,
@@ -324,7 +344,7 @@ void rtl92c_set_key(struct ieee80211_hw *hw, u32 key_index,
324 key_buf[key_index]); 344 key_buf[key_index]);
325 } else { 345 } else {
326 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, 346 RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
327 "set group key\n"); 347 ("set group key\n"));
328 if (mac->opmode == NL80211_IFTYPE_ADHOC) { 348 if (mac->opmode == NL80211_IFTYPE_ADHOC) {
329 rtl_cam_add_one_entry(hw, 349 rtl_cam_add_one_entry(hw,
330 rtlefuse->dev_addr, 350 rtlefuse->dev_addr,
@@ -400,8 +420,8 @@ void rtl92c_set_qos(struct ieee80211_hw *hw, int aci)
400 AC_PARAM_ECW_MAX_OFFSET; 420 AC_PARAM_ECW_MAX_OFFSET;
401 u4b_ac_param |= (u32) le16_to_cpu(mac->ac[aci].tx_op) << 421 u4b_ac_param |= (u32) le16_to_cpu(mac->ac[aci].tx_op) <<
402 AC_PARAM_TXOP_OFFSET; 422 AC_PARAM_TXOP_OFFSET;
403 RT_TRACE(rtlpriv, COMP_QOS, DBG_LOUD, "queue:%x, ac_param:%x\n", 423 RT_TRACE(rtlpriv, COMP_QOS, DBG_LOUD,
404 aci, u4b_ac_param); 424 ("queue:%x, ac_param:%x\n", aci, u4b_ac_param));
405 switch (aci) { 425 switch (aci) {
406 case AC1_BK: 426 case AC1_BK:
407 rtl_write_dword(rtlpriv, REG_EDCA_BK_PARAM, u4b_ac_param); 427 rtl_write_dword(rtlpriv, REG_EDCA_BK_PARAM, u4b_ac_param);
@@ -416,7 +436,7 @@ void rtl92c_set_qos(struct ieee80211_hw *hw, int aci)
416 rtl_write_dword(rtlpriv, REG_EDCA_VO_PARAM, u4b_ac_param); 436 rtl_write_dword(rtlpriv, REG_EDCA_VO_PARAM, u4b_ac_param);
417 break; 437 break;
418 default: 438 default:
419 RT_ASSERT(false, "invalid aci: %d !\n", aci); 439 RT_ASSERT(false, ("invalid aci: %d !\n", aci));
420 break; 440 break;
421 } 441 }
422} 442}
@@ -432,14 +452,14 @@ void rtl92c_set_mac_addr(struct ieee80211_hw *hw, const u8 *addr)
432 for (i = 0 ; i < ETH_ALEN ; i++) 452 for (i = 0 ; i < ETH_ALEN ; i++)
433 rtl_write_byte(rtlpriv, (REG_MACID + i), *(addr+i)); 453 rtl_write_byte(rtlpriv, (REG_MACID + i), *(addr+i));
434 454
435 RT_TRACE(rtlpriv, COMP_CMD, DBG_DMESG, 455 RT_TRACE(rtlpriv, COMP_CMD, DBG_DMESG, ("MAC Address: %02X-%02X-%02X-"
436 "MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", 456 "%02X-%02X-%02X\n",
437 rtl_read_byte(rtlpriv, REG_MACID), 457 rtl_read_byte(rtlpriv, REG_MACID),
438 rtl_read_byte(rtlpriv, REG_MACID+1), 458 rtl_read_byte(rtlpriv, REG_MACID+1),
439 rtl_read_byte(rtlpriv, REG_MACID+2), 459 rtl_read_byte(rtlpriv, REG_MACID+2),
440 rtl_read_byte(rtlpriv, REG_MACID+3), 460 rtl_read_byte(rtlpriv, REG_MACID+3),
441 rtl_read_byte(rtlpriv, REG_MACID+4), 461 rtl_read_byte(rtlpriv, REG_MACID+4),
442 rtl_read_byte(rtlpriv, REG_MACID+5)); 462 rtl_read_byte(rtlpriv, REG_MACID+5)));
443} 463}
444 464
445void rtl92c_init_driver_info_size(struct ieee80211_hw *hw, u8 size) 465void rtl92c_init_driver_info_size(struct ieee80211_hw *hw, u8 size)
@@ -457,26 +477,26 @@ int rtl92c_set_network_type(struct ieee80211_hw *hw, enum nl80211_iftype type)
457 case NL80211_IFTYPE_UNSPECIFIED: 477 case NL80211_IFTYPE_UNSPECIFIED:
458 value = NT_NO_LINK; 478 value = NT_NO_LINK;
459 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, 479 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
460 "Set Network type to NO LINK!\n"); 480 ("Set Network type to NO LINK!\n"));
461 break; 481 break;
462 case NL80211_IFTYPE_ADHOC: 482 case NL80211_IFTYPE_ADHOC:
463 value = NT_LINK_AD_HOC; 483 value = NT_LINK_AD_HOC;
464 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, 484 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
465 "Set Network type to Ad Hoc!\n"); 485 ("Set Network type to Ad Hoc!\n"));
466 break; 486 break;
467 case NL80211_IFTYPE_STATION: 487 case NL80211_IFTYPE_STATION:
468 value = NT_LINK_AP; 488 value = NT_LINK_AP;
469 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, 489 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
470 "Set Network type to STA!\n"); 490 ("Set Network type to STA!\n"));
471 break; 491 break;
472 case NL80211_IFTYPE_AP: 492 case NL80211_IFTYPE_AP:
473 value = NT_AS_AP; 493 value = NT_AS_AP;
474 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, 494 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
475 "Set Network type to AP!\n"); 495 ("Set Network type to AP!\n"));
476 break; 496 break;
477 default: 497 default:
478 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, 498 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
479 "Network type %d not supported!\n", type); 499 ("Network type %d not support!\n", type));
480 return -EOPNOTSUPP; 500 return -EOPNOTSUPP;
481 } 501 }
482 rtl_write_byte(rtlpriv, (REG_CR + 2), value); 502 rtl_write_byte(rtlpriv, (REG_CR + 2), value);
@@ -872,8 +892,8 @@ static void _rtl92c_query_rxphystatus(struct ieee80211_hw *hw,
872 pstats->rxpower = rx_pwr_all; 892 pstats->rxpower = rx_pwr_all;
873 pstats->recvsignalpower = rx_pwr_all; 893 pstats->recvsignalpower = rx_pwr_all;
874 if (GET_RX_DESC_RX_MCS(pdesc) && 894 if (GET_RX_DESC_RX_MCS(pdesc) &&
875 GET_RX_DESC_RX_MCS(pdesc) >= DESC92_RATEMCS8 && 895 GET_RX_DESC_RX_MCS(pdesc) >= DESC92C_RATEMCS8 &&
876 GET_RX_DESC_RX_MCS(pdesc) <= DESC92_RATEMCS15) 896 GET_RX_DESC_RX_MCS(pdesc) <= DESC92C_RATEMCS15)
877 max_spatial_stream = 2; 897 max_spatial_stream = 2;
878 else 898 else
879 max_spatial_stream = 1; 899 max_spatial_stream = 1;
@@ -982,27 +1002,32 @@ static void _rtl92c_process_pwdb(struct ieee80211_hw *hw,
982{ 1002{
983 struct rtl_priv *rtlpriv = rtl_priv(hw); 1003 struct rtl_priv *rtlpriv = rtl_priv(hw);
984 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 1004 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
985 long undec_sm_pwdb = 0; 1005 long undecorated_smoothed_pwdb = 0;
986 1006
987 if (mac->opmode == NL80211_IFTYPE_ADHOC) { 1007 if (mac->opmode == NL80211_IFTYPE_ADHOC) {
988 return; 1008 return;
989 } else { 1009 } else {
990 undec_sm_pwdb = rtlpriv->dm.undec_sm_pwdb; 1010 undecorated_smoothed_pwdb =
1011 rtlpriv->dm.undecorated_smoothed_pwdb;
991 } 1012 }
992 if (pstats->packet_toself || pstats->packet_beacon) { 1013 if (pstats->packet_toself || pstats->packet_beacon) {
993 if (undec_sm_pwdb < 0) 1014 if (undecorated_smoothed_pwdb < 0)
994 undec_sm_pwdb = pstats->rx_pwdb_all; 1015 undecorated_smoothed_pwdb = pstats->rx_pwdb_all;
995 if (pstats->rx_pwdb_all > (u32) undec_sm_pwdb) { 1016 if (pstats->rx_pwdb_all > (u32) undecorated_smoothed_pwdb) {
996 undec_sm_pwdb = (((undec_sm_pwdb) * 1017 undecorated_smoothed_pwdb =
1018 (((undecorated_smoothed_pwdb) *
997 (RX_SMOOTH_FACTOR - 1)) + 1019 (RX_SMOOTH_FACTOR - 1)) +
998 (pstats->rx_pwdb_all)) / (RX_SMOOTH_FACTOR); 1020 (pstats->rx_pwdb_all)) / (RX_SMOOTH_FACTOR);
999 undec_sm_pwdb += 1; 1021 undecorated_smoothed_pwdb = undecorated_smoothed_pwdb
1022 + 1;
1000 } else { 1023 } else {
1001 undec_sm_pwdb = (((undec_sm_pwdb) * 1024 undecorated_smoothed_pwdb =
1025 (((undecorated_smoothed_pwdb) *
1002 (RX_SMOOTH_FACTOR - 1)) + 1026 (RX_SMOOTH_FACTOR - 1)) +
1003 (pstats->rx_pwdb_all)) / (RX_SMOOTH_FACTOR); 1027 (pstats->rx_pwdb_all)) / (RX_SMOOTH_FACTOR);
1004 } 1028 }
1005 rtlpriv->dm.undec_sm_pwdb = undec_sm_pwdb; 1029 rtlpriv->dm.undecorated_smoothed_pwdb =
1030 undecorated_smoothed_pwdb;
1006 _rtl92c_update_rxsignalstatistics(hw, pstats); 1031 _rtl92c_update_rxsignalstatistics(hw, pstats);
1007 } 1032 }
1008} 1033}
@@ -1094,14 +1119,14 @@ void rtl92c_translate_rx_signal_stuff(struct ieee80211_hw *hw,
1094 praddr = hdr->addr1; 1119 praddr = hdr->addr1;
1095 packet_matchbssid = 1120 packet_matchbssid =
1096 ((IEEE80211_FTYPE_CTL != type) && 1121 ((IEEE80211_FTYPE_CTL != type) &&
1097 ether_addr_equal(mac->bssid, 1122 (!compare_ether_addr(mac->bssid,
1098 (cpu_fc & IEEE80211_FCTL_TODS) ? hdr->addr1 : 1123 (cpu_fc & IEEE80211_FCTL_TODS) ?
1099 (cpu_fc & IEEE80211_FCTL_FROMDS) ? hdr->addr2 : 1124 hdr->addr1 : (cpu_fc & IEEE80211_FCTL_FROMDS) ?
1100 hdr->addr3) && 1125 hdr->addr2 : hdr->addr3)) &&
1101 (!pstats->hwerror) && (!pstats->crc) && (!pstats->icv)); 1126 (!pstats->hwerror) && (!pstats->crc) && (!pstats->icv));
1102 1127
1103 packet_toself = packet_matchbssid && 1128 packet_toself = packet_matchbssid &&
1104 ether_addr_equal(praddr, rtlefuse->dev_addr); 1129 (!compare_ether_addr(praddr, rtlefuse->dev_addr));
1105 if (ieee80211_is_beacon(fc)) 1130 if (ieee80211_is_beacon(fc))
1106 packet_beacon = true; 1131 packet_beacon = true;
1107 _rtl92c_query_rxphystatus(hw, pstats, pdesc, p_drvinfo, 1132 _rtl92c_query_rxphystatus(hw, pstats, pdesc, p_drvinfo,