Lines Matching refs:rtwdev
14 static int rtw89_fw_leave_lps_check(struct rtw89_dev *rtwdev, u8 macid) in rtw89_fw_leave_lps_check() argument
22 1000, 50000, false, rtwdev, in rtw89_fw_leave_lps_check()
25 rtw89_info(rtwdev, "rtw89: failed to leave lps state\n"); in rtw89_fw_leave_lps_check()
32 static void rtw89_ps_power_mode_change_with_hci(struct rtw89_dev *rtwdev, in rtw89_ps_power_mode_change_with_hci() argument
35 ieee80211_stop_queues(rtwdev->hw); in rtw89_ps_power_mode_change_with_hci()
36 rtwdev->hci.paused = true; in rtw89_ps_power_mode_change_with_hci()
37 flush_work(&rtwdev->txq_work); in rtw89_ps_power_mode_change_with_hci()
38 ieee80211_wake_queues(rtwdev->hw); in rtw89_ps_power_mode_change_with_hci()
40 rtw89_hci_pause(rtwdev, true); in rtw89_ps_power_mode_change_with_hci()
41 rtw89_mac_power_mode_change(rtwdev, enter); in rtw89_ps_power_mode_change_with_hci()
42 rtw89_hci_switch_mode(rtwdev, enter); in rtw89_ps_power_mode_change_with_hci()
43 rtw89_hci_pause(rtwdev, false); in rtw89_ps_power_mode_change_with_hci()
45 rtwdev->hci.paused = false; in rtw89_ps_power_mode_change_with_hci()
49 napi_schedule(&rtwdev->napi); in rtw89_ps_power_mode_change_with_hci()
54 static void rtw89_ps_power_mode_change(struct rtw89_dev *rtwdev, bool enter) in rtw89_ps_power_mode_change() argument
56 if (rtwdev->chip->low_power_hci_modes & BIT(rtwdev->ps_mode)) in rtw89_ps_power_mode_change()
57 rtw89_ps_power_mode_change_with_hci(rtwdev, enter); in rtw89_ps_power_mode_change()
59 rtw89_mac_power_mode_change(rtwdev, enter); in rtw89_ps_power_mode_change()
62 static void __rtw89_enter_ps_mode(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif) in __rtw89_enter_ps_mode() argument
67 if (!rtwdev->ps_mode) in __rtw89_enter_ps_mode()
70 if (test_and_set_bit(RTW89_FLAG_LOW_POWER_MODE, rtwdev->flags)) in __rtw89_enter_ps_mode()
73 rtw89_ps_power_mode_change(rtwdev, true); in __rtw89_enter_ps_mode()
76 void __rtw89_leave_ps_mode(struct rtw89_dev *rtwdev) in __rtw89_leave_ps_mode() argument
78 if (!rtwdev->ps_mode) in __rtw89_leave_ps_mode()
81 if (test_and_clear_bit(RTW89_FLAG_LOW_POWER_MODE, rtwdev->flags)) in __rtw89_leave_ps_mode()
82 rtw89_ps_power_mode_change(rtwdev, false); in __rtw89_leave_ps_mode()
85 static void __rtw89_enter_lps(struct rtw89_dev *rtwdev, u8 mac_id) in __rtw89_enter_lps() argument
93 rtw89_btc_ntfy_radio_state(rtwdev, BTC_RFCTRL_FW_CTRL); in __rtw89_enter_lps()
94 rtw89_fw_h2c_lps_parm(rtwdev, &lps_param); in __rtw89_enter_lps()
97 static void __rtw89_leave_lps(struct rtw89_dev *rtwdev, u8 mac_id) in __rtw89_leave_lps() argument
105 rtw89_fw_h2c_lps_parm(rtwdev, &lps_param); in __rtw89_leave_lps()
106 rtw89_fw_leave_lps_check(rtwdev, 0); in __rtw89_leave_lps()
107 rtw89_btc_ntfy_radio_state(rtwdev, BTC_RFCTRL_WL_ON); in __rtw89_leave_lps()
110 void rtw89_leave_ps_mode(struct rtw89_dev *rtwdev) in rtw89_leave_ps_mode() argument
112 lockdep_assert_held(&rtwdev->mutex); in rtw89_leave_ps_mode()
114 __rtw89_leave_ps_mode(rtwdev); in rtw89_leave_ps_mode()
117 void rtw89_enter_lps(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif) in rtw89_enter_lps() argument
119 lockdep_assert_held(&rtwdev->mutex); in rtw89_enter_lps()
121 if (test_and_set_bit(RTW89_FLAG_LEISURE_PS, rtwdev->flags)) in rtw89_enter_lps()
124 __rtw89_enter_lps(rtwdev, rtwvif->mac_id); in rtw89_enter_lps()
125 __rtw89_enter_ps_mode(rtwdev, rtwvif); in rtw89_enter_lps()
128 static void rtw89_leave_lps_vif(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif) in rtw89_leave_lps_vif() argument
134 __rtw89_leave_lps(rtwdev, rtwvif->mac_id); in rtw89_leave_lps_vif()
137 void rtw89_leave_lps(struct rtw89_dev *rtwdev) in rtw89_leave_lps() argument
141 lockdep_assert_held(&rtwdev->mutex); in rtw89_leave_lps()
143 if (!test_and_clear_bit(RTW89_FLAG_LEISURE_PS, rtwdev->flags)) in rtw89_leave_lps()
146 __rtw89_leave_ps_mode(rtwdev); in rtw89_leave_lps()
148 rtw89_for_each_rtwvif(rtwdev, rtwvif) in rtw89_leave_lps()
149 rtw89_leave_lps_vif(rtwdev, rtwvif); in rtw89_leave_lps()
152 void rtw89_enter_ips(struct rtw89_dev *rtwdev) in rtw89_enter_ips() argument
156 set_bit(RTW89_FLAG_INACTIVE_PS, rtwdev->flags); in rtw89_enter_ips()
158 rtw89_for_each_rtwvif(rtwdev, rtwvif) in rtw89_enter_ips()
159 rtw89_mac_vif_deinit(rtwdev, rtwvif); in rtw89_enter_ips()
161 rtw89_core_stop(rtwdev); in rtw89_enter_ips()
164 void rtw89_leave_ips(struct rtw89_dev *rtwdev) in rtw89_leave_ips() argument
169 ret = rtw89_core_start(rtwdev); in rtw89_leave_ips()
171 rtw89_err(rtwdev, "failed to leave idle state\n"); in rtw89_leave_ips()
173 rtw89_set_channel(rtwdev); in rtw89_leave_ips()
175 rtw89_for_each_rtwvif(rtwdev, rtwvif) in rtw89_leave_ips()
176 rtw89_mac_vif_init(rtwdev, rtwvif); in rtw89_leave_ips()
178 clear_bit(RTW89_FLAG_INACTIVE_PS, rtwdev->flags); in rtw89_leave_ips()
181 void rtw89_set_coex_ctrl_lps(struct rtw89_dev *rtwdev, bool btc_ctrl) in rtw89_set_coex_ctrl_lps() argument
184 rtw89_leave_lps(rtwdev); in rtw89_set_coex_ctrl_lps()
187 static void rtw89_tsf32_toggle(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif, in rtw89_tsf32_toggle() argument
194 rtw89_fw_h2c_tsf32_toggle(rtwdev, rtwvif, true); in rtw89_tsf32_toggle()
196 rtw89_fw_h2c_tsf32_toggle(rtwdev, rtwvif, false); in rtw89_tsf32_toggle()
199 static void rtw89_p2p_disable_all_noa(struct rtw89_dev *rtwdev, in rtw89_p2p_disable_all_noa() argument
214 rtw89_tsf32_toggle(rtwdev, rtwvif, act); in rtw89_p2p_disable_all_noa()
215 rtw89_fw_h2c_p2p_act(rtwdev, vif, NULL, act, noa_id); in rtw89_p2p_disable_all_noa()
219 static void rtw89_p2p_update_noa(struct rtw89_dev *rtwdev, in rtw89_p2p_update_noa() argument
236 rtw89_tsf32_toggle(rtwdev, rtwvif, act); in rtw89_p2p_update_noa()
237 rtw89_fw_h2c_p2p_act(rtwdev, vif, desc, act, noa_id); in rtw89_p2p_update_noa()
242 void rtw89_process_p2p_ps(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif) in rtw89_process_p2p_ps() argument
244 rtw89_p2p_disable_all_noa(rtwdev, vif); in rtw89_process_p2p_ps()
245 rtw89_p2p_update_noa(rtwdev, vif); in rtw89_process_p2p_ps()