1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /* Copyright(c) 2007 - 2012 Realtek Corporation. */
4 #ifndef __RTW_PWRCTRL_H_
5 #define __RTW_PWRCTRL_H_
7 #include "osdep_service.h"
10 #define XMIT_ALIVE BIT(0)
11 #define RECV_ALIVE BIT(1)
12 #define CMD_ALIVE BIT(2)
13 #define EVT_ALIVE BIT(3)
26 #define LPS_DELAY_TIME 1*HZ /* 1 sec */
29 enum rt_rf_power_state {
30 rf_on, /* RF is on after RFSleep or RFOff */
31 rf_sleep, /* 802.11 Power Save mode */
32 rf_off, /* HW/SW Radio OFF or Inactive Power Save */
33 /* Add the new RF state above this line===== */
37 enum { /* for ips_mode */
44 struct mutex lock; /* Mutex used to protect struct pwrctrl_priv */
51 struct work_struct cpwm_event;
55 u8 reg_pdnmode; /* powerdown mode */
64 u8 ips_mode_req; /* used to accept the mode setting request,
65 * will update to ipsmode later */
67 u32 ips_deny_time; /* will deny IPS when system time less than this */
68 u8 ps_processing; /* temp used to mark whether in rtw_ps_processor */
73 u8 bFwCurrentInPSMode;
74 u32 DelayLPSLastTimeStamp;
75 s32 pnp_current_pwr_state;
79 u8 bSupportRemoteWakeup;
80 struct timer_list pwr_state_check_timer;
81 int pwr_state_check_interval;
82 u8 pwr_state_check_cnts;
86 enum rt_rf_power_state rf_pwrstate;/* cur power state */
87 enum rt_rf_power_state change_rfpwrstate;
93 #define rtw_get_ips_mode_req(pwrctrlpriv) \
94 (pwrctrlpriv)->ips_mode_req
96 #define rtw_ips_mode_req(pwrctrlpriv, ips_mode) \
97 ((pwrctrlpriv)->ips_mode_req = (ips_mode))
99 #define RTW_PWR_STATE_CHK_INTERVAL 2000
101 #define _rtw_set_pwr_state_check_timer(pwrctrlpriv, ms) \
103 _set_timer(&(pwrctrlpriv)->pwr_state_check_timer, (ms)); \
106 #define rtw_set_pwr_state_check_timer(pwrctrl) \
107 _rtw_set_pwr_state_check_timer((pwrctrl), \
108 (pwrctrl)->pwr_state_check_interval)
110 void rtw_init_pwrctrl_priv(struct adapter *adapter);
112 void rtw_set_ps_mode(struct adapter *adapter, u8 ps_mode, u8 smart_ps,
114 void LeaveAllPowerSaveMode(struct adapter *adapter);
115 void ips_enter(struct adapter *padapter);
116 int ips_leave(struct adapter *padapter);
118 void rtw_ps_processor(struct adapter *padapter);
120 s32 LPS_RF_ON_check(struct adapter *adapter, u32 delay_ms);
121 void LPS_Enter(struct adapter *adapter);
122 void LPS_Leave(struct adapter *adapter);
124 int _rtw_pwr_wakeup(struct adapter *adapter, u32 ips_defer_ms,
126 #define rtw_pwr_wakeup(adapter) \
127 _rtw_pwr_wakeup(adapter, RTW_PWR_STATE_CHK_INTERVAL, __func__)
128 int rtw_pm_set_ips(struct adapter *adapter, u8 mode);
129 int rtw_pm_set_lps(struct adapter *adapter, u8 mode);
131 #endif /* __RTL871X_PWRCTRL_H_ */