diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
commit | 8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch) | |
tree | a8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /drivers/net/wireless/rtlwifi/rtl8192cu/mac.c | |
parent | 406089d01562f1e2bf9f089fd7637009ebaad589 (diff) |
Patched in Tegra support.
Diffstat (limited to 'drivers/net/wireless/rtlwifi/rtl8192cu/mac.c')
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192cu/mac.c | 171 |
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 | ||
52 | void rtl92c_read_chip_version(struct ieee80211_hw *hw) | 54 | void 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 | ||
445 | void rtl92c_init_driver_info_size(struct ieee80211_hw *hw, u8 size) | 465 | void 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, |