diff options
Diffstat (limited to 'sys/contrib/dev/rtw89/mac.h')
| -rw-r--r-- | sys/contrib/dev/rtw89/mac.h | 63 | 
1 files changed, 61 insertions, 2 deletions
| diff --git a/sys/contrib/dev/rtw89/mac.h b/sys/contrib/dev/rtw89/mac.h index 8edea96d037f..241e89983c4a 100644 --- a/sys/contrib/dev/rtw89/mac.h +++ b/sys/contrib/dev/rtw89/mac.h @@ -6,9 +6,12 @@  #define __RTW89_MAC_H__  #include "core.h" +#include "fw.h"  #include "reg.h" -#define MAC_MEM_DUMP_PAGE_SIZE 0x40000 +#define MAC_MEM_DUMP_PAGE_SIZE_AX 0x40000 +#define MAC_MEM_DUMP_PAGE_SIZE_BE 0x80000 +  #define ADDR_CAM_ENT_SIZE  0x40  #define ADDR_CAM_ENT_SHORT_SIZE 0x20  #define BSSID_CAM_ENT_SIZE 0x08 @@ -370,6 +373,7 @@ enum rtw89_mac_mem_sel {  	RTW89_MAC_MEM_TXD_FIFO_0_V1,  	RTW89_MAC_MEM_TXD_FIFO_1_V1,  	RTW89_MAC_MEM_WD_PAGE, +	RTW89_MAC_MEM_MLD_TBL,  	/* keep last */  	RTW89_MAC_MEM_NUM, @@ -427,6 +431,18 @@ enum rtw89_mac_c2h_mcc_func {  	NUM_OF_RTW89_MAC_C2H_FUNC_MCC,  }; +enum rtw89_mac_c2h_mlo_func { +	RTW89_MAC_C2H_FUNC_MLO_GET_TBL			= 0x0, +	RTW89_MAC_C2H_FUNC_MLO_EMLSR_TRANS_DONE		= 0x1, +	RTW89_MAC_C2H_FUNC_MLO_EMLSR_STA_CFG_DONE	= 0x2, +	RTW89_MAC_C2H_FUNC_MCMLO_RELINK_RPT		= 0x3, +	RTW89_MAC_C2H_FUNC_MCMLO_SN_SYNC_RPT		= 0x4, +	RTW89_MAC_C2H_FUNC_MLO_LINK_CFG_STAT		= 0x5, +	RTW89_MAC_C2H_FUNC_MLO_DM_DBG_DUMP		= 0x6, + +	NUM_OF_RTW89_MAC_C2H_FUNC_MLO, +}; +  enum rtw89_mac_c2h_mrc_func {  	RTW89_MAC_C2H_FUNC_MRC_TSF_RPT = 0,  	RTW89_MAC_C2H_FUNC_MRC_STATUS_RPT = 1, @@ -453,8 +469,10 @@ enum rtw89_mac_c2h_class {  	RTW89_MAC_C2H_CLASS_WOW = 0x3,  	RTW89_MAC_C2H_CLASS_MCC = 0x4,  	RTW89_MAC_C2H_CLASS_FWDBG = 0x5, +	RTW89_MAC_C2H_CLASS_MLO = 0xc,  	RTW89_MAC_C2H_CLASS_MRC = 0xe,  	RTW89_MAC_C2H_CLASS_AP = 0x18, +	RTW89_MAC_C2H_CLASS_ROLE = 0x1b,  	RTW89_MAC_C2H_CLASS_MAX,  }; @@ -907,6 +925,7 @@ struct rtw89_mac_size_set {  	const struct rtw89_dle_size wde_size18;  	const struct rtw89_dle_size wde_size19;  	const struct rtw89_dle_size wde_size23; +	const struct rtw89_dle_size wde_size25;  	const struct rtw89_dle_size ple_size0;  	const struct rtw89_dle_size ple_size0_v1;  	const struct rtw89_dle_size ple_size3_v1; @@ -916,6 +935,8 @@ struct rtw89_mac_size_set {  	const struct rtw89_dle_size ple_size9;  	const struct rtw89_dle_size ple_size18;  	const struct rtw89_dle_size ple_size19; +	const struct rtw89_dle_size ple_size32; +	const struct rtw89_dle_size ple_size33;  	const struct rtw89_wde_quota wde_qt0;  	const struct rtw89_wde_quota wde_qt0_v1;  	const struct rtw89_wde_quota wde_qt4; @@ -924,6 +945,7 @@ struct rtw89_mac_size_set {  	const struct rtw89_wde_quota wde_qt17;  	const struct rtw89_wde_quota wde_qt18;  	const struct rtw89_wde_quota wde_qt23; +	const struct rtw89_wde_quota wde_qt25;  	const struct rtw89_ple_quota ple_qt0;  	const struct rtw89_ple_quota ple_qt1;  	const struct rtw89_ple_quota ple_qt4; @@ -938,6 +960,10 @@ struct rtw89_mac_size_set {  	const struct rtw89_ple_quota ple_qt57;  	const struct rtw89_ple_quota ple_qt58;  	const struct rtw89_ple_quota ple_qt59; +	const struct rtw89_ple_quota ple_qt72; +	const struct rtw89_ple_quota ple_qt73; +	const struct rtw89_ple_quota ple_qt74; +	const struct rtw89_ple_quota ple_qt75;  	const struct rtw89_ple_quota ple_qt_52a_wow;  	const struct rtw89_ple_quota ple_qt_52b_wow;  	const struct rtw89_ple_quota ple_qt_52bt_wow; @@ -955,6 +981,7 @@ struct rtw89_mac_gen_def {  	u32 filter_model_addr;  	u32 indir_access_addr;  	const u32 *mem_base_addrs; +	u32 mem_page_size;  	u32 rx_fltr;  	const struct rtw89_port_reg *port_base;  	u32 agg_len_ht; @@ -964,6 +991,8 @@ struct rtw89_mac_gen_def {  	struct rtw89_reg_def bfee_ctrl;  	struct rtw89_reg_def narrow_bw_ru_dis;  	struct rtw89_reg_def wow_ctrl; +	struct rtw89_reg_def agg_limit; +	struct rtw89_reg_def txcnt_limit;  	int (*check_mac_en)(struct rtw89_dev *rtwdev, u8 band,  			    enum rtw89_mac_hwmod_sel sel); @@ -1029,8 +1058,11 @@ struct rtw89_mac_gen_def {  	bool (*is_txq_empty)(struct rtw89_dev *rtwdev); +	int (*prep_chan_list)(struct rtw89_dev *rtwdev, +			      struct rtw89_vif_link *rtwvif_link); +	void (*free_chan_list)(struct rtw89_dev *rtwdev);  	int (*add_chan_list)(struct rtw89_dev *rtwdev, -			     struct rtw89_vif_link *rtwvif_link, bool connected); +			     struct rtw89_vif_link *rtwvif_link);  	int (*add_chan_list_pno)(struct rtw89_dev *rtwdev,  				 struct rtw89_vif_link *rtwvif_link);  	int (*scan_offload)(struct rtw89_dev *rtwdev, @@ -1145,6 +1177,7 @@ rtw89_write32_port_set(struct rtw89_dev *rtwdev, struct rtw89_vif_link *rtwvif_l  	rtw89_write32_set(rtwdev, reg, bit);  } +int rtw89_mac_pwr_on(struct rtw89_dev *rtwdev);  void rtw89_mac_pwr_off(struct rtw89_dev *rtwdev);  int rtw89_mac_partial_init(struct rtw89_dev *rtwdev, bool include_bb);  int rtw89_mac_init(struct rtw89_dev *rtwdev); @@ -1185,6 +1218,8 @@ void rtw89_mac_port_cfg_rx_sync(struct rtw89_dev *rtwdev,  				struct rtw89_vif_link *rtwvif_link, bool en);  void rtw89_mac_set_he_obss_narrow_bw_ru(struct rtw89_dev *rtwdev,  					struct rtw89_vif_link *rtwvif_link); +void rtw89_mac_set_he_tb(struct rtw89_dev *rtwdev, +			 struct rtw89_vif_link *rtwvif_link);  void rtw89_mac_stop_ap(struct rtw89_dev *rtwdev, struct rtw89_vif_link *rtwvif_link);  void rtw89_mac_enable_beacon_for_ap_vifs(struct rtw89_dev *rtwdev, bool en);  int rtw89_mac_remove_vif(struct rtw89_dev *rtwdev, struct rtw89_vif_link *vif); @@ -1549,4 +1584,28 @@ void rtw89_fwdl_secure_idmem_share_mode(struct rtw89_dev *rtwdev, u8 mode)  	return mac->fwdl_secure_idmem_share_mode(rtwdev, mode);  } + +static inline +int rtw89_mac_scan_offload(struct rtw89_dev *rtwdev, +			   struct rtw89_scan_option *option, +			   struct rtw89_vif_link *rtwvif_link, +			   bool wowlan) +{ +	const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; +	int ret; + +	ret = mac->scan_offload(rtwdev, option, rtwvif_link, wowlan); + +	if (option->enable) { +		/* +		 * At this point, new scan request is acknowledged by firmware, +		 * so scan events of previous scan request become obsoleted. +		 * Purge the queued scan events to prevent interference to +		 * current new request. +		 */ +		rtw89_fw_c2h_purge_obsoleted_scan_events(rtwdev); +	} + +	return ret; +}  #endif | 
