hc
2024-05-16 8d2a02b24d66aa359e83eebc1ed3c0f85367a1cb
kernel/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/mac.c
....@@ -1,27 +1,5 @@
1
-/******************************************************************************
2
- *
3
- * Copyright(c) 2009-2012 Realtek Corporation. All rights reserved.
4
- *
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
7
- * published by the Free Software Foundation.
8
- *
9
- * This program is distributed in the hope that it will be useful, but WITHOUT
10
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12
- * more details.
13
- *
14
- * The full GNU General Public License is included in this distribution in the
15
- * file called LICENSE.
16
- *
17
- * Contact Information:
18
- * wlanfae <wlanfae@realtek.com>
19
- * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
20
- * Hsinchu 300, Taiwan.
21
- *
22
- * Larry Finger <Larry.Finger@lwfinger.net>
23
- *
24
-****************************************************************************/
1
+// SPDX-License-Identifier: GPL-2.0
2
+/* Copyright(c) 2009-2012 Realtek Corporation.*/
253
264 #include "../wifi.h"
275 #include "../pci.h"
....@@ -45,7 +23,6 @@
4523 #define LINK_Q ui_link_quality
4624 #define RX_EVM rx_evm_percentage
4725 #define RX_SIGQ rx_mimo_sig_qual
48
-
4926
5027 void rtl92c_read_chip_version(struct ieee80211_hw *hw)
5128 {
....@@ -114,24 +91,24 @@
11491 versionid = "UNKNOWN";
11592 break;
11693 }
117
- RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
118
- "Chip Version ID: %s\n", versionid);
94
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE,
95
+ "Chip Version ID: %s\n", versionid);
11996
12097 if (IS_92C_SERIAL(rtlhal->version))
12198 rtlphy->rf_type =
12299 (IS_92C_1T2R(rtlhal->version)) ? RF_1T2R : RF_2T2R;
123100 else
124101 rtlphy->rf_type = RF_1T1R;
125
- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
126
- "Chip RF Type: %s\n",
127
- rtlphy->rf_type == RF_2T2R ? "RF_2T2R" : "RF_1T1R");
102
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
103
+ "Chip RF Type: %s\n",
104
+ rtlphy->rf_type == RF_2T2R ? "RF_2T2R" : "RF_1T1R");
128105 if (get_rf_type(rtlphy) == RF_1T1R)
129106 rtlpriv->dm.rfpath_rxenable[0] = true;
130107 else
131108 rtlpriv->dm.rfpath_rxenable[0] =
132109 rtlpriv->dm.rfpath_rxenable[1] = true;
133
- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "VersionID = 0x%4x\n",
134
- rtlhal->version);
110
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "VersionID = 0x%4x\n",
111
+ rtlhal->version);
135112 }
136113
137114 /**
....@@ -165,6 +142,7 @@
165142 } while (++count);
166143 return status;
167144 }
145
+
168146 /**
169147 * rtl92c_init_LLT_table - Init LLT table
170148 * @io: io callback
....@@ -180,14 +158,14 @@
180158
181159 for (i = 0; i < (boundary - 1); i++) {
182160 rst = rtl92c_llt_write(hw, i , i + 1);
183
- if (true != rst) {
161
+ if (!rst) {
184162 pr_err("===> %s #1 fail\n", __func__);
185163 return rst;
186164 }
187165 }
188166 /* end of list */
189167 rst = rtl92c_llt_write(hw, (boundary - 1), 0xFF);
190
- if (true != rst) {
168
+ if (!rst) {
191169 pr_err("===> %s #2 fail\n", __func__);
192170 return rst;
193171 }
....@@ -198,19 +176,20 @@
198176 */
199177 for (i = boundary; i < LLT_LAST_ENTRY_OF_TX_PKT_BUFFER; i++) {
200178 rst = rtl92c_llt_write(hw, i, (i + 1));
201
- if (true != rst) {
179
+ if (!rst) {
202180 pr_err("===> %s #3 fail\n", __func__);
203181 return rst;
204182 }
205183 }
206184 /* Let last entry point to the start entry of ring buffer */
207185 rst = rtl92c_llt_write(hw, LLT_LAST_ENTRY_OF_TX_PKT_BUFFER, boundary);
208
- if (true != rst) {
186
+ if (!rst) {
209187 pr_err("===> %s #4 fail\n", __func__);
210188 return rst;
211189 }
212190 return rst;
213191 }
192
+
214193 void rtl92c_set_key(struct ieee80211_hw *hw, u32 key_index,
215194 u8 *p_macaddr, bool is_group, u8 enc_algo,
216195 bool is_wepkey, bool clear_all)
....@@ -236,7 +215,7 @@
236215 u8 cam_offset = 0;
237216 u8 clear_number = 5;
238217
239
- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "clear_all\n");
218
+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, "clear_all\n");
240219 for (idx = 0; idx < clear_number; idx++) {
241220 rtl_cam_mark_invalid(hw, cam_offset + idx);
242221 rtl_cam_empty_entry(hw, cam_offset + idx);
....@@ -290,30 +269,30 @@
290269 }
291270 }
292271 if (rtlpriv->sec.key_len[key_index] == 0) {
293
- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
294
- "delete one entry\n");
272
+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
273
+ "delete one entry\n");
295274 if (mac->opmode == NL80211_IFTYPE_AP ||
296275 mac->opmode == NL80211_IFTYPE_MESH_POINT)
297276 rtl_cam_del_entry(hw, p_macaddr);
298277 rtl_cam_delete_one_entry(hw, p_macaddr, entry_id);
299278 } else {
300
- RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD,
301
- "The insert KEY length is %d\n",
279
+ rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD,
280
+ "The insert KEY length is %d\n",
302281 rtlpriv->sec.key_len[PAIRWISE_KEYIDX]);
303
- RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD,
304
- "The insert KEY is %x %x\n",
305
- rtlpriv->sec.key_buf[0][0],
306
- rtlpriv->sec.key_buf[0][1]);
307
- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
308
- "add one entry\n");
282
+ rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD,
283
+ "The insert KEY is %x %x\n",
284
+ rtlpriv->sec.key_buf[0][0],
285
+ rtlpriv->sec.key_buf[0][1]);
286
+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
287
+ "add one entry\n");
309288 if (is_pairwise) {
310289 RT_PRINT_DATA(rtlpriv, COMP_SEC, DBG_LOUD,
311290 "Pairwise Key content",
312291 rtlpriv->sec.pairwise_key,
313292 rtlpriv->sec.
314293 key_len[PAIRWISE_KEYIDX]);
315
- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
316
- "set Pairwise key\n");
294
+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
295
+ "set Pairwise key\n");
317296
318297 rtl_cam_add_one_entry(hw, macaddr, key_index,
319298 entry_id, enc_algo,
....@@ -321,8 +300,8 @@
321300 rtlpriv->sec.
322301 key_buf[key_index]);
323302 } else {
324
- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
325
- "set group key\n");
303
+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
304
+ "set group key\n");
326305 if (mac->opmode == NL80211_IFTYPE_ADHOC) {
327306 rtl_cam_add_one_entry(hw,
328307 rtlefuse->dev_addr,
....@@ -392,6 +371,7 @@
392371 void rtl92c_init_driver_info_size(struct ieee80211_hw *hw, u8 size)
393372 {
394373 struct rtl_priv *rtlpriv = rtl_priv(hw);
374
+
395375 rtl_write_byte(rtlpriv, REG_RX_DRVINFO_SZ, size);
396376 }
397377
....@@ -403,27 +383,27 @@
403383 switch (type) {
404384 case NL80211_IFTYPE_UNSPECIFIED:
405385 value = NT_NO_LINK;
406
- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
407
- "Set Network type to NO LINK!\n");
386
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
387
+ "Set Network type to NO LINK!\n");
408388 break;
409389 case NL80211_IFTYPE_ADHOC:
410390 value = NT_LINK_AD_HOC;
411
- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
412
- "Set Network type to Ad Hoc!\n");
391
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
392
+ "Set Network type to Ad Hoc!\n");
413393 break;
414394 case NL80211_IFTYPE_STATION:
415395 value = NT_LINK_AP;
416
- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
417
- "Set Network type to STA!\n");
396
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
397
+ "Set Network type to STA!\n");
418398 break;
419399 case NL80211_IFTYPE_AP:
420400 value = NT_AS_AP;
421
- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
422
- "Set Network type to AP!\n");
401
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
402
+ "Set Network type to AP!\n");
423403 break;
424404 default:
425
- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
426
- "Network type %d not supported!\n", type);
405
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
406
+ "Network type %d not supported!\n", type);
427407 return -EOPNOTSUPP;
428408 }
429409 rtl_write_byte(rtlpriv, MSR, value);
....@@ -587,60 +567,6 @@
587567
588568 /*==============================================================*/
589569
590
-static u8 _rtl92c_query_rxpwrpercentage(s8 antpower)
591
-{
592
- if ((antpower <= -100) || (antpower >= 20))
593
- return 0;
594
- else if (antpower >= 0)
595
- return 100;
596
- else
597
- return 100 + antpower;
598
-}
599
-
600
-static u8 _rtl92c_evm_db_to_percentage(s8 value)
601
-{
602
- s8 ret_val;
603
-
604
- ret_val = value;
605
- if (ret_val >= 0)
606
- ret_val = 0;
607
- if (ret_val <= -33)
608
- ret_val = -33;
609
- ret_val = 0 - ret_val;
610
- ret_val *= 3;
611
- if (ret_val == 99)
612
- ret_val = 100;
613
- return ret_val;
614
-}
615
-
616
-static long _rtl92c_signal_scale_mapping(struct ieee80211_hw *hw,
617
- long currsig)
618
-{
619
- long retsig;
620
-
621
- if (currsig >= 61 && currsig <= 100)
622
- retsig = 90 + ((currsig - 60) / 4);
623
- else if (currsig >= 41 && currsig <= 60)
624
- retsig = 78 + ((currsig - 40) / 2);
625
- else if (currsig >= 31 && currsig <= 40)
626
- retsig = 66 + (currsig - 30);
627
- else if (currsig >= 21 && currsig <= 30)
628
- retsig = 54 + (currsig - 20);
629
- else if (currsig >= 5 && currsig <= 20)
630
- retsig = 42 + (((currsig - 5) * 2) / 3);
631
- else if (currsig == 4)
632
- retsig = 36;
633
- else if (currsig == 3)
634
- retsig = 27;
635
- else if (currsig == 2)
636
- retsig = 18;
637
- else if (currsig == 1)
638
- retsig = 9;
639
- else
640
- retsig = currsig;
641
- return retsig;
642
-}
643
-
644570 static void _rtl92c_query_rxphystatus(struct ieee80211_hw *hw,
645571 struct rtl_stats *pstats,
646572 struct rx_desc_92c *p_desc,
....@@ -658,7 +584,7 @@
658584 u32 rssi, total_rssi = 0;
659585 bool in_powersavemode = false;
660586 bool is_cck_rate;
661
- u8 *pdesc = (u8 *)p_desc;
587
+ __le32 *pdesc = (__le32 *)p_desc;
662588
663589 is_cck_rate = RX_HAL_IS_CCK_RATE(p_desc->rxmcs);
664590 pstats->packet_matchbssid = packet_match_bssid;
....@@ -669,6 +595,7 @@
669595 pstats->RX_SIGQ[1] = -1;
670596 if (is_cck_rate) {
671597 u8 report, cck_highpwr;
598
+
672599 cck_buf = (struct phy_sts_cck_8192s_t *)p_drvinfo;
673600 if (!in_powersavemode)
674601 cck_highpwr = rtlphy->cck_high_power;
....@@ -676,6 +603,7 @@
676603 cck_highpwr = false;
677604 if (!cck_highpwr) {
678605 u8 cck_agc_rpt = cck_buf->cck_agc_rpt;
606
+
679607 report = cck_buf->cck_agc_rpt & 0xc0;
680608 report = report >> 6;
681609 switch (report) {
....@@ -694,6 +622,7 @@
694622 }
695623 } else {
696624 u8 cck_agc_rpt = cck_buf->cck_agc_rpt;
625
+
697626 report = p_drvinfo->cfosho[0] & 0x60;
698627 report = report >> 5;
699628 switch (report) {
....@@ -711,11 +640,12 @@
711640 break;
712641 }
713642 }
714
- pwdb_all = _rtl92c_query_rxpwrpercentage(rx_pwr_all);
643
+ pwdb_all = rtl_query_rxpwrpercentage(rx_pwr_all);
715644 pstats->rx_pwdb_all = pwdb_all;
716645 pstats->recvsignalpower = rx_pwr_all;
717646 if (packet_match_bssid) {
718647 u8 sq;
648
+
719649 if (pstats->rx_pwdb_all > 40)
720650 sq = 100;
721651 else {
....@@ -739,7 +669,7 @@
739669 rf_rx_num++;
740670 rx_pwr[i] =
741671 ((p_drvinfo->gain_trsw[i] & 0x3f) * 2) - 110;
742
- rssi = _rtl92c_query_rxpwrpercentage(rx_pwr[i]);
672
+ rssi = rtl_query_rxpwrpercentage(rx_pwr[i]);
743673 total_rssi += rssi;
744674 rtlpriv->stats.rx_snr_db[i] =
745675 (long)(p_drvinfo->rxsnr[i] / 2);
....@@ -748,18 +678,18 @@
748678 pstats->rx_mimo_signalstrength[i] = (u8) rssi;
749679 }
750680 rx_pwr_all = ((p_drvinfo->pwdb_all >> 1) & 0x7f) - 110;
751
- pwdb_all = _rtl92c_query_rxpwrpercentage(rx_pwr_all);
681
+ pwdb_all = rtl_query_rxpwrpercentage(rx_pwr_all);
752682 pstats->rx_pwdb_all = pwdb_all;
753683 pstats->rxpower = rx_pwr_all;
754684 pstats->recvsignalpower = rx_pwr_all;
755
- if (GET_RX_DESC_RX_MCS(pdesc) &&
756
- GET_RX_DESC_RX_MCS(pdesc) >= DESC_RATEMCS8 &&
757
- GET_RX_DESC_RX_MCS(pdesc) <= DESC_RATEMCS15)
685
+ if (get_rx_desc_rx_mcs(pdesc) &&
686
+ get_rx_desc_rx_mcs(pdesc) >= DESC_RATEMCS8 &&
687
+ get_rx_desc_rx_mcs(pdesc) <= DESC_RATEMCS15)
758688 max_spatial_stream = 2;
759689 else
760690 max_spatial_stream = 1;
761691 for (i = 0; i < max_spatial_stream; i++) {
762
- evm = _rtl92c_evm_db_to_percentage(p_drvinfo->rxevm[i]);
692
+ evm = rtl_evm_db_to_percentage(p_drvinfo->rxevm[i]);
763693 if (packet_match_bssid) {
764694 if (i == 0)
765695 pstats->signalquality =
....@@ -771,11 +701,10 @@
771701 }
772702 if (is_cck_rate)
773703 pstats->signalstrength =
774
- (u8) (_rtl92c_signal_scale_mapping(hw, pwdb_all));
704
+ (u8)(rtl_signal_scale_mapping(hw, pwdb_all));
775705 else if (rf_rx_num != 0)
776706 pstats->signalstrength =
777
- (u8) (_rtl92c_signal_scale_mapping
778
- (hw, total_rssi /= rf_rx_num));
707
+ (u8)(rtl_signal_scale_mapping(hw, total_rssi /= rf_rx_num));
779708 }
780709
781710 void rtl92c_translate_rx_signal_stuff(struct ieee80211_hw *hw,