brintos

brintos / linux-shallow public Read only

0
0
Text · 10.7 KiB · c269942 Raw
294 lines · c
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					0x80009#define FW_8821AE_START_ADDRESS			0x100010#define FW_8821AE_END_ADDRESS			0x5FFF11#define FW_8821AE_PAGE_SIZE				409612#define FW_8821AE_POLLING_DELAY			513#define FW_8821AE_POLLING_TIMEOUT_COUNT	600014 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 022 23#define H2C_8821AE_RSVDPAGE_LOC_LEN		524#define H2C_8821AE_PWEMODE_LENGTH			725#define H2C_8821AE_JOINBSSRPT_LENGTH		126#define H2C_8821AE_AP_OFFLOAD_LENGTH		327#define H2C_8821AE_WOWLAN_LENGTH			328#define H2C_8821AE_KEEP_ALIVE_CTRL_LENGTH	329#if (USE_OLD_WOWLAN_DEBUG_FW == 0)30#define H2C_8821AE_REMOTE_WAKE_CTRL_LEN	131#else32#define H2C_8821AE_REMOTE_WAKE_CTRL_LEN	333#endif34#define H2C_8821AE_AOAC_GLOBAL_INFO_LEN	235#define H2C_8821AE_AOAC_RSVDPAGE_LOC_LEN	736#define H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN	337 38/* Fw PS state for RPWM.39*BIT[2:0] = HW state40 41*BIT[3] = Protocol PS state,421: register active state ,430: register sleep state44 45*BIT[4] = sub-state46*/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		069 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	0104 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	0118 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_H2CCMD149};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) = __value171#define SET_8812_H2CCMD_WOWLAN_GPIO_DURATION(__cmd, __value)	\172	*(u8 *)(__cmd + 2) = __value173 174#define SET_H2CCMD_PWRMODE_PARM_MODE(__ph2ccmd, __val)			\175	*(u8 *)__ph2ccmd = __val176#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) = __value182#define SET_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(__cmd, __value)		\183	*(u8 *)(__cmd + 3) = __value184#define SET_H2CCMD_PWRMODE_PARM_PWR_STATE(__cmd, __value)	\185	*(u8 *)(__cmd + 4) = __value186#define SET_H2CCMD_PWRMODE_PARM_BYTE5(__cmd, __value)		\187	*(u8 *)(__cmd + 5) = __value188 189#define SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(__ph2ccmd, __val)		\190	*(u8 *)(__ph2ccmd + 1) = __val191#define SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__ph2ccmd, __val)		\192	*(u8 *)(__ph2ccmd + 2) = __val193#define SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(__ph2ccmd, __val)		\194	*(u8 *)(__ph2ccmd + 3) = __val195#define SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(__ph2ccmd, __val)	\196	*(u8 *)(__ph2ccmd + 4) = __val197 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 = __value207#define SET_H2CCMD_AP_OFFLOAD_HIDDEN(__cmd, __value)	\208	*(u8 *)(__cmd + 1) = __value209#define SET_H2CCMD_AP_OFFLOAD_DENYANY(__cmd, __value)	\210	*(u8 *)(__cmd + 2) = __value211#define SET_H2CCMD_AP_OFFLOAD_WAKEUP_EVT_RPT(__cmd, __value) \212	*(u8 *)(__cmd + 3) = __value213 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) = __value221 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 = __value237#define SET_8812_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(__cmd, __value)	\238	*(u8 *)(__cmd + 1) = __value239 240/* AOAC_RSVDPAGE_LOC */241#define SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(__cmd, __value)	\242	*(u8 *)__cmd = __value243#define SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(__cmd, __value)	\244	*(u8 *)(__cmd + 1) = __value245#define SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_NEIGHBOR_ADV(__cmd, __value)\246	*(u8 *)(__cmd + 2) = __value247#define SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_RSP(__cmd, __value)	\248	*(u8 *)(__cmd + 3) = __value249#define SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_INFO(__cmd, __value)	\250	*(u8 *)(__cmd + 4) = __value251#define SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(__cmd, __value)	\252	*(u8 *)(__cmd + 5) = __value253 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) = __value261#define SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_TRYPKT_NUM(__cmd, __value)\262	*(u8 *)(__cmd + 2) = __value263 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#endif270void 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#endif294