xref: /linux/drivers/net/wireless/realtek/rtw89/ps.h (revision ab93e0dd72c37d378dd936f031ffb83ff2bd87ce)
1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /* Copyright(c) 2019-2020  Realtek Corporation
3  */
4 
5 #ifndef __RTW89_PS_H_
6 #define __RTW89_PS_H_
7 
8 void rtw89_enter_lps(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
9 		     bool ps_mode);
10 void rtw89_leave_lps(struct rtw89_dev *rtwdev);
11 void __rtw89_leave_ps_mode(struct rtw89_dev *rtwdev);
12 void __rtw89_enter_ps_mode(struct rtw89_dev *rtwdev);
13 void rtw89_leave_ps_mode(struct rtw89_dev *rtwdev);
14 void rtw89_enter_ips(struct rtw89_dev *rtwdev);
15 void rtw89_leave_ips(struct rtw89_dev *rtwdev);
16 void rtw89_set_coex_ctrl_lps(struct rtw89_dev *rtwdev, bool btc_ctrl);
17 void rtw89_process_p2p_ps(struct rtw89_dev *rtwdev,
18 			  struct rtw89_vif_link *rtwvif_link,
19 			  struct ieee80211_bss_conf *bss_conf);
20 void rtw89_recalc_lps(struct rtw89_dev *rtwdev);
21 void rtw89_p2p_noa_renew(struct rtw89_vif_link *rtwvif_link);
22 void rtw89_p2p_noa_append(struct rtw89_vif_link *rtwvif_link,
23 			  const struct ieee80211_p2p_noa_desc *desc);
24 u8 rtw89_p2p_noa_fetch(struct rtw89_vif_link *rtwvif_link, void **data);
25 void rtw89_p2p_noa_once_init(struct rtw89_vif_link *rtwvif_link);
26 void rtw89_p2p_noa_once_deinit(struct rtw89_vif_link *rtwvif_link);
27 void rtw89_p2p_noa_once_recalc(struct rtw89_vif_link *rtwvif_link);
28 void rtw89_p2p_disable_all_noa(struct rtw89_dev *rtwdev,
29 			       struct rtw89_vif_link *rtwvif_link,
30 			       struct ieee80211_bss_conf *bss_conf);
31 
rtw89_leave_ips_by_hwflags(struct rtw89_dev * rtwdev)32 static inline void rtw89_leave_ips_by_hwflags(struct rtw89_dev *rtwdev)
33 {
34 	struct ieee80211_hw *hw = rtwdev->hw;
35 
36 	if (hw->conf.flags & IEEE80211_CONF_IDLE)
37 		rtw89_leave_ips(rtwdev);
38 }
39 
rtw89_enter_ips_by_hwflags(struct rtw89_dev * rtwdev)40 static inline void rtw89_enter_ips_by_hwflags(struct rtw89_dev *rtwdev)
41 {
42 	struct ieee80211_hw *hw = rtwdev->hw;
43 
44 	/* prevent entering IPS after ROC, but it is scanning */
45 	if (rtwdev->scanning)
46 		return;
47 
48 	if (hw->conf.flags & IEEE80211_CONF_IDLE)
49 		rtw89_enter_ips(rtwdev);
50 }
51 
52 #endif
53