Merge tag 'pci-v5.18-changes-2' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / staging / r8188eu / include / rtw_pwrctrl.h
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         u32     alives;
51         struct work_struct cpwm_event;
52         bool    bpower_saving;
53
54         u8      reg_rfoff;
55         u8      reg_pdnmode; /* powerdown mode */
56
57         /* RF OFF Level */
58         u32     cur_ps_level;
59         u32     reg_rfps_level;
60         uint    ips_enter_cnts;
61         uint    ips_leave_cnts;
62
63         u8      ips_mode;
64         u8      ips_mode_req;   /*  used to accept the mode setting request,
65                                  *  will update to ipsmode later */
66         uint bips_processing;
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 */
69
70         u8      bLeisurePs;
71         u8      LpsIdleCount;
72         u8      power_mgnt;
73         u8      bFwCurrentInPSMode;
74         u32     DelayLPSLastTimeStamp;
75         s32             pnp_current_pwr_state;
76         u8              pnp_bstop_trx;
77
78         u8              bInSuspend;
79         u8              bSupportRemoteWakeup;
80         struct timer_list pwr_state_check_timer;
81         int             pwr_state_check_interval;
82         u8              pwr_state_check_cnts;
83
84         int             ps_flag;
85
86         enum rt_rf_power_state  rf_pwrstate;/* cur power state */
87         enum rt_rf_power_state  change_rfpwrstate;
88
89         u8              wepkeymask;
90         u8              bkeepfwalive;
91 };
92
93 #define rtw_get_ips_mode_req(pwrctrlpriv) \
94         (pwrctrlpriv)->ips_mode_req
95
96 #define rtw_ips_mode_req(pwrctrlpriv, ips_mode) \
97         ((pwrctrlpriv)->ips_mode_req = (ips_mode))
98
99 #define RTW_PWR_STATE_CHK_INTERVAL 2000
100
101 #define _rtw_set_pwr_state_check_timer(pwrctrlpriv, ms) \
102         do { \
103                 _set_timer(&(pwrctrlpriv)->pwr_state_check_timer, (ms)); \
104         } while (0)
105
106 #define rtw_set_pwr_state_check_timer(pwrctrl)                  \
107         _rtw_set_pwr_state_check_timer((pwrctrl),               \
108                                        (pwrctrl)->pwr_state_check_interval)
109
110 void rtw_init_pwrctrl_priv(struct adapter *adapter);
111
112 void rtw_set_ps_mode(struct adapter *adapter, u8 ps_mode, u8 smart_ps,
113                      u8 bcn_ant_mode);
114 void LeaveAllPowerSaveMode(struct adapter *adapter);
115 void ips_enter(struct adapter *padapter);
116 int ips_leave(struct adapter *padapter);
117
118 void rtw_ps_processor(struct adapter *padapter);
119
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);
123
124 int _rtw_pwr_wakeup(struct adapter *adapter, u32 ips_defer_ms,
125                     const char *caller);
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);
130
131 #endif  /* __RTL871X_PWRCTRL_H_ */