Lines Matching refs:rtwdev

13 static int rtw_ips_pwr_up(struct rtw_dev *rtwdev)  in rtw_ips_pwr_up()  argument
17 ret = rtw_core_start(rtwdev); in rtw_ips_pwr_up()
19 rtw_err(rtwdev, "leave idle state failed\n"); in rtw_ips_pwr_up()
21 rtw_set_channel(rtwdev); in rtw_ips_pwr_up()
22 clear_bit(RTW_FLAG_INACTIVE_PS, rtwdev->flags); in rtw_ips_pwr_up()
27 int rtw_enter_ips(struct rtw_dev *rtwdev) in rtw_enter_ips() argument
29 set_bit(RTW_FLAG_INACTIVE_PS, rtwdev->flags); in rtw_enter_ips()
31 rtw_coex_ips_notify(rtwdev, COEX_IPS_ENTER); in rtw_enter_ips()
33 rtw_core_stop(rtwdev); in rtw_enter_ips()
34 rtw_hci_link_ps(rtwdev, true); in rtw_enter_ips()
42 struct rtw_dev *rtwdev = data; in rtw_restore_port_cfg_iter() local
46 rtw_vif_port_config(rtwdev, rtwvif, config); in rtw_restore_port_cfg_iter()
49 int rtw_leave_ips(struct rtw_dev *rtwdev) in rtw_leave_ips() argument
53 rtw_hci_link_ps(rtwdev, false); in rtw_leave_ips()
55 ret = rtw_ips_pwr_up(rtwdev); in rtw_leave_ips()
57 rtw_err(rtwdev, "failed to leave ips state\n"); in rtw_leave_ips()
61 rtw_iterate_vifs_atomic(rtwdev, rtw_restore_port_cfg_iter, rtwdev); in rtw_leave_ips()
63 rtw_coex_ips_notify(rtwdev, COEX_IPS_LEAVE); in rtw_leave_ips()
68 void rtw_power_mode_change(struct rtw_dev *rtwdev, bool enter) in rtw_power_mode_change() argument
73 request = rtw_read8(rtwdev, rtwdev->hci.rpwm_addr); in rtw_power_mode_change()
74 confirm = rtw_read8(rtwdev, rtwdev->hci.cpwm_addr); in rtw_power_mode_change()
80 if (rtw_get_lps_deep_mode(rtwdev) == LPS_DEEP_MODE_PG) in rtw_power_mode_change()
86 rtw_write8(rtwdev, rtwdev->hci.rpwm_addr, request); in rtw_power_mode_change()
91 100, 15000, true, rtwdev, in rtw_power_mode_change()
92 rtwdev->hci.cpwm_addr); in rtw_power_mode_change()
107 static void __rtw_leave_lps_deep(struct rtw_dev *rtwdev) in __rtw_leave_lps_deep() argument
109 rtw_hci_deep_ps(rtwdev, false); in __rtw_leave_lps_deep()
112 static int __rtw_fw_leave_lps_check_reg(struct rtw_dev *rtwdev) in __rtw_fw_leave_lps_check_reg() argument
129 if (rtw_read32_mask(rtwdev, REG_TCR, BIT_PWRMGT_HWDATA_EN) == 0) in __rtw_fw_leave_lps_check_reg()
137 static int __rtw_fw_leave_lps_check_c2h(struct rtw_dev *rtwdev) in __rtw_fw_leave_lps_check_c2h() argument
139 if (wait_for_completion_timeout(&rtwdev->lps_leave_check, in __rtw_fw_leave_lps_check_c2h()
145 static void rtw_fw_leave_lps_check(struct rtw_dev *rtwdev) in rtw_fw_leave_lps_check() argument
150 if (test_bit(RTW_FLAG_WOWLAN, rtwdev->flags)) in rtw_fw_leave_lps_check()
151 fw = &rtwdev->wow_fw; in rtw_fw_leave_lps_check()
153 fw = &rtwdev->fw; in rtw_fw_leave_lps_check()
156 ret = __rtw_fw_leave_lps_check_c2h(rtwdev); in rtw_fw_leave_lps_check()
158 ret = __rtw_fw_leave_lps_check_reg(rtwdev); in rtw_fw_leave_lps_check()
161 rtw_write32_clr(rtwdev, REG_TCR, BIT_PWRMGT_HWDATA_EN); in rtw_fw_leave_lps_check()
162 rtw_warn(rtwdev, "firmware failed to leave lps state\n"); in rtw_fw_leave_lps_check()
166 static void rtw_fw_leave_lps_check_prepare(struct rtw_dev *rtwdev) in rtw_fw_leave_lps_check_prepare() argument
170 if (test_bit(RTW_FLAG_WOWLAN, rtwdev->flags)) in rtw_fw_leave_lps_check_prepare()
171 fw = &rtwdev->wow_fw; in rtw_fw_leave_lps_check_prepare()
173 fw = &rtwdev->fw; in rtw_fw_leave_lps_check_prepare()
176 reinit_completion(&rtwdev->lps_leave_check); in rtw_fw_leave_lps_check_prepare()
179 static void rtw_leave_lps_core(struct rtw_dev *rtwdev) in rtw_leave_lps_core() argument
181 struct rtw_lps_conf *conf = &rtwdev->lps_conf; in rtw_leave_lps_core()
188 rtw_hci_link_ps(rtwdev, false); in rtw_leave_lps_core()
189 rtw_fw_leave_lps_check_prepare(rtwdev); in rtw_leave_lps_core()
190 rtw_fw_set_pwr_mode(rtwdev); in rtw_leave_lps_core()
191 rtw_fw_leave_lps_check(rtwdev); in rtw_leave_lps_core()
193 clear_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags); in rtw_leave_lps_core()
195 rtw_coex_lps_notify(rtwdev, COEX_LPS_DISABLE); in rtw_leave_lps_core()
198 enum rtw_lps_deep_mode rtw_get_lps_deep_mode(struct rtw_dev *rtwdev) in rtw_get_lps_deep_mode() argument
200 if (test_bit(RTW_FLAG_WOWLAN, rtwdev->flags)) in rtw_get_lps_deep_mode()
201 return rtwdev->lps_conf.wow_deep_mode; in rtw_get_lps_deep_mode()
203 return rtwdev->lps_conf.deep_mode; in rtw_get_lps_deep_mode()
206 static void __rtw_enter_lps_deep(struct rtw_dev *rtwdev) in __rtw_enter_lps_deep() argument
208 if (rtw_get_lps_deep_mode(rtwdev) == LPS_DEEP_MODE_NONE) in __rtw_enter_lps_deep()
211 if (!test_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags)) { in __rtw_enter_lps_deep()
212 rtw_dbg(rtwdev, RTW_DBG_PS, in __rtw_enter_lps_deep()
217 if (rtw_get_lps_deep_mode(rtwdev) == LPS_DEEP_MODE_PG) in __rtw_enter_lps_deep()
218 rtw_fw_set_pg_info(rtwdev); in __rtw_enter_lps_deep()
220 rtw_hci_deep_ps(rtwdev, true); in __rtw_enter_lps_deep()
223 static void rtw_enter_lps_core(struct rtw_dev *rtwdev) in rtw_enter_lps_core() argument
225 struct rtw_lps_conf *conf = &rtwdev->lps_conf; in rtw_enter_lps_core()
232 rtw_coex_lps_notify(rtwdev, COEX_LPS_ENABLE); in rtw_enter_lps_core()
234 rtw_fw_set_pwr_mode(rtwdev); in rtw_enter_lps_core()
235 rtw_hci_link_ps(rtwdev, true); in rtw_enter_lps_core()
237 set_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags); in rtw_enter_lps_core()
240 static void __rtw_enter_lps(struct rtw_dev *rtwdev, u8 port_id) in __rtw_enter_lps() argument
242 struct rtw_lps_conf *conf = &rtwdev->lps_conf; in __rtw_enter_lps()
244 if (test_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags)) in __rtw_enter_lps()
250 rtw_enter_lps_core(rtwdev); in __rtw_enter_lps()
253 static void __rtw_leave_lps(struct rtw_dev *rtwdev) in __rtw_leave_lps() argument
255 struct rtw_lps_conf *conf = &rtwdev->lps_conf; in __rtw_leave_lps()
257 if (test_and_clear_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags)) { in __rtw_leave_lps()
258 rtw_dbg(rtwdev, RTW_DBG_PS, in __rtw_leave_lps()
260 __rtw_leave_lps_deep(rtwdev); in __rtw_leave_lps()
263 if (!test_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags)) in __rtw_leave_lps()
268 rtw_leave_lps_core(rtwdev); in __rtw_leave_lps()
271 void rtw_enter_lps(struct rtw_dev *rtwdev, u8 port_id) in rtw_enter_lps() argument
273 lockdep_assert_held(&rtwdev->mutex); in rtw_enter_lps()
275 if (rtwdev->coex.stat.wl_force_lps_ctrl) in rtw_enter_lps()
278 __rtw_enter_lps(rtwdev, port_id); in rtw_enter_lps()
279 __rtw_enter_lps_deep(rtwdev); in rtw_enter_lps()
282 void rtw_leave_lps(struct rtw_dev *rtwdev) in rtw_leave_lps() argument
284 lockdep_assert_held(&rtwdev->mutex); in rtw_leave_lps()
286 __rtw_leave_lps_deep(rtwdev); in rtw_leave_lps()
287 __rtw_leave_lps(rtwdev); in rtw_leave_lps()
290 void rtw_leave_lps_deep(struct rtw_dev *rtwdev) in rtw_leave_lps_deep() argument
292 lockdep_assert_held(&rtwdev->mutex); in rtw_leave_lps_deep()
294 __rtw_leave_lps_deep(rtwdev); in rtw_leave_lps_deep()