1e3ec7017SPing-Ke Shih /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2e3ec7017SPing-Ke Shih /* Copyright(c) 2019-2020  Realtek Corporation
3e3ec7017SPing-Ke Shih  */
4e3ec7017SPing-Ke Shih 
5e3ec7017SPing-Ke Shih #ifndef __RTW89_PS_H_
6e3ec7017SPing-Ke Shih #define __RTW89_PS_H_
7e3ec7017SPing-Ke Shih 
8deb1b2aeSChih-Kang Chang void rtw89_enter_lps(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
9deb1b2aeSChih-Kang Chang 		     bool ps_mode);
10e3ec7017SPing-Ke Shih void rtw89_leave_lps(struct rtw89_dev *rtwdev);
11e3ec7017SPing-Ke Shih void __rtw89_leave_ps_mode(struct rtw89_dev *rtwdev);
1219e28c7fSChin-Yen Lee void __rtw89_enter_ps_mode(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif);
13e3ec7017SPing-Ke Shih void rtw89_leave_ps_mode(struct rtw89_dev *rtwdev);
14e3ec7017SPing-Ke Shih void rtw89_enter_ips(struct rtw89_dev *rtwdev);
15e3ec7017SPing-Ke Shih void rtw89_leave_ips(struct rtw89_dev *rtwdev);
16e3ec7017SPing-Ke Shih void rtw89_set_coex_ctrl_lps(struct rtw89_dev *rtwdev, bool btc_ctrl);
17f4a43c3bSDian-Syuan Yang void rtw89_process_p2p_ps(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif);
1826a125f5SPing-Ke Shih void rtw89_recalc_lps(struct rtw89_dev *rtwdev);
19*51383fd7SZong-Zhe Yang void rtw89_p2p_noa_renew(struct rtw89_vif *rtwvif);
20*51383fd7SZong-Zhe Yang void rtw89_p2p_noa_append(struct rtw89_vif *rtwvif,
21*51383fd7SZong-Zhe Yang 			  const struct ieee80211_p2p_noa_desc *desc);
22*51383fd7SZong-Zhe Yang u8 rtw89_p2p_noa_fetch(struct rtw89_vif *rtwvif, void **data);
23e3ec7017SPing-Ke Shih 
rtw89_leave_ips_by_hwflags(struct rtw89_dev * rtwdev)24a0e97ae3SPo-Hao Huang static inline void rtw89_leave_ips_by_hwflags(struct rtw89_dev *rtwdev)
25a0e97ae3SPo-Hao Huang {
26a0e97ae3SPo-Hao Huang 	struct ieee80211_hw *hw = rtwdev->hw;
27a0e97ae3SPo-Hao Huang 
28a0e97ae3SPo-Hao Huang 	if (hw->conf.flags & IEEE80211_CONF_IDLE)
29a0e97ae3SPo-Hao Huang 		rtw89_leave_ips(rtwdev);
30a0e97ae3SPo-Hao Huang }
31a0e97ae3SPo-Hao Huang 
rtw89_enter_ips_by_hwflags(struct rtw89_dev * rtwdev)32a0e97ae3SPo-Hao Huang static inline void rtw89_enter_ips_by_hwflags(struct rtw89_dev *rtwdev)
33a0e97ae3SPo-Hao Huang {
34a0e97ae3SPo-Hao Huang 	struct ieee80211_hw *hw = rtwdev->hw;
35a0e97ae3SPo-Hao Huang 
36a0e97ae3SPo-Hao Huang 	if (hw->conf.flags & IEEE80211_CONF_IDLE)
37a0e97ae3SPo-Hao Huang 		rtw89_enter_ips(rtwdev);
38a0e97ae3SPo-Hao Huang }
39a0e97ae3SPo-Hao Huang 
40e3ec7017SPing-Ke Shih #endif
41