Lines Matching refs:rtwdev
23 struct rtw89_dev *rtwdev = hw->priv;
34 rtw89_debug(rtwdev, RTW89_DBG_TXRX, "ops_tx during offchan\n");
39 ret = rtw89_core_tx_write(rtwdev, vif, sta, skb, &qsel);
41 rtw89_err(rtwdev, "failed to transmit skb: %d\n", ret);
45 rtw89_core_tx_kick_off(rtwdev, qsel);
51 struct rtw89_dev *rtwdev = hw->priv;
54 queue_work(rtwdev->txq_wq, &rtwdev->txq_work);
59 struct rtw89_dev *rtwdev = hw->priv;
62 mutex_lock(&rtwdev->mutex);
63 ret = rtw89_core_start(rtwdev);
64 mutex_unlock(&rtwdev->mutex);
71 struct rtw89_dev *rtwdev = hw->priv;
73 mutex_lock(&rtwdev->mutex);
74 rtw89_core_stop(rtwdev);
75 mutex_unlock(&rtwdev->mutex);
80 struct rtw89_dev *rtwdev = hw->priv;
83 cancel_work_sync(&rtwdev->ips_work);
85 mutex_lock(&rtwdev->mutex);
86 rtw89_leave_ps_mode(rtwdev);
90 rtw89_leave_ips(rtwdev);
93 rtw89_config_entity_chandef(rtwdev, RTW89_SUB_ENTITY_0,
95 rtw89_set_channel(rtwdev);
100 !rtwdev->scanning)
101 rtw89_enter_ips(rtwdev);
103 mutex_unlock(&rtwdev->mutex);
111 struct rtw89_dev *rtwdev = hw->priv;
115 rtw89_debug(rtwdev, RTW89_DBG_STATE, "add vif %pM type %d, p2p %d\n",
118 mutex_lock(&rtwdev->mutex);
120 rtw89_leave_ips_by_hwflags(rtwdev);
122 if (RTW89_CHK_FW_FEATURE(BEACON_FILTER, &rtwdev->fw))
126 rtwvif->rtwdev = rtwdev;
129 list_add_tail(&rtwvif->list, &rtwdev->rtwvifs_list);
132 rtw89_leave_ps_mode(rtwdev);
134 rtw89_traffic_stats_init(rtwdev, &rtwvif->stats);
136 rtwvif->port = rtw89_core_acquire_bit_map(rtwdev->hw_port,
153 ret = rtw89_mac_add_vif(rtwdev, rtwvif);
155 rtw89_core_release_bit_map(rtwdev->hw_port, rtwvif->port);
160 rtw89_core_txq_init(rtwdev, vif->txq);
162 rtw89_btc_ntfy_role_info(rtwdev, rtwvif, NULL, BTC_ROLE_START);
164 rtw89_recalc_lps(rtwdev);
166 mutex_unlock(&rtwdev->mutex);
174 struct rtw89_dev *rtwdev = hw->priv;
177 rtw89_debug(rtwdev, RTW89_DBG_STATE, "remove vif %pM type %d p2p %d\n",
183 mutex_lock(&rtwdev->mutex);
184 rtw89_leave_ps_mode(rtwdev);
185 rtw89_btc_ntfy_role_info(rtwdev, rtwvif, NULL, BTC_ROLE_STOP);
186 rtw89_mac_remove_vif(rtwdev, rtwvif);
187 rtw89_core_release_bit_map(rtwdev->hw_port, rtwvif->port);
189 rtw89_recalc_lps(rtwdev);
190 rtw89_enter_ips_by_hwflags(rtwdev);
192 mutex_unlock(&rtwdev->mutex);
199 struct rtw89_dev *rtwdev = hw->priv;
202 set_bit(RTW89_FLAG_CHANGING_INTERFACE, rtwdev->flags);
204 rtw89_debug(rtwdev, RTW89_DBG_STATE, "change vif %pM (%d)->(%d), p2p (%d)->(%d)\n",
214 rtw89_warn(rtwdev, "failed to change interface %d\n", ret);
216 clear_bit(RTW89_FLAG_CHANGING_INTERFACE, rtwdev->flags);
226 struct rtw89_dev *rtwdev = hw->priv;
227 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
229 mutex_lock(&rtwdev->mutex);
230 rtw89_leave_ps_mode(rtwdev);
237 rtwdev->hal.rx_fltr &= ~B_AX_A_MC;
239 rtwdev->hal.rx_fltr |= B_AX_A_MC;
243 rtwdev->hal.rx_fltr |= B_AX_A_CRC32_ERR;
245 rtwdev->hal.rx_fltr &= ~B_AX_A_CRC32_ERR;
249 rtwdev->hal.rx_fltr &= ~B_AX_A_A1_MATCH;
251 rtwdev->hal.rx_fltr |= B_AX_A_A1_MATCH;
255 rtwdev->hal.rx_fltr &= ~B_AX_A_BCN_CHK_EN;
256 rtwdev->hal.rx_fltr &= ~B_AX_A_BC;
257 rtwdev->hal.rx_fltr &= ~B_AX_A_A1_MATCH;
259 rtwdev->hal.rx_fltr |= B_AX_A_BCN_CHK_EN;
260 rtwdev->hal.rx_fltr |= B_AX_A_BC;
261 rtwdev->hal.rx_fltr |= B_AX_A_A1_MATCH;
266 rtwdev->hal.rx_fltr &= ~B_AX_A_BC_CAM_MATCH;
267 rtwdev->hal.rx_fltr &= ~B_AX_A_UC_CAM_MATCH;
269 rtwdev->hal.rx_fltr |= B_AX_A_BC_CAM_MATCH;
270 rtwdev->hal.rx_fltr |= B_AX_A_UC_CAM_MATCH;
274 rtw89_write32_mask(rtwdev,
275 rtw89_mac_reg_by_idx(rtwdev, mac->rx_fltr, RTW89_MAC_0),
277 rtwdev->hal.rx_fltr);
278 if (!rtwdev->dbcc_en)
280 rtw89_write32_mask(rtwdev,
281 rtw89_mac_reg_by_idx(rtwdev, mac->rx_fltr, RTW89_MAC_1),
283 rtwdev->hal.rx_fltr);
286 mutex_unlock(&rtwdev->mutex);
296 static u8 rtw89_aifsn_to_aifs(struct rtw89_dev *rtwdev,
300 const struct rtw89_chan *chan = rtw89_chan_get(rtwdev,
311 static void ____rtw89_conf_tx_edca(struct rtw89_dev *rtwdev,
322 aifs = rtw89_aifsn_to_aifs(rtwdev, rtwvif, params->aifs);
327 rtw89_fw_h2c_set_edca(rtwdev, rtwvif, ac_to_fw_idx[ac], val);
337 static void ____rtw89_conf_tx_mu_edca(struct rtw89_dev *rtwdev,
352 aifs = aifsn ? rtw89_aifsn_to_aifs(rtwdev, rtwvif, aifsn) : 0;
358 reg = rtw89_mac_reg_by_idx(rtwdev, ac_to_mu_edca_param[ac], rtwvif->mac_idx);
359 rtw89_write32(rtwdev, reg, val);
361 rtw89_mac_set_hw_muedca_ctrl(rtwdev, rtwvif, true);
364 static void __rtw89_conf_tx(struct rtw89_dev *rtwdev,
367 ____rtw89_conf_tx_edca(rtwdev, rtwvif, ac);
368 ____rtw89_conf_tx_mu_edca(rtwdev, rtwvif, ac);
371 static void rtw89_conf_tx(struct rtw89_dev *rtwdev,
377 __rtw89_conf_tx(rtwdev, rtwvif, ac);
380 static void rtw89_station_mode_sta_assoc(struct rtw89_dev *rtwdev,
391 rtw89_err(rtwdev, "can't find sta to set sta_assoc state\n");
397 rtw89_core_sta_assoc(rtwdev, vif, sta);
405 struct rtw89_dev *rtwdev = hw->priv;
408 mutex_lock(&rtwdev->mutex);
409 rtw89_leave_ps_mode(rtwdev);
413 rtw89_station_mode_sta_assoc(rtwdev, vif, conf);
414 rtw89_phy_set_bss_color(rtwdev, vif);
415 rtw89_chip_cfg_txpwr_ul_tb_offset(rtwdev, vif);
416 rtw89_mac_port_update(rtwdev, rtwvif);
417 rtw89_mac_set_he_obss_narrow_bw_ru(rtwdev, vif);
419 rtw89_queue_chanctx_work(rtwdev);
424 if (rtwdev->scanning)
425 rtw89_hw_scan_abort(rtwdev, vif);
431 rtw89_cam_bssid_changed(rtwdev, rtwvif);
432 rtw89_fw_h2c_cam(rtwdev, rtwvif, NULL, NULL);
436 rtw89_fw_h2c_update_beacon(rtwdev, rtwvif);
439 rtw89_conf_tx(rtwdev, rtwvif);
442 rtw89_phy_set_bss_color(rtwdev, vif);
445 rtw89_mac_bf_set_gid_table(rtwdev, vif, conf);
448 rtw89_process_p2p_ps(rtwdev, vif);
451 rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, vif, true);
454 rtw89_recalc_lps(rtwdev);
456 mutex_unlock(&rtwdev->mutex);
463 struct rtw89_dev *rtwdev = hw->priv;
467 mutex_lock(&rtwdev->mutex);
469 chan = rtw89_chan_get(rtwdev, rtwvif->sub_entity_idx);
471 mutex_unlock(&rtwdev->mutex);
475 if (rtwdev->scanning)
476 rtw89_hw_scan_abort(rtwdev, rtwdev->scan_info.scanning_vif);
479 rtw89_cam_bssid_changed(rtwdev, rtwvif);
480 rtw89_mac_port_update(rtwdev, rtwvif);
481 rtw89_fw_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
482 rtw89_fw_h2c_role_maintain(rtwdev, rtwvif, NULL, RTW89_ROLE_TYPE_CHANGE);
483 rtw89_fw_h2c_join_info(rtwdev, rtwvif, NULL, true);
484 rtw89_fw_h2c_cam(rtwdev, rtwvif, NULL, NULL);
485 rtw89_chip_rfk_channel(rtwdev);
487 rtw89_queue_chanctx_work(rtwdev);
488 mutex_unlock(&rtwdev->mutex);
497 struct rtw89_dev *rtwdev = hw->priv;
500 mutex_lock(&rtwdev->mutex);
501 rtw89_mac_stop_ap(rtwdev, rtwvif);
502 rtw89_fw_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
503 rtw89_fw_h2c_join_info(rtwdev, rtwvif, NULL, true);
504 mutex_unlock(&rtwdev->mutex);
510 struct rtw89_dev *rtwdev = hw->priv;
514 ieee80211_queue_work(rtwdev->hw, &rtwvif->update_beacon_work);
524 struct rtw89_dev *rtwdev = hw->priv;
527 mutex_lock(&rtwdev->mutex);
528 rtw89_leave_ps_mode(rtwdev);
530 __rtw89_conf_tx(rtwdev, rtwvif, ac);
531 mutex_unlock(&rtwdev->mutex);
542 struct rtw89_dev *rtwdev = hw->priv;
546 return rtw89_core_sta_add(rtwdev, vif, sta);
552 return rtw89_core_sta_assoc(rtwdev, vif, sta);
557 return rtw89_core_sta_disassoc(rtwdev, vif, sta);
561 return rtw89_core_sta_disconnect(rtwdev, vif, sta);
565 return rtw89_core_sta_remove(rtwdev, vif, sta);
576 struct rtw89_dev *rtwdev = hw->priv;
579 mutex_lock(&rtwdev->mutex);
580 rtw89_leave_ps_mode(rtwdev);
582 mutex_unlock(&rtwdev->mutex);
592 struct rtw89_dev *rtwdev = hw->priv;
595 mutex_lock(&rtwdev->mutex);
596 rtw89_leave_ps_mode(rtwdev);
600 rtw89_btc_ntfy_specific_packet(rtwdev, PACKET_EAPOL_END);
601 ret = rtw89_cam_sec_key_add(rtwdev, vif, sta, key);
603 rtw89_err(rtwdev, "failed to add key to sec cam\n");
608 rtw89_hci_flush_queues(rtwdev, BIT(rtwdev->hw->queues) - 1,
610 rtw89_mac_flush_txq(rtwdev, BIT(rtwdev->hw->queues) - 1, false);
611 ret = rtw89_cam_sec_key_del(rtwdev, vif, sta, key, true);
613 rtw89_err(rtwdev, "failed to remove key from sec cam\n");
620 mutex_unlock(&rtwdev->mutex);
629 struct rtw89_dev *rtwdev = hw->priv;
642 mutex_lock(&rtwdev->mutex);
644 mutex_unlock(&rtwdev->mutex);
648 mutex_lock(&rtwdev->mutex);
652 rtw89_leave_ps_mode(rtwdev);
653 mutex_unlock(&rtwdev->mutex);
656 mutex_lock(&rtwdev->mutex);
657 rtw89_fw_h2c_ba_cam(rtwdev, rtwsta, true, params);
658 mutex_unlock(&rtwdev->mutex);
661 mutex_lock(&rtwdev->mutex);
662 rtw89_fw_h2c_ba_cam(rtwdev, rtwsta, false, params);
663 mutex_unlock(&rtwdev->mutex);
675 struct rtw89_dev *rtwdev = hw->priv;
677 mutex_lock(&rtwdev->mutex);
678 rtw89_leave_ps_mode(rtwdev);
679 if (test_bit(RTW89_FLAG_POWERON, rtwdev->flags))
680 rtw89_mac_update_rts_threshold(rtwdev, RTW89_MAC_0);
681 mutex_unlock(&rtwdev->mutex);
698 void __rtw89_drop_packets(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif)
704 rtw89_mac_pkt_drop_vif(rtwdev, rtwvif);
706 rtw89_for_each_rtwvif(rtwdev, rtwvif)
707 rtw89_mac_pkt_drop_vif(rtwdev, rtwvif);
714 struct rtw89_dev *rtwdev = hw->priv;
716 mutex_lock(&rtwdev->mutex);
717 rtw89_leave_lps(rtwdev);
718 rtw89_hci_flush_queues(rtwdev, queues, drop);
720 if (drop && !RTW89_CHK_FW_FEATURE(NO_PACKET_DROP, &rtwdev->fw))
721 __rtw89_drop_packets(rtwdev, vif);
723 rtw89_mac_flush_txq(rtwdev, queues, drop);
725 mutex_unlock(&rtwdev->mutex);
729 struct rtw89_dev *rtwdev;
745 rtw89_phy_ra_updata_sta(br_data->rtwdev, sta, IEEE80211_RC_SUPP_RATES_CHANGED);
748 static void rtw89_ra_mask_info_update(struct rtw89_dev *rtwdev,
752 struct rtw89_iter_bitrate_mask_data br_data = { .rtwdev = rtwdev,
756 ieee80211_iterate_stations_atomic(rtwdev->hw, rtw89_ra_mask_info_update_iter,
764 struct rtw89_dev *rtwdev = hw->priv;
766 mutex_lock(&rtwdev->mutex);
767 rtw89_phy_rate_pattern_vif(rtwdev, vif, mask);
768 rtw89_ra_mask_info_update(rtwdev, vif, mask);
769 mutex_unlock(&rtwdev->mutex);
777 struct rtw89_dev *rtwdev = hw->priv;
778 struct rtw89_hal *hal = &rtwdev->hal;
787 mutex_lock(&rtwdev->mutex);
792 mutex_unlock(&rtwdev->mutex);
800 struct rtw89_dev *rtwdev = hw->priv;
801 struct rtw89_hal *hal = &rtwdev->hal;
813 struct rtw89_dev *rtwdev = hw->priv;
816 mutex_lock(&rtwdev->mutex);
817 rtw89_core_scan_start(rtwdev, rtwvif, mac_addr, false);
818 mutex_unlock(&rtwdev->mutex);
824 struct rtw89_dev *rtwdev = hw->priv;
826 mutex_lock(&rtwdev->mutex);
827 rtw89_core_scan_complete(rtwdev, vif, false);
828 mutex_unlock(&rtwdev->mutex);
834 struct rtw89_dev *rtwdev = hw->priv;
837 rtw89_ser_recfg_done(rtwdev);
843 struct rtw89_dev *rtwdev = hw->priv;
847 if (!RTW89_CHK_FW_FEATURE(SCAN_OFFLOAD, &rtwdev->fw))
850 if (rtwdev->scanning || rtwvif->offchan)
853 mutex_lock(&rtwdev->mutex);
854 rtw89_hw_scan_start(rtwdev, vif, req);
855 ret = rtw89_hw_scan_offload(rtwdev, vif, true);
857 rtw89_hw_scan_abort(rtwdev, vif);
858 rtw89_err(rtwdev, "HW scan failed with status: %d\n", ret);
860 mutex_unlock(&rtwdev->mutex);
868 struct rtw89_dev *rtwdev = hw->priv;
870 if (!RTW89_CHK_FW_FEATURE(SCAN_OFFLOAD, &rtwdev->fw))
873 if (!rtwdev->scanning)
876 mutex_lock(&rtwdev->mutex);
877 rtw89_hw_scan_abort(rtwdev, vif);
878 mutex_unlock(&rtwdev->mutex);
885 struct rtw89_dev *rtwdev = hw->priv;
887 rtw89_phy_ra_updata_sta(rtwdev, sta, changed);
893 struct rtw89_dev *rtwdev = hw->priv;
896 mutex_lock(&rtwdev->mutex);
897 ret = rtw89_chanctx_ops_add(rtwdev, ctx);
898 mutex_unlock(&rtwdev->mutex);
906 struct rtw89_dev *rtwdev = hw->priv;
908 mutex_lock(&rtwdev->mutex);
909 rtw89_chanctx_ops_remove(rtwdev, ctx);
910 mutex_unlock(&rtwdev->mutex);
917 struct rtw89_dev *rtwdev = hw->priv;
919 mutex_lock(&rtwdev->mutex);
920 rtw89_chanctx_ops_change(rtwdev, ctx, changed);
921 mutex_unlock(&rtwdev->mutex);
929 struct rtw89_dev *rtwdev = hw->priv;
933 mutex_lock(&rtwdev->mutex);
934 ret = rtw89_chanctx_ops_assign_vif(rtwdev, rtwvif, ctx);
935 mutex_unlock(&rtwdev->mutex);
945 struct rtw89_dev *rtwdev = hw->priv;
948 mutex_lock(&rtwdev->mutex);
949 rtw89_chanctx_ops_unassign_vif(rtwdev, rtwvif, ctx);
950 mutex_unlock(&rtwdev->mutex);
959 struct rtw89_dev *rtwdev = hw->priv;
966 mutex_lock(&rtwdev->mutex);
969 mutex_unlock(&rtwdev->mutex);
973 if (rtwdev->scanning)
974 rtw89_hw_scan_abort(rtwdev, vif);
985 rtw89_roc_start(rtwdev, rtwvif);
987 mutex_unlock(&rtwdev->mutex);
995 struct rtw89_dev *rtwdev = hw->priv;
1003 mutex_lock(&rtwdev->mutex);
1004 rtw89_roc_end(rtwdev, rtwvif);
1005 mutex_unlock(&rtwdev->mutex);
1014 struct rtw89_dev *rtwdev = rtwsta->rtwvif->rtwdev;
1016 rtw89_core_set_tid_config(rtwdev, sta, tid_config);
1024 struct rtw89_dev *rtwdev = hw->priv;
1026 mutex_lock(&rtwdev->mutex);
1028 rtw89_core_set_tid_config(rtwdev, sta, tid_config);
1030 ieee80211_iterate_stations_atomic(rtwdev->hw,
1033 mutex_unlock(&rtwdev->mutex);
1042 struct rtw89_dev *rtwdev = hw->priv;
1045 set_bit(RTW89_FLAG_FORBIDDEN_TRACK_WROK, rtwdev->flags);
1046 cancel_delayed_work_sync(&rtwdev->track_work);
1048 mutex_lock(&rtwdev->mutex);
1049 ret = rtw89_wow_suspend(rtwdev, wowlan);
1050 mutex_unlock(&rtwdev->mutex);
1053 rtw89_warn(rtwdev, "failed to suspend for wow %d\n", ret);
1054 clear_bit(RTW89_FLAG_FORBIDDEN_TRACK_WROK, rtwdev->flags);
1063 struct rtw89_dev *rtwdev = hw->priv;
1066 mutex_lock(&rtwdev->mutex);
1067 ret = rtw89_wow_resume(rtwdev);
1069 rtw89_warn(rtwdev, "failed to resume for wow %d\n", ret);
1070 mutex_unlock(&rtwdev->mutex);
1072 clear_bit(RTW89_FLAG_FORBIDDEN_TRACK_WROK, rtwdev->flags);
1073 ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->track_work,
1081 struct rtw89_dev *rtwdev = hw->priv;
1083 device_set_wakeup_enable(rtwdev->dev, enabled);