Merge tag 'm68k-for-v5.15-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / staging / rtl8712 / rtl871x_pwrctrl.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /******************************************************************************
3  *
4  * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved.
5  *
6  * Modifications for inclusion into the Linux staging tree are
7  * Copyright(c) 2010 Larry Finger. All rights reserved.
8  *
9  * Contact information:
10  * WLAN FAE <wlanfae@realtek.com>
11  * Larry Finger <Larry.Finger@lwfinger.net>
12  *
13  ******************************************************************************/
14 #ifndef __RTL871X_PWRCTRL_H_
15 #define __RTL871X_PWRCTRL_H_
16
17 #include "osdep_service.h"
18 #include "drv_types.h"
19
20 #define CMD_ALIVE       BIT(2)
21
22 enum Power_Mgnt {
23         PS_MODE_ACTIVE  = 0,
24         PS_MODE_MIN,
25         PS_MODE_MAX,
26         PS_MODE_DTIM,
27         PS_MODE_VOIP,
28         PS_MODE_UAPSD_WMM,
29         PS_MODE_UAPSD,
30         PS_MODE_IBSS,
31         PS_MODE_WWLAN,
32         PM_Radio_Off,
33         PM_Card_Disable,
34         PS_MODE_NUM
35 };
36
37 /*
38  * BIT[2:0] = HW state
39  * BIT[3] = Protocol PS state, 0: register active state,
40  *                              1: register sleep state
41  * BIT[4] = sub-state
42  */
43
44 #define         PS_DPS                          BIT(0)
45 #define         PS_LCLK                         (PS_DPS)
46 #define PS_RF_OFF                       BIT(1)
47 #define PS_ALL_ON                       BIT(2)
48 #define PS_ST_ACTIVE            BIT(3)
49 #define PS_LP                           BIT(4)  /* low performance */
50
51 #define PS_STATE_MASK           (0x0F)
52 #define PS_STATE_HW_MASK        (0x07)
53 #define         PS_SEQ_MASK             (0xc0)
54
55 #define PS_STATE(x)                     (PS_STATE_MASK & (x))
56 #define PS_STATE_HW(x)  (PS_STATE_HW_MASK & (x))
57 #define PS_SEQ(x)                       (PS_SEQ_MASK & (x))
58
59 #define PS_STATE_S0             (PS_DPS)
60 #define         PS_STATE_S1             (PS_LCLK)
61 #define PS_STATE_S2             (PS_RF_OFF)
62 #define         PS_STATE_S3             (PS_ALL_ON)
63 #define PS_STATE_S4             ((PS_ST_ACTIVE) | (PS_ALL_ON))
64
65 #define         PS_IS_RF_ON(x)          ((x) & (PS_ALL_ON))
66 #define         PS_IS_ACTIVE(x)         ((x) & (PS_ST_ACTIVE))
67 #define         CLR_PS_STATE(x) ((x) = ((x) & (0xF0)))
68
69 struct reportpwrstate_parm {
70         unsigned char mode;
71         unsigned char state; /* the CPWM value */
72         unsigned short rsvd;
73 };
74
75 struct  pwrctrl_priv {
76         struct mutex mutex_lock;
77         /*volatile*/ u8 rpwm; /* requested power state for fw */
78         /* fw current power state. updated when 1. read from HCPWM or
79          * 2. driver lowers power level
80          */
81         /*volatile*/ u8 cpwm;
82         /*volatile*/ u8 tog; /* toggling */
83         /*volatile*/ u8 cpwm_tog; /* toggling */
84         /*volatile*/ u8 tgt_rpwm; /* wanted power state */
85         uint pwr_mode;
86         uint smart_ps;
87         uint alives;
88         uint ImrContent;        /* used to store original imr. */
89         uint bSleep; /* sleep -> active is different from active -> sleep. */
90
91         struct work_struct SetPSModeWorkItem;
92         struct work_struct rpwm_workitem;
93         struct timer_list rpwm_check_timer;
94         u8      rpwm_retry;
95         uint    bSetPSModeWorkItemInProgress;
96
97         spinlock_t pnp_pwr_mgnt_lock;
98         s32     pnp_current_pwr_state;
99         u8      pnp_bstop_trx;
100         u8      pnp_wwirp_pending;
101 };
102
103 void r8712_init_pwrctrl_priv(struct _adapter *adapter);
104 int r8712_register_cmd_alive(struct _adapter *padapter);
105 void r8712_unregister_cmd_alive(struct _adapter *padapter);
106 void r8712_cpwm_int_hdl(struct _adapter *padapter,
107                         struct reportpwrstate_parm *preportpwrstate);
108 void r8712_set_ps_mode(struct _adapter *padapter, uint ps_mode,
109                         uint smart_ps);
110 void r8712_set_rpwm(struct _adapter *padapter, u8 val8);
111 void r8712_flush_rwctrl_works(struct _adapter *padapter);
112
113 #endif  /* __RTL871X_PWRCTRL_H_ */