1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /* Copyright(c) 2018-2019 Realtek Corporation
19 bool rtw_disable_lps_deep_mode
;
20 EXPORT_SYMBOL(rtw_disable_lps_deep_mode
);
21 bool rtw_bf_support
= true;
22 unsigned int rtw_debug_mask
;
23 EXPORT_SYMBOL(rtw_debug_mask
);
25 module_param_named(disable_lps_deep
, rtw_disable_lps_deep_mode
, bool, 0644);
26 module_param_named(support_bf
, rtw_bf_support
, bool, 0644);
27 module_param_named(debug_mask
, rtw_debug_mask
, uint
, 0644);
29 MODULE_PARM_DESC(disable_lps_deep
, "Set Y to disable Deep PS");
30 MODULE_PARM_DESC(support_bf
, "Set Y to enable beamformee support");
31 MODULE_PARM_DESC(debug_mask
, "Debugging mask");
33 static struct ieee80211_channel rtw_channeltable_2g
[] = {
34 {.center_freq
= 2412, .hw_value
= 1,},
35 {.center_freq
= 2417, .hw_value
= 2,},
36 {.center_freq
= 2422, .hw_value
= 3,},
37 {.center_freq
= 2427, .hw_value
= 4,},
38 {.center_freq
= 2432, .hw_value
= 5,},
39 {.center_freq
= 2437, .hw_value
= 6,},
40 {.center_freq
= 2442, .hw_value
= 7,},
41 {.center_freq
= 2447, .hw_value
= 8,},
42 {.center_freq
= 2452, .hw_value
= 9,},
43 {.center_freq
= 2457, .hw_value
= 10,},
44 {.center_freq
= 2462, .hw_value
= 11,},
45 {.center_freq
= 2467, .hw_value
= 12,},
46 {.center_freq
= 2472, .hw_value
= 13,},
47 {.center_freq
= 2484, .hw_value
= 14,},
50 static struct ieee80211_channel rtw_channeltable_5g
[] = {
51 {.center_freq
= 5180, .hw_value
= 36,},
52 {.center_freq
= 5200, .hw_value
= 40,},
53 {.center_freq
= 5220, .hw_value
= 44,},
54 {.center_freq
= 5240, .hw_value
= 48,},
55 {.center_freq
= 5260, .hw_value
= 52,},
56 {.center_freq
= 5280, .hw_value
= 56,},
57 {.center_freq
= 5300, .hw_value
= 60,},
58 {.center_freq
= 5320, .hw_value
= 64,},
59 {.center_freq
= 5500, .hw_value
= 100,},
60 {.center_freq
= 5520, .hw_value
= 104,},
61 {.center_freq
= 5540, .hw_value
= 108,},
62 {.center_freq
= 5560, .hw_value
= 112,},
63 {.center_freq
= 5580, .hw_value
= 116,},
64 {.center_freq
= 5600, .hw_value
= 120,},
65 {.center_freq
= 5620, .hw_value
= 124,},
66 {.center_freq
= 5640, .hw_value
= 128,},
67 {.center_freq
= 5660, .hw_value
= 132,},
68 {.center_freq
= 5680, .hw_value
= 136,},
69 {.center_freq
= 5700, .hw_value
= 140,},
70 {.center_freq
= 5720, .hw_value
= 144,},
71 {.center_freq
= 5745, .hw_value
= 149,},
72 {.center_freq
= 5765, .hw_value
= 153,},
73 {.center_freq
= 5785, .hw_value
= 157,},
74 {.center_freq
= 5805, .hw_value
= 161,},
75 {.center_freq
= 5825, .hw_value
= 165,
76 .flags
= IEEE80211_CHAN_NO_HT40MINUS
},
79 static struct ieee80211_rate rtw_ratetable
[] = {
80 {.bitrate
= 10, .hw_value
= 0x00,},
81 {.bitrate
= 20, .hw_value
= 0x01,},
82 {.bitrate
= 55, .hw_value
= 0x02,},
83 {.bitrate
= 110, .hw_value
= 0x03,},
84 {.bitrate
= 60, .hw_value
= 0x04,},
85 {.bitrate
= 90, .hw_value
= 0x05,},
86 {.bitrate
= 120, .hw_value
= 0x06,},
87 {.bitrate
= 180, .hw_value
= 0x07,},
88 {.bitrate
= 240, .hw_value
= 0x08,},
89 {.bitrate
= 360, .hw_value
= 0x09,},
90 {.bitrate
= 480, .hw_value
= 0x0a,},
91 {.bitrate
= 540, .hw_value
= 0x0b,},
94 u16
rtw_desc_to_bitrate(u8 desc_rate
)
96 struct ieee80211_rate rate
;
98 if (WARN(desc_rate
>= ARRAY_SIZE(rtw_ratetable
), "invalid desc rate\n"))
101 rate
= rtw_ratetable
[desc_rate
];
106 static struct ieee80211_supported_band rtw_band_2ghz
= {
107 .band
= NL80211_BAND_2GHZ
,
109 .channels
= rtw_channeltable_2g
,
110 .n_channels
= ARRAY_SIZE(rtw_channeltable_2g
),
112 .bitrates
= rtw_ratetable
,
113 .n_bitrates
= ARRAY_SIZE(rtw_ratetable
),
119 static struct ieee80211_supported_band rtw_band_5ghz
= {
120 .band
= NL80211_BAND_5GHZ
,
122 .channels
= rtw_channeltable_5g
,
123 .n_channels
= ARRAY_SIZE(rtw_channeltable_5g
),
125 /* 5G has no CCK rates */
126 .bitrates
= rtw_ratetable
+ 4,
127 .n_bitrates
= ARRAY_SIZE(rtw_ratetable
) - 4,
133 struct rtw_watch_dog_iter_data
{
134 struct rtw_dev
*rtwdev
;
135 struct rtw_vif
*rtwvif
;
138 static void rtw_dynamic_csi_rate(struct rtw_dev
*rtwdev
, struct rtw_vif
*rtwvif
)
140 struct rtw_bf_info
*bf_info
= &rtwdev
->bf_info
;
141 u8 fix_rate_enable
= 0;
144 if (rtwvif
->bfee
.role
!= RTW_BFEE_SU
&&
145 rtwvif
->bfee
.role
!= RTW_BFEE_MU
)
148 rtw_chip_cfg_csi_rate(rtwdev
, rtwdev
->dm_info
.min_rssi
,
149 bf_info
->cur_csi_rpt_rate
,
150 fix_rate_enable
, &new_csi_rate_idx
);
152 if (new_csi_rate_idx
!= bf_info
->cur_csi_rpt_rate
)
153 bf_info
->cur_csi_rpt_rate
= new_csi_rate_idx
;
156 static void rtw_vif_watch_dog_iter(void *data
, u8
*mac
,
157 struct ieee80211_vif
*vif
)
159 struct rtw_watch_dog_iter_data
*iter_data
= data
;
160 struct rtw_vif
*rtwvif
= (struct rtw_vif
*)vif
->drv_priv
;
162 if (vif
->type
== NL80211_IFTYPE_STATION
)
163 if (vif
->bss_conf
.assoc
)
164 iter_data
->rtwvif
= rtwvif
;
166 rtw_dynamic_csi_rate(iter_data
->rtwdev
, rtwvif
);
168 rtwvif
->stats
.tx_unicast
= 0;
169 rtwvif
->stats
.rx_unicast
= 0;
170 rtwvif
->stats
.tx_cnt
= 0;
171 rtwvif
->stats
.rx_cnt
= 0;
174 /* process TX/RX statistics periodically for hardware,
175 * the information helps hardware to enhance performance
177 static void rtw_watch_dog_work(struct work_struct
*work
)
179 struct rtw_dev
*rtwdev
= container_of(work
, struct rtw_dev
,
180 watch_dog_work
.work
);
181 struct rtw_traffic_stats
*stats
= &rtwdev
->stats
;
182 struct rtw_watch_dog_iter_data data
= {};
183 bool busy_traffic
= test_bit(RTW_FLAG_BUSY_TRAFFIC
, rtwdev
->flags
);
186 mutex_lock(&rtwdev
->mutex
);
188 if (!test_bit(RTW_FLAG_RUNNING
, rtwdev
->flags
))
191 ieee80211_queue_delayed_work(rtwdev
->hw
, &rtwdev
->watch_dog_work
,
192 RTW_WATCH_DOG_DELAY_TIME
);
194 if (rtwdev
->stats
.tx_cnt
> 100 || rtwdev
->stats
.rx_cnt
> 100)
195 set_bit(RTW_FLAG_BUSY_TRAFFIC
, rtwdev
->flags
);
197 clear_bit(RTW_FLAG_BUSY_TRAFFIC
, rtwdev
->flags
);
199 if (busy_traffic
!= test_bit(RTW_FLAG_BUSY_TRAFFIC
, rtwdev
->flags
))
200 rtw_coex_wl_status_change_notify(rtwdev
, 0);
202 if (stats
->tx_cnt
> RTW_LPS_THRESHOLD
||
203 stats
->rx_cnt
> RTW_LPS_THRESHOLD
)
208 ewma_tp_add(&stats
->tx_ewma_tp
,
209 (u32
)(stats
->tx_unicast
>> RTW_TP_SHIFT
));
210 ewma_tp_add(&stats
->rx_ewma_tp
,
211 (u32
)(stats
->rx_unicast
>> RTW_TP_SHIFT
));
212 stats
->tx_throughput
= ewma_tp_read(&stats
->tx_ewma_tp
);
213 stats
->rx_throughput
= ewma_tp_read(&stats
->rx_ewma_tp
);
215 /* reset tx/rx statictics */
216 stats
->tx_unicast
= 0;
217 stats
->rx_unicast
= 0;
221 if (test_bit(RTW_FLAG_SCANNING
, rtwdev
->flags
))
224 /* make sure BB/RF is working for dynamic mech */
225 rtw_leave_lps(rtwdev
);
227 rtw_phy_dynamic_mechanism(rtwdev
);
229 data
.rtwdev
= rtwdev
;
230 /* use atomic version to avoid taking local->iflist_mtx mutex */
231 rtw_iterate_vifs_atomic(rtwdev
, rtw_vif_watch_dog_iter
, &data
);
233 /* fw supports only one station associated to enter lps, if there are
234 * more than two stations associated to the AP, then we can not enter
235 * lps, because fw does not handle the overlapped beacon interval
237 * mac80211 should iterate vifs and determine if driver can enter
238 * ps by passing IEEE80211_CONF_PS to us, all we need to do is to
239 * get that vif and check if device is having traffic more than the
242 if (rtwdev
->ps_enabled
&& data
.rtwvif
&& !ps_active
)
243 rtw_enter_lps(rtwdev
, data
.rtwvif
->port
);
245 rtwdev
->watch_dog_cnt
++;
248 mutex_unlock(&rtwdev
->mutex
);
251 static void rtw_c2h_work(struct work_struct
*work
)
253 struct rtw_dev
*rtwdev
= container_of(work
, struct rtw_dev
, c2h_work
);
254 struct sk_buff
*skb
, *tmp
;
256 skb_queue_walk_safe(&rtwdev
->c2h_queue
, skb
, tmp
) {
257 skb_unlink(skb
, &rtwdev
->c2h_queue
);
258 rtw_fw_c2h_cmd_handle(rtwdev
, skb
);
259 dev_kfree_skb_any(skb
);
263 static u8
rtw_acquire_macid(struct rtw_dev
*rtwdev
)
265 unsigned long mac_id
;
267 mac_id
= find_first_zero_bit(rtwdev
->mac_id_map
, RTW_MAX_MAC_ID_NUM
);
268 if (mac_id
< RTW_MAX_MAC_ID_NUM
)
269 set_bit(mac_id
, rtwdev
->mac_id_map
);
274 int rtw_sta_add(struct rtw_dev
*rtwdev
, struct ieee80211_sta
*sta
,
275 struct ieee80211_vif
*vif
)
277 struct rtw_sta_info
*si
= (struct rtw_sta_info
*)sta
->drv_priv
;
280 si
->mac_id
= rtw_acquire_macid(rtwdev
);
281 if (si
->mac_id
>= RTW_MAX_MAC_ID_NUM
)
287 ewma_rssi_init(&si
->avg_rssi
);
288 for (i
= 0; i
< ARRAY_SIZE(sta
->txq
); i
++)
289 rtw_txq_init(rtwdev
, sta
->txq
[i
]);
291 rtw_update_sta_info(rtwdev
, si
);
292 rtw_fw_media_status_report(rtwdev
, si
->mac_id
, true);
295 rtw_info(rtwdev
, "sta %pM joined with macid %d\n",
296 sta
->addr
, si
->mac_id
);
301 void rtw_sta_remove(struct rtw_dev
*rtwdev
, struct ieee80211_sta
*sta
,
304 struct rtw_sta_info
*si
= (struct rtw_sta_info
*)sta
->drv_priv
;
307 rtw_release_macid(rtwdev
, si
->mac_id
);
309 rtw_fw_media_status_report(rtwdev
, si
->mac_id
, false);
311 for (i
= 0; i
< ARRAY_SIZE(sta
->txq
); i
++)
312 rtw_txq_cleanup(rtwdev
, sta
->txq
[i
]);
317 rtw_info(rtwdev
, "sta %pM with macid %d left\n",
318 sta
->addr
, si
->mac_id
);
321 static bool rtw_fw_dump_crash_log(struct rtw_dev
*rtwdev
)
323 u32 size
= rtwdev
->chip
->fw_rxff_size
;
332 if (rtw_fw_dump_fifo(rtwdev
, RTW_FW_FIFO_SEL_RXBUF_FW
, 0, size
, buf
)) {
333 rtw_dbg(rtwdev
, RTW_DBG_FW
, "dump fw fifo fail\n");
337 if (GET_FW_DUMP_LEN(buf
) == 0) {
338 rtw_dbg(rtwdev
, RTW_DBG_FW
, "fw crash dump's length is 0\n");
342 seq
= GET_FW_DUMP_SEQ(buf
);
343 if (seq
> 0 && seq
!= (rtwdev
->fw
.prev_dump_seq
+ 1)) {
344 rtw_dbg(rtwdev
, RTW_DBG_FW
,
345 "fw crash dump's seq is wrong: %d\n", seq
);
349 (GET_FW_DUMP_TLV_TYPE(buf
) != FW_CD_TYPE
||
350 GET_FW_DUMP_TLV_LEN(buf
) != FW_CD_LEN
||
351 GET_FW_DUMP_TLV_VAL(buf
) != FW_CD_VAL
)) {
352 rtw_dbg(rtwdev
, RTW_DBG_FW
, "fw crash dump's tlv is wrong\n");
356 print_hex_dump_bytes("rtw88 fw dump: ", DUMP_PREFIX_OFFSET
, buf
, size
);
358 if (GET_FW_DUMP_MORE(buf
) == 1) {
359 rtwdev
->fw
.prev_dump_seq
= seq
;
366 rtw_write8(rtwdev
, REG_MCU_TST_CFG
, 0);
371 void rtw_vif_assoc_changed(struct rtw_vif
*rtwvif
,
372 struct ieee80211_bss_conf
*conf
)
374 if (conf
&& conf
->assoc
) {
375 rtwvif
->aid
= conf
->aid
;
376 rtwvif
->net_type
= RTW_NET_MGD_LINKED
;
379 rtwvif
->net_type
= RTW_NET_NO_LINK
;
383 static void rtw_reset_key_iter(struct ieee80211_hw
*hw
,
384 struct ieee80211_vif
*vif
,
385 struct ieee80211_sta
*sta
,
386 struct ieee80211_key_conf
*key
,
389 struct rtw_dev
*rtwdev
= (struct rtw_dev
*)data
;
390 struct rtw_sec_desc
*sec
= &rtwdev
->sec
;
392 rtw_sec_clear_cam(rtwdev
, sec
, key
->hw_key_idx
);
395 static void rtw_reset_sta_iter(void *data
, struct ieee80211_sta
*sta
)
397 struct rtw_dev
*rtwdev
= (struct rtw_dev
*)data
;
399 if (rtwdev
->sta_cnt
== 0) {
400 rtw_warn(rtwdev
, "sta count before reset should not be 0\n");
403 rtw_sta_remove(rtwdev
, sta
, false);
406 static void rtw_reset_vif_iter(void *data
, u8
*mac
, struct ieee80211_vif
*vif
)
408 struct rtw_dev
*rtwdev
= (struct rtw_dev
*)data
;
409 struct rtw_vif
*rtwvif
= (struct rtw_vif
*)vif
->drv_priv
;
411 rtw_bf_disassoc(rtwdev
, vif
, NULL
);
412 rtw_vif_assoc_changed(rtwvif
, NULL
);
413 rtw_txq_cleanup(rtwdev
, vif
->txq
);
416 void rtw_fw_recovery(struct rtw_dev
*rtwdev
)
418 if (!test_bit(RTW_FLAG_RESTARTING
, rtwdev
->flags
))
419 ieee80211_queue_work(rtwdev
->hw
, &rtwdev
->fw_recovery_work
);
422 static void rtw_fw_recovery_work(struct work_struct
*work
)
424 struct rtw_dev
*rtwdev
= container_of(work
, struct rtw_dev
,
427 /* rtw_fw_dump_crash_log() returns false indicates that there are
428 * still more log to dump. Driver set 0x1cf[7:0] = 0x1 to tell firmware
429 * to dump the remaining part of the log, and firmware will trigger an
430 * IMR_C2HCMD interrupt to inform driver the log is ready.
432 if (!rtw_fw_dump_crash_log(rtwdev
)) {
433 rtw_write8(rtwdev
, REG_HRCV_MSG
, 1);
436 rtwdev
->fw
.prev_dump_seq
= 0;
438 WARN(1, "firmware crash, start reset and recover\n");
440 mutex_lock(&rtwdev
->mutex
);
442 set_bit(RTW_FLAG_RESTARTING
, rtwdev
->flags
);
444 rtw_iterate_keys_rcu(rtwdev
, NULL
, rtw_reset_key_iter
, rtwdev
);
446 rtw_iterate_stas_atomic(rtwdev
, rtw_reset_sta_iter
, rtwdev
);
447 rtw_iterate_vifs_atomic(rtwdev
, rtw_reset_vif_iter
, rtwdev
);
448 rtw_enter_ips(rtwdev
);
450 mutex_unlock(&rtwdev
->mutex
);
452 ieee80211_restart_hw(rtwdev
->hw
);
455 struct rtw_txq_ba_iter_data
{
458 static void rtw_txq_ba_iter(void *data
, struct ieee80211_sta
*sta
)
460 struct rtw_sta_info
*si
= (struct rtw_sta_info
*)sta
->drv_priv
;
464 tid
= find_first_bit(si
->tid_ba
, IEEE80211_NUM_TIDS
);
465 while (tid
!= IEEE80211_NUM_TIDS
) {
466 clear_bit(tid
, si
->tid_ba
);
467 ret
= ieee80211_start_tx_ba_session(sta
, tid
, 0);
468 if (ret
== -EINVAL
) {
469 struct ieee80211_txq
*txq
;
470 struct rtw_txq
*rtwtxq
;
473 rtwtxq
= (struct rtw_txq
*)txq
->drv_priv
;
474 set_bit(RTW_TXQ_BLOCK_BA
, &rtwtxq
->flags
);
477 tid
= find_first_bit(si
->tid_ba
, IEEE80211_NUM_TIDS
);
481 static void rtw_txq_ba_work(struct work_struct
*work
)
483 struct rtw_dev
*rtwdev
= container_of(work
, struct rtw_dev
, ba_work
);
484 struct rtw_txq_ba_iter_data data
;
486 rtw_iterate_stas_atomic(rtwdev
, rtw_txq_ba_iter
, &data
);
489 void rtw_get_channel_params(struct cfg80211_chan_def
*chandef
,
490 struct rtw_channel_params
*chan_params
)
492 struct ieee80211_channel
*channel
= chandef
->chan
;
493 enum nl80211_chan_width width
= chandef
->width
;
494 u8
*cch_by_bw
= chan_params
->cch_by_bw
;
495 u32 primary_freq
, center_freq
;
497 u8 bandwidth
= RTW_CHANNEL_WIDTH_20
;
498 u8 primary_chan_idx
= 0;
501 center_chan
= channel
->hw_value
;
502 primary_freq
= channel
->center_freq
;
503 center_freq
= chandef
->center_freq1
;
505 /* assign the center channel used while 20M bw is selected */
506 cch_by_bw
[RTW_CHANNEL_WIDTH_20
] = channel
->hw_value
;
509 case NL80211_CHAN_WIDTH_20_NOHT
:
510 case NL80211_CHAN_WIDTH_20
:
511 bandwidth
= RTW_CHANNEL_WIDTH_20
;
512 primary_chan_idx
= RTW_SC_DONT_CARE
;
514 case NL80211_CHAN_WIDTH_40
:
515 bandwidth
= RTW_CHANNEL_WIDTH_40
;
516 if (primary_freq
> center_freq
) {
517 primary_chan_idx
= RTW_SC_20_UPPER
;
520 primary_chan_idx
= RTW_SC_20_LOWER
;
524 case NL80211_CHAN_WIDTH_80
:
525 bandwidth
= RTW_CHANNEL_WIDTH_80
;
526 if (primary_freq
> center_freq
) {
527 if (primary_freq
- center_freq
== 10) {
528 primary_chan_idx
= RTW_SC_20_UPPER
;
531 primary_chan_idx
= RTW_SC_20_UPMOST
;
534 /* assign the center channel used
535 * while 40M bw is selected
537 cch_by_bw
[RTW_CHANNEL_WIDTH_40
] = center_chan
+ 4;
539 if (center_freq
- primary_freq
== 10) {
540 primary_chan_idx
= RTW_SC_20_LOWER
;
543 primary_chan_idx
= RTW_SC_20_LOWEST
;
546 /* assign the center channel used
547 * while 40M bw is selected
549 cch_by_bw
[RTW_CHANNEL_WIDTH_40
] = center_chan
- 4;
557 chan_params
->center_chan
= center_chan
;
558 chan_params
->bandwidth
= bandwidth
;
559 chan_params
->primary_chan_idx
= primary_chan_idx
;
561 /* assign the center channel used while current bw is selected */
562 cch_by_bw
[bandwidth
] = center_chan
;
564 for (i
= bandwidth
+ 1; i
<= RTW_MAX_CHANNEL_WIDTH
; i
++)
568 void rtw_set_channel(struct rtw_dev
*rtwdev
)
570 struct ieee80211_hw
*hw
= rtwdev
->hw
;
571 struct rtw_hal
*hal
= &rtwdev
->hal
;
572 struct rtw_chip_info
*chip
= rtwdev
->chip
;
573 struct rtw_channel_params ch_param
;
574 u8 center_chan
, bandwidth
, primary_chan_idx
;
577 rtw_get_channel_params(&hw
->conf
.chandef
, &ch_param
);
578 if (WARN(ch_param
.center_chan
== 0, "Invalid channel\n"))
581 center_chan
= ch_param
.center_chan
;
582 bandwidth
= ch_param
.bandwidth
;
583 primary_chan_idx
= ch_param
.primary_chan_idx
;
585 hal
->current_band_width
= bandwidth
;
586 hal
->current_channel
= center_chan
;
587 hal
->current_band_type
= center_chan
> 14 ? RTW_BAND_5G
: RTW_BAND_2G
;
589 for (i
= RTW_CHANNEL_WIDTH_20
; i
<= RTW_MAX_CHANNEL_WIDTH
; i
++)
590 hal
->cch_by_bw
[i
] = ch_param
.cch_by_bw
[i
];
592 chip
->ops
->set_channel(rtwdev
, center_chan
, bandwidth
, primary_chan_idx
);
594 if (hal
->current_band_type
== RTW_BAND_5G
) {
595 rtw_coex_switchband_notify(rtwdev
, COEX_SWITCH_TO_5G
);
597 if (test_bit(RTW_FLAG_SCANNING
, rtwdev
->flags
))
598 rtw_coex_switchband_notify(rtwdev
, COEX_SWITCH_TO_24G
);
600 rtw_coex_switchband_notify(rtwdev
, COEX_SWITCH_TO_24G_NOFORSCAN
);
603 rtw_phy_set_tx_power_level(rtwdev
, center_chan
);
605 /* if the channel isn't set for scanning, we will do RF calibration
606 * in ieee80211_ops::mgd_prepare_tx(). Performing the calibration
607 * during scanning on each channel takes too long.
609 if (!test_bit(RTW_FLAG_SCANNING
, rtwdev
->flags
))
610 rtwdev
->need_rfk
= true;
613 void rtw_chip_prepare_tx(struct rtw_dev
*rtwdev
)
615 struct rtw_chip_info
*chip
= rtwdev
->chip
;
617 if (rtwdev
->need_rfk
) {
618 rtwdev
->need_rfk
= false;
619 chip
->ops
->phy_calibration(rtwdev
);
623 static void rtw_vif_write_addr(struct rtw_dev
*rtwdev
, u32 start
, u8
*addr
)
627 for (i
= 0; i
< ETH_ALEN
; i
++)
628 rtw_write8(rtwdev
, start
+ i
, addr
[i
]);
631 void rtw_vif_port_config(struct rtw_dev
*rtwdev
,
632 struct rtw_vif
*rtwvif
,
637 if (config
& PORT_SET_MAC_ADDR
) {
638 addr
= rtwvif
->conf
->mac_addr
.addr
;
639 rtw_vif_write_addr(rtwdev
, addr
, rtwvif
->mac_addr
);
641 if (config
& PORT_SET_BSSID
) {
642 addr
= rtwvif
->conf
->bssid
.addr
;
643 rtw_vif_write_addr(rtwdev
, addr
, rtwvif
->bssid
);
645 if (config
& PORT_SET_NET_TYPE
) {
646 addr
= rtwvif
->conf
->net_type
.addr
;
647 mask
= rtwvif
->conf
->net_type
.mask
;
648 rtw_write32_mask(rtwdev
, addr
, mask
, rtwvif
->net_type
);
650 if (config
& PORT_SET_AID
) {
651 addr
= rtwvif
->conf
->aid
.addr
;
652 mask
= rtwvif
->conf
->aid
.mask
;
653 rtw_write32_mask(rtwdev
, addr
, mask
, rtwvif
->aid
);
655 if (config
& PORT_SET_BCN_CTRL
) {
656 addr
= rtwvif
->conf
->bcn_ctrl
.addr
;
657 mask
= rtwvif
->conf
->bcn_ctrl
.mask
;
658 rtw_write8_mask(rtwdev
, addr
, mask
, rtwvif
->bcn_ctrl
);
662 static u8
hw_bw_cap_to_bitamp(u8 bw_cap
)
667 case EFUSE_HW_CAP_IGNORE
:
668 case EFUSE_HW_CAP_SUPP_BW80
:
669 bw
|= BIT(RTW_CHANNEL_WIDTH_80
);
671 case EFUSE_HW_CAP_SUPP_BW40
:
672 bw
|= BIT(RTW_CHANNEL_WIDTH_40
);
675 bw
|= BIT(RTW_CHANNEL_WIDTH_20
);
682 static void rtw_hw_config_rf_ant_num(struct rtw_dev
*rtwdev
, u8 hw_ant_num
)
684 struct rtw_hal
*hal
= &rtwdev
->hal
;
685 struct rtw_chip_info
*chip
= rtwdev
->chip
;
687 if (hw_ant_num
== EFUSE_HW_CAP_IGNORE
||
688 hw_ant_num
>= hal
->rf_path_num
)
691 switch (hw_ant_num
) {
693 hal
->rf_type
= RF_1T1R
;
694 hal
->rf_path_num
= 1;
695 if (!chip
->fix_rf_phy_num
)
696 hal
->rf_phy_num
= hal
->rf_path_num
;
697 hal
->antenna_tx
= BB_PATH_A
;
698 hal
->antenna_rx
= BB_PATH_A
;
701 WARN(1, "invalid hw configuration from efuse\n");
706 static u64
get_vht_ra_mask(struct ieee80211_sta
*sta
)
709 u16 mcs_map
= le16_to_cpu(sta
->vht_cap
.vht_mcs
.rx_mcs_map
);
713 /* 4SS, every two bits for MCS7/8/9 */
714 for (i
= 0, nss
= 12; i
< 4; i
++, mcs_map
>>= 2, nss
+= 10) {
715 vht_mcs_cap
= mcs_map
& 0x3;
716 switch (vht_mcs_cap
) {
718 ra_mask
|= 0x3ffULL
<< nss
;
721 ra_mask
|= 0x1ffULL
<< nss
;
724 ra_mask
|= 0x0ffULL
<< nss
;
734 static u8
get_rate_id(u8 wireless_set
, enum rtw_bandwidth bw_mode
, u8 tx_num
)
738 switch (wireless_set
) {
740 rate_id
= RTW_RATEID_B_20M
;
743 rate_id
= RTW_RATEID_G
;
745 case WIRELESS_CCK
| WIRELESS_OFDM
:
746 rate_id
= RTW_RATEID_BG
;
748 case WIRELESS_OFDM
| WIRELESS_HT
:
750 rate_id
= RTW_RATEID_GN_N1SS
;
751 else if (tx_num
== 2)
752 rate_id
= RTW_RATEID_GN_N2SS
;
753 else if (tx_num
== 3)
754 rate_id
= RTW_RATEID_ARFR5_N_3SS
;
756 case WIRELESS_CCK
| WIRELESS_OFDM
| WIRELESS_HT
:
757 if (bw_mode
== RTW_CHANNEL_WIDTH_40
) {
759 rate_id
= RTW_RATEID_BGN_40M_1SS
;
760 else if (tx_num
== 2)
761 rate_id
= RTW_RATEID_BGN_40M_2SS
;
762 else if (tx_num
== 3)
763 rate_id
= RTW_RATEID_ARFR5_N_3SS
;
764 else if (tx_num
== 4)
765 rate_id
= RTW_RATEID_ARFR7_N_4SS
;
768 rate_id
= RTW_RATEID_BGN_20M_1SS
;
769 else if (tx_num
== 2)
770 rate_id
= RTW_RATEID_BGN_20M_2SS
;
771 else if (tx_num
== 3)
772 rate_id
= RTW_RATEID_ARFR5_N_3SS
;
773 else if (tx_num
== 4)
774 rate_id
= RTW_RATEID_ARFR7_N_4SS
;
777 case WIRELESS_OFDM
| WIRELESS_VHT
:
779 rate_id
= RTW_RATEID_ARFR1_AC_1SS
;
780 else if (tx_num
== 2)
781 rate_id
= RTW_RATEID_ARFR0_AC_2SS
;
782 else if (tx_num
== 3)
783 rate_id
= RTW_RATEID_ARFR4_AC_3SS
;
784 else if (tx_num
== 4)
785 rate_id
= RTW_RATEID_ARFR6_AC_4SS
;
787 case WIRELESS_CCK
| WIRELESS_OFDM
| WIRELESS_VHT
:
788 if (bw_mode
>= RTW_CHANNEL_WIDTH_80
) {
790 rate_id
= RTW_RATEID_ARFR1_AC_1SS
;
791 else if (tx_num
== 2)
792 rate_id
= RTW_RATEID_ARFR0_AC_2SS
;
793 else if (tx_num
== 3)
794 rate_id
= RTW_RATEID_ARFR4_AC_3SS
;
795 else if (tx_num
== 4)
796 rate_id
= RTW_RATEID_ARFR6_AC_4SS
;
799 rate_id
= RTW_RATEID_ARFR2_AC_2G_1SS
;
800 else if (tx_num
== 2)
801 rate_id
= RTW_RATEID_ARFR3_AC_2G_2SS
;
802 else if (tx_num
== 3)
803 rate_id
= RTW_RATEID_ARFR4_AC_3SS
;
804 else if (tx_num
== 4)
805 rate_id
= RTW_RATEID_ARFR6_AC_4SS
;
815 #define RA_MASK_CCK_RATES 0x0000f
816 #define RA_MASK_OFDM_RATES 0x00ff0
817 #define RA_MASK_HT_RATES_1SS (0xff000ULL << 0)
818 #define RA_MASK_HT_RATES_2SS (0xff000ULL << 8)
819 #define RA_MASK_HT_RATES_3SS (0xff000ULL << 16)
820 #define RA_MASK_HT_RATES (RA_MASK_HT_RATES_1SS | \
821 RA_MASK_HT_RATES_2SS | \
822 RA_MASK_HT_RATES_3SS)
823 #define RA_MASK_VHT_RATES_1SS (0x3ff000ULL << 0)
824 #define RA_MASK_VHT_RATES_2SS (0x3ff000ULL << 10)
825 #define RA_MASK_VHT_RATES_3SS (0x3ff000ULL << 20)
826 #define RA_MASK_VHT_RATES (RA_MASK_VHT_RATES_1SS | \
827 RA_MASK_VHT_RATES_2SS | \
828 RA_MASK_VHT_RATES_3SS)
829 #define RA_MASK_CCK_IN_HT 0x00005
830 #define RA_MASK_CCK_IN_VHT 0x00005
831 #define RA_MASK_OFDM_IN_VHT 0x00010
832 #define RA_MASK_OFDM_IN_HT_2G 0x00010
833 #define RA_MASK_OFDM_IN_HT_5G 0x00030
835 static u64
rtw_update_rate_mask(struct rtw_dev
*rtwdev
,
836 struct rtw_sta_info
*si
,
837 u64 ra_mask
, bool is_vht_enable
,
840 struct rtw_hal
*hal
= &rtwdev
->hal
;
841 const struct cfg80211_bitrate_mask
*mask
= si
->mask
;
842 u64 cfg_mask
= GENMASK_ULL(63, 0);
845 if (wireless_set
!= WIRELESS_CCK
) {
846 rssi_level
= si
->rssi_level
;
848 ra_mask
&= 0xffffffffffffffffULL
;
849 else if (rssi_level
== 1)
850 ra_mask
&= 0xfffffffffffffff0ULL
;
851 else if (rssi_level
== 2)
852 ra_mask
&= 0xffffffffffffefe0ULL
;
853 else if (rssi_level
== 3)
854 ra_mask
&= 0xffffffffffffcfc0ULL
;
855 else if (rssi_level
== 4)
856 ra_mask
&= 0xffffffffffff8f80ULL
;
857 else if (rssi_level
>= 5)
858 ra_mask
&= 0xffffffffffff0f00ULL
;
861 if (!si
->use_cfg_mask
)
864 band
= hal
->current_band_type
;
865 if (band
== RTW_BAND_2G
) {
866 band
= NL80211_BAND_2GHZ
;
867 cfg_mask
= mask
->control
[band
].legacy
;
868 } else if (band
== RTW_BAND_5G
) {
869 band
= NL80211_BAND_5GHZ
;
870 cfg_mask
= u64_encode_bits(mask
->control
[band
].legacy
,
874 if (!is_vht_enable
) {
875 if (ra_mask
& RA_MASK_HT_RATES_1SS
)
876 cfg_mask
|= u64_encode_bits(mask
->control
[band
].ht_mcs
[0],
877 RA_MASK_HT_RATES_1SS
);
878 if (ra_mask
& RA_MASK_HT_RATES_2SS
)
879 cfg_mask
|= u64_encode_bits(mask
->control
[band
].ht_mcs
[1],
880 RA_MASK_HT_RATES_2SS
);
882 if (ra_mask
& RA_MASK_VHT_RATES_1SS
)
883 cfg_mask
|= u64_encode_bits(mask
->control
[band
].vht_mcs
[0],
884 RA_MASK_VHT_RATES_1SS
);
885 if (ra_mask
& RA_MASK_VHT_RATES_2SS
)
886 cfg_mask
|= u64_encode_bits(mask
->control
[band
].vht_mcs
[1],
887 RA_MASK_VHT_RATES_2SS
);
895 void rtw_update_sta_info(struct rtw_dev
*rtwdev
, struct rtw_sta_info
*si
)
897 struct ieee80211_sta
*sta
= si
->sta
;
898 struct rtw_efuse
*efuse
= &rtwdev
->efuse
;
899 struct rtw_hal
*hal
= &rtwdev
->hal
;
903 u8 rf_type
= RF_1T1R
;
908 bool is_vht_enable
= false;
909 bool is_support_sgi
= false;
911 if (sta
->vht_cap
.vht_supported
) {
912 is_vht_enable
= true;
913 ra_mask
|= get_vht_ra_mask(sta
);
914 if (sta
->vht_cap
.cap
& IEEE80211_VHT_CAP_RXSTBC_MASK
)
915 stbc_en
= VHT_STBC_EN
;
916 if (sta
->vht_cap
.cap
& IEEE80211_VHT_CAP_RXLDPC
)
917 ldpc_en
= VHT_LDPC_EN
;
918 } else if (sta
->ht_cap
.ht_supported
) {
919 ra_mask
|= (sta
->ht_cap
.mcs
.rx_mask
[1] << 20) |
920 (sta
->ht_cap
.mcs
.rx_mask
[0] << 12);
921 if (sta
->ht_cap
.cap
& IEEE80211_HT_CAP_RX_STBC
)
922 stbc_en
= HT_STBC_EN
;
923 if (sta
->ht_cap
.cap
& IEEE80211_HT_CAP_LDPC_CODING
)
924 ldpc_en
= HT_LDPC_EN
;
927 if (efuse
->hw_cap
.nss
== 1)
928 ra_mask
&= RA_MASK_VHT_RATES_1SS
| RA_MASK_HT_RATES_1SS
;
930 if (hal
->current_band_type
== RTW_BAND_5G
) {
931 ra_mask
|= (u64
)sta
->supp_rates
[NL80211_BAND_5GHZ
] << 4;
932 if (sta
->vht_cap
.vht_supported
) {
933 ra_mask
&= RA_MASK_VHT_RATES
| RA_MASK_OFDM_IN_VHT
;
934 wireless_set
= WIRELESS_OFDM
| WIRELESS_VHT
;
935 } else if (sta
->ht_cap
.ht_supported
) {
936 ra_mask
&= RA_MASK_HT_RATES
| RA_MASK_OFDM_IN_HT_5G
;
937 wireless_set
= WIRELESS_OFDM
| WIRELESS_HT
;
939 wireless_set
= WIRELESS_OFDM
;
941 } else if (hal
->current_band_type
== RTW_BAND_2G
) {
942 ra_mask
|= sta
->supp_rates
[NL80211_BAND_2GHZ
];
943 if (sta
->vht_cap
.vht_supported
) {
944 ra_mask
&= RA_MASK_VHT_RATES
| RA_MASK_CCK_IN_VHT
|
946 wireless_set
= WIRELESS_CCK
| WIRELESS_OFDM
|
947 WIRELESS_HT
| WIRELESS_VHT
;
948 } else if (sta
->ht_cap
.ht_supported
) {
949 ra_mask
&= RA_MASK_HT_RATES
| RA_MASK_CCK_IN_HT
|
950 RA_MASK_OFDM_IN_HT_2G
;
951 wireless_set
= WIRELESS_CCK
| WIRELESS_OFDM
|
953 } else if (sta
->supp_rates
[0] <= 0xf) {
954 wireless_set
= WIRELESS_CCK
;
956 wireless_set
= WIRELESS_CCK
| WIRELESS_OFDM
;
959 rtw_err(rtwdev
, "Unknown band type\n");
963 switch (sta
->bandwidth
) {
964 case IEEE80211_STA_RX_BW_80
:
965 bw_mode
= RTW_CHANNEL_WIDTH_80
;
966 is_support_sgi
= sta
->vht_cap
.vht_supported
&&
967 (sta
->vht_cap
.cap
& IEEE80211_VHT_CAP_SHORT_GI_80
);
969 case IEEE80211_STA_RX_BW_40
:
970 bw_mode
= RTW_CHANNEL_WIDTH_40
;
971 is_support_sgi
= sta
->ht_cap
.ht_supported
&&
972 (sta
->ht_cap
.cap
& IEEE80211_HT_CAP_SGI_40
);
975 bw_mode
= RTW_CHANNEL_WIDTH_20
;
976 is_support_sgi
= sta
->ht_cap
.ht_supported
&&
977 (sta
->ht_cap
.cap
& IEEE80211_HT_CAP_SGI_20
);
981 if (sta
->vht_cap
.vht_supported
&& ra_mask
& 0xffc00000) {
984 } else if (sta
->ht_cap
.ht_supported
&& ra_mask
& 0xfff00000) {
989 rate_id
= get_rate_id(wireless_set
, bw_mode
, tx_num
);
991 ra_mask
= rtw_update_rate_mask(rtwdev
, si
, ra_mask
, is_vht_enable
,
994 si
->bw_mode
= bw_mode
;
995 si
->stbc_en
= stbc_en
;
996 si
->ldpc_en
= ldpc_en
;
997 si
->rf_type
= rf_type
;
998 si
->wireless_set
= wireless_set
;
999 si
->sgi_enable
= is_support_sgi
;
1000 si
->vht_enable
= is_vht_enable
;
1001 si
->ra_mask
= ra_mask
;
1002 si
->rate_id
= rate_id
;
1004 rtw_fw_send_ra_info(rtwdev
, si
);
1007 static int rtw_wait_firmware_completion(struct rtw_dev
*rtwdev
)
1009 struct rtw_chip_info
*chip
= rtwdev
->chip
;
1010 struct rtw_fw_state
*fw
;
1013 wait_for_completion(&fw
->completion
);
1017 if (chip
->wow_fw_name
) {
1018 fw
= &rtwdev
->wow_fw
;
1019 wait_for_completion(&fw
->completion
);
1027 static enum rtw_lps_deep_mode
rtw_update_lps_deep_mode(struct rtw_dev
*rtwdev
,
1028 struct rtw_fw_state
*fw
)
1030 struct rtw_chip_info
*chip
= rtwdev
->chip
;
1032 if (rtw_disable_lps_deep_mode
|| !chip
->lps_deep_mode_supported
||
1034 return LPS_DEEP_MODE_NONE
;
1036 if ((chip
->lps_deep_mode_supported
& BIT(LPS_DEEP_MODE_PG
)) &&
1037 (fw
->feature
& FW_FEATURE_PG
))
1038 return LPS_DEEP_MODE_PG
;
1040 if ((chip
->lps_deep_mode_supported
& BIT(LPS_DEEP_MODE_LCLK
)) &&
1041 (fw
->feature
& FW_FEATURE_LCLK
))
1042 return LPS_DEEP_MODE_LCLK
;
1044 return LPS_DEEP_MODE_NONE
;
1047 static int rtw_power_on(struct rtw_dev
*rtwdev
)
1049 struct rtw_chip_info
*chip
= rtwdev
->chip
;
1050 struct rtw_fw_state
*fw
= &rtwdev
->fw
;
1054 ret
= rtw_hci_setup(rtwdev
);
1056 rtw_err(rtwdev
, "failed to setup hci\n");
1060 /* power on MAC before firmware downloaded */
1061 ret
= rtw_mac_power_on(rtwdev
);
1063 rtw_err(rtwdev
, "failed to power on mac\n");
1067 ret
= rtw_wait_firmware_completion(rtwdev
);
1069 rtw_err(rtwdev
, "failed to wait firmware completion\n");
1073 ret
= rtw_download_firmware(rtwdev
, fw
);
1075 rtw_err(rtwdev
, "failed to download firmware\n");
1079 /* config mac after firmware downloaded */
1080 ret
= rtw_mac_init(rtwdev
);
1082 rtw_err(rtwdev
, "failed to configure mac\n");
1086 chip
->ops
->phy_set_param(rtwdev
);
1088 ret
= rtw_hci_start(rtwdev
);
1090 rtw_err(rtwdev
, "failed to start hci\n");
1094 /* send H2C after HCI has started */
1095 rtw_fw_send_general_info(rtwdev
);
1096 rtw_fw_send_phydm_info(rtwdev
);
1098 wifi_only
= !rtwdev
->efuse
.btcoex
;
1099 rtw_coex_power_on_setting(rtwdev
);
1100 rtw_coex_init_hw_config(rtwdev
, wifi_only
);
1105 rtw_mac_power_off(rtwdev
);
1111 int rtw_core_start(struct rtw_dev
*rtwdev
)
1115 ret
= rtw_power_on(rtwdev
);
1119 rtw_sec_enable_sec_engine(rtwdev
);
1121 rtwdev
->lps_conf
.deep_mode
= rtw_update_lps_deep_mode(rtwdev
, &rtwdev
->fw
);
1122 rtwdev
->lps_conf
.wow_deep_mode
= rtw_update_lps_deep_mode(rtwdev
, &rtwdev
->wow_fw
);
1124 /* rcr reset after powered on */
1125 rtw_write32(rtwdev
, REG_RCR
, rtwdev
->hal
.rcr
);
1127 ieee80211_queue_delayed_work(rtwdev
->hw
, &rtwdev
->watch_dog_work
,
1128 RTW_WATCH_DOG_DELAY_TIME
);
1130 set_bit(RTW_FLAG_RUNNING
, rtwdev
->flags
);
1135 static void rtw_power_off(struct rtw_dev
*rtwdev
)
1137 rtw_hci_stop(rtwdev
);
1138 rtw_mac_power_off(rtwdev
);
1141 void rtw_core_stop(struct rtw_dev
*rtwdev
)
1143 struct rtw_coex
*coex
= &rtwdev
->coex
;
1145 clear_bit(RTW_FLAG_RUNNING
, rtwdev
->flags
);
1146 clear_bit(RTW_FLAG_FW_RUNNING
, rtwdev
->flags
);
1148 mutex_unlock(&rtwdev
->mutex
);
1150 cancel_work_sync(&rtwdev
->c2h_work
);
1151 cancel_delayed_work_sync(&rtwdev
->watch_dog_work
);
1152 cancel_delayed_work_sync(&coex
->bt_relink_work
);
1153 cancel_delayed_work_sync(&coex
->bt_reenable_work
);
1154 cancel_delayed_work_sync(&coex
->defreeze_work
);
1155 cancel_delayed_work_sync(&coex
->wl_remain_work
);
1156 cancel_delayed_work_sync(&coex
->bt_remain_work
);
1157 cancel_delayed_work_sync(&coex
->wl_connecting_work
);
1158 cancel_delayed_work_sync(&coex
->bt_multi_link_remain_work
);
1159 cancel_delayed_work_sync(&coex
->wl_ccklock_work
);
1161 mutex_lock(&rtwdev
->mutex
);
1163 rtw_power_off(rtwdev
);
1166 static void rtw_init_ht_cap(struct rtw_dev
*rtwdev
,
1167 struct ieee80211_sta_ht_cap
*ht_cap
)
1169 struct rtw_efuse
*efuse
= &rtwdev
->efuse
;
1171 ht_cap
->ht_supported
= true;
1173 ht_cap
->cap
|= IEEE80211_HT_CAP_SGI_20
|
1174 IEEE80211_HT_CAP_MAX_AMSDU
|
1175 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT
);
1177 if (rtw_chip_has_rx_ldpc(rtwdev
))
1178 ht_cap
->cap
|= IEEE80211_HT_CAP_LDPC_CODING
;
1180 if (efuse
->hw_cap
.bw
& BIT(RTW_CHANNEL_WIDTH_40
))
1181 ht_cap
->cap
|= IEEE80211_HT_CAP_SUP_WIDTH_20_40
|
1182 IEEE80211_HT_CAP_DSSSCCK40
|
1183 IEEE80211_HT_CAP_SGI_40
;
1184 ht_cap
->ampdu_factor
= IEEE80211_HT_MAX_AMPDU_64K
;
1185 ht_cap
->ampdu_density
= IEEE80211_HT_MPDU_DENSITY_16
;
1186 ht_cap
->mcs
.tx_params
= IEEE80211_HT_MCS_TX_DEFINED
;
1187 if (efuse
->hw_cap
.nss
> 1) {
1188 ht_cap
->mcs
.rx_mask
[0] = 0xFF;
1189 ht_cap
->mcs
.rx_mask
[1] = 0xFF;
1190 ht_cap
->mcs
.rx_mask
[4] = 0x01;
1191 ht_cap
->mcs
.rx_highest
= cpu_to_le16(300);
1193 ht_cap
->mcs
.rx_mask
[0] = 0xFF;
1194 ht_cap
->mcs
.rx_mask
[1] = 0x00;
1195 ht_cap
->mcs
.rx_mask
[4] = 0x01;
1196 ht_cap
->mcs
.rx_highest
= cpu_to_le16(150);
1200 static void rtw_init_vht_cap(struct rtw_dev
*rtwdev
,
1201 struct ieee80211_sta_vht_cap
*vht_cap
)
1203 struct rtw_efuse
*efuse
= &rtwdev
->efuse
;
1207 if (efuse
->hw_cap
.ptcl
!= EFUSE_HW_CAP_IGNORE
&&
1208 efuse
->hw_cap
.ptcl
!= EFUSE_HW_CAP_PTCL_VHT
)
1211 vht_cap
->vht_supported
= true;
1212 vht_cap
->cap
= IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454
|
1213 IEEE80211_VHT_CAP_SHORT_GI_80
|
1214 IEEE80211_VHT_CAP_RXSTBC_1
|
1215 IEEE80211_VHT_CAP_HTC_VHT
|
1216 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK
|
1218 if (rtwdev
->hal
.rf_path_num
> 1)
1219 vht_cap
->cap
|= IEEE80211_VHT_CAP_TXSTBC
;
1220 vht_cap
->cap
|= IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE
|
1221 IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE
;
1222 vht_cap
->cap
|= (rtwdev
->hal
.bfee_sts_cap
<<
1223 IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT
);
1225 if (rtw_chip_has_rx_ldpc(rtwdev
))
1226 vht_cap
->cap
|= IEEE80211_VHT_CAP_RXLDPC
;
1228 mcs_map
= IEEE80211_VHT_MCS_SUPPORT_0_9
<< 0 |
1229 IEEE80211_VHT_MCS_NOT_SUPPORTED
<< 4 |
1230 IEEE80211_VHT_MCS_NOT_SUPPORTED
<< 6 |
1231 IEEE80211_VHT_MCS_NOT_SUPPORTED
<< 8 |
1232 IEEE80211_VHT_MCS_NOT_SUPPORTED
<< 10 |
1233 IEEE80211_VHT_MCS_NOT_SUPPORTED
<< 12 |
1234 IEEE80211_VHT_MCS_NOT_SUPPORTED
<< 14;
1235 if (efuse
->hw_cap
.nss
> 1) {
1236 highest
= cpu_to_le16(780);
1237 mcs_map
|= IEEE80211_VHT_MCS_SUPPORT_0_9
<< 2;
1239 highest
= cpu_to_le16(390);
1240 mcs_map
|= IEEE80211_VHT_MCS_NOT_SUPPORTED
<< 2;
1243 vht_cap
->vht_mcs
.rx_mcs_map
= cpu_to_le16(mcs_map
);
1244 vht_cap
->vht_mcs
.tx_mcs_map
= cpu_to_le16(mcs_map
);
1245 vht_cap
->vht_mcs
.rx_highest
= highest
;
1246 vht_cap
->vht_mcs
.tx_highest
= highest
;
1249 static void rtw_set_supported_band(struct ieee80211_hw
*hw
,
1250 struct rtw_chip_info
*chip
)
1252 struct rtw_dev
*rtwdev
= hw
->priv
;
1253 struct ieee80211_supported_band
*sband
;
1255 if (chip
->band
& RTW_BAND_2G
) {
1256 sband
= kmemdup(&rtw_band_2ghz
, sizeof(*sband
), GFP_KERNEL
);
1259 if (chip
->ht_supported
)
1260 rtw_init_ht_cap(rtwdev
, &sband
->ht_cap
);
1261 hw
->wiphy
->bands
[NL80211_BAND_2GHZ
] = sband
;
1264 if (chip
->band
& RTW_BAND_5G
) {
1265 sband
= kmemdup(&rtw_band_5ghz
, sizeof(*sband
), GFP_KERNEL
);
1268 if (chip
->ht_supported
)
1269 rtw_init_ht_cap(rtwdev
, &sband
->ht_cap
);
1270 if (chip
->vht_supported
)
1271 rtw_init_vht_cap(rtwdev
, &sband
->vht_cap
);
1272 hw
->wiphy
->bands
[NL80211_BAND_5GHZ
] = sband
;
1278 rtw_err(rtwdev
, "failed to set supported band\n");
1282 static void rtw_unset_supported_band(struct ieee80211_hw
*hw
,
1283 struct rtw_chip_info
*chip
)
1285 kfree(hw
->wiphy
->bands
[NL80211_BAND_2GHZ
]);
1286 kfree(hw
->wiphy
->bands
[NL80211_BAND_5GHZ
]);
1289 static void __update_firmware_feature(struct rtw_dev
*rtwdev
,
1290 struct rtw_fw_state
*fw
)
1293 const struct rtw_fw_hdr
*fw_hdr
=
1294 (const struct rtw_fw_hdr
*)fw
->firmware
->data
;
1296 feature
= le32_to_cpu(fw_hdr
->feature
);
1297 fw
->feature
= feature
& FW_FEATURE_SIG
? feature
: 0;
1300 static void __update_firmware_info(struct rtw_dev
*rtwdev
,
1301 struct rtw_fw_state
*fw
)
1303 const struct rtw_fw_hdr
*fw_hdr
=
1304 (const struct rtw_fw_hdr
*)fw
->firmware
->data
;
1306 fw
->h2c_version
= le16_to_cpu(fw_hdr
->h2c_fmt_ver
);
1307 fw
->version
= le16_to_cpu(fw_hdr
->version
);
1308 fw
->sub_version
= fw_hdr
->subversion
;
1309 fw
->sub_index
= fw_hdr
->subindex
;
1311 __update_firmware_feature(rtwdev
, fw
);
1314 static void __update_firmware_info_legacy(struct rtw_dev
*rtwdev
,
1315 struct rtw_fw_state
*fw
)
1317 struct rtw_fw_hdr_legacy
*legacy
=
1318 (struct rtw_fw_hdr_legacy
*)fw
->firmware
->data
;
1320 fw
->h2c_version
= 0;
1321 fw
->version
= le16_to_cpu(legacy
->version
);
1322 fw
->sub_version
= legacy
->subversion1
;
1323 fw
->sub_index
= legacy
->subversion2
;
1326 static void update_firmware_info(struct rtw_dev
*rtwdev
,
1327 struct rtw_fw_state
*fw
)
1329 if (rtw_chip_wcpu_11n(rtwdev
))
1330 __update_firmware_info_legacy(rtwdev
, fw
);
1332 __update_firmware_info(rtwdev
, fw
);
1335 static void rtw_load_firmware_cb(const struct firmware
*firmware
, void *context
)
1337 struct rtw_fw_state
*fw
= context
;
1338 struct rtw_dev
*rtwdev
= fw
->rtwdev
;
1340 if (!firmware
|| !firmware
->data
) {
1341 rtw_err(rtwdev
, "failed to request firmware\n");
1342 complete_all(&fw
->completion
);
1346 fw
->firmware
= firmware
;
1347 update_firmware_info(rtwdev
, fw
);
1348 complete_all(&fw
->completion
);
1350 rtw_info(rtwdev
, "Firmware version %u.%u.%u, H2C version %u\n",
1351 fw
->version
, fw
->sub_version
, fw
->sub_index
, fw
->h2c_version
);
1354 static int rtw_load_firmware(struct rtw_dev
*rtwdev
, enum rtw_fw_type type
)
1356 const char *fw_name
;
1357 struct rtw_fw_state
*fw
;
1362 fw
= &rtwdev
->wow_fw
;
1363 fw_name
= rtwdev
->chip
->wow_fw_name
;
1368 fw_name
= rtwdev
->chip
->fw_name
;
1372 rtw_warn(rtwdev
, "unsupported firmware type\n");
1376 fw
->rtwdev
= rtwdev
;
1377 init_completion(&fw
->completion
);
1379 ret
= request_firmware_nowait(THIS_MODULE
, true, fw_name
, rtwdev
->dev
,
1380 GFP_KERNEL
, fw
, rtw_load_firmware_cb
);
1382 rtw_err(rtwdev
, "failed to async firmware request\n");
1389 static int rtw_chip_parameter_setup(struct rtw_dev
*rtwdev
)
1391 struct rtw_chip_info
*chip
= rtwdev
->chip
;
1392 struct rtw_hal
*hal
= &rtwdev
->hal
;
1393 struct rtw_efuse
*efuse
= &rtwdev
->efuse
;
1396 switch (rtw_hci_type(rtwdev
)) {
1397 case RTW_HCI_TYPE_PCIE
:
1398 rtwdev
->hci
.rpwm_addr
= 0x03d9;
1399 rtwdev
->hci
.cpwm_addr
= 0x03da;
1402 rtw_err(rtwdev
, "unsupported hci type\n");
1406 hal
->chip_version
= rtw_read32(rtwdev
, REG_SYS_CFG1
);
1407 hal
->cut_version
= BIT_GET_CHIP_VER(hal
->chip_version
);
1408 hal
->mp_chip
= (hal
->chip_version
& BIT_RTL_ID
) ? 0 : 1;
1409 if (hal
->chip_version
& BIT_RF_TYPE_ID
) {
1410 hal
->rf_type
= RF_2T2R
;
1411 hal
->rf_path_num
= 2;
1412 hal
->antenna_tx
= BB_PATH_AB
;
1413 hal
->antenna_rx
= BB_PATH_AB
;
1415 hal
->rf_type
= RF_1T1R
;
1416 hal
->rf_path_num
= 1;
1417 hal
->antenna_tx
= BB_PATH_A
;
1418 hal
->antenna_rx
= BB_PATH_A
;
1420 hal
->rf_phy_num
= chip
->fix_rf_phy_num
? chip
->fix_rf_phy_num
:
1423 efuse
->physical_size
= chip
->phy_efuse_size
;
1424 efuse
->logical_size
= chip
->log_efuse_size
;
1425 efuse
->protect_size
= chip
->ptct_efuse_size
;
1427 /* default use ack */
1428 rtwdev
->hal
.rcr
|= BIT_VHT_DACK
;
1430 hal
->bfee_sts_cap
= 3;
1435 static int rtw_chip_efuse_enable(struct rtw_dev
*rtwdev
)
1437 struct rtw_fw_state
*fw
= &rtwdev
->fw
;
1440 ret
= rtw_hci_setup(rtwdev
);
1442 rtw_err(rtwdev
, "failed to setup hci\n");
1446 ret
= rtw_mac_power_on(rtwdev
);
1448 rtw_err(rtwdev
, "failed to power on mac\n");
1452 rtw_write8(rtwdev
, REG_C2HEVT
, C2H_HW_FEATURE_DUMP
);
1454 wait_for_completion(&fw
->completion
);
1455 if (!fw
->firmware
) {
1457 rtw_err(rtwdev
, "failed to load firmware\n");
1461 ret
= rtw_download_firmware(rtwdev
, fw
);
1463 rtw_err(rtwdev
, "failed to download firmware\n");
1470 rtw_mac_power_off(rtwdev
);
1476 static int rtw_dump_hw_feature(struct rtw_dev
*rtwdev
)
1478 struct rtw_efuse
*efuse
= &rtwdev
->efuse
;
1479 u8 hw_feature
[HW_FEATURE_LEN
];
1484 id
= rtw_read8(rtwdev
, REG_C2HEVT
);
1485 if (id
!= C2H_HW_FEATURE_REPORT
) {
1486 rtw_err(rtwdev
, "failed to read hw feature report\n");
1490 for (i
= 0; i
< HW_FEATURE_LEN
; i
++)
1491 hw_feature
[i
] = rtw_read8(rtwdev
, REG_C2HEVT
+ 2 + i
);
1493 rtw_write8(rtwdev
, REG_C2HEVT
, 0);
1495 bw
= GET_EFUSE_HW_CAP_BW(hw_feature
);
1496 efuse
->hw_cap
.bw
= hw_bw_cap_to_bitamp(bw
);
1497 efuse
->hw_cap
.hci
= GET_EFUSE_HW_CAP_HCI(hw_feature
);
1498 efuse
->hw_cap
.nss
= GET_EFUSE_HW_CAP_NSS(hw_feature
);
1499 efuse
->hw_cap
.ptcl
= GET_EFUSE_HW_CAP_PTCL(hw_feature
);
1500 efuse
->hw_cap
.ant_num
= GET_EFUSE_HW_CAP_ANT_NUM(hw_feature
);
1502 rtw_hw_config_rf_ant_num(rtwdev
, efuse
->hw_cap
.ant_num
);
1504 if (efuse
->hw_cap
.nss
== EFUSE_HW_CAP_IGNORE
||
1505 efuse
->hw_cap
.nss
> rtwdev
->hal
.rf_path_num
)
1506 efuse
->hw_cap
.nss
= rtwdev
->hal
.rf_path_num
;
1508 rtw_dbg(rtwdev
, RTW_DBG_EFUSE
,
1509 "hw cap: hci=0x%02x, bw=0x%02x, ptcl=0x%02x, ant_num=%d, nss=%d\n",
1510 efuse
->hw_cap
.hci
, efuse
->hw_cap
.bw
, efuse
->hw_cap
.ptcl
,
1511 efuse
->hw_cap
.ant_num
, efuse
->hw_cap
.nss
);
1516 static void rtw_chip_efuse_disable(struct rtw_dev
*rtwdev
)
1518 rtw_hci_stop(rtwdev
);
1519 rtw_mac_power_off(rtwdev
);
1522 static int rtw_chip_efuse_info_setup(struct rtw_dev
*rtwdev
)
1524 struct rtw_efuse
*efuse
= &rtwdev
->efuse
;
1527 mutex_lock(&rtwdev
->mutex
);
1529 /* power on mac to read efuse */
1530 ret
= rtw_chip_efuse_enable(rtwdev
);
1534 ret
= rtw_parse_efuse_map(rtwdev
);
1538 ret
= rtw_dump_hw_feature(rtwdev
);
1542 ret
= rtw_check_supported_rfe(rtwdev
);
1546 if (efuse
->crystal_cap
== 0xff)
1547 efuse
->crystal_cap
= 0;
1548 if (efuse
->pa_type_2g
== 0xff)
1549 efuse
->pa_type_2g
= 0;
1550 if (efuse
->pa_type_5g
== 0xff)
1551 efuse
->pa_type_5g
= 0;
1552 if (efuse
->lna_type_2g
== 0xff)
1553 efuse
->lna_type_2g
= 0;
1554 if (efuse
->lna_type_5g
== 0xff)
1555 efuse
->lna_type_5g
= 0;
1556 if (efuse
->channel_plan
== 0xff)
1557 efuse
->channel_plan
= 0x7f;
1558 if (efuse
->rf_board_option
== 0xff)
1559 efuse
->rf_board_option
= 0;
1560 if (efuse
->bt_setting
& BIT(0))
1561 efuse
->share_ant
= true;
1562 if (efuse
->regd
== 0xff)
1564 if (efuse
->tx_bb_swing_setting_2g
== 0xff)
1565 efuse
->tx_bb_swing_setting_2g
= 0;
1566 if (efuse
->tx_bb_swing_setting_5g
== 0xff)
1567 efuse
->tx_bb_swing_setting_5g
= 0;
1569 efuse
->btcoex
= (efuse
->rf_board_option
& 0xe0) == 0x20;
1570 efuse
->ext_pa_2g
= efuse
->pa_type_2g
& BIT(4) ? 1 : 0;
1571 efuse
->ext_lna_2g
= efuse
->lna_type_2g
& BIT(3) ? 1 : 0;
1572 efuse
->ext_pa_5g
= efuse
->pa_type_5g
& BIT(0) ? 1 : 0;
1573 efuse
->ext_lna_2g
= efuse
->lna_type_5g
& BIT(3) ? 1 : 0;
1576 rtw_chip_efuse_disable(rtwdev
);
1579 mutex_unlock(&rtwdev
->mutex
);
1583 static int rtw_chip_board_info_setup(struct rtw_dev
*rtwdev
)
1585 struct rtw_hal
*hal
= &rtwdev
->hal
;
1586 const struct rtw_rfe_def
*rfe_def
= rtw_get_rfe_def(rtwdev
);
1591 rtw_phy_setup_phy_cond(rtwdev
, 0);
1593 rtw_phy_init_tx_power(rtwdev
);
1594 rtw_load_table(rtwdev
, rfe_def
->phy_pg_tbl
);
1595 rtw_load_table(rtwdev
, rfe_def
->txpwr_lmt_tbl
);
1596 rtw_phy_tx_power_by_rate_config(hal
);
1597 rtw_phy_tx_power_limit_config(hal
);
1602 int rtw_chip_info_setup(struct rtw_dev
*rtwdev
)
1606 ret
= rtw_chip_parameter_setup(rtwdev
);
1608 rtw_err(rtwdev
, "failed to setup chip parameters\n");
1612 ret
= rtw_chip_efuse_info_setup(rtwdev
);
1614 rtw_err(rtwdev
, "failed to setup chip efuse info\n");
1618 ret
= rtw_chip_board_info_setup(rtwdev
);
1620 rtw_err(rtwdev
, "failed to setup chip board info\n");
1629 EXPORT_SYMBOL(rtw_chip_info_setup
);
1631 static void rtw_stats_init(struct rtw_dev
*rtwdev
)
1633 struct rtw_traffic_stats
*stats
= &rtwdev
->stats
;
1634 struct rtw_dm_info
*dm_info
= &rtwdev
->dm_info
;
1637 ewma_tp_init(&stats
->tx_ewma_tp
);
1638 ewma_tp_init(&stats
->rx_ewma_tp
);
1640 for (i
= 0; i
< RTW_EVM_NUM
; i
++)
1641 ewma_evm_init(&dm_info
->ewma_evm
[i
]);
1642 for (i
= 0; i
< RTW_SNR_NUM
; i
++)
1643 ewma_snr_init(&dm_info
->ewma_snr
[i
]);
1646 int rtw_core_init(struct rtw_dev
*rtwdev
)
1648 struct rtw_chip_info
*chip
= rtwdev
->chip
;
1649 struct rtw_coex
*coex
= &rtwdev
->coex
;
1652 INIT_LIST_HEAD(&rtwdev
->rsvd_page_list
);
1653 INIT_LIST_HEAD(&rtwdev
->txqs
);
1655 timer_setup(&rtwdev
->tx_report
.purge_timer
,
1656 rtw_tx_report_purge_timer
, 0);
1657 tasklet_setup(&rtwdev
->tx_tasklet
, rtw_tx_tasklet
);
1659 INIT_DELAYED_WORK(&rtwdev
->watch_dog_work
, rtw_watch_dog_work
);
1660 INIT_DELAYED_WORK(&coex
->bt_relink_work
, rtw_coex_bt_relink_work
);
1661 INIT_DELAYED_WORK(&coex
->bt_reenable_work
, rtw_coex_bt_reenable_work
);
1662 INIT_DELAYED_WORK(&coex
->defreeze_work
, rtw_coex_defreeze_work
);
1663 INIT_DELAYED_WORK(&coex
->wl_remain_work
, rtw_coex_wl_remain_work
);
1664 INIT_DELAYED_WORK(&coex
->bt_remain_work
, rtw_coex_bt_remain_work
);
1665 INIT_DELAYED_WORK(&coex
->wl_connecting_work
, rtw_coex_wl_connecting_work
);
1666 INIT_DELAYED_WORK(&coex
->bt_multi_link_remain_work
,
1667 rtw_coex_bt_multi_link_remain_work
);
1668 INIT_DELAYED_WORK(&coex
->wl_ccklock_work
, rtw_coex_wl_ccklock_work
);
1669 INIT_WORK(&rtwdev
->c2h_work
, rtw_c2h_work
);
1670 INIT_WORK(&rtwdev
->fw_recovery_work
, rtw_fw_recovery_work
);
1671 INIT_WORK(&rtwdev
->ba_work
, rtw_txq_ba_work
);
1672 skb_queue_head_init(&rtwdev
->c2h_queue
);
1673 skb_queue_head_init(&rtwdev
->coex
.queue
);
1674 skb_queue_head_init(&rtwdev
->tx_report
.queue
);
1676 spin_lock_init(&rtwdev
->rf_lock
);
1677 spin_lock_init(&rtwdev
->h2c
.lock
);
1678 spin_lock_init(&rtwdev
->txq_lock
);
1679 spin_lock_init(&rtwdev
->tx_report
.q_lock
);
1681 mutex_init(&rtwdev
->mutex
);
1682 mutex_init(&rtwdev
->coex
.mutex
);
1683 mutex_init(&rtwdev
->hal
.tx_power_mutex
);
1685 init_waitqueue_head(&rtwdev
->coex
.wait
);
1686 init_completion(&rtwdev
->lps_leave_check
);
1688 rtwdev
->sec
.total_cam_num
= 32;
1689 rtwdev
->hal
.current_channel
= 1;
1690 set_bit(RTW_BC_MC_MACID
, rtwdev
->mac_id_map
);
1692 rtw_stats_init(rtwdev
);
1694 /* default rx filter setting */
1695 rtwdev
->hal
.rcr
= BIT_APP_FCS
| BIT_APP_MIC
| BIT_APP_ICV
|
1696 BIT_HTC_LOC_CTRL
| BIT_APP_PHYSTS
|
1697 BIT_AB
| BIT_AM
| BIT_APM
;
1699 ret
= rtw_load_firmware(rtwdev
, RTW_NORMAL_FW
);
1701 rtw_warn(rtwdev
, "no firmware loaded\n");
1705 if (chip
->wow_fw_name
) {
1706 ret
= rtw_load_firmware(rtwdev
, RTW_WOWLAN_FW
);
1708 rtw_warn(rtwdev
, "no wow firmware loaded\n");
1709 wait_for_completion(&rtwdev
->fw
.completion
);
1710 if (rtwdev
->fw
.firmware
)
1711 release_firmware(rtwdev
->fw
.firmware
);
1718 EXPORT_SYMBOL(rtw_core_init
);
1720 void rtw_core_deinit(struct rtw_dev
*rtwdev
)
1722 struct rtw_fw_state
*fw
= &rtwdev
->fw
;
1723 struct rtw_fw_state
*wow_fw
= &rtwdev
->wow_fw
;
1724 struct rtw_rsvd_page
*rsvd_pkt
, *tmp
;
1725 unsigned long flags
;
1727 rtw_wait_firmware_completion(rtwdev
);
1730 release_firmware(fw
->firmware
);
1732 if (wow_fw
->firmware
)
1733 release_firmware(wow_fw
->firmware
);
1735 tasklet_kill(&rtwdev
->tx_tasklet
);
1736 spin_lock_irqsave(&rtwdev
->tx_report
.q_lock
, flags
);
1737 skb_queue_purge(&rtwdev
->tx_report
.queue
);
1738 spin_unlock_irqrestore(&rtwdev
->tx_report
.q_lock
, flags
);
1740 list_for_each_entry_safe(rsvd_pkt
, tmp
, &rtwdev
->rsvd_page_list
,
1742 list_del(&rsvd_pkt
->build_list
);
1746 mutex_destroy(&rtwdev
->mutex
);
1747 mutex_destroy(&rtwdev
->coex
.mutex
);
1748 mutex_destroy(&rtwdev
->hal
.tx_power_mutex
);
1750 EXPORT_SYMBOL(rtw_core_deinit
);
1752 int rtw_register_hw(struct rtw_dev
*rtwdev
, struct ieee80211_hw
*hw
)
1754 struct rtw_hal
*hal
= &rtwdev
->hal
;
1755 int max_tx_headroom
= 0;
1758 /* TODO: USB & SDIO may need extra room? */
1759 max_tx_headroom
= rtwdev
->chip
->tx_pkt_desc_sz
;
1761 hw
->extra_tx_headroom
= max_tx_headroom
;
1762 hw
->queues
= IEEE80211_NUM_ACS
;
1763 hw
->txq_data_size
= sizeof(struct rtw_txq
);
1764 hw
->sta_data_size
= sizeof(struct rtw_sta_info
);
1765 hw
->vif_data_size
= sizeof(struct rtw_vif
);
1767 ieee80211_hw_set(hw
, SIGNAL_DBM
);
1768 ieee80211_hw_set(hw
, RX_INCLUDES_FCS
);
1769 ieee80211_hw_set(hw
, AMPDU_AGGREGATION
);
1770 ieee80211_hw_set(hw
, MFP_CAPABLE
);
1771 ieee80211_hw_set(hw
, REPORTS_TX_ACK_STATUS
);
1772 ieee80211_hw_set(hw
, SUPPORTS_PS
);
1773 ieee80211_hw_set(hw
, SUPPORTS_DYNAMIC_PS
);
1774 ieee80211_hw_set(hw
, SUPPORT_FAST_XMIT
);
1775 ieee80211_hw_set(hw
, SUPPORTS_AMSDU_IN_AMPDU
);
1776 ieee80211_hw_set(hw
, HAS_RATE_CONTROL
);
1777 ieee80211_hw_set(hw
, TX_AMSDU
);
1779 hw
->wiphy
->interface_modes
= BIT(NL80211_IFTYPE_STATION
) |
1780 BIT(NL80211_IFTYPE_AP
) |
1781 BIT(NL80211_IFTYPE_ADHOC
) |
1782 BIT(NL80211_IFTYPE_MESH_POINT
);
1783 hw
->wiphy
->available_antennas_tx
= hal
->antenna_tx
;
1784 hw
->wiphy
->available_antennas_rx
= hal
->antenna_rx
;
1786 hw
->wiphy
->flags
|= WIPHY_FLAG_SUPPORTS_TDLS
|
1787 WIPHY_FLAG_TDLS_EXTERNAL_SETUP
;
1789 hw
->wiphy
->features
|= NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR
;
1791 wiphy_ext_feature_set(hw
->wiphy
, NL80211_EXT_FEATURE_CAN_REPLACE_PTK0
);
1794 hw
->wiphy
->wowlan
= rtwdev
->chip
->wowlan_stub
;
1795 hw
->wiphy
->max_sched_scan_ssids
= rtwdev
->chip
->max_sched_scan_ssids
;
1797 rtw_set_supported_band(hw
, rtwdev
->chip
);
1798 SET_IEEE80211_PERM_ADDR(hw
, rtwdev
->efuse
.addr
);
1800 rtw_regd_init(rtwdev
, rtw_regd_notifier
);
1802 ret
= ieee80211_register_hw(hw
);
1804 rtw_err(rtwdev
, "failed to register hw\n");
1808 if (regulatory_hint(hw
->wiphy
, rtwdev
->regd
.alpha2
))
1809 rtw_err(rtwdev
, "regulatory_hint fail\n");
1811 rtw_debugfs_init(rtwdev
);
1813 rtwdev
->bf_info
.bfer_mu_cnt
= 0;
1814 rtwdev
->bf_info
.bfer_su_cnt
= 0;
1818 EXPORT_SYMBOL(rtw_register_hw
);
1820 void rtw_unregister_hw(struct rtw_dev
*rtwdev
, struct ieee80211_hw
*hw
)
1822 struct rtw_chip_info
*chip
= rtwdev
->chip
;
1824 ieee80211_unregister_hw(hw
);
1825 rtw_unset_supported_band(hw
, chip
);
1827 EXPORT_SYMBOL(rtw_unregister_hw
);
1829 MODULE_AUTHOR("Realtek Corporation");
1830 MODULE_DESCRIPTION("Realtek 802.11ac wireless core module");
1831 MODULE_LICENSE("Dual BSD/GPL");