162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 262306a36Sopenharmony_ci/* Copyright(c) 2019-2020 Realtek Corporation 362306a36Sopenharmony_ci */ 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#ifndef __RTW89_PHY_H__ 662306a36Sopenharmony_ci#define __RTW89_PHY_H__ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include "core.h" 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#define RTW89_RF_ADDR_ADSEL_MASK BIT(16) 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#define get_phy_headline(addr) FIELD_GET(GENMASK(31, 28), addr) 1362306a36Sopenharmony_ci#define PHY_HEADLINE_VALID 0xf 1462306a36Sopenharmony_ci#define get_phy_target(addr) FIELD_GET(GENMASK(27, 0), addr) 1562306a36Sopenharmony_ci#define get_phy_compare(rfe, cv) (FIELD_PREP(GENMASK(23, 16), rfe) | \ 1662306a36Sopenharmony_ci FIELD_PREP(GENMASK(7, 0), cv)) 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#define get_phy_cond(addr) FIELD_GET(GENMASK(31, 28), addr) 1962306a36Sopenharmony_ci#define get_phy_cond_rfe(addr) FIELD_GET(GENMASK(23, 16), addr) 2062306a36Sopenharmony_ci#define get_phy_cond_pkg(addr) FIELD_GET(GENMASK(15, 8), addr) 2162306a36Sopenharmony_ci#define get_phy_cond_cv(addr) FIELD_GET(GENMASK(7, 0), addr) 2262306a36Sopenharmony_ci#define phy_div(a, b) ({typeof(b) _b = (b); (_b) ? ((a) / (_b)) : 0; }) 2362306a36Sopenharmony_ci#define PHY_COND_BRANCH_IF 0x8 2462306a36Sopenharmony_ci#define PHY_COND_BRANCH_ELIF 0x9 2562306a36Sopenharmony_ci#define PHY_COND_BRANCH_ELSE 0xa 2662306a36Sopenharmony_ci#define PHY_COND_BRANCH_END 0xb 2762306a36Sopenharmony_ci#define PHY_COND_CHECK 0x4 2862306a36Sopenharmony_ci#define PHY_COND_DONT_CARE 0xff 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci#define RA_MASK_CCK_RATES GENMASK_ULL(3, 0) 3162306a36Sopenharmony_ci#define RA_MASK_OFDM_RATES GENMASK_ULL(11, 4) 3262306a36Sopenharmony_ci#define RA_MASK_SUBCCK_RATES 0x5ULL 3362306a36Sopenharmony_ci#define RA_MASK_SUBOFDM_RATES 0x10ULL 3462306a36Sopenharmony_ci#define RA_MASK_HT_1SS_RATES GENMASK_ULL(19, 12) 3562306a36Sopenharmony_ci#define RA_MASK_HT_2SS_RATES GENMASK_ULL(31, 24) 3662306a36Sopenharmony_ci#define RA_MASK_HT_3SS_RATES GENMASK_ULL(43, 36) 3762306a36Sopenharmony_ci#define RA_MASK_HT_4SS_RATES GENMASK_ULL(55, 48) 3862306a36Sopenharmony_ci#define RA_MASK_HT_RATES GENMASK_ULL(55, 12) 3962306a36Sopenharmony_ci#define RA_MASK_VHT_1SS_RATES GENMASK_ULL(21, 12) 4062306a36Sopenharmony_ci#define RA_MASK_VHT_2SS_RATES GENMASK_ULL(33, 24) 4162306a36Sopenharmony_ci#define RA_MASK_VHT_3SS_RATES GENMASK_ULL(45, 36) 4262306a36Sopenharmony_ci#define RA_MASK_VHT_4SS_RATES GENMASK_ULL(57, 48) 4362306a36Sopenharmony_ci#define RA_MASK_VHT_RATES GENMASK_ULL(57, 12) 4462306a36Sopenharmony_ci#define RA_MASK_HE_1SS_RATES GENMASK_ULL(23, 12) 4562306a36Sopenharmony_ci#define RA_MASK_HE_2SS_RATES GENMASK_ULL(35, 24) 4662306a36Sopenharmony_ci#define RA_MASK_HE_3SS_RATES GENMASK_ULL(47, 36) 4762306a36Sopenharmony_ci#define RA_MASK_HE_4SS_RATES GENMASK_ULL(59, 48) 4862306a36Sopenharmony_ci#define RA_MASK_HE_RATES GENMASK_ULL(59, 12) 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci#define CFO_TRK_ENABLE_TH (2 << 2) 5162306a36Sopenharmony_ci#define CFO_TRK_STOP_TH_4 (30 << 2) 5262306a36Sopenharmony_ci#define CFO_TRK_STOP_TH_3 (20 << 2) 5362306a36Sopenharmony_ci#define CFO_TRK_STOP_TH_2 (10 << 2) 5462306a36Sopenharmony_ci#define CFO_TRK_STOP_TH_1 (00 << 2) 5562306a36Sopenharmony_ci#define CFO_TRK_STOP_TH (2 << 2) 5662306a36Sopenharmony_ci#define CFO_SW_COMP_FINE_TUNE (2 << 2) 5762306a36Sopenharmony_ci#define CFO_PERIOD_CNT 15 5862306a36Sopenharmony_ci#define CFO_BOUND 64 5962306a36Sopenharmony_ci#define CFO_TP_UPPER 100 6062306a36Sopenharmony_ci#define CFO_TP_LOWER 50 6162306a36Sopenharmony_ci#define CFO_COMP_PERIOD 250 6262306a36Sopenharmony_ci#define CFO_COMP_WEIGHT 8 6362306a36Sopenharmony_ci#define MAX_CFO_TOLERANCE 30 6462306a36Sopenharmony_ci#define CFO_TF_CNT_TH 300 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci#define UL_TB_TF_CNT_L2H_TH 100 6762306a36Sopenharmony_ci#define UL_TB_TF_CNT_H2L_TH 70 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci#define ANTDIV_TRAINNING_CNT 2 7062306a36Sopenharmony_ci#define ANTDIV_TRAINNING_INTVL 30 7162306a36Sopenharmony_ci#define ANTDIV_DELAY 110 7262306a36Sopenharmony_ci#define ANTDIV_TP_DIFF_TH_HIGH 100 7362306a36Sopenharmony_ci#define ANTDIV_TP_DIFF_TH_LOW 5 7462306a36Sopenharmony_ci#define ANTDIV_EVM_DIFF_TH 8 7562306a36Sopenharmony_ci#define ANTDIV_RSSI_DIFF_TH 3 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci#define CCX_MAX_PERIOD 2097 7862306a36Sopenharmony_ci#define CCX_MAX_PERIOD_UNIT 32 7962306a36Sopenharmony_ci#define MS_TO_4US_RATIO 250 8062306a36Sopenharmony_ci#define ENV_MNTR_FAIL_DWORD 0xffffffff 8162306a36Sopenharmony_ci#define ENV_MNTR_IFSCLM_HIS_MAX 127 8262306a36Sopenharmony_ci#define PERMIL 1000 8362306a36Sopenharmony_ci#define PERCENT 100 8462306a36Sopenharmony_ci#define IFS_CLM_TH0_UPPER 64 8562306a36Sopenharmony_ci#define IFS_CLM_TH_MUL 4 8662306a36Sopenharmony_ci#define IFS_CLM_TH_START_IDX 0 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci#define TIA0_GAIN_A 12 8962306a36Sopenharmony_ci#define TIA0_GAIN_G 16 9062306a36Sopenharmony_ci#define LNA0_GAIN (-24) 9162306a36Sopenharmony_ci#define U4_MAX_BIT 3 9262306a36Sopenharmony_ci#define U8_MAX_BIT 7 9362306a36Sopenharmony_ci#define DIG_GAIN_SHIFT 2 9462306a36Sopenharmony_ci#define DIG_GAIN 8 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci#define LNA_IDX_MAX 6 9762306a36Sopenharmony_ci#define LNA_IDX_MIN 0 9862306a36Sopenharmony_ci#define TIA_IDX_MAX 1 9962306a36Sopenharmony_ci#define TIA_IDX_MIN 0 10062306a36Sopenharmony_ci#define RXB_IDX_MAX 31 10162306a36Sopenharmony_ci#define RXB_IDX_MIN 0 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci#define IGI_RSSI_MAX 110 10462306a36Sopenharmony_ci#define PD_TH_MAX_RSSI 70 10562306a36Sopenharmony_ci#define PD_TH_MIN_RSSI 8 10662306a36Sopenharmony_ci#define CCKPD_TH_MIN_RSSI (-18) 10762306a36Sopenharmony_ci#define PD_TH_BW160_CMP_VAL 9 10862306a36Sopenharmony_ci#define PD_TH_BW80_CMP_VAL 6 10962306a36Sopenharmony_ci#define PD_TH_BW40_CMP_VAL 3 11062306a36Sopenharmony_ci#define PD_TH_BW20_CMP_VAL 0 11162306a36Sopenharmony_ci#define PD_TH_CMP_VAL 3 11262306a36Sopenharmony_ci#define PD_TH_SB_FLTR_CMP_VAL 7 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci#define PHYSTS_MGNT BIT(RTW89_RX_TYPE_MGNT) 11562306a36Sopenharmony_ci#define PHYSTS_CTRL BIT(RTW89_RX_TYPE_CTRL) 11662306a36Sopenharmony_ci#define PHYSTS_DATA BIT(RTW89_RX_TYPE_DATA) 11762306a36Sopenharmony_ci#define PHYSTS_RSVD BIT(RTW89_RX_TYPE_RSVD) 11862306a36Sopenharmony_ci#define PPDU_FILTER_BITMAP (PHYSTS_MGNT | PHYSTS_DATA) 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_cienum rtw89_phy_c2h_ra_func { 12162306a36Sopenharmony_ci RTW89_PHY_C2H_FUNC_STS_RPT, 12262306a36Sopenharmony_ci RTW89_PHY_C2H_FUNC_MU_GPTBL_RPT, 12362306a36Sopenharmony_ci RTW89_PHY_C2H_FUNC_TXSTS, 12462306a36Sopenharmony_ci RTW89_PHY_C2H_FUNC_RA_MAX, 12562306a36Sopenharmony_ci}; 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_cienum rtw89_phy_c2h_dm_func { 12862306a36Sopenharmony_ci RTW89_PHY_C2H_DM_FUNC_FW_TEST, 12962306a36Sopenharmony_ci RTW89_PHY_C2H_DM_FUNC_FW_TRIG_TX_RPT, 13062306a36Sopenharmony_ci RTW89_PHY_C2H_DM_FUNC_SIGB, 13162306a36Sopenharmony_ci RTW89_PHY_C2H_DM_FUNC_LOWRT_RTY, 13262306a36Sopenharmony_ci RTW89_PHY_C2H_DM_FUNC_MCC_DIG, 13362306a36Sopenharmony_ci RTW89_PHY_C2H_DM_FUNC_NUM, 13462306a36Sopenharmony_ci}; 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_cienum rtw89_phy_c2h_class { 13762306a36Sopenharmony_ci RTW89_PHY_C2H_CLASS_RUA, 13862306a36Sopenharmony_ci RTW89_PHY_C2H_CLASS_RA, 13962306a36Sopenharmony_ci RTW89_PHY_C2H_CLASS_DM, 14062306a36Sopenharmony_ci RTW89_PHY_C2H_CLASS_BTC_MIN = 0x10, 14162306a36Sopenharmony_ci RTW89_PHY_C2H_CLASS_BTC_MAX = 0x17, 14262306a36Sopenharmony_ci RTW89_PHY_C2H_CLASS_MAX, 14362306a36Sopenharmony_ci}; 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_cienum rtw89_env_monitor_result_level { 14662306a36Sopenharmony_ci RTW89_PHY_ENV_MON_CCX_FAIL = 0, 14762306a36Sopenharmony_ci RTW89_PHY_ENV_MON_NHM = BIT(0), 14862306a36Sopenharmony_ci RTW89_PHY_ENV_MON_CLM = BIT(1), 14962306a36Sopenharmony_ci RTW89_PHY_ENV_MON_FAHM = BIT(2), 15062306a36Sopenharmony_ci RTW89_PHY_ENV_MON_IFS_CLM = BIT(3), 15162306a36Sopenharmony_ci RTW89_PHY_ENV_MON_EDCCA_CLM = BIT(4), 15262306a36Sopenharmony_ci}; 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci#define CCX_US_BASE_RATIO 4 15562306a36Sopenharmony_cienum rtw89_ccx_unit { 15662306a36Sopenharmony_ci RTW89_CCX_4_US = 0, 15762306a36Sopenharmony_ci RTW89_CCX_8_US = 1, 15862306a36Sopenharmony_ci RTW89_CCX_16_US = 2, 15962306a36Sopenharmony_ci RTW89_CCX_32_US = 3 16062306a36Sopenharmony_ci}; 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_cienum rtw89_phy_status_ie_type { 16362306a36Sopenharmony_ci RTW89_PHYSTS_IE00_CMN_CCK = 0, 16462306a36Sopenharmony_ci RTW89_PHYSTS_IE01_CMN_OFDM = 1, 16562306a36Sopenharmony_ci RTW89_PHYSTS_IE02_CMN_EXT_AX = 2, 16662306a36Sopenharmony_ci RTW89_PHYSTS_IE03_CMN_EXT_SEG_1 = 3, 16762306a36Sopenharmony_ci RTW89_PHYSTS_IE04_CMN_EXT_PATH_A = 4, 16862306a36Sopenharmony_ci RTW89_PHYSTS_IE05_CMN_EXT_PATH_B = 5, 16962306a36Sopenharmony_ci RTW89_PHYSTS_IE06_CMN_EXT_PATH_C = 6, 17062306a36Sopenharmony_ci RTW89_PHYSTS_IE07_CMN_EXT_PATH_D = 7, 17162306a36Sopenharmony_ci RTW89_PHYSTS_IE08_FTR_CH = 8, 17262306a36Sopenharmony_ci RTW89_PHYSTS_IE09_FTR_0 = 9, 17362306a36Sopenharmony_ci RTW89_PHYSTS_IE10_FTR_PLCP_EXT = 10, 17462306a36Sopenharmony_ci RTW89_PHYSTS_IE11_FTR_PLCP_HISTOGRAM = 11, 17562306a36Sopenharmony_ci RTW89_PHYSTS_IE12_MU_EIGEN_INFO = 12, 17662306a36Sopenharmony_ci RTW89_PHYSTS_IE13_DL_MU_DEF = 13, 17762306a36Sopenharmony_ci RTW89_PHYSTS_IE14_TB_UL_CQI = 14, 17862306a36Sopenharmony_ci RTW89_PHYSTS_IE15_TB_UL_DEF = 15, 17962306a36Sopenharmony_ci RTW89_PHYSTS_IE16_RSVD16 = 16, 18062306a36Sopenharmony_ci RTW89_PHYSTS_IE17_TB_UL_CTRL = 17, 18162306a36Sopenharmony_ci RTW89_PHYSTS_IE18_DBG_OFDM_FD_CMN = 18, 18262306a36Sopenharmony_ci RTW89_PHYSTS_IE19_DBG_OFDM_TD_CMN = 19, 18362306a36Sopenharmony_ci RTW89_PHYSTS_IE20_DBG_OFDM_FD_USER_SEG_0 = 20, 18462306a36Sopenharmony_ci RTW89_PHYSTS_IE21_DBG_OFDM_FD_USER_SEG_1 = 21, 18562306a36Sopenharmony_ci RTW89_PHYSTS_IE22_DBG_OFDM_FD_USER_AGC = 22, 18662306a36Sopenharmony_ci RTW89_PHYSTS_IE23_RSVD23 = 23, 18762306a36Sopenharmony_ci RTW89_PHYSTS_IE24_OFDM_TD_PATH_A = 24, 18862306a36Sopenharmony_ci RTW89_PHYSTS_IE25_OFDM_TD_PATH_B = 25, 18962306a36Sopenharmony_ci RTW89_PHYSTS_IE26_OFDM_TD_PATH_C = 26, 19062306a36Sopenharmony_ci RTW89_PHYSTS_IE27_OFDM_TD_PATH_D = 27, 19162306a36Sopenharmony_ci RTW89_PHYSTS_IE28_DBG_CCK_PATH_A = 28, 19262306a36Sopenharmony_ci RTW89_PHYSTS_IE29_DBG_CCK_PATH_B = 29, 19362306a36Sopenharmony_ci RTW89_PHYSTS_IE30_DBG_CCK_PATH_C = 30, 19462306a36Sopenharmony_ci RTW89_PHYSTS_IE31_DBG_CCK_PATH_D = 31, 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci /* keep last */ 19762306a36Sopenharmony_ci RTW89_PHYSTS_IE_NUM, 19862306a36Sopenharmony_ci RTW89_PHYSTS_IE_MAX = RTW89_PHYSTS_IE_NUM - 1 19962306a36Sopenharmony_ci}; 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_cienum rtw89_phy_status_bitmap { 20262306a36Sopenharmony_ci RTW89_TD_SEARCH_FAIL = 0, 20362306a36Sopenharmony_ci RTW89_BRK_BY_TX_PKT = 1, 20462306a36Sopenharmony_ci RTW89_CCA_SPOOF = 2, 20562306a36Sopenharmony_ci RTW89_OFDM_BRK = 3, 20662306a36Sopenharmony_ci RTW89_CCK_BRK = 4, 20762306a36Sopenharmony_ci RTW89_DL_MU_SPOOFING = 5, 20862306a36Sopenharmony_ci RTW89_HE_MU = 6, 20962306a36Sopenharmony_ci RTW89_VHT_MU = 7, 21062306a36Sopenharmony_ci RTW89_UL_TB_SPOOFING = 8, 21162306a36Sopenharmony_ci RTW89_RSVD_9 = 9, 21262306a36Sopenharmony_ci RTW89_TRIG_BASE_PPDU = 10, 21362306a36Sopenharmony_ci RTW89_CCK_PKT = 11, 21462306a36Sopenharmony_ci RTW89_LEGACY_OFDM_PKT = 12, 21562306a36Sopenharmony_ci RTW89_HT_PKT = 13, 21662306a36Sopenharmony_ci RTW89_VHT_PKT = 14, 21762306a36Sopenharmony_ci RTW89_HE_PKT = 15, 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci RTW89_PHYSTS_BITMAP_NUM 22062306a36Sopenharmony_ci}; 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_cienum rtw89_dig_gain_type { 22362306a36Sopenharmony_ci RTW89_DIG_GAIN_LNA_G = 0, 22462306a36Sopenharmony_ci RTW89_DIG_GAIN_TIA_G = 1, 22562306a36Sopenharmony_ci RTW89_DIG_GAIN_LNA_A = 2, 22662306a36Sopenharmony_ci RTW89_DIG_GAIN_TIA_A = 3, 22762306a36Sopenharmony_ci RTW89_DIG_GAIN_MAX = 4 22862306a36Sopenharmony_ci}; 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_cienum rtw89_dig_gain_lna_idx { 23162306a36Sopenharmony_ci RTW89_DIG_GAIN_LNA_IDX1 = 1, 23262306a36Sopenharmony_ci RTW89_DIG_GAIN_LNA_IDX2 = 2, 23362306a36Sopenharmony_ci RTW89_DIG_GAIN_LNA_IDX3 = 3, 23462306a36Sopenharmony_ci RTW89_DIG_GAIN_LNA_IDX4 = 4, 23562306a36Sopenharmony_ci RTW89_DIG_GAIN_LNA_IDX5 = 5, 23662306a36Sopenharmony_ci RTW89_DIG_GAIN_LNA_IDX6 = 6 23762306a36Sopenharmony_ci}; 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_cienum rtw89_dig_gain_tia_idx { 24062306a36Sopenharmony_ci RTW89_DIG_GAIN_TIA_IDX0 = 0, 24162306a36Sopenharmony_ci RTW89_DIG_GAIN_TIA_IDX1 = 1 24262306a36Sopenharmony_ci}; 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_cienum rtw89_tssi_bandedge_cfg { 24562306a36Sopenharmony_ci RTW89_TSSI_BANDEDGE_FLAT, 24662306a36Sopenharmony_ci RTW89_TSSI_BANDEDGE_LOW, 24762306a36Sopenharmony_ci RTW89_TSSI_BANDEDGE_MID, 24862306a36Sopenharmony_ci RTW89_TSSI_BANDEDGE_HIGH, 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ci RTW89_TSSI_CFG_NUM, 25162306a36Sopenharmony_ci}; 25262306a36Sopenharmony_ci 25362306a36Sopenharmony_cienum rtw89_tssi_sbw_idx { 25462306a36Sopenharmony_ci RTW89_TSSI_SBW20, 25562306a36Sopenharmony_ci RTW89_TSSI_SBW40_0, 25662306a36Sopenharmony_ci RTW89_TSSI_SBW40_1, 25762306a36Sopenharmony_ci RTW89_TSSI_SBW80_0, 25862306a36Sopenharmony_ci RTW89_TSSI_SBW80_1, 25962306a36Sopenharmony_ci RTW89_TSSI_SBW80_2, 26062306a36Sopenharmony_ci RTW89_TSSI_SBW80_3, 26162306a36Sopenharmony_ci RTW89_TSSI_SBW160_0, 26262306a36Sopenharmony_ci RTW89_TSSI_SBW160_1, 26362306a36Sopenharmony_ci RTW89_TSSI_SBW160_2, 26462306a36Sopenharmony_ci RTW89_TSSI_SBW160_3, 26562306a36Sopenharmony_ci RTW89_TSSI_SBW160_4, 26662306a36Sopenharmony_ci RTW89_TSSI_SBW160_5, 26762306a36Sopenharmony_ci RTW89_TSSI_SBW160_6, 26862306a36Sopenharmony_ci RTW89_TSSI_SBW160_7, 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ci RTW89_TSSI_SBW_NUM, 27162306a36Sopenharmony_ci}; 27262306a36Sopenharmony_ci 27362306a36Sopenharmony_cistruct rtw89_txpwr_byrate_cfg { 27462306a36Sopenharmony_ci enum rtw89_band band; 27562306a36Sopenharmony_ci enum rtw89_nss nss; 27662306a36Sopenharmony_ci enum rtw89_rate_section rs; 27762306a36Sopenharmony_ci u8 shf; 27862306a36Sopenharmony_ci u8 len; 27962306a36Sopenharmony_ci u32 data; 28062306a36Sopenharmony_ci}; 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ci#define DELTA_SWINGIDX_SIZE 30 28362306a36Sopenharmony_ci 28462306a36Sopenharmony_cistruct rtw89_txpwr_track_cfg { 28562306a36Sopenharmony_ci const s8 (*delta_swingidx_6gb_n)[DELTA_SWINGIDX_SIZE]; 28662306a36Sopenharmony_ci const s8 (*delta_swingidx_6gb_p)[DELTA_SWINGIDX_SIZE]; 28762306a36Sopenharmony_ci const s8 (*delta_swingidx_6ga_n)[DELTA_SWINGIDX_SIZE]; 28862306a36Sopenharmony_ci const s8 (*delta_swingidx_6ga_p)[DELTA_SWINGIDX_SIZE]; 28962306a36Sopenharmony_ci const s8 (*delta_swingidx_5gb_n)[DELTA_SWINGIDX_SIZE]; 29062306a36Sopenharmony_ci const s8 (*delta_swingidx_5gb_p)[DELTA_SWINGIDX_SIZE]; 29162306a36Sopenharmony_ci const s8 (*delta_swingidx_5ga_n)[DELTA_SWINGIDX_SIZE]; 29262306a36Sopenharmony_ci const s8 (*delta_swingidx_5ga_p)[DELTA_SWINGIDX_SIZE]; 29362306a36Sopenharmony_ci const s8 *delta_swingidx_2gb_n; 29462306a36Sopenharmony_ci const s8 *delta_swingidx_2gb_p; 29562306a36Sopenharmony_ci const s8 *delta_swingidx_2ga_n; 29662306a36Sopenharmony_ci const s8 *delta_swingidx_2ga_p; 29762306a36Sopenharmony_ci const s8 *delta_swingidx_2g_cck_b_n; 29862306a36Sopenharmony_ci const s8 *delta_swingidx_2g_cck_b_p; 29962306a36Sopenharmony_ci const s8 *delta_swingidx_2g_cck_a_n; 30062306a36Sopenharmony_ci const s8 *delta_swingidx_2g_cck_a_p; 30162306a36Sopenharmony_ci}; 30262306a36Sopenharmony_ci 30362306a36Sopenharmony_cistruct rtw89_phy_dig_gain_cfg { 30462306a36Sopenharmony_ci const struct rtw89_reg_def *table; 30562306a36Sopenharmony_ci u8 size; 30662306a36Sopenharmony_ci}; 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_cistruct rtw89_phy_dig_gain_table { 30962306a36Sopenharmony_ci const struct rtw89_phy_dig_gain_cfg *cfg_lna_g; 31062306a36Sopenharmony_ci const struct rtw89_phy_dig_gain_cfg *cfg_tia_g; 31162306a36Sopenharmony_ci const struct rtw89_phy_dig_gain_cfg *cfg_lna_a; 31262306a36Sopenharmony_ci const struct rtw89_phy_dig_gain_cfg *cfg_tia_a; 31362306a36Sopenharmony_ci}; 31462306a36Sopenharmony_ci 31562306a36Sopenharmony_cistruct rtw89_phy_tssi_dbw_table { 31662306a36Sopenharmony_ci u32 data[RTW89_TSSI_CFG_NUM][RTW89_TSSI_SBW_NUM]; 31762306a36Sopenharmony_ci}; 31862306a36Sopenharmony_ci 31962306a36Sopenharmony_cistruct rtw89_phy_reg3_tbl { 32062306a36Sopenharmony_ci const struct rtw89_reg3_def *reg3; 32162306a36Sopenharmony_ci int size; 32262306a36Sopenharmony_ci}; 32362306a36Sopenharmony_ci 32462306a36Sopenharmony_ci#define DECLARE_PHY_REG3_TBL(_name) \ 32562306a36Sopenharmony_ciconst struct rtw89_phy_reg3_tbl _name ## _tbl = { \ 32662306a36Sopenharmony_ci .reg3 = _name, \ 32762306a36Sopenharmony_ci .size = ARRAY_SIZE(_name), \ 32862306a36Sopenharmony_ci} 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_cistruct rtw89_nbi_reg_def { 33162306a36Sopenharmony_ci struct rtw89_reg_def notch1_idx; 33262306a36Sopenharmony_ci struct rtw89_reg_def notch1_frac_idx; 33362306a36Sopenharmony_ci struct rtw89_reg_def notch1_en; 33462306a36Sopenharmony_ci struct rtw89_reg_def notch2_idx; 33562306a36Sopenharmony_ci struct rtw89_reg_def notch2_frac_idx; 33662306a36Sopenharmony_ci struct rtw89_reg_def notch2_en; 33762306a36Sopenharmony_ci}; 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_cistruct rtw89_ccx_regs { 34062306a36Sopenharmony_ci u32 setting_addr; 34162306a36Sopenharmony_ci u32 edcca_opt_mask; 34262306a36Sopenharmony_ci u32 measurement_trig_mask; 34362306a36Sopenharmony_ci u32 trig_opt_mask; 34462306a36Sopenharmony_ci u32 en_mask; 34562306a36Sopenharmony_ci u32 ifs_cnt_addr; 34662306a36Sopenharmony_ci u32 ifs_clm_period_mask; 34762306a36Sopenharmony_ci u32 ifs_clm_cnt_unit_mask; 34862306a36Sopenharmony_ci u32 ifs_clm_cnt_clear_mask; 34962306a36Sopenharmony_ci u32 ifs_collect_en_mask; 35062306a36Sopenharmony_ci u32 ifs_t1_addr; 35162306a36Sopenharmony_ci u32 ifs_t1_th_h_mask; 35262306a36Sopenharmony_ci u32 ifs_t1_en_mask; 35362306a36Sopenharmony_ci u32 ifs_t1_th_l_mask; 35462306a36Sopenharmony_ci u32 ifs_t2_addr; 35562306a36Sopenharmony_ci u32 ifs_t2_th_h_mask; 35662306a36Sopenharmony_ci u32 ifs_t2_en_mask; 35762306a36Sopenharmony_ci u32 ifs_t2_th_l_mask; 35862306a36Sopenharmony_ci u32 ifs_t3_addr; 35962306a36Sopenharmony_ci u32 ifs_t3_th_h_mask; 36062306a36Sopenharmony_ci u32 ifs_t3_en_mask; 36162306a36Sopenharmony_ci u32 ifs_t3_th_l_mask; 36262306a36Sopenharmony_ci u32 ifs_t4_addr; 36362306a36Sopenharmony_ci u32 ifs_t4_th_h_mask; 36462306a36Sopenharmony_ci u32 ifs_t4_en_mask; 36562306a36Sopenharmony_ci u32 ifs_t4_th_l_mask; 36662306a36Sopenharmony_ci u32 ifs_clm_tx_cnt_addr; 36762306a36Sopenharmony_ci u32 ifs_clm_edcca_excl_cca_fa_mask; 36862306a36Sopenharmony_ci u32 ifs_clm_tx_cnt_msk; 36962306a36Sopenharmony_ci u32 ifs_clm_cca_addr; 37062306a36Sopenharmony_ci u32 ifs_clm_ofdmcca_excl_fa_mask; 37162306a36Sopenharmony_ci u32 ifs_clm_cckcca_excl_fa_mask; 37262306a36Sopenharmony_ci u32 ifs_clm_fa_addr; 37362306a36Sopenharmony_ci u32 ifs_clm_ofdm_fa_mask; 37462306a36Sopenharmony_ci u32 ifs_clm_cck_fa_mask; 37562306a36Sopenharmony_ci u32 ifs_his_addr; 37662306a36Sopenharmony_ci u32 ifs_t4_his_mask; 37762306a36Sopenharmony_ci u32 ifs_t3_his_mask; 37862306a36Sopenharmony_ci u32 ifs_t2_his_mask; 37962306a36Sopenharmony_ci u32 ifs_t1_his_mask; 38062306a36Sopenharmony_ci u32 ifs_avg_l_addr; 38162306a36Sopenharmony_ci u32 ifs_t2_avg_mask; 38262306a36Sopenharmony_ci u32 ifs_t1_avg_mask; 38362306a36Sopenharmony_ci u32 ifs_avg_h_addr; 38462306a36Sopenharmony_ci u32 ifs_t4_avg_mask; 38562306a36Sopenharmony_ci u32 ifs_t3_avg_mask; 38662306a36Sopenharmony_ci u32 ifs_cca_l_addr; 38762306a36Sopenharmony_ci u32 ifs_t2_cca_mask; 38862306a36Sopenharmony_ci u32 ifs_t1_cca_mask; 38962306a36Sopenharmony_ci u32 ifs_cca_h_addr; 39062306a36Sopenharmony_ci u32 ifs_t4_cca_mask; 39162306a36Sopenharmony_ci u32 ifs_t3_cca_mask; 39262306a36Sopenharmony_ci u32 ifs_total_addr; 39362306a36Sopenharmony_ci u32 ifs_cnt_done_mask; 39462306a36Sopenharmony_ci u32 ifs_total_mask; 39562306a36Sopenharmony_ci}; 39662306a36Sopenharmony_ci 39762306a36Sopenharmony_cistruct rtw89_physts_regs { 39862306a36Sopenharmony_ci u32 setting_addr; 39962306a36Sopenharmony_ci u32 dis_trigger_fail_mask; 40062306a36Sopenharmony_ci u32 dis_trigger_brk_mask; 40162306a36Sopenharmony_ci}; 40262306a36Sopenharmony_ci 40362306a36Sopenharmony_cistruct rtw89_phy_gen_def { 40462306a36Sopenharmony_ci u32 cr_base; 40562306a36Sopenharmony_ci const struct rtw89_ccx_regs *ccx; 40662306a36Sopenharmony_ci const struct rtw89_physts_regs *physts; 40762306a36Sopenharmony_ci}; 40862306a36Sopenharmony_ci 40962306a36Sopenharmony_ciextern const struct rtw89_phy_gen_def rtw89_phy_gen_ax; 41062306a36Sopenharmony_ciextern const struct rtw89_phy_gen_def rtw89_phy_gen_be; 41162306a36Sopenharmony_ci 41262306a36Sopenharmony_cistatic inline void rtw89_phy_write8(struct rtw89_dev *rtwdev, 41362306a36Sopenharmony_ci u32 addr, u8 data) 41462306a36Sopenharmony_ci{ 41562306a36Sopenharmony_ci const struct rtw89_phy_gen_def *phy = rtwdev->chip->phy_def; 41662306a36Sopenharmony_ci 41762306a36Sopenharmony_ci rtw89_write8(rtwdev, addr + phy->cr_base, data); 41862306a36Sopenharmony_ci} 41962306a36Sopenharmony_ci 42062306a36Sopenharmony_cistatic inline void rtw89_phy_write16(struct rtw89_dev *rtwdev, 42162306a36Sopenharmony_ci u32 addr, u16 data) 42262306a36Sopenharmony_ci{ 42362306a36Sopenharmony_ci const struct rtw89_phy_gen_def *phy = rtwdev->chip->phy_def; 42462306a36Sopenharmony_ci 42562306a36Sopenharmony_ci rtw89_write16(rtwdev, addr + phy->cr_base, data); 42662306a36Sopenharmony_ci} 42762306a36Sopenharmony_ci 42862306a36Sopenharmony_cistatic inline void rtw89_phy_write32(struct rtw89_dev *rtwdev, 42962306a36Sopenharmony_ci u32 addr, u32 data) 43062306a36Sopenharmony_ci{ 43162306a36Sopenharmony_ci const struct rtw89_phy_gen_def *phy = rtwdev->chip->phy_def; 43262306a36Sopenharmony_ci 43362306a36Sopenharmony_ci rtw89_write32(rtwdev, addr + phy->cr_base, data); 43462306a36Sopenharmony_ci} 43562306a36Sopenharmony_ci 43662306a36Sopenharmony_cistatic inline void rtw89_phy_write32_set(struct rtw89_dev *rtwdev, 43762306a36Sopenharmony_ci u32 addr, u32 bits) 43862306a36Sopenharmony_ci{ 43962306a36Sopenharmony_ci const struct rtw89_phy_gen_def *phy = rtwdev->chip->phy_def; 44062306a36Sopenharmony_ci 44162306a36Sopenharmony_ci rtw89_write32_set(rtwdev, addr + phy->cr_base, bits); 44262306a36Sopenharmony_ci} 44362306a36Sopenharmony_ci 44462306a36Sopenharmony_cistatic inline void rtw89_phy_write32_clr(struct rtw89_dev *rtwdev, 44562306a36Sopenharmony_ci u32 addr, u32 bits) 44662306a36Sopenharmony_ci{ 44762306a36Sopenharmony_ci const struct rtw89_phy_gen_def *phy = rtwdev->chip->phy_def; 44862306a36Sopenharmony_ci 44962306a36Sopenharmony_ci rtw89_write32_clr(rtwdev, addr + phy->cr_base, bits); 45062306a36Sopenharmony_ci} 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_cistatic inline void rtw89_phy_write32_mask(struct rtw89_dev *rtwdev, 45362306a36Sopenharmony_ci u32 addr, u32 mask, u32 data) 45462306a36Sopenharmony_ci{ 45562306a36Sopenharmony_ci const struct rtw89_phy_gen_def *phy = rtwdev->chip->phy_def; 45662306a36Sopenharmony_ci 45762306a36Sopenharmony_ci rtw89_write32_mask(rtwdev, addr + phy->cr_base, mask, data); 45862306a36Sopenharmony_ci} 45962306a36Sopenharmony_ci 46062306a36Sopenharmony_cistatic inline u8 rtw89_phy_read8(struct rtw89_dev *rtwdev, u32 addr) 46162306a36Sopenharmony_ci{ 46262306a36Sopenharmony_ci const struct rtw89_phy_gen_def *phy = rtwdev->chip->phy_def; 46362306a36Sopenharmony_ci 46462306a36Sopenharmony_ci return rtw89_read8(rtwdev, addr + phy->cr_base); 46562306a36Sopenharmony_ci} 46662306a36Sopenharmony_ci 46762306a36Sopenharmony_cistatic inline u16 rtw89_phy_read16(struct rtw89_dev *rtwdev, u32 addr) 46862306a36Sopenharmony_ci{ 46962306a36Sopenharmony_ci const struct rtw89_phy_gen_def *phy = rtwdev->chip->phy_def; 47062306a36Sopenharmony_ci 47162306a36Sopenharmony_ci return rtw89_read16(rtwdev, addr + phy->cr_base); 47262306a36Sopenharmony_ci} 47362306a36Sopenharmony_ci 47462306a36Sopenharmony_cistatic inline u32 rtw89_phy_read32(struct rtw89_dev *rtwdev, u32 addr) 47562306a36Sopenharmony_ci{ 47662306a36Sopenharmony_ci const struct rtw89_phy_gen_def *phy = rtwdev->chip->phy_def; 47762306a36Sopenharmony_ci 47862306a36Sopenharmony_ci return rtw89_read32(rtwdev, addr + phy->cr_base); 47962306a36Sopenharmony_ci} 48062306a36Sopenharmony_ci 48162306a36Sopenharmony_cistatic inline u32 rtw89_phy_read32_mask(struct rtw89_dev *rtwdev, 48262306a36Sopenharmony_ci u32 addr, u32 mask) 48362306a36Sopenharmony_ci{ 48462306a36Sopenharmony_ci const struct rtw89_phy_gen_def *phy = rtwdev->chip->phy_def; 48562306a36Sopenharmony_ci 48662306a36Sopenharmony_ci return rtw89_read32_mask(rtwdev, addr + phy->cr_base, mask); 48762306a36Sopenharmony_ci} 48862306a36Sopenharmony_ci 48962306a36Sopenharmony_cistatic inline 49062306a36Sopenharmony_cienum rtw89_gain_offset rtw89_subband_to_gain_offset_band_of_ofdm(enum rtw89_subband subband) 49162306a36Sopenharmony_ci{ 49262306a36Sopenharmony_ci switch (subband) { 49362306a36Sopenharmony_ci default: 49462306a36Sopenharmony_ci case RTW89_CH_2G: 49562306a36Sopenharmony_ci return RTW89_GAIN_OFFSET_2G_OFDM; 49662306a36Sopenharmony_ci case RTW89_CH_5G_BAND_1: 49762306a36Sopenharmony_ci return RTW89_GAIN_OFFSET_5G_LOW; 49862306a36Sopenharmony_ci case RTW89_CH_5G_BAND_3: 49962306a36Sopenharmony_ci return RTW89_GAIN_OFFSET_5G_MID; 50062306a36Sopenharmony_ci case RTW89_CH_5G_BAND_4: 50162306a36Sopenharmony_ci return RTW89_GAIN_OFFSET_5G_HIGH; 50262306a36Sopenharmony_ci } 50362306a36Sopenharmony_ci} 50462306a36Sopenharmony_ci 50562306a36Sopenharmony_cistatic inline 50662306a36Sopenharmony_cienum rtw89_phy_bb_gain_band rtw89_subband_to_bb_gain_band(enum rtw89_subband subband) 50762306a36Sopenharmony_ci{ 50862306a36Sopenharmony_ci switch (subband) { 50962306a36Sopenharmony_ci default: 51062306a36Sopenharmony_ci case RTW89_CH_2G: 51162306a36Sopenharmony_ci return RTW89_BB_GAIN_BAND_2G; 51262306a36Sopenharmony_ci case RTW89_CH_5G_BAND_1: 51362306a36Sopenharmony_ci return RTW89_BB_GAIN_BAND_5G_L; 51462306a36Sopenharmony_ci case RTW89_CH_5G_BAND_3: 51562306a36Sopenharmony_ci return RTW89_BB_GAIN_BAND_5G_M; 51662306a36Sopenharmony_ci case RTW89_CH_5G_BAND_4: 51762306a36Sopenharmony_ci return RTW89_BB_GAIN_BAND_5G_H; 51862306a36Sopenharmony_ci case RTW89_CH_6G_BAND_IDX0: 51962306a36Sopenharmony_ci case RTW89_CH_6G_BAND_IDX1: 52062306a36Sopenharmony_ci return RTW89_BB_GAIN_BAND_6G_L; 52162306a36Sopenharmony_ci case RTW89_CH_6G_BAND_IDX2: 52262306a36Sopenharmony_ci case RTW89_CH_6G_BAND_IDX3: 52362306a36Sopenharmony_ci return RTW89_BB_GAIN_BAND_6G_M; 52462306a36Sopenharmony_ci case RTW89_CH_6G_BAND_IDX4: 52562306a36Sopenharmony_ci case RTW89_CH_6G_BAND_IDX5: 52662306a36Sopenharmony_ci return RTW89_BB_GAIN_BAND_6G_H; 52762306a36Sopenharmony_ci case RTW89_CH_6G_BAND_IDX6: 52862306a36Sopenharmony_ci case RTW89_CH_6G_BAND_IDX7: 52962306a36Sopenharmony_ci return RTW89_BB_GAIN_BAND_6G_UH; 53062306a36Sopenharmony_ci } 53162306a36Sopenharmony_ci} 53262306a36Sopenharmony_ci 53362306a36Sopenharmony_cienum rtw89_rfk_flag { 53462306a36Sopenharmony_ci RTW89_RFK_F_WRF = 0, 53562306a36Sopenharmony_ci RTW89_RFK_F_WM = 1, 53662306a36Sopenharmony_ci RTW89_RFK_F_WS = 2, 53762306a36Sopenharmony_ci RTW89_RFK_F_WC = 3, 53862306a36Sopenharmony_ci RTW89_RFK_F_DELAY = 4, 53962306a36Sopenharmony_ci RTW89_RFK_F_NUM, 54062306a36Sopenharmony_ci}; 54162306a36Sopenharmony_ci 54262306a36Sopenharmony_cistruct rtw89_rfk_tbl { 54362306a36Sopenharmony_ci const struct rtw89_reg5_def *defs; 54462306a36Sopenharmony_ci u32 size; 54562306a36Sopenharmony_ci}; 54662306a36Sopenharmony_ci 54762306a36Sopenharmony_ci#define RTW89_DECLARE_RFK_TBL(_name) \ 54862306a36Sopenharmony_ciconst struct rtw89_rfk_tbl _name ## _tbl = { \ 54962306a36Sopenharmony_ci .defs = _name, \ 55062306a36Sopenharmony_ci .size = ARRAY_SIZE(_name), \ 55162306a36Sopenharmony_ci} 55262306a36Sopenharmony_ci 55362306a36Sopenharmony_ci#define RTW89_DECL_RFK_WRF(_path, _addr, _mask, _data) \ 55462306a36Sopenharmony_ci {.flag = RTW89_RFK_F_WRF, \ 55562306a36Sopenharmony_ci .path = _path, \ 55662306a36Sopenharmony_ci .addr = _addr, \ 55762306a36Sopenharmony_ci .mask = _mask, \ 55862306a36Sopenharmony_ci .data = _data,} 55962306a36Sopenharmony_ci 56062306a36Sopenharmony_ci#define RTW89_DECL_RFK_WM(_addr, _mask, _data) \ 56162306a36Sopenharmony_ci {.flag = RTW89_RFK_F_WM, \ 56262306a36Sopenharmony_ci .addr = _addr, \ 56362306a36Sopenharmony_ci .mask = _mask, \ 56462306a36Sopenharmony_ci .data = _data,} 56562306a36Sopenharmony_ci 56662306a36Sopenharmony_ci#define RTW89_DECL_RFK_WS(_addr, _mask) \ 56762306a36Sopenharmony_ci {.flag = RTW89_RFK_F_WS, \ 56862306a36Sopenharmony_ci .addr = _addr, \ 56962306a36Sopenharmony_ci .mask = _mask,} 57062306a36Sopenharmony_ci 57162306a36Sopenharmony_ci#define RTW89_DECL_RFK_WC(_addr, _mask) \ 57262306a36Sopenharmony_ci {.flag = RTW89_RFK_F_WC, \ 57362306a36Sopenharmony_ci .addr = _addr, \ 57462306a36Sopenharmony_ci .mask = _mask,} 57562306a36Sopenharmony_ci 57662306a36Sopenharmony_ci#define RTW89_DECL_RFK_DELAY(_data) \ 57762306a36Sopenharmony_ci {.flag = RTW89_RFK_F_DELAY, \ 57862306a36Sopenharmony_ci .data = _data,} 57962306a36Sopenharmony_ci 58062306a36Sopenharmony_civoid 58162306a36Sopenharmony_cirtw89_rfk_parser(struct rtw89_dev *rtwdev, const struct rtw89_rfk_tbl *tbl); 58262306a36Sopenharmony_ci 58362306a36Sopenharmony_ci#define rtw89_rfk_parser_by_cond(dev, cond, tbl_t, tbl_f) \ 58462306a36Sopenharmony_ci do { \ 58562306a36Sopenharmony_ci typeof(dev) __dev = (dev); \ 58662306a36Sopenharmony_ci if (cond) \ 58762306a36Sopenharmony_ci rtw89_rfk_parser(__dev, (tbl_t)); \ 58862306a36Sopenharmony_ci else \ 58962306a36Sopenharmony_ci rtw89_rfk_parser(__dev, (tbl_f)); \ 59062306a36Sopenharmony_ci } while (0) 59162306a36Sopenharmony_ci 59262306a36Sopenharmony_civoid rtw89_phy_write_reg3_tbl(struct rtw89_dev *rtwdev, 59362306a36Sopenharmony_ci const struct rtw89_phy_reg3_tbl *tbl); 59462306a36Sopenharmony_ciu8 rtw89_phy_get_txsc(struct rtw89_dev *rtwdev, 59562306a36Sopenharmony_ci const struct rtw89_chan *chan, 59662306a36Sopenharmony_ci enum rtw89_bandwidth dbw); 59762306a36Sopenharmony_ciu32 rtw89_phy_read_rf(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path, 59862306a36Sopenharmony_ci u32 addr, u32 mask); 59962306a36Sopenharmony_ciu32 rtw89_phy_read_rf_v1(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path, 60062306a36Sopenharmony_ci u32 addr, u32 mask); 60162306a36Sopenharmony_cibool rtw89_phy_write_rf(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path, 60262306a36Sopenharmony_ci u32 addr, u32 mask, u32 data); 60362306a36Sopenharmony_cibool rtw89_phy_write_rf_v1(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path, 60462306a36Sopenharmony_ci u32 addr, u32 mask, u32 data); 60562306a36Sopenharmony_civoid rtw89_phy_init_bb_reg(struct rtw89_dev *rtwdev); 60662306a36Sopenharmony_civoid rtw89_phy_init_rf_reg(struct rtw89_dev *rtwdev, bool noio); 60762306a36Sopenharmony_civoid rtw89_phy_config_rf_reg_v1(struct rtw89_dev *rtwdev, 60862306a36Sopenharmony_ci const struct rtw89_reg2_def *reg, 60962306a36Sopenharmony_ci enum rtw89_rf_path rf_path, 61062306a36Sopenharmony_ci void *extra_data); 61162306a36Sopenharmony_civoid rtw89_phy_dm_init(struct rtw89_dev *rtwdev); 61262306a36Sopenharmony_civoid rtw89_phy_write32_idx(struct rtw89_dev *rtwdev, u32 addr, u32 mask, 61362306a36Sopenharmony_ci u32 data, enum rtw89_phy_idx phy_idx); 61462306a36Sopenharmony_ciu32 rtw89_phy_read32_idx(struct rtw89_dev *rtwdev, u32 addr, u32 mask, 61562306a36Sopenharmony_ci enum rtw89_phy_idx phy_idx); 61662306a36Sopenharmony_civoid rtw89_phy_load_txpwr_byrate(struct rtw89_dev *rtwdev, 61762306a36Sopenharmony_ci const struct rtw89_txpwr_table *tbl); 61862306a36Sopenharmony_cis8 rtw89_phy_read_txpwr_limit(struct rtw89_dev *rtwdev, u8 band, 61962306a36Sopenharmony_ci u8 bw, u8 ntx, u8 rs, u8 bf, u8 ch); 62062306a36Sopenharmony_civoid rtw89_phy_set_txpwr_byrate(struct rtw89_dev *rtwdev, 62162306a36Sopenharmony_ci const struct rtw89_chan *chan, 62262306a36Sopenharmony_ci enum rtw89_phy_idx phy_idx); 62362306a36Sopenharmony_civoid rtw89_phy_set_txpwr_offset(struct rtw89_dev *rtwdev, 62462306a36Sopenharmony_ci const struct rtw89_chan *chan, 62562306a36Sopenharmony_ci enum rtw89_phy_idx phy_idx); 62662306a36Sopenharmony_civoid rtw89_phy_set_txpwr_limit(struct rtw89_dev *rtwdev, 62762306a36Sopenharmony_ci const struct rtw89_chan *chan, 62862306a36Sopenharmony_ci enum rtw89_phy_idx phy_idx); 62962306a36Sopenharmony_civoid rtw89_phy_set_txpwr_limit_ru(struct rtw89_dev *rtwdev, 63062306a36Sopenharmony_ci const struct rtw89_chan *chan, 63162306a36Sopenharmony_ci enum rtw89_phy_idx phy_idx); 63262306a36Sopenharmony_civoid rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta); 63362306a36Sopenharmony_civoid rtw89_phy_ra_update(struct rtw89_dev *rtwdev); 63462306a36Sopenharmony_civoid rtw89_phy_ra_updata_sta(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta, 63562306a36Sopenharmony_ci u32 changed); 63662306a36Sopenharmony_civoid rtw89_phy_rate_pattern_vif(struct rtw89_dev *rtwdev, 63762306a36Sopenharmony_ci struct ieee80211_vif *vif, 63862306a36Sopenharmony_ci const struct cfg80211_bitrate_mask *mask); 63962306a36Sopenharmony_civoid rtw89_phy_c2h_handle(struct rtw89_dev *rtwdev, struct sk_buff *skb, 64062306a36Sopenharmony_ci u32 len, u8 class, u8 func); 64162306a36Sopenharmony_civoid rtw89_phy_cfo_track(struct rtw89_dev *rtwdev); 64262306a36Sopenharmony_civoid rtw89_phy_cfo_track_work(struct work_struct *work); 64362306a36Sopenharmony_civoid rtw89_phy_cfo_parse(struct rtw89_dev *rtwdev, s16 cfo_val, 64462306a36Sopenharmony_ci struct rtw89_rx_phy_ppdu *phy_ppdu); 64562306a36Sopenharmony_civoid rtw89_phy_stat_track(struct rtw89_dev *rtwdev); 64662306a36Sopenharmony_civoid rtw89_phy_env_monitor_track(struct rtw89_dev *rtwdev); 64762306a36Sopenharmony_civoid rtw89_phy_set_phy_regs(struct rtw89_dev *rtwdev, u32 addr, u32 mask, 64862306a36Sopenharmony_ci u32 val); 64962306a36Sopenharmony_civoid rtw89_phy_dig_reset(struct rtw89_dev *rtwdev); 65062306a36Sopenharmony_civoid rtw89_phy_dig(struct rtw89_dev *rtwdev); 65162306a36Sopenharmony_civoid rtw89_phy_tx_path_div_track(struct rtw89_dev *rtwdev); 65262306a36Sopenharmony_civoid rtw89_phy_antdiv_parse(struct rtw89_dev *rtwdev, 65362306a36Sopenharmony_ci struct rtw89_rx_phy_ppdu *phy_ppdu); 65462306a36Sopenharmony_civoid rtw89_phy_antdiv_track(struct rtw89_dev *rtwdev); 65562306a36Sopenharmony_civoid rtw89_phy_antdiv_work(struct work_struct *work); 65662306a36Sopenharmony_civoid rtw89_phy_set_bss_color(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif); 65762306a36Sopenharmony_civoid rtw89_phy_tssi_ctrl_set_bandedge_cfg(struct rtw89_dev *rtwdev, 65862306a36Sopenharmony_ci enum rtw89_mac_idx mac_idx, 65962306a36Sopenharmony_ci enum rtw89_tssi_bandedge_cfg bandedge_cfg); 66062306a36Sopenharmony_civoid rtw89_phy_ul_tb_assoc(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif); 66162306a36Sopenharmony_civoid rtw89_phy_ul_tb_ctrl_track(struct rtw89_dev *rtwdev); 66262306a36Sopenharmony_ciu8 rtw89_encode_chan_idx(struct rtw89_dev *rtwdev, u8 central_ch, u8 band); 66362306a36Sopenharmony_civoid rtw89_decode_chan_idx(struct rtw89_dev *rtwdev, u8 chan_idx, 66462306a36Sopenharmony_ci u8 *ch, enum nl80211_band *band); 66562306a36Sopenharmony_civoid rtw89_phy_config_edcca(struct rtw89_dev *rtwdev, bool scan); 66662306a36Sopenharmony_ci 66762306a36Sopenharmony_ci#endif 668