1 /* SPDX-License-Identifier: GPL-2.0 */
2 /******************************************************************************
4 * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved.
6 * Modifications for inclusion into the Linux staging tree are
7 * Copyright(c) 2010 Larry Finger. All rights reserved.
13 ******************************************************************************/
14 #ifndef __RTL871X_PWRCTRL_H_
15 #define __RTL871X_PWRCTRL_H_
17 #include "osdep_service.h"
18 #include "drv_types.h"
21 #define CMD_ALIVE BIT(2)
40 * BIT[3] = Protocol PS state, 0: register active state,
41 * 1: register sleep state
46 #define PS_LCLK (PS_DPS)
47 #define PS_RF_OFF BIT(1)
48 #define PS_ALL_ON BIT(2)
49 #define PS_ST_ACTIVE BIT(3)
50 #define PS_LP BIT(4) /* low performance */
52 #define PS_STATE_MASK (0x0F)
53 #define PS_STATE_HW_MASK (0x07)
54 #define PS_SEQ_MASK (0xc0)
56 #define PS_STATE(x) (PS_STATE_MASK & (x))
57 #define PS_STATE_HW(x) (PS_STATE_HW_MASK & (x))
58 #define PS_SEQ(x) (PS_SEQ_MASK & (x))
60 #define PS_STATE_S0 (PS_DPS)
61 #define PS_STATE_S1 (PS_LCLK)
62 #define PS_STATE_S2 (PS_RF_OFF)
63 #define PS_STATE_S3 (PS_ALL_ON)
64 #define PS_STATE_S4 ((PS_ST_ACTIVE) | (PS_ALL_ON))
67 #define PS_IS_RF_ON(x) ((x) & (PS_ALL_ON))
68 #define PS_IS_ACTIVE(x) ((x) & (PS_ST_ACTIVE))
69 #define CLR_PS_STATE(x) ((x) = ((x) & (0xF0)))
72 struct reportpwrstate_parm {
74 unsigned char state; /* the CPWM value */
79 struct mutex mutex_lock;
80 /*volatile*/ u8 rpwm; /* requested power state for fw */
81 /* fw current power state. updated when 1. read from HCPWM or
82 * 2. driver lowers power level
85 /*volatile*/ u8 tog; /* toggling */
86 /*volatile*/ u8 cpwm_tog; /* toggling */
87 /*volatile*/ u8 tgt_rpwm; /* wanted power state */
91 uint ImrContent; /* used to store original imr. */
92 uint bSleep; /* sleep -> active is different from active -> sleep. */
94 struct work_struct SetPSModeWorkItem;
95 struct work_struct rpwm_workitem;
96 struct timer_list rpwm_check_timer;
98 uint bSetPSModeWorkItemInProgress;
100 spinlock_t pnp_pwr_mgnt_lock;
101 s32 pnp_current_pwr_state;
103 u8 pnp_wwirp_pending;
106 void r8712_init_pwrctrl_priv(struct _adapter *adapter);
107 int r8712_register_cmd_alive(struct _adapter *padapter);
108 void r8712_unregister_cmd_alive(struct _adapter *padapter);
109 void r8712_cpwm_int_hdl(struct _adapter *padapter,
110 struct reportpwrstate_parm *preportpwrstate);
111 void r8712_set_ps_mode(struct _adapter *padapter, uint ps_mode,
113 void r8712_set_rpwm(struct _adapter *padapter, u8 val8);
115 #endif /* __RTL871X_PWRCTRL_H_ */