1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /* Copyright(c) 2007 - 2012 Realtek Corporation. */
3 
4 #ifndef __RTW_PWRCTRL_H_
5 #define __RTW_PWRCTRL_H_
6 
7 #include "osdep_service.h"
8 #include "drv_types.h"
9 
10 #define XMIT_ALIVE	BIT(0)
11 #define RECV_ALIVE	BIT(1)
12 #define CMD_ALIVE	BIT(2)
13 #define EVT_ALIVE	BIT(3)
14 
15 enum power_mgnt {
16 	PS_MODE_ACTIVE = 0,
17 	PS_MODE_MIN,
18 	PS_MODE_MAX,
19 	PS_MODE_DTIM,
20 	PS_MODE_VOIP,
21 	PS_MODE_UAPSD_WMM,
22 	PM_Card_Disable,
23 	PS_MODE_NUM
24 };
25 
26 #define LPS_DELAY_TIME	1*HZ /*  1 sec */
27 
28 /*  RF state. */
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===== */
34 	rf_max
35 };
36 
37 enum { /*  for ips_mode */
38 	IPS_NONE = 0,
39 	IPS_NORMAL,
40 	IPS_LEVEL_2,
41 };
42 
43 struct pwrctrl_priv {
44 	struct mutex lock; /* Mutex used to protect struct pwrctrl_priv */
45 
46 	u8	pwr_mode;
47 	u8	smart_ps;
48 	u8	bcn_ant_mode;
49 
50 	bool	bpower_saving;
51 
52 	uint	ips_enter_cnts;
53 	uint	ips_leave_cnts;
54 
55 	u8	ips_mode;
56 	u8	ips_mode_req;	/*  used to accept the mode setting request,
57 				 *  will update to ipsmode later */
58 	uint bips_processing;
59 	unsigned long ips_deny_time; /* will deny IPS when system time less than this */
60 	u8 ps_processing; /* temp used to mark whether in rtw_ps_processor */
61 
62 	u8	bLeisurePs;
63 	u8	LpsIdleCount;
64 	u8	power_mgnt;
65 	u8	bFwCurrentInPSMode;
66 	u32	DelayLPSLastTimeStamp;
67 
68 	u8		bInSuspend;
69 	u8		bSupportRemoteWakeup;
70 	struct timer_list pwr_state_check_timer;
71 	int		pwr_state_check_interval;
72 
73 	enum rt_rf_power_state	rf_pwrstate;/* cur power state */
74 	enum rt_rf_power_state	change_rfpwrstate;
75 
76 	u8		bkeepfwalive;
77 };
78 
79 #define rtw_get_ips_mode_req(pwrctrlpriv) \
80 	(pwrctrlpriv)->ips_mode_req
81 
82 #define rtw_ips_mode_req(pwrctrlpriv, ips_mode) \
83 	((pwrctrlpriv)->ips_mode_req = (ips_mode))
84 
85 #define RTW_PWR_STATE_CHK_INTERVAL 2000
86 
87 #define _rtw_set_pwr_state_check_timer(pwrctrlpriv, ms) \
88 	do { \
89 		_set_timer(&(pwrctrlpriv)->pwr_state_check_timer, (ms)); \
90 	} while (0)
91 
92 #define rtw_set_pwr_state_check_timer(pwrctrl)			\
93 	_rtw_set_pwr_state_check_timer((pwrctrl),		\
94 				       (pwrctrl)->pwr_state_check_interval)
95 
96 void rtw_init_pwrctrl_priv(struct adapter *adapter);
97 
98 void rtw_set_firmware_ps_mode(struct adapter *adapter, u8 mode);
99 void rtw_set_ps_mode(struct adapter *adapter, u8 ps_mode, u8 smart_ps,
100 		     u8 bcn_ant_mode);
101 void LeaveAllPowerSaveMode(struct adapter *adapter);
102 void ips_enter(struct adapter *padapter);
103 int ips_leave(struct adapter *padapter);
104 
105 void rtw_ps_processor(struct adapter *padapter);
106 
107 void LPS_Enter(struct adapter *adapter);
108 void LPS_Leave(struct adapter *adapter);
109 
110 int rtw_pwr_wakeup(struct adapter *adapter);
111 int rtw_pm_set_ips(struct adapter *adapter, u8 mode);
112 int rtw_pm_set_lps(struct adapter *adapter, u8 mode);
113 
114 #endif  /* __RTL871X_PWRCTRL_H_ */
115