Lines Matching refs:rtwdev
16 static int rtw89_fw_leave_lps_check(struct rtw89_dev *rtwdev, u8 macid)
18 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
25 1000, 50000, false, rtwdev,
28 rtw89_info(rtwdev, "rtw89: failed to leave lps state\n");
35 static void rtw89_ps_power_mode_change_with_hci(struct rtw89_dev *rtwdev,
38 ieee80211_stop_queues(rtwdev->hw);
39 rtwdev->hci.paused = true;
40 flush_work(&rtwdev->txq_work);
41 ieee80211_wake_queues(rtwdev->hw);
43 rtw89_hci_pause(rtwdev, true);
44 rtw89_mac_power_mode_change(rtwdev, enter);
45 rtw89_hci_switch_mode(rtwdev, enter);
46 rtw89_hci_pause(rtwdev, false);
48 rtwdev->hci.paused = false;
52 napi_schedule(&rtwdev->napi);
57 static void rtw89_ps_power_mode_change(struct rtw89_dev *rtwdev, bool enter)
59 if (rtwdev->chip->low_power_hci_modes & BIT(rtwdev->ps_mode) &&
60 !test_bit(RTW89_FLAG_WOWLAN, rtwdev->flags))
61 rtw89_ps_power_mode_change_with_hci(rtwdev, enter);
63 rtw89_mac_power_mode_change(rtwdev, enter);
66 void __rtw89_enter_ps_mode(struct rtw89_dev *rtwdev)
68 if (!rtwdev->ps_mode)
71 if (test_and_set_bit(RTW89_FLAG_LOW_POWER_MODE, rtwdev->flags))
74 rtw89_ps_power_mode_change(rtwdev, true);
77 void __rtw89_leave_ps_mode(struct rtw89_dev *rtwdev)
79 if (!rtwdev->ps_mode)
82 if (test_and_clear_bit(RTW89_FLAG_LOW_POWER_MODE, rtwdev->flags))
83 rtw89_ps_power_mode_change(rtwdev, false);
86 static void __rtw89_enter_lps_link(struct rtw89_dev *rtwdev,
95 rtw89_btc_ntfy_radio_state(rtwdev, BTC_RFCTRL_FW_CTRL);
96 rtw89_fw_h2c_lps_parm(rtwdev, &lps_param);
99 static void __rtw89_leave_lps(struct rtw89_dev *rtwdev,
108 rtw89_fw_h2c_lps_parm(rtwdev, &lps_param);
109 rtw89_fw_leave_lps_check(rtwdev, 0);
110 rtw89_btc_ntfy_radio_state(rtwdev, BTC_RFCTRL_WL_ON);
111 rtw89_chip_digital_pwr_comp(rtwdev, rtwvif_link->phy_idx);
114 void rtw89_leave_ps_mode(struct rtw89_dev *rtwdev)
116 lockdep_assert_held(&rtwdev->mutex);
118 __rtw89_leave_ps_mode(rtwdev);
121 void rtw89_enter_lps(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
128 lockdep_assert_held(&rtwdev->mutex);
130 if (test_and_set_bit(RTW89_FLAG_LEISURE_PS, rtwdev->flags))
134 __rtw89_enter_lps_link(rtwdev, rtwvif_link);
140 if (RTW89_CHK_FW_FEATURE(LPS_CH_INFO, &rtwdev->fw))
141 rtw89_fw_h2c_lps_ch_info(rtwdev, rtwvif);
143 rtw89_fw_h2c_lps_ml_cmn_info(rtwdev, rtwvif);
146 __rtw89_enter_ps_mode(rtwdev);
149 static void rtw89_leave_lps_vif(struct rtw89_dev *rtwdev,
156 __rtw89_leave_lps(rtwdev, rtwvif_link);
159 void rtw89_leave_lps(struct rtw89_dev *rtwdev)
165 lockdep_assert_held(&rtwdev->mutex);
167 if (!test_and_clear_bit(RTW89_FLAG_LEISURE_PS, rtwdev->flags))
170 __rtw89_leave_ps_mode(rtwdev);
172 rtw89_phy_dm_reinit(rtwdev);
174 rtw89_for_each_rtwvif(rtwdev, rtwvif)
176 rtw89_leave_lps_vif(rtwdev, rtwvif_link);
179 void rtw89_enter_ips(struct rtw89_dev *rtwdev)
185 set_bit(RTW89_FLAG_INACTIVE_PS, rtwdev->flags);
187 if (!test_bit(RTW89_FLAG_POWERON, rtwdev->flags))
190 rtw89_for_each_rtwvif(rtwdev, rtwvif)
192 rtw89_mac_vif_deinit(rtwdev, rtwvif_link);
194 rtw89_core_stop(rtwdev);
197 void rtw89_leave_ips(struct rtw89_dev *rtwdev)
204 if (test_bit(RTW89_FLAG_POWERON, rtwdev->flags))
207 ret = rtw89_core_start(rtwdev);
209 rtw89_err(rtwdev, "failed to leave idle state\n");
211 rtw89_set_channel(rtwdev);
213 rtw89_for_each_rtwvif(rtwdev, rtwvif)
215 rtw89_mac_vif_init(rtwdev, rtwvif_link);
217 clear_bit(RTW89_FLAG_INACTIVE_PS, rtwdev->flags);
220 void rtw89_set_coex_ctrl_lps(struct rtw89_dev *rtwdev, bool btc_ctrl)
223 rtw89_leave_lps(rtwdev);
226 static void rtw89_tsf32_toggle(struct rtw89_dev *rtwdev,
234 rtw89_fw_h2c_tsf32_toggle(rtwdev, rtwvif_link, true);
236 rtw89_fw_h2c_tsf32_toggle(rtwdev, rtwvif_link, false);
239 static void rtw89_p2p_disable_all_noa(struct rtw89_dev *rtwdev,
254 rtw89_tsf32_toggle(rtwdev, rtwvif_link, act);
255 rtw89_fw_h2c_p2p_act(rtwdev, rtwvif_link, bss_conf,
260 static void rtw89_p2p_update_noa(struct rtw89_dev *rtwdev,
277 rtw89_tsf32_toggle(rtwdev, rtwvif_link, act);
278 rtw89_fw_h2c_p2p_act(rtwdev, rtwvif_link, bss_conf,
284 void rtw89_process_p2p_ps(struct rtw89_dev *rtwdev,
288 rtw89_p2p_disable_all_noa(rtwdev, rtwvif_link, bss_conf);
289 rtw89_p2p_update_noa(rtwdev, rtwvif_link, bss_conf);
292 void rtw89_recalc_lps(struct rtw89_dev *rtwdev)
299 mode = rtw89_get_entity_mode(rtwdev);
303 rtw89_for_each_rtwvif(rtwdev, rtwvif) {
316 rtwdev->lps_enabled = true;
321 rtw89_leave_lps(rtwdev);
322 rtwdev->lps_enabled = false;