cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fw.h (10967B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* Copyright(c) 2009-2010  Realtek Corporation.*/
      3
      4#ifndef __RTL8821AE__FW__H__
      5#define __RTL8821AE__FW__H__
      6#include "def.h"
      7
      8#define FW_8821AE_SIZE					0x8000
      9#define FW_8821AE_START_ADDRESS			0x1000
     10#define FW_8821AE_END_ADDRESS			0x5FFF
     11#define FW_8821AE_PAGE_SIZE				4096
     12#define FW_8821AE_POLLING_DELAY			5
     13#define FW_8821AE_POLLING_TIMEOUT_COUNT	6000
     14
     15#define IS_FW_HEADER_EXIST_8812(_pfwhdr)	\
     16	((le16_to_cpu(_pfwhdr->signature) & 0xFFF0) == 0x9500)
     17
     18#define IS_FW_HEADER_EXIST_8821(_pfwhdr)	\
     19	((le16_to_cpu(_pfwhdr->signature) & 0xFFF0) == 0x2100)
     20
     21#define USE_OLD_WOWLAN_DEBUG_FW 0
     22
     23#define H2C_8821AE_RSVDPAGE_LOC_LEN		5
     24#define H2C_8821AE_PWEMODE_LENGTH			7
     25#define H2C_8821AE_JOINBSSRPT_LENGTH		1
     26#define H2C_8821AE_AP_OFFLOAD_LENGTH		3
     27#define H2C_8821AE_WOWLAN_LENGTH			3
     28#define H2C_8821AE_KEEP_ALIVE_CTRL_LENGTH	3
     29#if (USE_OLD_WOWLAN_DEBUG_FW == 0)
     30#define H2C_8821AE_REMOTE_WAKE_CTRL_LEN	1
     31#else
     32#define H2C_8821AE_REMOTE_WAKE_CTRL_LEN	3
     33#endif
     34#define H2C_8821AE_AOAC_GLOBAL_INFO_LEN	2
     35#define H2C_8821AE_AOAC_RSVDPAGE_LOC_LEN	7
     36#define H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN	3
     37
     38/* Fw PS state for RPWM.
     39*BIT[2:0] = HW state
     40
     41*BIT[3] = Protocol PS state,
     421: register active state ,
     430: register sleep state
     44
     45*BIT[4] = sub-state
     46*/
     47#define	FW_PS_GO_ON			BIT(0)
     48#define	FW_PS_TX_NULL			BIT(1)
     49#define	FW_PS_RF_ON			BIT(2)
     50#define	FW_PS_REGISTER_ACTIVE	BIT(3)
     51
     52#define	FW_PS_DPS		BIT(0)
     53#define	FW_PS_LCLK		(FW_PS_DPS)
     54#define	FW_PS_RF_OFF		BIT(1)
     55#define	FW_PS_ALL_ON		BIT(2)
     56#define	FW_PS_ST_ACTIVE		BIT(3)
     57#define	FW_PS_ISR_ENABLE	BIT(4)
     58#define	FW_PS_IMR_ENABLE	BIT(5)
     59
     60#define	FW_PS_ACK		BIT(6)
     61#define	FW_PS_TOGGLE		BIT(7)
     62
     63 /* 8821AE RPWM value*/
     64 /* BIT[0] = 1: 32k, 0: 40M*/
     65 /* 32k*/
     66#define	FW_PS_CLOCK_OFF		BIT(0)
     67/*40M*/
     68#define	FW_PS_CLOCK_ON		0
     69
     70#define	FW_PS_STATE_MASK		(0x0F)
     71#define	FW_PS_STATE_HW_MASK	(0x07)
     72/*ISR_ENABLE, IMR_ENABLE, and PS mode should be inherited.*/
     73#define	FW_PS_STATE_INT_MASK	(0x3F)
     74
     75#define	FW_PS_STATE(x)			(FW_PS_STATE_MASK & (x))
     76#define	FW_PS_STATE_HW(x)		(FW_PS_STATE_HW_MASK & (x))
     77#define	FW_PS_STATE_INT(x)	(FW_PS_STATE_INT_MASK & (x))
     78#define	FW_PS_ISR_VAL(x)		((x) & 0x70)
     79#define	FW_PS_IMR_MASK(x)	((x) & 0xDF)
     80#define	FW_PS_KEEP_IMR(x)		((x) & 0x20)
     81
     82#define	FW_PS_STATE_S0		(FW_PS_DPS)
     83#define	FW_PS_STATE_S1		(FW_PS_LCLK)
     84#define	FW_PS_STATE_S2		(FW_PS_RF_OFF)
     85#define	FW_PS_STATE_S3		(FW_PS_ALL_ON)
     86#define	FW_PS_STATE_S4		((FW_PS_ST_ACTIVE) | (FW_PS_ALL_ON))
     87 /* ((FW_PS_RF_ON) | (FW_PS_REGISTER_ACTIVE))*/
     88#define	FW_PS_STATE_ALL_ON_8821AE	(FW_PS_CLOCK_ON)
     89 /* (FW_PS_RF_ON)*/
     90#define	FW_PS_STATE_RF_ON_8821AE	(FW_PS_CLOCK_ON)
     91 /* 0x0*/
     92#define	FW_PS_STATE_RF_OFF_8821AE	(FW_PS_CLOCK_ON)
     93 /* (FW_PS_STATE_RF_OFF)*/
     94#define	FW_PS_STATE_RF_OFF_LOW_PWR_8821AE	(FW_PS_CLOCK_OFF)
     95
     96#define	FW_PS_STATE_ALL_ON_92C	(FW_PS_STATE_S4)
     97#define	FW_PS_STATE_RF_ON_92C		(FW_PS_STATE_S3)
     98#define	FW_PS_STATE_RF_OFF_92C	(FW_PS_STATE_S2)
     99#define	FW_PS_STATE_RF_OFF_LOW_PWR_92C	(FW_PS_STATE_S1)
    100
    101/* For 8821AE H2C PwrMode Cmd ID 5.*/
    102#define	FW_PWR_STATE_ACTIVE	((FW_PS_RF_ON) | (FW_PS_REGISTER_ACTIVE))
    103#define	FW_PWR_STATE_RF_OFF	0
    104
    105#define	FW_PS_IS_ACK(x)		((x) & FW_PS_ACK)
    106#define	FW_PS_IS_CLK_ON(x)	((x) & (FW_PS_RF_OFF | FW_PS_ALL_ON))
    107#define	FW_PS_IS_RF_ON(x)	((x) & (FW_PS_ALL_ON))
    108#define	FW_PS_IS_ACTIVE(x)	((x) & (FW_PS_ST_ACTIVE))
    109#define	FW_PS_IS_CPWM_INT(x)	((x) & 0x40)
    110
    111#define	FW_CLR_PS_STATE(x)	((x) = ((x) & (0xF0)))
    112
    113#define	IS_IN_LOW_POWER_STATE_8821AE(__state)		\
    114			(FW_PS_STATE(__state) == FW_PS_CLOCK_OFF)
    115
    116#define	FW_PWR_STATE_ACTIVE	((FW_PS_RF_ON) | (FW_PS_REGISTER_ACTIVE))
    117#define	FW_PWR_STATE_RF_OFF	0
    118
    119enum rtl8821a_h2c_cmd {
    120	H2C_8821AE_RSVDPAGE = 0,
    121	H2C_8821AE_MSRRPT = 1,
    122	H2C_8821AE_SCAN = 2,
    123	H2C_8821AE_KEEP_ALIVE_CTRL = 3,
    124	H2C_8821AE_DISCONNECT_DECISION = 4,
    125	H2C_8821AE_INIT_OFFLOAD = 6,
    126	H2C_8821AE_AP_OFFLOAD = 8,
    127	H2C_8821AE_BCN_RSVDPAGE = 9,
    128	H2C_8821AE_PROBERSP_RSVDPAGE = 10,
    129
    130	H2C_8821AE_SETPWRMODE = 0x20,
    131	H2C_8821AE_PS_TUNING_PARA = 0x21,
    132	H2C_8821AE_PS_TUNING_PARA2 = 0x22,
    133	H2C_8821AE_PS_LPS_PARA = 0x23,
    134	H2C_8821AE_P2P_PS_OFFLOAD = 024,
    135
    136	H2C_8821AE_WO_WLAN = 0x80,
    137	H2C_8821AE_REMOTE_WAKE_CTRL = 0x81,
    138	H2C_8821AE_AOAC_GLOBAL_INFO = 0x82,
    139	H2C_8821AE_AOAC_RSVDPAGE = 0x83,
    140
    141	H2C_RSSI_21AE_REPORT = 0x42,
    142	H2C_8821AE_RA_MASK = 0x40,
    143	H2C_8821AE_SELECTIVE_SUSPEND_ROF_CMD,
    144	H2C_8821AE_P2P_PS_MODE,
    145	H2C_8821AE_PSD_RESULT,
    146	/*Not defined CTW CMD for P2P yet*/
    147	H2C_8821AE_P2P_PS_CTW_CMD,
    148	MAX_8821AE_H2CCMD
    149};
    150
    151#define pagenum_128(_len)	(u32)(((_len)>>7) + ((_len)&0x7F ? 1 : 0))
    152
    153#define SET_8812_H2CCMD_WOWLAN_FUNC_ENABLE(__cmd, __value)		\
    154	u8p_replace_bits(__cmd, __value, BIT(0))
    155#define SET_8812_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(__cmd, __value)	\
    156	u8p_replace_bits(__cmd, __value, BIT(1))
    157#define SET_8812_H2CCMD_WOWLAN_MAGIC_PKT_ENABLE(__cmd, __value)	\
    158	u8p_replace_bits(__cmd, __value, BIT(2))
    159#define SET_8812_H2CCMD_WOWLAN_UNICAST_PKT_ENABLE(__cmd, __value)	\
    160	u8p_replace_bits(__cmd, __value, BIT(3))
    161#define SET_8812_H2CCMD_WOWLAN_ALL_PKT_DROP(__cmd, __value)		\
    162	u8p_replace_bits(__cmd, __value, BIT(4))
    163#define SET_8812_H2CCMD_WOWLAN_GPIO_ACTIVE(__cmd, __value)		\
    164	u8p_replace_bits(__cmd, __value, BIT(5))
    165#define SET_8812_H2CCMD_WOWLAN_REKEY_WAKE_UP(__cmd, __value)	\
    166	u8p_replace_bits(__cmd, __value, BIT(6))
    167#define SET_8812_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(__cmd, __value)	\
    168	u8p_replace_bits(__cmd, __value, BIT(7))
    169#define SET_8812_H2CCMD_WOWLAN_GPIONUM(__cmd, __value)		\
    170	*(u8 *)(__cmd + 1) = __value
    171#define SET_8812_H2CCMD_WOWLAN_GPIO_DURATION(__cmd, __value)	\
    172	*(u8 *)(__cmd + 2) = __value
    173
    174#define SET_H2CCMD_PWRMODE_PARM_MODE(__ph2ccmd, __val)			\
    175	*(u8 *)__ph2ccmd = __val
    176#define SET_H2CCMD_PWRMODE_PARM_RLBM(__cmd, __value)		\
    177	u8p_replace_bits(__cmd + 1, __value, GENMASK(3, 0))
    178#define SET_H2CCMD_PWRMODE_PARM_SMART_PS(__cmd, __value)	\
    179	u8p_replace_bits(__cmd + 1, __value, GENMASK(7, 4))
    180#define SET_H2CCMD_PWRMODE_PARM_AWAKE_INTERVAL(__cmd, __value)	\
    181	*(u8 *)(__cmd + 2) = __value
    182#define SET_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(__cmd, __value)		\
    183	*(u8 *)(__cmd + 3) = __value
    184#define SET_H2CCMD_PWRMODE_PARM_PWR_STATE(__cmd, __value)	\
    185	*(u8 *)(__cmd + 4) = __value
    186#define SET_H2CCMD_PWRMODE_PARM_BYTE5(__cmd, __value)		\
    187	*(u8 *)(__cmd + 5) = __value
    188
    189#define SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(__ph2ccmd, __val)		\
    190	*(u8 *)(__ph2ccmd + 1) = __val
    191#define SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__ph2ccmd, __val)		\
    192	*(u8 *)(__ph2ccmd + 2) = __val
    193#define SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(__ph2ccmd, __val)		\
    194	*(u8 *)(__ph2ccmd + 3) = __val
    195#define SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(__ph2ccmd, __val)	\
    196	*(u8 *)(__ph2ccmd + 4) = __val
    197
    198/* _MEDIA_STATUS_RPT_PARM_CMD1 */
    199#define SET_H2CCMD_MSRRPT_PARM_OPMODE(__cmd, __value)	\
    200	u8p_replace_bits(__cmd + 1, __value, BIT(0))
    201#define SET_H2CCMD_MSRRPT_PARM_MACID_IND(__cmd, __value)	\
    202	u8p_replace_bits(__cmd + 1, __value, BIT(1))
    203
    204/* AP_OFFLOAD */
    205#define SET_H2CCMD_AP_OFFLOAD_ON(__cmd, __value)	\
    206	*(u8 *)__cmd = __value
    207#define SET_H2CCMD_AP_OFFLOAD_HIDDEN(__cmd, __value)	\
    208	*(u8 *)(__cmd + 1) = __value
    209#define SET_H2CCMD_AP_OFFLOAD_DENYANY(__cmd, __value)	\
    210	*(u8 *)(__cmd + 2) = __value
    211#define SET_H2CCMD_AP_OFFLOAD_WAKEUP_EVT_RPT(__cmd, __value) \
    212	*(u8 *)(__cmd + 3) = __value
    213
    214/* Keep Alive Control*/
    215#define SET_8812_H2CCMD_KEEP_ALIVE_ENABLE(__cmd, __value)	\
    216	u8p_replace_bits(__cmd, __value, BIT(0))
    217#define SET_8812_H2CCMD_KEEP_ALIVE_ACCPEPT_USER_DEFINED(__cmd, __value)	\
    218	u8p_replace_bits(__cmd, __value, BIT(1))
    219#define SET_8812_H2CCMD_KEEP_ALIVE_PERIOD(__cmd, __value)	\
    220	*(u8 *)(__cmd + 1) = __value
    221
    222/*REMOTE_WAKE_CTRL */
    223#define SET_8812_H2CCMD_REMOTE_WAKECTRL_ENABLE(__cmd, __value)	\
    224	u8p_replace_bits(__cmd, __value, BIT(0))
    225#define SET_8812_H2CCMD_REMOTE_WAKE_CTRL_ARP_OFFLOAD_EN(__cmd, __value)\
    226	u8p_replace_bits(__cmd, __value, BIT(1))
    227#define SET_8812_H2CCMD_REMOTE_WAKE_CTRL_NDP_OFFLOAD_EN(__cmd, __value)\
    228	u8p_replace_bits(__cmd, __value, BIT(2))
    229#define SET_8812_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(__cmd, __value)\
    230	u8p_replace_bits(__cmd, __value, BIT(3))
    231#define SET_8812_H2CCMD_REMOTE_WAKE_CTRL_REALWOWV2_EN(__cmd, __value)\
    232	u8p_replace_bits(__cmd, __value, BIT(6))
    233
    234/* GTK_OFFLOAD */
    235#define SET_8812_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(__cmd, __value)\
    236	*(u8 *)__cmd = __value
    237#define SET_8812_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(__cmd, __value)	\
    238	*(u8 *)(__cmd + 1) = __value
    239
    240/* AOAC_RSVDPAGE_LOC */
    241#define SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(__cmd, __value)	\
    242	*(u8 *)__cmd = __value
    243#define SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(__cmd, __value)	\
    244	*(u8 *)(__cmd + 1) = __value
    245#define SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_NEIGHBOR_ADV(__cmd, __value)\
    246	*(u8 *)(__cmd + 2) = __value
    247#define SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_RSP(__cmd, __value)	\
    248	*(u8 *)(__cmd + 3) = __value
    249#define SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_INFO(__cmd, __value)	\
    250	*(u8 *)(__cmd + 4) = __value
    251#define SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(__cmd, __value)	\
    252	*(u8 *)(__cmd + 5) = __value
    253
    254/* Disconnect_Decision_Control */
    255#define SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_ENABLE(__cmd, __value)	\
    256	u8p_replace_bits(__cmd, __value, BIT(0))
    257#define SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_USER_SETTING(__cmd, __value)\
    258	u8p_replace_bits(__cmd, __value, BIT(1))
    259#define SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_CHECK_PERIOD(__cmd, __value)\
    260	*(u8 *)(__cmd + 1) = __value
    261#define SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_TRYPKT_NUM(__cmd, __value)\
    262	*(u8 *)(__cmd + 2) = __value
    263
    264int rtl8821ae_download_fw(struct ieee80211_hw *hw, bool buse_wake_on_wlan_fw);
    265#if (USE_SPECIFIC_FW_TO_SUPPORT_WOWLAN == 1)
    266void rtl8821ae_set_fw_related_for_wowlan(struct ieee80211_hw *hw,
    267					 bool used_wowlan_fw);
    268
    269#endif
    270void rtl8821ae_fill_h2c_cmd(struct ieee80211_hw *hw, u8 element_id,
    271			    u32 cmd_len, u8 *cmdbuffer);
    272void rtl8821ae_firmware_selfreset(struct ieee80211_hw *hw);
    273void rtl8821ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode);
    274void rtl8821ae_set_fw_media_status_rpt_cmd(struct ieee80211_hw *hw,
    275					   u8 mstatus);
    276void rtl8821ae_set_fw_ap_off_load_cmd(struct ieee80211_hw *hw,
    277				      u8 ap_offload_enable);
    278void rtl8821ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw,
    279				  bool b_dl_finished, bool dl_whole_packet);
    280void rtl8812ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw,
    281				  bool b_dl_finished, bool dl_whole_packet);
    282void rtl8821ae_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw,
    283				      u8 p2p_ps_state);
    284void rtl8821ae_set_fw_wowlan_mode(struct ieee80211_hw *hw, bool func_en);
    285void rtl8821ae_set_fw_remote_wake_ctrl_cmd(struct ieee80211_hw *hw,
    286					   u8 enable);
    287void rtl8821ae_set_fw_keep_alive_cmd(struct ieee80211_hw *hw, bool func_en);
    288void rtl8821ae_set_fw_disconnect_decision_ctrl_cmd(struct ieee80211_hw *hw,
    289						   bool enabled);
    290void rtl8821ae_set_fw_global_info_cmd(struct ieee80211_hw *hw);
    291void rtl8821ae_c2h_ra_report_handler(struct ieee80211_hw *hw,
    292				     u8 *cmd_buf, u8 cmd_len);
    293#endif