Lines Matching refs:rtwdev
15 static int rtw89_fw_leave_lps_check(struct rtw89_dev *rtwdev, u8 macid)
23 1000, 50000, false, rtwdev,
26 rtw89_info(rtwdev, "rtw89: failed to leave lps state\n");
33 static void rtw89_ps_power_mode_change_with_hci(struct rtw89_dev *rtwdev,
36 ieee80211_stop_queues(rtwdev->hw);
37 rtwdev->hci.paused = true;
38 flush_work(&rtwdev->txq_work);
39 ieee80211_wake_queues(rtwdev->hw);
41 rtw89_hci_pause(rtwdev, true);
42 rtw89_mac_power_mode_change(rtwdev, enter);
43 rtw89_hci_switch_mode(rtwdev, enter);
44 rtw89_hci_pause(rtwdev, false);
46 rtwdev->hci.paused = false;
50 napi_schedule(&rtwdev->napi);
55 static void rtw89_ps_power_mode_change(struct rtw89_dev *rtwdev, bool enter)
57 if (rtwdev->chip->low_power_hci_modes & BIT(rtwdev->ps_mode))
58 rtw89_ps_power_mode_change_with_hci(rtwdev, enter);
60 rtw89_mac_power_mode_change(rtwdev, enter);
63 void __rtw89_enter_ps_mode(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
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(struct rtw89_dev *rtwdev, u8 mac_id)
94 rtw89_btc_ntfy_radio_state(rtwdev, BTC_RFCTRL_FW_CTRL);
95 rtw89_fw_h2c_lps_parm(rtwdev, &lps_param);
98 static void __rtw89_leave_lps(struct rtw89_dev *rtwdev, u8 mac_id)
106 rtw89_fw_h2c_lps_parm(rtwdev, &lps_param);
107 rtw89_fw_leave_lps_check(rtwdev, 0);
108 rtw89_btc_ntfy_radio_state(rtwdev, BTC_RFCTRL_WL_ON);
111 void rtw89_leave_ps_mode(struct rtw89_dev *rtwdev)
113 lockdep_assert_held(&rtwdev->mutex);
115 __rtw89_leave_ps_mode(rtwdev);
118 void rtw89_enter_lps(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
121 lockdep_assert_held(&rtwdev->mutex);
123 if (test_and_set_bit(RTW89_FLAG_LEISURE_PS, rtwdev->flags))
126 __rtw89_enter_lps(rtwdev, rtwvif->mac_id);
128 __rtw89_enter_ps_mode(rtwdev, rtwvif);
131 static void rtw89_leave_lps_vif(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
137 __rtw89_leave_lps(rtwdev, rtwvif->mac_id);
140 void rtw89_leave_lps(struct rtw89_dev *rtwdev)
144 lockdep_assert_held(&rtwdev->mutex);
146 if (!test_and_clear_bit(RTW89_FLAG_LEISURE_PS, rtwdev->flags))
149 __rtw89_leave_ps_mode(rtwdev);
151 rtw89_for_each_rtwvif(rtwdev, rtwvif)
152 rtw89_leave_lps_vif(rtwdev, rtwvif);
155 void rtw89_enter_ips(struct rtw89_dev *rtwdev)
159 set_bit(RTW89_FLAG_INACTIVE_PS, rtwdev->flags);
161 if (!test_bit(RTW89_FLAG_POWERON, rtwdev->flags))
164 rtw89_for_each_rtwvif(rtwdev, rtwvif)
165 rtw89_mac_vif_deinit(rtwdev, rtwvif);
167 rtw89_core_stop(rtwdev);
170 void rtw89_leave_ips(struct rtw89_dev *rtwdev)
175 if (test_bit(RTW89_FLAG_POWERON, rtwdev->flags))
178 ret = rtw89_core_start(rtwdev);
180 rtw89_err(rtwdev, "failed to leave idle state\n");
182 rtw89_set_channel(rtwdev);
184 rtw89_for_each_rtwvif(rtwdev, rtwvif)
185 rtw89_mac_vif_init(rtwdev, rtwvif);
187 clear_bit(RTW89_FLAG_INACTIVE_PS, rtwdev->flags);
190 void rtw89_set_coex_ctrl_lps(struct rtw89_dev *rtwdev, bool btc_ctrl)
193 rtw89_leave_lps(rtwdev);
196 static void rtw89_tsf32_toggle(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
203 rtw89_fw_h2c_tsf32_toggle(rtwdev, rtwvif, true);
205 rtw89_fw_h2c_tsf32_toggle(rtwdev, rtwvif, false);
208 static void rtw89_p2p_disable_all_noa(struct rtw89_dev *rtwdev,
223 rtw89_tsf32_toggle(rtwdev, rtwvif, act);
224 rtw89_fw_h2c_p2p_act(rtwdev, vif, NULL, act, noa_id);
228 static void rtw89_p2p_update_noa(struct rtw89_dev *rtwdev,
245 rtw89_tsf32_toggle(rtwdev, rtwvif, act);
246 rtw89_fw_h2c_p2p_act(rtwdev, vif, desc, act, noa_id);
251 void rtw89_process_p2p_ps(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif)
253 rtw89_p2p_disable_all_noa(rtwdev, vif);
254 rtw89_p2p_update_noa(rtwdev, vif);
257 void rtw89_recalc_lps(struct rtw89_dev *rtwdev)
264 mode = rtw89_get_entity_mode(rtwdev);
268 rtw89_for_each_rtwvif(rtwdev, rtwvif) {
281 rtwdev->lps_enabled = true;
286 rtw89_leave_lps(rtwdev);
287 rtwdev->lps_enabled = false;