root/drivers/staging/rtl8712/rtl871x_pwrctrl.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 
  21 #define CMD_ALIVE       BIT(2)
  22 
  23 enum Power_Mgnt {
  24         PS_MODE_ACTIVE  = 0,
  25         PS_MODE_MIN,
  26         PS_MODE_MAX,
  27         PS_MODE_DTIM,
  28         PS_MODE_VOIP,
  29         PS_MODE_UAPSD_WMM,
  30         PS_MODE_UAPSD,
  31         PS_MODE_IBSS,
  32         PS_MODE_WWLAN,
  33         PM_Radio_Off,
  34         PM_Card_Disable,
  35         PS_MODE_NUM
  36 };
  37 
  38 /*
  39  * BIT[2:0] = HW state
  40  * BIT[3] = Protocol PS state, 0: register active state,
  41  *                              1: register sleep state
  42  * BIT[4] = sub-state
  43  */
  44 
  45 #define         PS_DPS                          BIT(0)
  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 */
  51 
  52 #define PS_STATE_MASK           (0x0F)
  53 #define PS_STATE_HW_MASK        (0x07)
  54 #define         PS_SEQ_MASK             (0xc0)
  55 
  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))
  59 
  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))
  65 
  66 
  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)))
  70 
  71 
  72 struct reportpwrstate_parm {
  73         unsigned char mode;
  74         unsigned char state; /* the CPWM value */
  75         unsigned short rsvd;
  76 };
  77 
  78 struct  pwrctrl_priv {
  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
  83          */
  84         /*volatile*/ u8 cpwm;
  85         /*volatile*/ u8 tog; /* toggling */
  86         /*volatile*/ u8 cpwm_tog; /* toggling */
  87         /*volatile*/ u8 tgt_rpwm; /* wanted power state */
  88         uint pwr_mode;
  89         uint smart_ps;
  90         uint alives;
  91         uint ImrContent;        /* used to store original imr. */
  92         uint bSleep; /* sleep -> active is different from active -> sleep. */
  93 
  94         struct work_struct SetPSModeWorkItem;
  95         struct work_struct rpwm_workitem;
  96         struct timer_list rpwm_check_timer;
  97         u8      rpwm_retry;
  98         uint    bSetPSModeWorkItemInProgress;
  99 
 100         spinlock_t pnp_pwr_mgnt_lock;
 101         s32     pnp_current_pwr_state;
 102         u8      pnp_bstop_trx;
 103         u8      pnp_wwirp_pending;
 104 };
 105 
 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,
 112                         uint smart_ps);
 113 void r8712_set_rpwm(struct _adapter *padapter, u8 val8);
 114 
 115 #endif  /* __RTL871X_PWRCTRL_H_ */

/* [<][>][^][v][top][bottom][index][help] */