1*b4c3e9b5SBjoern A. Zeeb // SPDX-License-Identifier: ISC 2*b4c3e9b5SBjoern A. Zeeb /* 3*b4c3e9b5SBjoern A. Zeeb * Copyright (c) 2010 Broadcom Corporation 4*b4c3e9b5SBjoern A. Zeeb */ 5*b4c3e9b5SBjoern A. Zeeb 6*b4c3e9b5SBjoern A. Zeeb #ifndef _BRCM_PHY_INT_H_ 7*b4c3e9b5SBjoern A. Zeeb #define _BRCM_PHY_INT_H_ 8*b4c3e9b5SBjoern A. Zeeb 9*b4c3e9b5SBjoern A. Zeeb #include <types.h> 10*b4c3e9b5SBjoern A. Zeeb #include <brcmu_utils.h> 11*b4c3e9b5SBjoern A. Zeeb #include <brcmu_wifi.h> 12*b4c3e9b5SBjoern A. Zeeb 13*b4c3e9b5SBjoern A. Zeeb #define PHY_VERSION { 1, 82, 8, 0 } 14*b4c3e9b5SBjoern A. Zeeb 15*b4c3e9b5SBjoern A. Zeeb #define LCNXN_BASEREV 16 16*b4c3e9b5SBjoern A. Zeeb 17*b4c3e9b5SBjoern A. Zeeb struct phy_shim_info; 18*b4c3e9b5SBjoern A. Zeeb 19*b4c3e9b5SBjoern A. Zeeb struct brcms_phy_srom_fem { 20*b4c3e9b5SBjoern A. Zeeb /* TSSI positive slope, 1: positive, 0: negative */ 21*b4c3e9b5SBjoern A. Zeeb u8 tssipos; 22*b4c3e9b5SBjoern A. Zeeb /* Ext PA gain-type: full-gain: 0, pa-lite: 1, no_pa: 2 */ 23*b4c3e9b5SBjoern A. Zeeb u8 extpagain; 24*b4c3e9b5SBjoern A. Zeeb /* support 32 combinations of different Pdet dynamic ranges */ 25*b4c3e9b5SBjoern A. Zeeb u8 pdetrange; 26*b4c3e9b5SBjoern A. Zeeb /* TR switch isolation */ 27*b4c3e9b5SBjoern A. Zeeb u8 triso; 28*b4c3e9b5SBjoern A. Zeeb /* antswctrl lookup table configuration: 32 possible choices */ 29*b4c3e9b5SBjoern A. Zeeb u8 antswctrllut; 30*b4c3e9b5SBjoern A. Zeeb }; 31*b4c3e9b5SBjoern A. Zeeb 32*b4c3e9b5SBjoern A. Zeeb #define ISNPHY(pi) PHYTYPE_IS((pi)->pubpi.phy_type, PHY_TYPE_N) 33*b4c3e9b5SBjoern A. Zeeb #define ISLCNPHY(pi) PHYTYPE_IS((pi)->pubpi.phy_type, PHY_TYPE_LCN) 34*b4c3e9b5SBjoern A. Zeeb 35*b4c3e9b5SBjoern A. Zeeb #define PHY_GET_RFATTN(rfgain) ((rfgain) & 0x0f) 36*b4c3e9b5SBjoern A. Zeeb #define PHY_GET_PADMIX(rfgain) (((rfgain) & 0x10) >> 4) 37*b4c3e9b5SBjoern A. Zeeb #define PHY_GET_RFGAINID(rfattn, padmix, width) ((rfattn) + ((padmix)*(width))) 38*b4c3e9b5SBjoern A. Zeeb #define PHY_SAT(x, n) ((x) > ((1<<((n)-1))-1) ? ((1<<((n)-1))-1) : \ 39*b4c3e9b5SBjoern A. Zeeb ((x) < -(1<<((n)-1)) ? -(1<<((n)-1)) : (x))) 40*b4c3e9b5SBjoern A. Zeeb #define PHY_SHIFT_ROUND(x, n) ((x) >= 0 ? ((x)+(1<<((n)-1)))>>(n) : (x)>>(n)) 41*b4c3e9b5SBjoern A. Zeeb #define PHY_HW_ROUND(x, s) ((x >> s) + ((x >> (s-1)) & (s != 0))) 42*b4c3e9b5SBjoern A. Zeeb 43*b4c3e9b5SBjoern A. Zeeb #define CH_5G_GROUP 3 44*b4c3e9b5SBjoern A. Zeeb #define A_LOW_CHANS 0 45*b4c3e9b5SBjoern A. Zeeb #define A_MID_CHANS 1 46*b4c3e9b5SBjoern A. Zeeb #define A_HIGH_CHANS 2 47*b4c3e9b5SBjoern A. Zeeb #define CH_2G_GROUP 1 48*b4c3e9b5SBjoern A. Zeeb #define G_ALL_CHANS 0 49*b4c3e9b5SBjoern A. Zeeb 50*b4c3e9b5SBjoern A. Zeeb #define FIRST_REF5_CHANNUM 149 51*b4c3e9b5SBjoern A. Zeeb #define LAST_REF5_CHANNUM 165 52*b4c3e9b5SBjoern A. Zeeb #define FIRST_5G_CHAN 14 53*b4c3e9b5SBjoern A. Zeeb #define LAST_5G_CHAN 50 54*b4c3e9b5SBjoern A. Zeeb #define FIRST_MID_5G_CHAN 14 55*b4c3e9b5SBjoern A. Zeeb #define LAST_MID_5G_CHAN 35 56*b4c3e9b5SBjoern A. Zeeb #define FIRST_HIGH_5G_CHAN 36 57*b4c3e9b5SBjoern A. Zeeb #define LAST_HIGH_5G_CHAN 41 58*b4c3e9b5SBjoern A. Zeeb #define FIRST_LOW_5G_CHAN 42 59*b4c3e9b5SBjoern A. Zeeb #define LAST_LOW_5G_CHAN 50 60*b4c3e9b5SBjoern A. Zeeb 61*b4c3e9b5SBjoern A. Zeeb #define BASE_LOW_5G_CHAN 4900 62*b4c3e9b5SBjoern A. Zeeb #define BASE_MID_5G_CHAN 5100 63*b4c3e9b5SBjoern A. Zeeb #define BASE_HIGH_5G_CHAN 5500 64*b4c3e9b5SBjoern A. Zeeb 65*b4c3e9b5SBjoern A. Zeeb #define CHAN5G_FREQ(chan) (5000 + chan*5) 66*b4c3e9b5SBjoern A. Zeeb #define CHAN2G_FREQ(chan) (2407 + chan*5) 67*b4c3e9b5SBjoern A. Zeeb 68*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_CCK 0 69*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_CCK 3 70*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_OFDM 4 71*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_OFDM 11 72*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_OFDM_20_CDD 12 73*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_OFDM_20_CDD 19 74*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_MCS_20_SISO 20 75*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_MCS_20_SISO 27 76*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_MCS_20_CDD 28 77*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_MCS_20_CDD 35 78*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_MCS_20_STBC 36 79*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_MCS_20_STBC 43 80*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_MCS_20_SDM 44 81*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_MCS_20_SDM 51 82*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_OFDM_40_SISO 52 83*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_OFDM_40_SISO 59 84*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_OFDM_40_CDD 60 85*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_OFDM_40_CDD 67 86*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_MCS_40_SISO 68 87*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_MCS_40_SISO 75 88*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_MCS_40_CDD 76 89*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_MCS_40_CDD 83 90*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_MCS_40_STBC 84 91*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_MCS_40_STBC 91 92*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_MCS_40_SDM 92 93*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_MCS_40_SDM 99 94*b4c3e9b5SBjoern A. Zeeb #define TXP_MCS_32 100 95*b4c3e9b5SBjoern A. Zeeb #define TXP_NUM_RATES 101 96*b4c3e9b5SBjoern A. Zeeb #define ADJ_PWR_TBL_LEN 84 97*b4c3e9b5SBjoern A. Zeeb 98*b4c3e9b5SBjoern A. Zeeb #define TXP_FIRST_SISO_MCS_20 20 99*b4c3e9b5SBjoern A. Zeeb #define TXP_LAST_SISO_MCS_20 27 100*b4c3e9b5SBjoern A. Zeeb 101*b4c3e9b5SBjoern A. Zeeb #define PHY_CORE_NUM_1 1 102*b4c3e9b5SBjoern A. Zeeb #define PHY_CORE_NUM_2 2 103*b4c3e9b5SBjoern A. Zeeb #define PHY_CORE_NUM_3 3 104*b4c3e9b5SBjoern A. Zeeb #define PHY_CORE_NUM_4 4 105*b4c3e9b5SBjoern A. Zeeb #define PHY_CORE_MAX PHY_CORE_NUM_4 106*b4c3e9b5SBjoern A. Zeeb #define PHY_CORE_0 0 107*b4c3e9b5SBjoern A. Zeeb #define PHY_CORE_1 1 108*b4c3e9b5SBjoern A. Zeeb #define PHY_CORE_2 2 109*b4c3e9b5SBjoern A. Zeeb #define PHY_CORE_3 3 110*b4c3e9b5SBjoern A. Zeeb 111*b4c3e9b5SBjoern A. Zeeb #define MA_WINDOW_SZ 8 112*b4c3e9b5SBjoern A. Zeeb 113*b4c3e9b5SBjoern A. Zeeb #define PHY_NOISE_SAMPLE_MON 1 114*b4c3e9b5SBjoern A. Zeeb #define PHY_NOISE_SAMPLE_EXTERNAL 2 115*b4c3e9b5SBjoern A. Zeeb #define PHY_NOISE_WINDOW_SZ 16 116*b4c3e9b5SBjoern A. Zeeb #define PHY_NOISE_GLITCH_INIT_MA 10 117*b4c3e9b5SBjoern A. Zeeb #define PHY_NOISE_GLITCH_INIT_MA_BADPlCP 10 118*b4c3e9b5SBjoern A. Zeeb #define PHY_NOISE_STATE_MON 0x1 119*b4c3e9b5SBjoern A. Zeeb #define PHY_NOISE_STATE_EXTERNAL 0x2 120*b4c3e9b5SBjoern A. Zeeb #define PHY_NOISE_SAMPLE_LOG_NUM_NPHY 10 121*b4c3e9b5SBjoern A. Zeeb #define PHY_NOISE_SAMPLE_LOG_NUM_UCODE 9 122*b4c3e9b5SBjoern A. Zeeb 123*b4c3e9b5SBjoern A. Zeeb #define PHY_NOISE_OFFSETFACT_4322 (-103) 124*b4c3e9b5SBjoern A. Zeeb #define PHY_NOISE_MA_WINDOW_SZ 2 125*b4c3e9b5SBjoern A. Zeeb 126*b4c3e9b5SBjoern A. Zeeb #define PHY_RSSI_TABLE_SIZE 64 127*b4c3e9b5SBjoern A. Zeeb #define RSSI_ANT_MERGE_MAX 0 128*b4c3e9b5SBjoern A. Zeeb #define RSSI_ANT_MERGE_MIN 1 129*b4c3e9b5SBjoern A. Zeeb #define RSSI_ANT_MERGE_AVG 2 130*b4c3e9b5SBjoern A. Zeeb 131*b4c3e9b5SBjoern A. Zeeb #define PHY_TSSI_TABLE_SIZE 64 132*b4c3e9b5SBjoern A. Zeeb #define APHY_TSSI_TABLE_SIZE 256 133*b4c3e9b5SBjoern A. Zeeb #define TX_GAIN_TABLE_LENGTH 64 134*b4c3e9b5SBjoern A. Zeeb #define DEFAULT_11A_TXP_IDX 24 135*b4c3e9b5SBjoern A. Zeeb #define NUM_TSSI_FRAMES 4 136*b4c3e9b5SBjoern A. Zeeb #define NULL_TSSI 0x7f 137*b4c3e9b5SBjoern A. Zeeb #define NULL_TSSI_W 0x7f7f 138*b4c3e9b5SBjoern A. Zeeb 139*b4c3e9b5SBjoern A. Zeeb #define PHY_PAPD_EPS_TBL_SIZE_LCNPHY 64 140*b4c3e9b5SBjoern A. Zeeb 141*b4c3e9b5SBjoern A. Zeeb #define LCNPHY_PERICAL_TEMPBASED_TXPWRCTRL 9 142*b4c3e9b5SBjoern A. Zeeb 143*b4c3e9b5SBjoern A. Zeeb #define PHY_TXPWR_MIN 10 144*b4c3e9b5SBjoern A. Zeeb #define PHY_TXPWR_MIN_NPHY 8 145*b4c3e9b5SBjoern A. Zeeb #define RADIOPWR_OVERRIDE_DEF (-1) 146*b4c3e9b5SBjoern A. Zeeb 147*b4c3e9b5SBjoern A. Zeeb #define PWRTBL_NUM_COEFF 3 148*b4c3e9b5SBjoern A. Zeeb 149*b4c3e9b5SBjoern A. Zeeb #define SPURAVOID_DISABLE 0 150*b4c3e9b5SBjoern A. Zeeb #define SPURAVOID_AUTO 1 151*b4c3e9b5SBjoern A. Zeeb #define SPURAVOID_FORCEON 2 152*b4c3e9b5SBjoern A. Zeeb #define SPURAVOID_FORCEON2 3 153*b4c3e9b5SBjoern A. Zeeb 154*b4c3e9b5SBjoern A. Zeeb #define PHY_SW_TIMER_FAST 15 155*b4c3e9b5SBjoern A. Zeeb #define PHY_SW_TIMER_SLOW 60 156*b4c3e9b5SBjoern A. Zeeb #define PHY_SW_TIMER_GLACIAL 120 157*b4c3e9b5SBjoern A. Zeeb 158*b4c3e9b5SBjoern A. Zeeb #define PHY_PERICAL_AUTO 0 159*b4c3e9b5SBjoern A. Zeeb #define PHY_PERICAL_FULL 1 160*b4c3e9b5SBjoern A. Zeeb #define PHY_PERICAL_PARTIAL 2 161*b4c3e9b5SBjoern A. Zeeb 162*b4c3e9b5SBjoern A. Zeeb #define PHY_PERICAL_NODELAY 0 163*b4c3e9b5SBjoern A. Zeeb #define PHY_PERICAL_INIT_DELAY 5 164*b4c3e9b5SBjoern A. Zeeb #define PHY_PERICAL_ASSOC_DELAY 5 165*b4c3e9b5SBjoern A. Zeeb #define PHY_PERICAL_WDOG_DELAY 5 166*b4c3e9b5SBjoern A. Zeeb 167*b4c3e9b5SBjoern A. Zeeb #define MPHASE_TXCAL_NUMCMDS 2 168*b4c3e9b5SBjoern A. Zeeb 169*b4c3e9b5SBjoern A. Zeeb #define PHY_PERICAL_MPHASE_PENDING(pi) \ 170*b4c3e9b5SBjoern A. Zeeb (pi->mphase_cal_phase_id > MPHASE_CAL_STATE_IDLE) 171*b4c3e9b5SBjoern A. Zeeb 172*b4c3e9b5SBjoern A. Zeeb enum { 173*b4c3e9b5SBjoern A. Zeeb MPHASE_CAL_STATE_IDLE = 0, 174*b4c3e9b5SBjoern A. Zeeb MPHASE_CAL_STATE_INIT = 1, 175*b4c3e9b5SBjoern A. Zeeb MPHASE_CAL_STATE_TXPHASE0, 176*b4c3e9b5SBjoern A. Zeeb MPHASE_CAL_STATE_TXPHASE1, 177*b4c3e9b5SBjoern A. Zeeb MPHASE_CAL_STATE_TXPHASE2, 178*b4c3e9b5SBjoern A. Zeeb MPHASE_CAL_STATE_TXPHASE3, 179*b4c3e9b5SBjoern A. Zeeb MPHASE_CAL_STATE_TXPHASE4, 180*b4c3e9b5SBjoern A. Zeeb MPHASE_CAL_STATE_TXPHASE5, 181*b4c3e9b5SBjoern A. Zeeb MPHASE_CAL_STATE_PAPDCAL, 182*b4c3e9b5SBjoern A. Zeeb MPHASE_CAL_STATE_RXCAL, 183*b4c3e9b5SBjoern A. Zeeb MPHASE_CAL_STATE_RSSICAL, 184*b4c3e9b5SBjoern A. Zeeb MPHASE_CAL_STATE_IDLETSSI 185*b4c3e9b5SBjoern A. Zeeb }; 186*b4c3e9b5SBjoern A. Zeeb 187*b4c3e9b5SBjoern A. Zeeb enum phy_cal_mode { 188*b4c3e9b5SBjoern A. Zeeb CAL_FULL, 189*b4c3e9b5SBjoern A. Zeeb CAL_RECAL, 190*b4c3e9b5SBjoern A. Zeeb CAL_CURRECAL, 191*b4c3e9b5SBjoern A. Zeeb CAL_DIGCAL, 192*b4c3e9b5SBjoern A. Zeeb CAL_GCTRL, 193*b4c3e9b5SBjoern A. Zeeb CAL_SOFT, 194*b4c3e9b5SBjoern A. Zeeb CAL_DIGLO 195*b4c3e9b5SBjoern A. Zeeb }; 196*b4c3e9b5SBjoern A. Zeeb 197*b4c3e9b5SBjoern A. Zeeb #define RDR_NTIERS 1 198*b4c3e9b5SBjoern A. Zeeb #define RDR_TIER_SIZE 64 199*b4c3e9b5SBjoern A. Zeeb #define RDR_LIST_SIZE (512/3) 200*b4c3e9b5SBjoern A. Zeeb #define RDR_EPOCH_SIZE 40 201*b4c3e9b5SBjoern A. Zeeb #define RDR_NANTENNAS 2 202*b4c3e9b5SBjoern A. Zeeb #define RDR_NTIER_SIZE RDR_LIST_SIZE 203*b4c3e9b5SBjoern A. Zeeb #define RDR_LP_BUFFER_SIZE 64 204*b4c3e9b5SBjoern A. Zeeb #define LP_LEN_HIS_SIZE 10 205*b4c3e9b5SBjoern A. Zeeb 206*b4c3e9b5SBjoern A. Zeeb #define STATIC_NUM_RF 32 207*b4c3e9b5SBjoern A. Zeeb #define STATIC_NUM_BB 9 208*b4c3e9b5SBjoern A. Zeeb 209*b4c3e9b5SBjoern A. Zeeb #define BB_MULT_MASK 0x0000ffff 210*b4c3e9b5SBjoern A. Zeeb #define BB_MULT_VALID_MASK 0x80000000 211*b4c3e9b5SBjoern A. Zeeb 212*b4c3e9b5SBjoern A. Zeeb #define PHY_CHAIN_TX_DISABLE_TEMP 115 213*b4c3e9b5SBjoern A. Zeeb #define PHY_HYSTERESIS_DELTATEMP 5 214*b4c3e9b5SBjoern A. Zeeb 215*b4c3e9b5SBjoern A. Zeeb #define SCAN_INPROG_PHY(pi) \ 216*b4c3e9b5SBjoern A. Zeeb (mboolisset(pi->measure_hold, PHY_HOLD_FOR_SCAN)) 217*b4c3e9b5SBjoern A. Zeeb 218*b4c3e9b5SBjoern A. Zeeb #define PLT_INPROG_PHY(pi) (mboolisset(pi->measure_hold, PHY_HOLD_FOR_PLT)) 219*b4c3e9b5SBjoern A. Zeeb 220*b4c3e9b5SBjoern A. Zeeb #define ASSOC_INPROG_PHY(pi) \ 221*b4c3e9b5SBjoern A. Zeeb (mboolisset(pi->measure_hold, PHY_HOLD_FOR_ASSOC)) 222*b4c3e9b5SBjoern A. Zeeb 223*b4c3e9b5SBjoern A. Zeeb #define SCAN_RM_IN_PROGRESS(pi) \ 224*b4c3e9b5SBjoern A. Zeeb (mboolisset(pi->measure_hold, PHY_HOLD_FOR_SCAN | PHY_HOLD_FOR_RM)) 225*b4c3e9b5SBjoern A. Zeeb 226*b4c3e9b5SBjoern A. Zeeb #define PHY_MUTED(pi) \ 227*b4c3e9b5SBjoern A. Zeeb (mboolisset(pi->measure_hold, PHY_HOLD_FOR_MUTE)) 228*b4c3e9b5SBjoern A. Zeeb 229*b4c3e9b5SBjoern A. Zeeb #define PUB_NOT_ASSOC(pi) \ 230*b4c3e9b5SBjoern A. Zeeb (mboolisset(pi->measure_hold, PHY_HOLD_FOR_NOT_ASSOC)) 231*b4c3e9b5SBjoern A. Zeeb 232*b4c3e9b5SBjoern A. Zeeb struct phy_table_info { 233*b4c3e9b5SBjoern A. Zeeb uint table; 234*b4c3e9b5SBjoern A. Zeeb int q; 235*b4c3e9b5SBjoern A. Zeeb uint max; 236*b4c3e9b5SBjoern A. Zeeb }; 237*b4c3e9b5SBjoern A. Zeeb 238*b4c3e9b5SBjoern A. Zeeb struct phytbl_info { 239*b4c3e9b5SBjoern A. Zeeb const void *tbl_ptr; 240*b4c3e9b5SBjoern A. Zeeb u32 tbl_len; 241*b4c3e9b5SBjoern A. Zeeb u32 tbl_id; 242*b4c3e9b5SBjoern A. Zeeb u32 tbl_offset; 243*b4c3e9b5SBjoern A. Zeeb u32 tbl_width; 244*b4c3e9b5SBjoern A. Zeeb }; 245*b4c3e9b5SBjoern A. Zeeb 246*b4c3e9b5SBjoern A. Zeeb struct interference_info { 247*b4c3e9b5SBjoern A. Zeeb u8 curr_home_channel; 248*b4c3e9b5SBjoern A. Zeeb u16 crsminpwrthld_40_stored; 249*b4c3e9b5SBjoern A. Zeeb u16 crsminpwrthld_20L_stored; 250*b4c3e9b5SBjoern A. Zeeb u16 crsminpwrthld_20U_stored; 251*b4c3e9b5SBjoern A. Zeeb u16 init_gain_code_core1_stored; 252*b4c3e9b5SBjoern A. Zeeb u16 init_gain_code_core2_stored; 253*b4c3e9b5SBjoern A. Zeeb u16 init_gain_codeb_core1_stored; 254*b4c3e9b5SBjoern A. Zeeb u16 init_gain_codeb_core2_stored; 255*b4c3e9b5SBjoern A. Zeeb u16 init_gain_table_stored[4]; 256*b4c3e9b5SBjoern A. Zeeb 257*b4c3e9b5SBjoern A. Zeeb u16 clip1_hi_gain_code_core1_stored; 258*b4c3e9b5SBjoern A. Zeeb u16 clip1_hi_gain_code_core2_stored; 259*b4c3e9b5SBjoern A. Zeeb u16 clip1_hi_gain_codeb_core1_stored; 260*b4c3e9b5SBjoern A. Zeeb u16 clip1_hi_gain_codeb_core2_stored; 261*b4c3e9b5SBjoern A. Zeeb u16 nb_clip_thresh_core1_stored; 262*b4c3e9b5SBjoern A. Zeeb u16 nb_clip_thresh_core2_stored; 263*b4c3e9b5SBjoern A. Zeeb u16 init_ofdmlna2gainchange_stored[4]; 264*b4c3e9b5SBjoern A. Zeeb u16 init_ccklna2gainchange_stored[4]; 265*b4c3e9b5SBjoern A. Zeeb u16 clip1_lo_gain_code_core1_stored; 266*b4c3e9b5SBjoern A. Zeeb u16 clip1_lo_gain_code_core2_stored; 267*b4c3e9b5SBjoern A. Zeeb u16 clip1_lo_gain_codeb_core1_stored; 268*b4c3e9b5SBjoern A. Zeeb u16 clip1_lo_gain_codeb_core2_stored; 269*b4c3e9b5SBjoern A. Zeeb u16 w1_clip_thresh_core1_stored; 270*b4c3e9b5SBjoern A. Zeeb u16 w1_clip_thresh_core2_stored; 271*b4c3e9b5SBjoern A. Zeeb u16 radio_2056_core1_rssi_gain_stored; 272*b4c3e9b5SBjoern A. Zeeb u16 radio_2056_core2_rssi_gain_stored; 273*b4c3e9b5SBjoern A. Zeeb u16 energy_drop_timeout_len_stored; 274*b4c3e9b5SBjoern A. Zeeb 275*b4c3e9b5SBjoern A. Zeeb u16 ed_crs40_assertthld0_stored; 276*b4c3e9b5SBjoern A. Zeeb u16 ed_crs40_assertthld1_stored; 277*b4c3e9b5SBjoern A. Zeeb u16 ed_crs40_deassertthld0_stored; 278*b4c3e9b5SBjoern A. Zeeb u16 ed_crs40_deassertthld1_stored; 279*b4c3e9b5SBjoern A. Zeeb u16 ed_crs20L_assertthld0_stored; 280*b4c3e9b5SBjoern A. Zeeb u16 ed_crs20L_assertthld1_stored; 281*b4c3e9b5SBjoern A. Zeeb u16 ed_crs20L_deassertthld0_stored; 282*b4c3e9b5SBjoern A. Zeeb u16 ed_crs20L_deassertthld1_stored; 283*b4c3e9b5SBjoern A. Zeeb u16 ed_crs20U_assertthld0_stored; 284*b4c3e9b5SBjoern A. Zeeb u16 ed_crs20U_assertthld1_stored; 285*b4c3e9b5SBjoern A. Zeeb u16 ed_crs20U_deassertthld0_stored; 286*b4c3e9b5SBjoern A. Zeeb u16 ed_crs20U_deassertthld1_stored; 287*b4c3e9b5SBjoern A. Zeeb 288*b4c3e9b5SBjoern A. Zeeb u16 badplcp_ma; 289*b4c3e9b5SBjoern A. Zeeb u16 badplcp_ma_previous; 290*b4c3e9b5SBjoern A. Zeeb u16 badplcp_ma_total; 291*b4c3e9b5SBjoern A. Zeeb u16 badplcp_ma_list[MA_WINDOW_SZ]; 292*b4c3e9b5SBjoern A. Zeeb int badplcp_ma_index; 293*b4c3e9b5SBjoern A. Zeeb s16 pre_badplcp_cnt; 294*b4c3e9b5SBjoern A. Zeeb s16 bphy_pre_badplcp_cnt; 295*b4c3e9b5SBjoern A. Zeeb 296*b4c3e9b5SBjoern A. Zeeb u16 init_gain_core1; 297*b4c3e9b5SBjoern A. Zeeb u16 init_gain_core2; 298*b4c3e9b5SBjoern A. Zeeb u16 init_gainb_core1; 299*b4c3e9b5SBjoern A. Zeeb u16 init_gainb_core2; 300*b4c3e9b5SBjoern A. Zeeb u16 init_gain_rfseq[4]; 301*b4c3e9b5SBjoern A. Zeeb 302*b4c3e9b5SBjoern A. Zeeb u16 crsminpwr0; 303*b4c3e9b5SBjoern A. Zeeb u16 crsminpwrl0; 304*b4c3e9b5SBjoern A. Zeeb u16 crsminpwru0; 305*b4c3e9b5SBjoern A. Zeeb 306*b4c3e9b5SBjoern A. Zeeb s16 crsminpwr_index; 307*b4c3e9b5SBjoern A. Zeeb 308*b4c3e9b5SBjoern A. Zeeb u16 radio_2057_core1_rssi_wb1a_gc_stored; 309*b4c3e9b5SBjoern A. Zeeb u16 radio_2057_core2_rssi_wb1a_gc_stored; 310*b4c3e9b5SBjoern A. Zeeb u16 radio_2057_core1_rssi_wb1g_gc_stored; 311*b4c3e9b5SBjoern A. Zeeb u16 radio_2057_core2_rssi_wb1g_gc_stored; 312*b4c3e9b5SBjoern A. Zeeb u16 radio_2057_core1_rssi_wb2_gc_stored; 313*b4c3e9b5SBjoern A. Zeeb u16 radio_2057_core2_rssi_wb2_gc_stored; 314*b4c3e9b5SBjoern A. Zeeb u16 radio_2057_core1_rssi_nb_gc_stored; 315*b4c3e9b5SBjoern A. Zeeb u16 radio_2057_core2_rssi_nb_gc_stored; 316*b4c3e9b5SBjoern A. Zeeb }; 317*b4c3e9b5SBjoern A. Zeeb 318*b4c3e9b5SBjoern A. Zeeb struct aci_save_gphy { 319*b4c3e9b5SBjoern A. Zeeb u16 rc_cal_ovr; 320*b4c3e9b5SBjoern A. Zeeb u16 phycrsth1; 321*b4c3e9b5SBjoern A. Zeeb u16 phycrsth2; 322*b4c3e9b5SBjoern A. Zeeb u16 init_n1p1_gain; 323*b4c3e9b5SBjoern A. Zeeb u16 p1_p2_gain; 324*b4c3e9b5SBjoern A. Zeeb u16 n1_n2_gain; 325*b4c3e9b5SBjoern A. Zeeb u16 n1_p1_gain; 326*b4c3e9b5SBjoern A. Zeeb u16 div_search_gain; 327*b4c3e9b5SBjoern A. Zeeb u16 div_p1_p2_gain; 328*b4c3e9b5SBjoern A. Zeeb u16 div_search_gn_change; 329*b4c3e9b5SBjoern A. Zeeb u16 table_7_2; 330*b4c3e9b5SBjoern A. Zeeb u16 table_7_3; 331*b4c3e9b5SBjoern A. Zeeb u16 cckshbits_gnref; 332*b4c3e9b5SBjoern A. Zeeb u16 clip_thresh; 333*b4c3e9b5SBjoern A. Zeeb u16 clip2_thresh; 334*b4c3e9b5SBjoern A. Zeeb u16 clip3_thresh; 335*b4c3e9b5SBjoern A. Zeeb u16 clip_p2_thresh; 336*b4c3e9b5SBjoern A. Zeeb u16 clip_pwdn_thresh; 337*b4c3e9b5SBjoern A. Zeeb u16 clip_n1p1_thresh; 338*b4c3e9b5SBjoern A. Zeeb u16 clip_n1_pwdn_thresh; 339*b4c3e9b5SBjoern A. Zeeb u16 bbconfig; 340*b4c3e9b5SBjoern A. Zeeb u16 cthr_sthr_shdin; 341*b4c3e9b5SBjoern A. Zeeb u16 energy; 342*b4c3e9b5SBjoern A. Zeeb u16 clip_p1_p2_thresh; 343*b4c3e9b5SBjoern A. Zeeb u16 threshold; 344*b4c3e9b5SBjoern A. Zeeb u16 reg15; 345*b4c3e9b5SBjoern A. Zeeb u16 reg16; 346*b4c3e9b5SBjoern A. Zeeb u16 reg17; 347*b4c3e9b5SBjoern A. Zeeb u16 div_srch_idx; 348*b4c3e9b5SBjoern A. Zeeb u16 div_srch_p1_p2; 349*b4c3e9b5SBjoern A. Zeeb u16 div_srch_gn_back; 350*b4c3e9b5SBjoern A. Zeeb u16 ant_dwell; 351*b4c3e9b5SBjoern A. Zeeb u16 ant_wr_settle; 352*b4c3e9b5SBjoern A. Zeeb }; 353*b4c3e9b5SBjoern A. Zeeb 354*b4c3e9b5SBjoern A. Zeeb struct lo_complex_abgphy_info { 355*b4c3e9b5SBjoern A. Zeeb s8 i; 356*b4c3e9b5SBjoern A. Zeeb s8 q; 357*b4c3e9b5SBjoern A. Zeeb }; 358*b4c3e9b5SBjoern A. Zeeb 359*b4c3e9b5SBjoern A. Zeeb struct nphy_iq_comp { 360*b4c3e9b5SBjoern A. Zeeb s16 a0; 361*b4c3e9b5SBjoern A. Zeeb s16 b0; 362*b4c3e9b5SBjoern A. Zeeb s16 a1; 363*b4c3e9b5SBjoern A. Zeeb s16 b1; 364*b4c3e9b5SBjoern A. Zeeb }; 365*b4c3e9b5SBjoern A. Zeeb 366*b4c3e9b5SBjoern A. Zeeb struct nphy_txpwrindex { 367*b4c3e9b5SBjoern A. Zeeb s8 index; 368*b4c3e9b5SBjoern A. Zeeb s8 index_internal; 369*b4c3e9b5SBjoern A. Zeeb s8 index_internal_save; 370*b4c3e9b5SBjoern A. Zeeb u16 AfectrlOverride; 371*b4c3e9b5SBjoern A. Zeeb u16 AfeCtrlDacGain; 372*b4c3e9b5SBjoern A. Zeeb u16 rad_gain; 373*b4c3e9b5SBjoern A. Zeeb u8 bbmult; 374*b4c3e9b5SBjoern A. Zeeb u16 iqcomp_a; 375*b4c3e9b5SBjoern A. Zeeb u16 iqcomp_b; 376*b4c3e9b5SBjoern A. Zeeb u16 locomp; 377*b4c3e9b5SBjoern A. Zeeb }; 378*b4c3e9b5SBjoern A. Zeeb 379*b4c3e9b5SBjoern A. Zeeb struct txiqcal_cache { 380*b4c3e9b5SBjoern A. Zeeb 381*b4c3e9b5SBjoern A. Zeeb u16 txcal_coeffs_2G[8]; 382*b4c3e9b5SBjoern A. Zeeb u16 txcal_radio_regs_2G[8]; 383*b4c3e9b5SBjoern A. Zeeb struct nphy_iq_comp rxcal_coeffs_2G; 384*b4c3e9b5SBjoern A. Zeeb 385*b4c3e9b5SBjoern A. Zeeb u16 txcal_coeffs_5G[8]; 386*b4c3e9b5SBjoern A. Zeeb u16 txcal_radio_regs_5G[8]; 387*b4c3e9b5SBjoern A. Zeeb struct nphy_iq_comp rxcal_coeffs_5G; 388*b4c3e9b5SBjoern A. Zeeb }; 389*b4c3e9b5SBjoern A. Zeeb 390*b4c3e9b5SBjoern A. Zeeb struct nphy_pwrctrl { 391*b4c3e9b5SBjoern A. Zeeb s8 max_pwr_2g; 392*b4c3e9b5SBjoern A. Zeeb s8 idle_targ_2g; 393*b4c3e9b5SBjoern A. Zeeb s16 pwrdet_2g_a1; 394*b4c3e9b5SBjoern A. Zeeb s16 pwrdet_2g_b0; 395*b4c3e9b5SBjoern A. Zeeb s16 pwrdet_2g_b1; 396*b4c3e9b5SBjoern A. Zeeb s8 max_pwr_5gm; 397*b4c3e9b5SBjoern A. Zeeb s8 idle_targ_5gm; 398*b4c3e9b5SBjoern A. Zeeb s8 max_pwr_5gh; 399*b4c3e9b5SBjoern A. Zeeb s8 max_pwr_5gl; 400*b4c3e9b5SBjoern A. Zeeb s16 pwrdet_5gm_a1; 401*b4c3e9b5SBjoern A. Zeeb s16 pwrdet_5gm_b0; 402*b4c3e9b5SBjoern A. Zeeb s16 pwrdet_5gm_b1; 403*b4c3e9b5SBjoern A. Zeeb s16 pwrdet_5gl_a1; 404*b4c3e9b5SBjoern A. Zeeb s16 pwrdet_5gl_b0; 405*b4c3e9b5SBjoern A. Zeeb s16 pwrdet_5gl_b1; 406*b4c3e9b5SBjoern A. Zeeb s16 pwrdet_5gh_a1; 407*b4c3e9b5SBjoern A. Zeeb s16 pwrdet_5gh_b0; 408*b4c3e9b5SBjoern A. Zeeb s16 pwrdet_5gh_b1; 409*b4c3e9b5SBjoern A. Zeeb s8 idle_targ_5gl; 410*b4c3e9b5SBjoern A. Zeeb s8 idle_targ_5gh; 411*b4c3e9b5SBjoern A. Zeeb s8 idle_tssi_2g; 412*b4c3e9b5SBjoern A. Zeeb s8 idle_tssi_5g; 413*b4c3e9b5SBjoern A. Zeeb s8 idle_tssi; 414*b4c3e9b5SBjoern A. Zeeb s16 a1; 415*b4c3e9b5SBjoern A. Zeeb s16 b0; 416*b4c3e9b5SBjoern A. Zeeb s16 b1; 417*b4c3e9b5SBjoern A. Zeeb }; 418*b4c3e9b5SBjoern A. Zeeb 419*b4c3e9b5SBjoern A. Zeeb struct nphy_txgains { 420*b4c3e9b5SBjoern A. Zeeb u16 txlpf[2]; 421*b4c3e9b5SBjoern A. Zeeb u16 txgm[2]; 422*b4c3e9b5SBjoern A. Zeeb u16 pga[2]; 423*b4c3e9b5SBjoern A. Zeeb u16 pad[2]; 424*b4c3e9b5SBjoern A. Zeeb u16 ipa[2]; 425*b4c3e9b5SBjoern A. Zeeb }; 426*b4c3e9b5SBjoern A. Zeeb 427*b4c3e9b5SBjoern A. Zeeb #define PHY_NOISEVAR_BUFSIZE 10 428*b4c3e9b5SBjoern A. Zeeb 429*b4c3e9b5SBjoern A. Zeeb struct nphy_noisevar_buf { 430*b4c3e9b5SBjoern A. Zeeb int bufcount; 431*b4c3e9b5SBjoern A. Zeeb int tone_id[PHY_NOISEVAR_BUFSIZE]; 432*b4c3e9b5SBjoern A. Zeeb u32 noise_vars[PHY_NOISEVAR_BUFSIZE]; 433*b4c3e9b5SBjoern A. Zeeb u32 min_noise_vars[PHY_NOISEVAR_BUFSIZE]; 434*b4c3e9b5SBjoern A. Zeeb }; 435*b4c3e9b5SBjoern A. Zeeb 436*b4c3e9b5SBjoern A. Zeeb struct rssical_cache { 437*b4c3e9b5SBjoern A. Zeeb u16 rssical_radio_regs_2G[2]; 438*b4c3e9b5SBjoern A. Zeeb u16 rssical_phyregs_2G[12]; 439*b4c3e9b5SBjoern A. Zeeb 440*b4c3e9b5SBjoern A. Zeeb u16 rssical_radio_regs_5G[2]; 441*b4c3e9b5SBjoern A. Zeeb u16 rssical_phyregs_5G[12]; 442*b4c3e9b5SBjoern A. Zeeb }; 443*b4c3e9b5SBjoern A. Zeeb 444*b4c3e9b5SBjoern A. Zeeb struct lcnphy_cal_results { 445*b4c3e9b5SBjoern A. Zeeb 446*b4c3e9b5SBjoern A. Zeeb u16 txiqlocal_a; 447*b4c3e9b5SBjoern A. Zeeb u16 txiqlocal_b; 448*b4c3e9b5SBjoern A. Zeeb u16 txiqlocal_didq; 449*b4c3e9b5SBjoern A. Zeeb u8 txiqlocal_ei0; 450*b4c3e9b5SBjoern A. Zeeb u8 txiqlocal_eq0; 451*b4c3e9b5SBjoern A. Zeeb u8 txiqlocal_fi0; 452*b4c3e9b5SBjoern A. Zeeb u8 txiqlocal_fq0; 453*b4c3e9b5SBjoern A. Zeeb 454*b4c3e9b5SBjoern A. Zeeb u16 txiqlocal_bestcoeffs[11]; 455*b4c3e9b5SBjoern A. Zeeb u16 txiqlocal_bestcoeffs_valid; 456*b4c3e9b5SBjoern A. Zeeb 457*b4c3e9b5SBjoern A. Zeeb u32 papd_eps_tbl[PHY_PAPD_EPS_TBL_SIZE_LCNPHY]; 458*b4c3e9b5SBjoern A. Zeeb u16 analog_gain_ref; 459*b4c3e9b5SBjoern A. Zeeb u16 lut_begin; 460*b4c3e9b5SBjoern A. Zeeb u16 lut_end; 461*b4c3e9b5SBjoern A. Zeeb u16 lut_step; 462*b4c3e9b5SBjoern A. Zeeb u16 rxcompdbm; 463*b4c3e9b5SBjoern A. Zeeb u16 papdctrl; 464*b4c3e9b5SBjoern A. Zeeb u16 sslpnCalibClkEnCtrl; 465*b4c3e9b5SBjoern A. Zeeb 466*b4c3e9b5SBjoern A. Zeeb u16 rxiqcal_coeff_a0; 467*b4c3e9b5SBjoern A. Zeeb u16 rxiqcal_coeff_b0; 468*b4c3e9b5SBjoern A. Zeeb }; 469*b4c3e9b5SBjoern A. Zeeb 470*b4c3e9b5SBjoern A. Zeeb struct shared_phy { 471*b4c3e9b5SBjoern A. Zeeb struct brcms_phy *phy_head; 472*b4c3e9b5SBjoern A. Zeeb uint unit; 473*b4c3e9b5SBjoern A. Zeeb struct phy_shim_info *physhim; 474*b4c3e9b5SBjoern A. Zeeb uint corerev; 475*b4c3e9b5SBjoern A. Zeeb u32 machwcap; 476*b4c3e9b5SBjoern A. Zeeb bool up; 477*b4c3e9b5SBjoern A. Zeeb bool clk; 478*b4c3e9b5SBjoern A. Zeeb uint now; 479*b4c3e9b5SBjoern A. Zeeb u16 vid; 480*b4c3e9b5SBjoern A. Zeeb u16 did; 481*b4c3e9b5SBjoern A. Zeeb uint chip; 482*b4c3e9b5SBjoern A. Zeeb uint chiprev; 483*b4c3e9b5SBjoern A. Zeeb uint chippkg; 484*b4c3e9b5SBjoern A. Zeeb uint sromrev; 485*b4c3e9b5SBjoern A. Zeeb uint boardtype; 486*b4c3e9b5SBjoern A. Zeeb uint boardrev; 487*b4c3e9b5SBjoern A. Zeeb u32 boardflags; 488*b4c3e9b5SBjoern A. Zeeb u32 boardflags2; 489*b4c3e9b5SBjoern A. Zeeb uint fast_timer; 490*b4c3e9b5SBjoern A. Zeeb uint slow_timer; 491*b4c3e9b5SBjoern A. Zeeb uint glacial_timer; 492*b4c3e9b5SBjoern A. Zeeb u8 rx_antdiv; 493*b4c3e9b5SBjoern A. Zeeb s8 phy_noise_window[MA_WINDOW_SZ]; 494*b4c3e9b5SBjoern A. Zeeb uint phy_noise_index; 495*b4c3e9b5SBjoern A. Zeeb u8 hw_phytxchain; 496*b4c3e9b5SBjoern A. Zeeb u8 hw_phyrxchain; 497*b4c3e9b5SBjoern A. Zeeb u8 phytxchain; 498*b4c3e9b5SBjoern A. Zeeb u8 phyrxchain; 499*b4c3e9b5SBjoern A. Zeeb u8 rssi_mode; 500*b4c3e9b5SBjoern A. Zeeb bool _rifs_phy; 501*b4c3e9b5SBjoern A. Zeeb }; 502*b4c3e9b5SBjoern A. Zeeb 503*b4c3e9b5SBjoern A. Zeeb struct brcms_phy_pub { 504*b4c3e9b5SBjoern A. Zeeb uint phy_type; 505*b4c3e9b5SBjoern A. Zeeb uint phy_rev; 506*b4c3e9b5SBjoern A. Zeeb u8 phy_corenum; 507*b4c3e9b5SBjoern A. Zeeb u16 radioid; 508*b4c3e9b5SBjoern A. Zeeb u8 radiorev; 509*b4c3e9b5SBjoern A. Zeeb u8 radiover; 510*b4c3e9b5SBjoern A. Zeeb 511*b4c3e9b5SBjoern A. Zeeb uint coreflags; 512*b4c3e9b5SBjoern A. Zeeb uint ana_rev; 513*b4c3e9b5SBjoern A. Zeeb bool abgphy_encore; 514*b4c3e9b5SBjoern A. Zeeb }; 515*b4c3e9b5SBjoern A. Zeeb 516*b4c3e9b5SBjoern A. Zeeb struct phy_func_ptr { 517*b4c3e9b5SBjoern A. Zeeb void (*init)(struct brcms_phy *); 518*b4c3e9b5SBjoern A. Zeeb void (*calinit)(struct brcms_phy *); 519*b4c3e9b5SBjoern A. Zeeb void (*chanset)(struct brcms_phy *, u16 chanspec); 520*b4c3e9b5SBjoern A. Zeeb void (*txpwrrecalc)(struct brcms_phy *); 521*b4c3e9b5SBjoern A. Zeeb int (*longtrn)(struct brcms_phy *, int); 522*b4c3e9b5SBjoern A. Zeeb void (*txiqccget)(struct brcms_phy *, u16 *, u16 *); 523*b4c3e9b5SBjoern A. Zeeb void (*txiqccset)(struct brcms_phy *, u16, u16); 524*b4c3e9b5SBjoern A. Zeeb u16 (*txloccget)(struct brcms_phy *); 525*b4c3e9b5SBjoern A. Zeeb void (*radioloftget)(struct brcms_phy *, u8 *, u8 *, u8 *, u8 *); 526*b4c3e9b5SBjoern A. Zeeb void (*carrsuppr)(struct brcms_phy *); 527*b4c3e9b5SBjoern A. Zeeb s32 (*rxsigpwr)(struct brcms_phy *, s32); 528*b4c3e9b5SBjoern A. Zeeb void (*detach)(struct brcms_phy *); 529*b4c3e9b5SBjoern A. Zeeb }; 530*b4c3e9b5SBjoern A. Zeeb 531*b4c3e9b5SBjoern A. Zeeb struct brcms_phy { 532*b4c3e9b5SBjoern A. Zeeb struct brcms_phy_pub pubpi_ro; 533*b4c3e9b5SBjoern A. Zeeb struct shared_phy *sh; 534*b4c3e9b5SBjoern A. Zeeb struct phy_func_ptr pi_fptr; 535*b4c3e9b5SBjoern A. Zeeb 536*b4c3e9b5SBjoern A. Zeeb union { 537*b4c3e9b5SBjoern A. Zeeb struct brcms_phy_lcnphy *pi_lcnphy; 538*b4c3e9b5SBjoern A. Zeeb } u; 539*b4c3e9b5SBjoern A. Zeeb bool user_txpwr_at_rfport; 540*b4c3e9b5SBjoern A. Zeeb 541*b4c3e9b5SBjoern A. Zeeb struct bcma_device *d11core; 542*b4c3e9b5SBjoern A. Zeeb struct brcms_phy *next; 543*b4c3e9b5SBjoern A. Zeeb struct brcms_phy_pub pubpi; 544*b4c3e9b5SBjoern A. Zeeb 545*b4c3e9b5SBjoern A. Zeeb bool do_initcal; 546*b4c3e9b5SBjoern A. Zeeb bool phytest_on; 547*b4c3e9b5SBjoern A. Zeeb bool ofdm_rateset_war; 548*b4c3e9b5SBjoern A. Zeeb bool bf_preempt_4306; 549*b4c3e9b5SBjoern A. Zeeb u16 radio_chanspec; 550*b4c3e9b5SBjoern A. Zeeb u8 antsel_type; 551*b4c3e9b5SBjoern A. Zeeb u16 bw; 552*b4c3e9b5SBjoern A. Zeeb u8 txpwr_percent; 553*b4c3e9b5SBjoern A. Zeeb bool phy_init_por; 554*b4c3e9b5SBjoern A. Zeeb 555*b4c3e9b5SBjoern A. Zeeb bool init_in_progress; 556*b4c3e9b5SBjoern A. Zeeb bool initialized; 557*b4c3e9b5SBjoern A. Zeeb bool sbtml_gm; 558*b4c3e9b5SBjoern A. Zeeb uint refcnt; 559*b4c3e9b5SBjoern A. Zeeb bool watchdog_override; 560*b4c3e9b5SBjoern A. Zeeb u8 phynoise_state; 561*b4c3e9b5SBjoern A. Zeeb uint phynoise_now; 562*b4c3e9b5SBjoern A. Zeeb int phynoise_chan_watchdog; 563*b4c3e9b5SBjoern A. Zeeb bool phynoise_polling; 564*b4c3e9b5SBjoern A. Zeeb bool disable_percal; 565*b4c3e9b5SBjoern A. Zeeb u32 measure_hold; 566*b4c3e9b5SBjoern A. Zeeb 567*b4c3e9b5SBjoern A. Zeeb s16 txpa_2g[PWRTBL_NUM_COEFF]; 568*b4c3e9b5SBjoern A. Zeeb s16 txpa_2g_low_temp[PWRTBL_NUM_COEFF]; 569*b4c3e9b5SBjoern A. Zeeb s16 txpa_2g_high_temp[PWRTBL_NUM_COEFF]; 570*b4c3e9b5SBjoern A. Zeeb s16 txpa_5g_low[PWRTBL_NUM_COEFF]; 571*b4c3e9b5SBjoern A. Zeeb s16 txpa_5g_mid[PWRTBL_NUM_COEFF]; 572*b4c3e9b5SBjoern A. Zeeb s16 txpa_5g_hi[PWRTBL_NUM_COEFF]; 573*b4c3e9b5SBjoern A. Zeeb 574*b4c3e9b5SBjoern A. Zeeb u8 tx_srom_max_2g; 575*b4c3e9b5SBjoern A. Zeeb u8 tx_srom_max_5g_low; 576*b4c3e9b5SBjoern A. Zeeb u8 tx_srom_max_5g_mid; 577*b4c3e9b5SBjoern A. Zeeb u8 tx_srom_max_5g_hi; 578*b4c3e9b5SBjoern A. Zeeb u8 tx_srom_max_rate_2g[TXP_NUM_RATES]; 579*b4c3e9b5SBjoern A. Zeeb u8 tx_srom_max_rate_5g_low[TXP_NUM_RATES]; 580*b4c3e9b5SBjoern A. Zeeb u8 tx_srom_max_rate_5g_mid[TXP_NUM_RATES]; 581*b4c3e9b5SBjoern A. Zeeb u8 tx_srom_max_rate_5g_hi[TXP_NUM_RATES]; 582*b4c3e9b5SBjoern A. Zeeb u8 tx_user_target[TXP_NUM_RATES]; 583*b4c3e9b5SBjoern A. Zeeb s8 tx_power_offset[TXP_NUM_RATES]; 584*b4c3e9b5SBjoern A. Zeeb u8 tx_power_target[TXP_NUM_RATES]; 585*b4c3e9b5SBjoern A. Zeeb 586*b4c3e9b5SBjoern A. Zeeb struct brcms_phy_srom_fem srom_fem2g; 587*b4c3e9b5SBjoern A. Zeeb struct brcms_phy_srom_fem srom_fem5g; 588*b4c3e9b5SBjoern A. Zeeb 589*b4c3e9b5SBjoern A. Zeeb u8 tx_power_max; 590*b4c3e9b5SBjoern A. Zeeb u8 tx_power_max_rate_ind; 591*b4c3e9b5SBjoern A. Zeeb bool hwpwrctrl; 592*b4c3e9b5SBjoern A. Zeeb u8 nphy_txpwrctrl; 593*b4c3e9b5SBjoern A. Zeeb s8 nphy_txrx_chain; 594*b4c3e9b5SBjoern A. Zeeb bool phy_5g_pwrgain; 595*b4c3e9b5SBjoern A. Zeeb 596*b4c3e9b5SBjoern A. Zeeb u16 phy_wreg; 597*b4c3e9b5SBjoern A. Zeeb u16 phy_wreg_limit; 598*b4c3e9b5SBjoern A. Zeeb 599*b4c3e9b5SBjoern A. Zeeb s8 n_preamble_override; 600*b4c3e9b5SBjoern A. Zeeb u8 antswitch; 601*b4c3e9b5SBjoern A. Zeeb u8 aa2g, aa5g; 602*b4c3e9b5SBjoern A. Zeeb 603*b4c3e9b5SBjoern A. Zeeb s8 idle_tssi[CH_5G_GROUP]; 604*b4c3e9b5SBjoern A. Zeeb s8 target_idle_tssi; 605*b4c3e9b5SBjoern A. Zeeb s8 txpwr_est_Pout; 606*b4c3e9b5SBjoern A. Zeeb u8 tx_power_min; 607*b4c3e9b5SBjoern A. Zeeb u8 txpwr_limit[TXP_NUM_RATES]; 608*b4c3e9b5SBjoern A. Zeeb u8 txpwr_env_limit[TXP_NUM_RATES]; 609*b4c3e9b5SBjoern A. Zeeb u8 adj_pwr_tbl_nphy[ADJ_PWR_TBL_LEN]; 610*b4c3e9b5SBjoern A. Zeeb 611*b4c3e9b5SBjoern A. Zeeb bool channel_14_wide_filter; 612*b4c3e9b5SBjoern A. Zeeb 613*b4c3e9b5SBjoern A. Zeeb bool txpwroverride; 614*b4c3e9b5SBjoern A. Zeeb bool txpwridx_override_aphy; 615*b4c3e9b5SBjoern A. Zeeb s16 radiopwr_override; 616*b4c3e9b5SBjoern A. Zeeb u16 hwpwr_txcur; 617*b4c3e9b5SBjoern A. Zeeb u8 saved_txpwr_idx; 618*b4c3e9b5SBjoern A. Zeeb 619*b4c3e9b5SBjoern A. Zeeb bool edcrs_threshold_lock; 620*b4c3e9b5SBjoern A. Zeeb 621*b4c3e9b5SBjoern A. Zeeb u32 tr_R_gain_val; 622*b4c3e9b5SBjoern A. Zeeb u32 tr_T_gain_val; 623*b4c3e9b5SBjoern A. Zeeb 624*b4c3e9b5SBjoern A. Zeeb s16 ofdm_analog_filt_bw_override; 625*b4c3e9b5SBjoern A. Zeeb s16 cck_analog_filt_bw_override; 626*b4c3e9b5SBjoern A. Zeeb s16 ofdm_rccal_override; 627*b4c3e9b5SBjoern A. Zeeb s16 cck_rccal_override; 628*b4c3e9b5SBjoern A. Zeeb u16 extlna_type; 629*b4c3e9b5SBjoern A. Zeeb 630*b4c3e9b5SBjoern A. Zeeb uint interference_mode_crs_time; 631*b4c3e9b5SBjoern A. Zeeb u16 crsglitch_prev; 632*b4c3e9b5SBjoern A. Zeeb bool interference_mode_crs; 633*b4c3e9b5SBjoern A. Zeeb 634*b4c3e9b5SBjoern A. Zeeb u32 phy_tx_tone_freq; 635*b4c3e9b5SBjoern A. Zeeb uint phy_lastcal; 636*b4c3e9b5SBjoern A. Zeeb bool phy_forcecal; 637*b4c3e9b5SBjoern A. Zeeb bool phy_fixed_noise; 638*b4c3e9b5SBjoern A. Zeeb u32 xtalfreq; 639*b4c3e9b5SBjoern A. Zeeb u8 pdiv; 640*b4c3e9b5SBjoern A. Zeeb s8 carrier_suppr_disable; 641*b4c3e9b5SBjoern A. Zeeb 642*b4c3e9b5SBjoern A. Zeeb bool phy_bphy_evm; 643*b4c3e9b5SBjoern A. Zeeb bool phy_bphy_rfcs; 644*b4c3e9b5SBjoern A. Zeeb s8 phy_scraminit; 645*b4c3e9b5SBjoern A. Zeeb u8 phy_gpiosel; 646*b4c3e9b5SBjoern A. Zeeb 647*b4c3e9b5SBjoern A. Zeeb s16 phy_txcore_disable_temp; 648*b4c3e9b5SBjoern A. Zeeb s16 phy_txcore_enable_temp; 649*b4c3e9b5SBjoern A. Zeeb s8 phy_tempsense_offset; 650*b4c3e9b5SBjoern A. Zeeb bool phy_txcore_heatedup; 651*b4c3e9b5SBjoern A. Zeeb 652*b4c3e9b5SBjoern A. Zeeb u16 radiopwr; 653*b4c3e9b5SBjoern A. Zeeb u16 bb_atten; 654*b4c3e9b5SBjoern A. Zeeb u16 txctl1; 655*b4c3e9b5SBjoern A. Zeeb 656*b4c3e9b5SBjoern A. Zeeb u16 mintxbias; 657*b4c3e9b5SBjoern A. Zeeb u16 mintxmag; 658*b4c3e9b5SBjoern A. Zeeb struct lo_complex_abgphy_info gphy_locomp_iq 659*b4c3e9b5SBjoern A. Zeeb [STATIC_NUM_RF][STATIC_NUM_BB]; 660*b4c3e9b5SBjoern A. Zeeb s8 stats_11b_txpower[STATIC_NUM_RF][STATIC_NUM_BB]; 661*b4c3e9b5SBjoern A. Zeeb u16 gain_table[TX_GAIN_TABLE_LENGTH]; 662*b4c3e9b5SBjoern A. Zeeb bool loopback_gain; 663*b4c3e9b5SBjoern A. Zeeb s16 max_lpback_gain_hdB; 664*b4c3e9b5SBjoern A. Zeeb s16 trsw_rx_gain_hdB; 665*b4c3e9b5SBjoern A. Zeeb u8 power_vec[8]; 666*b4c3e9b5SBjoern A. Zeeb 667*b4c3e9b5SBjoern A. Zeeb u16 rc_cal; 668*b4c3e9b5SBjoern A. Zeeb int nrssi_table_delta; 669*b4c3e9b5SBjoern A. Zeeb int nrssi_slope_scale; 670*b4c3e9b5SBjoern A. Zeeb int nrssi_slope_offset; 671*b4c3e9b5SBjoern A. Zeeb int min_rssi; 672*b4c3e9b5SBjoern A. Zeeb int max_rssi; 673*b4c3e9b5SBjoern A. Zeeb 674*b4c3e9b5SBjoern A. Zeeb s8 txpwridx; 675*b4c3e9b5SBjoern A. Zeeb u8 min_txpower; 676*b4c3e9b5SBjoern A. Zeeb 677*b4c3e9b5SBjoern A. Zeeb u8 a_band_high_disable; 678*b4c3e9b5SBjoern A. Zeeb 679*b4c3e9b5SBjoern A. Zeeb u16 tx_vos; 680*b4c3e9b5SBjoern A. Zeeb u16 global_tx_bb_dc_bias_loft; 681*b4c3e9b5SBjoern A. Zeeb 682*b4c3e9b5SBjoern A. Zeeb int rf_max; 683*b4c3e9b5SBjoern A. Zeeb int bb_max; 684*b4c3e9b5SBjoern A. Zeeb int rf_list_size; 685*b4c3e9b5SBjoern A. Zeeb int bb_list_size; 686*b4c3e9b5SBjoern A. Zeeb u16 *rf_attn_list; 687*b4c3e9b5SBjoern A. Zeeb u16 *bb_attn_list; 688*b4c3e9b5SBjoern A. Zeeb u16 padmix_mask; 689*b4c3e9b5SBjoern A. Zeeb u16 padmix_reg; 690*b4c3e9b5SBjoern A. Zeeb u16 *txmag_list; 691*b4c3e9b5SBjoern A. Zeeb uint txmag_len; 692*b4c3e9b5SBjoern A. Zeeb bool txmag_enable; 693*b4c3e9b5SBjoern A. Zeeb 694*b4c3e9b5SBjoern A. Zeeb s8 *a_tssi_to_dbm; 695*b4c3e9b5SBjoern A. Zeeb s8 *m_tssi_to_dbm; 696*b4c3e9b5SBjoern A. Zeeb s8 *l_tssi_to_dbm; 697*b4c3e9b5SBjoern A. Zeeb s8 *h_tssi_to_dbm; 698*b4c3e9b5SBjoern A. Zeeb u8 *hwtxpwr; 699*b4c3e9b5SBjoern A. Zeeb 700*b4c3e9b5SBjoern A. Zeeb u16 freqtrack_saved_regs[2]; 701*b4c3e9b5SBjoern A. Zeeb int cur_interference_mode; 702*b4c3e9b5SBjoern A. Zeeb bool hwpwrctrl_capable; 703*b4c3e9b5SBjoern A. Zeeb bool temppwrctrl_capable; 704*b4c3e9b5SBjoern A. Zeeb 705*b4c3e9b5SBjoern A. Zeeb uint phycal_nslope; 706*b4c3e9b5SBjoern A. Zeeb uint phycal_noffset; 707*b4c3e9b5SBjoern A. Zeeb uint phycal_mlo; 708*b4c3e9b5SBjoern A. Zeeb uint phycal_txpower; 709*b4c3e9b5SBjoern A. Zeeb 710*b4c3e9b5SBjoern A. Zeeb u8 phy_aa2g; 711*b4c3e9b5SBjoern A. Zeeb 712*b4c3e9b5SBjoern A. Zeeb bool nphy_tableloaded; 713*b4c3e9b5SBjoern A. Zeeb s8 nphy_rssisel; 714*b4c3e9b5SBjoern A. Zeeb u32 nphy_bb_mult_save; 715*b4c3e9b5SBjoern A. Zeeb u16 nphy_txiqlocal_bestc[11]; 716*b4c3e9b5SBjoern A. Zeeb bool nphy_txiqlocal_coeffsvalid; 717*b4c3e9b5SBjoern A. Zeeb struct nphy_txpwrindex nphy_txpwrindex[PHY_CORE_NUM_2]; 718*b4c3e9b5SBjoern A. Zeeb struct nphy_pwrctrl nphy_pwrctrl_info[PHY_CORE_NUM_2]; 719*b4c3e9b5SBjoern A. Zeeb u16 cck2gpo; 720*b4c3e9b5SBjoern A. Zeeb u32 ofdm2gpo; 721*b4c3e9b5SBjoern A. Zeeb u32 ofdm5gpo; 722*b4c3e9b5SBjoern A. Zeeb u32 ofdm5glpo; 723*b4c3e9b5SBjoern A. Zeeb u32 ofdm5ghpo; 724*b4c3e9b5SBjoern A. Zeeb u8 bw402gpo; 725*b4c3e9b5SBjoern A. Zeeb u8 bw405gpo; 726*b4c3e9b5SBjoern A. Zeeb u8 bw405glpo; 727*b4c3e9b5SBjoern A. Zeeb u8 bw405ghpo; 728*b4c3e9b5SBjoern A. Zeeb u8 cdd2gpo; 729*b4c3e9b5SBjoern A. Zeeb u8 cdd5gpo; 730*b4c3e9b5SBjoern A. Zeeb u8 cdd5glpo; 731*b4c3e9b5SBjoern A. Zeeb u8 cdd5ghpo; 732*b4c3e9b5SBjoern A. Zeeb u8 stbc2gpo; 733*b4c3e9b5SBjoern A. Zeeb u8 stbc5gpo; 734*b4c3e9b5SBjoern A. Zeeb u8 stbc5glpo; 735*b4c3e9b5SBjoern A. Zeeb u8 stbc5ghpo; 736*b4c3e9b5SBjoern A. Zeeb u8 bwdup2gpo; 737*b4c3e9b5SBjoern A. Zeeb u8 bwdup5gpo; 738*b4c3e9b5SBjoern A. Zeeb u8 bwdup5glpo; 739*b4c3e9b5SBjoern A. Zeeb u8 bwdup5ghpo; 740*b4c3e9b5SBjoern A. Zeeb u16 mcs2gpo[8]; 741*b4c3e9b5SBjoern A. Zeeb u16 mcs5gpo[8]; 742*b4c3e9b5SBjoern A. Zeeb u16 mcs5glpo[8]; 743*b4c3e9b5SBjoern A. Zeeb u16 mcs5ghpo[8]; 744*b4c3e9b5SBjoern A. Zeeb u32 nphy_rxcalparams; 745*b4c3e9b5SBjoern A. Zeeb 746*b4c3e9b5SBjoern A. Zeeb u8 phy_spuravoid; 747*b4c3e9b5SBjoern A. Zeeb bool phy_isspuravoid; 748*b4c3e9b5SBjoern A. Zeeb 749*b4c3e9b5SBjoern A. Zeeb u8 phy_pabias; 750*b4c3e9b5SBjoern A. Zeeb u8 nphy_papd_skip; 751*b4c3e9b5SBjoern A. Zeeb u8 nphy_tssi_slope; 752*b4c3e9b5SBjoern A. Zeeb 753*b4c3e9b5SBjoern A. Zeeb s16 nphy_noise_win[PHY_CORE_MAX][PHY_NOISE_WINDOW_SZ]; 754*b4c3e9b5SBjoern A. Zeeb u8 nphy_noise_index; 755*b4c3e9b5SBjoern A. Zeeb 756*b4c3e9b5SBjoern A. Zeeb bool nphy_gain_boost; 757*b4c3e9b5SBjoern A. Zeeb bool nphy_elna_gain_config; 758*b4c3e9b5SBjoern A. Zeeb u16 old_bphy_test; 759*b4c3e9b5SBjoern A. Zeeb u16 old_bphy_testcontrol; 760*b4c3e9b5SBjoern A. Zeeb 761*b4c3e9b5SBjoern A. Zeeb bool phyhang_avoid; 762*b4c3e9b5SBjoern A. Zeeb 763*b4c3e9b5SBjoern A. Zeeb bool rssical_nphy; 764*b4c3e9b5SBjoern A. Zeeb u8 nphy_perical; 765*b4c3e9b5SBjoern A. Zeeb uint nphy_perical_last; 766*b4c3e9b5SBjoern A. Zeeb u8 cal_type_override; 767*b4c3e9b5SBjoern A. Zeeb u8 mphase_cal_phase_id; 768*b4c3e9b5SBjoern A. Zeeb u8 mphase_txcal_cmdidx; 769*b4c3e9b5SBjoern A. Zeeb u8 mphase_txcal_numcmds; 770*b4c3e9b5SBjoern A. Zeeb u16 mphase_txcal_bestcoeffs[11]; 771*b4c3e9b5SBjoern A. Zeeb u16 nphy_txiqlocal_chanspec; 772*b4c3e9b5SBjoern A. Zeeb u16 nphy_iqcal_chanspec_2G; 773*b4c3e9b5SBjoern A. Zeeb u16 nphy_iqcal_chanspec_5G; 774*b4c3e9b5SBjoern A. Zeeb u16 nphy_rssical_chanspec_2G; 775*b4c3e9b5SBjoern A. Zeeb u16 nphy_rssical_chanspec_5G; 776*b4c3e9b5SBjoern A. Zeeb struct wlapi_timer *phycal_timer; 777*b4c3e9b5SBjoern A. Zeeb bool use_int_tx_iqlo_cal_nphy; 778*b4c3e9b5SBjoern A. Zeeb bool internal_tx_iqlo_cal_tapoff_intpa_nphy; 779*b4c3e9b5SBjoern A. Zeeb s16 nphy_lastcal_temp; 780*b4c3e9b5SBjoern A. Zeeb 781*b4c3e9b5SBjoern A. Zeeb struct txiqcal_cache calibration_cache; 782*b4c3e9b5SBjoern A. Zeeb struct rssical_cache rssical_cache; 783*b4c3e9b5SBjoern A. Zeeb 784*b4c3e9b5SBjoern A. Zeeb u8 nphy_txpwr_idx[2]; 785*b4c3e9b5SBjoern A. Zeeb u8 nphy_papd_cal_type; 786*b4c3e9b5SBjoern A. Zeeb uint nphy_papd_last_cal; 787*b4c3e9b5SBjoern A. Zeeb u16 nphy_papd_tx_gain_at_last_cal[2]; 788*b4c3e9b5SBjoern A. Zeeb u8 nphy_papd_cal_gain_index[2]; 789*b4c3e9b5SBjoern A. Zeeb s16 nphy_papd_epsilon_offset[2]; 790*b4c3e9b5SBjoern A. Zeeb bool nphy_papd_recal_enable; 791*b4c3e9b5SBjoern A. Zeeb u32 nphy_papd_recal_counter; 792*b4c3e9b5SBjoern A. Zeeb bool nphy_force_papd_cal; 793*b4c3e9b5SBjoern A. Zeeb bool nphy_papdcomp; 794*b4c3e9b5SBjoern A. Zeeb bool ipa2g_on; 795*b4c3e9b5SBjoern A. Zeeb bool ipa5g_on; 796*b4c3e9b5SBjoern A. Zeeb 797*b4c3e9b5SBjoern A. Zeeb u16 classifier_state; 798*b4c3e9b5SBjoern A. Zeeb u16 clip_state[2]; 799*b4c3e9b5SBjoern A. Zeeb uint nphy_deaf_count; 800*b4c3e9b5SBjoern A. Zeeb u8 rxiq_samps; 801*b4c3e9b5SBjoern A. Zeeb u8 rxiq_antsel; 802*b4c3e9b5SBjoern A. Zeeb 803*b4c3e9b5SBjoern A. Zeeb u16 rfctrlIntc1_save; 804*b4c3e9b5SBjoern A. Zeeb u16 rfctrlIntc2_save; 805*b4c3e9b5SBjoern A. Zeeb bool first_cal_after_assoc; 806*b4c3e9b5SBjoern A. Zeeb u16 tx_rx_cal_radio_saveregs[22]; 807*b4c3e9b5SBjoern A. Zeeb u16 tx_rx_cal_phy_saveregs[15]; 808*b4c3e9b5SBjoern A. Zeeb 809*b4c3e9b5SBjoern A. Zeeb u8 nphy_cal_orig_pwr_idx[2]; 810*b4c3e9b5SBjoern A. Zeeb u8 nphy_txcal_pwr_idx[2]; 811*b4c3e9b5SBjoern A. Zeeb u8 nphy_rxcal_pwr_idx[2]; 812*b4c3e9b5SBjoern A. Zeeb u16 nphy_cal_orig_tx_gain[2]; 813*b4c3e9b5SBjoern A. Zeeb struct nphy_txgains nphy_cal_target_gain; 814*b4c3e9b5SBjoern A. Zeeb u16 nphy_txcal_bbmult; 815*b4c3e9b5SBjoern A. Zeeb u16 nphy_gmval; 816*b4c3e9b5SBjoern A. Zeeb 817*b4c3e9b5SBjoern A. Zeeb u16 nphy_saved_bbconf; 818*b4c3e9b5SBjoern A. Zeeb 819*b4c3e9b5SBjoern A. Zeeb bool nphy_gband_spurwar_en; 820*b4c3e9b5SBjoern A. Zeeb bool nphy_gband_spurwar2_en; 821*b4c3e9b5SBjoern A. Zeeb bool nphy_aband_spurwar_en; 822*b4c3e9b5SBjoern A. Zeeb u16 nphy_rccal_value; 823*b4c3e9b5SBjoern A. Zeeb u16 nphy_crsminpwr[3]; 824*b4c3e9b5SBjoern A. Zeeb struct nphy_noisevar_buf nphy_saved_noisevars; 825*b4c3e9b5SBjoern A. Zeeb bool nphy_anarxlpf_adjusted; 826*b4c3e9b5SBjoern A. Zeeb bool nphy_crsminpwr_adjusted; 827*b4c3e9b5SBjoern A. Zeeb bool nphy_noisevars_adjusted; 828*b4c3e9b5SBjoern A. Zeeb 829*b4c3e9b5SBjoern A. Zeeb bool nphy_rxcal_active; 830*b4c3e9b5SBjoern A. Zeeb u16 radar_percal_mask; 831*b4c3e9b5SBjoern A. Zeeb bool dfs_lp_buffer_nphy; 832*b4c3e9b5SBjoern A. Zeeb 833*b4c3e9b5SBjoern A. Zeeb u16 nphy_fineclockgatecontrol; 834*b4c3e9b5SBjoern A. Zeeb 835*b4c3e9b5SBjoern A. Zeeb s8 rx2tx_biasentry; 836*b4c3e9b5SBjoern A. Zeeb 837*b4c3e9b5SBjoern A. Zeeb u16 crsminpwr0; 838*b4c3e9b5SBjoern A. Zeeb u16 crsminpwrl0; 839*b4c3e9b5SBjoern A. Zeeb u16 crsminpwru0; 840*b4c3e9b5SBjoern A. Zeeb s16 noise_crsminpwr_index; 841*b4c3e9b5SBjoern A. Zeeb u16 init_gain_core1; 842*b4c3e9b5SBjoern A. Zeeb u16 init_gain_core2; 843*b4c3e9b5SBjoern A. Zeeb u16 init_gainb_core1; 844*b4c3e9b5SBjoern A. Zeeb u16 init_gainb_core2; 845*b4c3e9b5SBjoern A. Zeeb u8 aci_noise_curr_channel; 846*b4c3e9b5SBjoern A. Zeeb u16 init_gain_rfseq[4]; 847*b4c3e9b5SBjoern A. Zeeb 848*b4c3e9b5SBjoern A. Zeeb bool radio_is_on; 849*b4c3e9b5SBjoern A. Zeeb 850*b4c3e9b5SBjoern A. Zeeb bool nphy_sample_play_lpf_bw_ctl_ovr; 851*b4c3e9b5SBjoern A. Zeeb 852*b4c3e9b5SBjoern A. Zeeb u16 tbl_data_hi; 853*b4c3e9b5SBjoern A. Zeeb u16 tbl_data_lo; 854*b4c3e9b5SBjoern A. Zeeb u16 tbl_addr; 855*b4c3e9b5SBjoern A. Zeeb 856*b4c3e9b5SBjoern A. Zeeb uint tbl_save_id; 857*b4c3e9b5SBjoern A. Zeeb uint tbl_save_offset; 858*b4c3e9b5SBjoern A. Zeeb 859*b4c3e9b5SBjoern A. Zeeb u8 txpwrctrl; 860*b4c3e9b5SBjoern A. Zeeb s8 txpwrindex[PHY_CORE_MAX]; 861*b4c3e9b5SBjoern A. Zeeb 862*b4c3e9b5SBjoern A. Zeeb u8 phycal_tempdelta; 863*b4c3e9b5SBjoern A. Zeeb u32 mcs20_po; 864*b4c3e9b5SBjoern A. Zeeb u32 mcs40_po; 865*b4c3e9b5SBjoern A. Zeeb struct wiphy *wiphy; 866*b4c3e9b5SBjoern A. Zeeb }; 867*b4c3e9b5SBjoern A. Zeeb 868*b4c3e9b5SBjoern A. Zeeb struct cs32 { 869*b4c3e9b5SBjoern A. Zeeb s32 q; 870*b4c3e9b5SBjoern A. Zeeb s32 i; 871*b4c3e9b5SBjoern A. Zeeb }; 872*b4c3e9b5SBjoern A. Zeeb 873*b4c3e9b5SBjoern A. Zeeb struct radio_regs { 874*b4c3e9b5SBjoern A. Zeeb u16 address; 875*b4c3e9b5SBjoern A. Zeeb u32 init_a; 876*b4c3e9b5SBjoern A. Zeeb u32 init_g; 877*b4c3e9b5SBjoern A. Zeeb u8 do_init_a; 878*b4c3e9b5SBjoern A. Zeeb u8 do_init_g; 879*b4c3e9b5SBjoern A. Zeeb }; 880*b4c3e9b5SBjoern A. Zeeb 881*b4c3e9b5SBjoern A. Zeeb struct radio_20xx_regs { 882*b4c3e9b5SBjoern A. Zeeb u16 address; 883*b4c3e9b5SBjoern A. Zeeb u8 init; 884*b4c3e9b5SBjoern A. Zeeb u8 do_init; 885*b4c3e9b5SBjoern A. Zeeb }; 886*b4c3e9b5SBjoern A. Zeeb 887*b4c3e9b5SBjoern A. Zeeb struct lcnphy_radio_regs { 888*b4c3e9b5SBjoern A. Zeeb u16 address; 889*b4c3e9b5SBjoern A. Zeeb u8 init_a; 890*b4c3e9b5SBjoern A. Zeeb u8 init_g; 891*b4c3e9b5SBjoern A. Zeeb u8 do_init_a; 892*b4c3e9b5SBjoern A. Zeeb u8 do_init_g; 893*b4c3e9b5SBjoern A. Zeeb }; 894*b4c3e9b5SBjoern A. Zeeb 895*b4c3e9b5SBjoern A. Zeeb u16 read_phy_reg(struct brcms_phy *pi, u16 addr); 896*b4c3e9b5SBjoern A. Zeeb void write_phy_reg(struct brcms_phy *pi, u16 addr, u16 val); 897*b4c3e9b5SBjoern A. Zeeb void and_phy_reg(struct brcms_phy *pi, u16 addr, u16 val); 898*b4c3e9b5SBjoern A. Zeeb void or_phy_reg(struct brcms_phy *pi, u16 addr, u16 val); 899*b4c3e9b5SBjoern A. Zeeb void mod_phy_reg(struct brcms_phy *pi, u16 addr, u16 mask, u16 val); 900*b4c3e9b5SBjoern A. Zeeb 901*b4c3e9b5SBjoern A. Zeeb u16 read_radio_reg(struct brcms_phy *pi, u16 addr); 902*b4c3e9b5SBjoern A. Zeeb void or_radio_reg(struct brcms_phy *pi, u16 addr, u16 val); 903*b4c3e9b5SBjoern A. Zeeb void and_radio_reg(struct brcms_phy *pi, u16 addr, u16 val); 904*b4c3e9b5SBjoern A. Zeeb void mod_radio_reg(struct brcms_phy *pi, u16 addr, u16 mask, u16 val); 905*b4c3e9b5SBjoern A. Zeeb void xor_radio_reg(struct brcms_phy *pi, u16 addr, u16 mask); 906*b4c3e9b5SBjoern A. Zeeb 907*b4c3e9b5SBjoern A. Zeeb void write_radio_reg(struct brcms_phy *pi, u16 addr, u16 val); 908*b4c3e9b5SBjoern A. Zeeb 909*b4c3e9b5SBjoern A. Zeeb void wlc_phyreg_enter(struct brcms_phy_pub *pih); 910*b4c3e9b5SBjoern A. Zeeb void wlc_phyreg_exit(struct brcms_phy_pub *pih); 911*b4c3e9b5SBjoern A. Zeeb 912*b4c3e9b5SBjoern A. Zeeb void wlc_phy_read_table(struct brcms_phy *pi, 913*b4c3e9b5SBjoern A. Zeeb const struct phytbl_info *ptbl_info, 914*b4c3e9b5SBjoern A. Zeeb u16 tblAddr, u16 tblDataHi, u16 tblDatalo); 915*b4c3e9b5SBjoern A. Zeeb void wlc_phy_write_table(struct brcms_phy *pi, 916*b4c3e9b5SBjoern A. Zeeb const struct phytbl_info *ptbl_info, 917*b4c3e9b5SBjoern A. Zeeb u16 tblAddr, u16 tblDataHi, u16 tblDatalo); 918*b4c3e9b5SBjoern A. Zeeb void wlc_phy_table_addr(struct brcms_phy *pi, uint tbl_id, uint tbl_offset, 919*b4c3e9b5SBjoern A. Zeeb u16 tblAddr, u16 tblDataHi, u16 tblDataLo); 920*b4c3e9b5SBjoern A. Zeeb void wlc_phy_table_data_write(struct brcms_phy *pi, uint width, u32 val); 921*b4c3e9b5SBjoern A. Zeeb 922*b4c3e9b5SBjoern A. Zeeb void wlc_phy_txpower_update_shm(struct brcms_phy *pi); 923*b4c3e9b5SBjoern A. Zeeb 924*b4c3e9b5SBjoern A. Zeeb u8 wlc_phy_nbits(s32 value); 925*b4c3e9b5SBjoern A. Zeeb void wlc_phy_compute_dB(u32 *cmplx_pwr, s8 *p_dB, u8 core); 926*b4c3e9b5SBjoern A. Zeeb 927*b4c3e9b5SBjoern A. Zeeb uint wlc_phy_init_radio_regs_allbands(struct brcms_phy *pi, 928*b4c3e9b5SBjoern A. Zeeb struct radio_20xx_regs *radioregs); 929*b4c3e9b5SBjoern A. Zeeb uint wlc_phy_init_radio_regs(struct brcms_phy *pi, 930*b4c3e9b5SBjoern A. Zeeb const struct radio_regs *radioregs, 931*b4c3e9b5SBjoern A. Zeeb u16 core_offset); 932*b4c3e9b5SBjoern A. Zeeb 933*b4c3e9b5SBjoern A. Zeeb void wlc_phy_txpower_ipa_upd(struct brcms_phy *pi); 934*b4c3e9b5SBjoern A. Zeeb 935*b4c3e9b5SBjoern A. Zeeb void wlc_phy_do_dummy_tx(struct brcms_phy *pi, bool ofdm, bool pa_on); 936*b4c3e9b5SBjoern A. Zeeb void wlc_phy_papd_decode_epsilon(u32 epsilon, s32 *eps_real, s32 *eps_imag); 937*b4c3e9b5SBjoern A. Zeeb 938*b4c3e9b5SBjoern A. Zeeb void wlc_phy_cal_perical_mphase_reset(struct brcms_phy *pi); 939*b4c3e9b5SBjoern A. Zeeb void wlc_phy_cal_perical_mphase_restart(struct brcms_phy *pi); 940*b4c3e9b5SBjoern A. Zeeb 941*b4c3e9b5SBjoern A. Zeeb void wlc_phy_attach_nphy(struct brcms_phy *pi); 942*b4c3e9b5SBjoern A. Zeeb bool wlc_phy_attach_lcnphy(struct brcms_phy *pi); 943*b4c3e9b5SBjoern A. Zeeb 944*b4c3e9b5SBjoern A. Zeeb void wlc_phy_detach_lcnphy(struct brcms_phy *pi); 945*b4c3e9b5SBjoern A. Zeeb 946*b4c3e9b5SBjoern A. Zeeb void wlc_phy_init_nphy(struct brcms_phy *pi); 947*b4c3e9b5SBjoern A. Zeeb void wlc_phy_init_lcnphy(struct brcms_phy *pi); 948*b4c3e9b5SBjoern A. Zeeb 949*b4c3e9b5SBjoern A. Zeeb void wlc_phy_cal_init_nphy(struct brcms_phy *pi); 950*b4c3e9b5SBjoern A. Zeeb void wlc_phy_cal_init_lcnphy(struct brcms_phy *pi); 951*b4c3e9b5SBjoern A. Zeeb 952*b4c3e9b5SBjoern A. Zeeb void wlc_phy_chanspec_set_nphy(struct brcms_phy *pi, u16 chanspec); 953*b4c3e9b5SBjoern A. Zeeb void wlc_phy_chanspec_set_lcnphy(struct brcms_phy *pi, u16 chanspec); 954*b4c3e9b5SBjoern A. Zeeb void wlc_phy_chanspec_set_fixup_lcnphy(struct brcms_phy *pi, u16 chanspec); 955*b4c3e9b5SBjoern A. Zeeb int wlc_phy_channel2freq(uint channel); 956*b4c3e9b5SBjoern A. Zeeb int wlc_phy_chanspec_freq2bandrange_lpssn(uint); 957*b4c3e9b5SBjoern A. Zeeb int wlc_phy_chanspec_bandrange_get(struct brcms_phy *, u16 chanspec); 958*b4c3e9b5SBjoern A. Zeeb 959*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_set_tx_pwr_ctrl(struct brcms_phy *pi, u16 mode); 960*b4c3e9b5SBjoern A. Zeeb s8 wlc_lcnphy_get_current_tx_pwr_idx(struct brcms_phy *pi); 961*b4c3e9b5SBjoern A. Zeeb 962*b4c3e9b5SBjoern A. Zeeb void wlc_phy_txpower_recalc_target_nphy(struct brcms_phy *pi); 963*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_txpower_recalc_target(struct brcms_phy *pi); 964*b4c3e9b5SBjoern A. Zeeb void wlc_phy_txpower_recalc_target_lcnphy(struct brcms_phy *pi); 965*b4c3e9b5SBjoern A. Zeeb 966*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_set_tx_pwr_by_index(struct brcms_phy *pi, int index); 967*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_tx_pu(struct brcms_phy *pi, bool bEnable); 968*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_stop_tx_tone(struct brcms_phy *pi); 969*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_start_tx_tone(struct brcms_phy *pi, s32 f_kHz, u16 max_val, 970*b4c3e9b5SBjoern A. Zeeb bool iqcalmode); 971*b4c3e9b5SBjoern A. Zeeb 972*b4c3e9b5SBjoern A. Zeeb void wlc_phy_txpower_sromlimit_get_nphy(struct brcms_phy *pi, uint chan, 973*b4c3e9b5SBjoern A. Zeeb u8 *max_pwr, u8 rate_id); 974*b4c3e9b5SBjoern A. Zeeb void wlc_phy_ofdm_to_mcs_powers_nphy(u8 *power, u8 rate_mcs_start, 975*b4c3e9b5SBjoern A. Zeeb u8 rate_mcs_end, u8 rate_ofdm_start); 976*b4c3e9b5SBjoern A. Zeeb void wlc_phy_mcs_to_ofdm_powers_nphy(u8 *power, u8 rate_ofdm_start, 977*b4c3e9b5SBjoern A. Zeeb u8 rate_ofdm_end, u8 rate_mcs_start); 978*b4c3e9b5SBjoern A. Zeeb 979*b4c3e9b5SBjoern A. Zeeb u16 wlc_lcnphy_tempsense(struct brcms_phy *pi, bool mode); 980*b4c3e9b5SBjoern A. Zeeb s16 wlc_lcnphy_tempsense_new(struct brcms_phy *pi, bool mode); 981*b4c3e9b5SBjoern A. Zeeb s8 wlc_lcnphy_tempsense_degree(struct brcms_phy *pi, bool mode); 982*b4c3e9b5SBjoern A. Zeeb s8 wlc_lcnphy_vbatsense(struct brcms_phy *pi, bool mode); 983*b4c3e9b5SBjoern A. Zeeb void wlc_phy_carrier_suppress_lcnphy(struct brcms_phy *pi); 984*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_crsuprs(struct brcms_phy *pi, int channel); 985*b4c3e9b5SBjoern A. Zeeb void wlc_2064_vco_cal(struct brcms_phy *pi); 986*b4c3e9b5SBjoern A. Zeeb 987*b4c3e9b5SBjoern A. Zeeb void wlc_phy_txpower_recalc_target(struct brcms_phy *pi); 988*b4c3e9b5SBjoern A. Zeeb 989*b4c3e9b5SBjoern A. Zeeb #define LCNPHY_TBL_ID_PAPDCOMPDELTATBL 0x18 990*b4c3e9b5SBjoern A. Zeeb #define LCNPHY_TX_POWER_TABLE_SIZE 128 991*b4c3e9b5SBjoern A. Zeeb #define LCNPHY_MAX_TX_POWER_INDEX (LCNPHY_TX_POWER_TABLE_SIZE - 1) 992*b4c3e9b5SBjoern A. Zeeb #define LCNPHY_TBL_ID_TXPWRCTL 0x07 993*b4c3e9b5SBjoern A. Zeeb #define LCNPHY_TX_PWR_CTRL_OFF 0 994*b4c3e9b5SBjoern A. Zeeb #define LCNPHY_TX_PWR_CTRL_SW (0x1 << 15) 995*b4c3e9b5SBjoern A. Zeeb #define LCNPHY_TX_PWR_CTRL_HW ((0x1 << 15) | \ 996*b4c3e9b5SBjoern A. Zeeb (0x1 << 14) | \ 997*b4c3e9b5SBjoern A. Zeeb (0x1 << 13)) 998*b4c3e9b5SBjoern A. Zeeb 999*b4c3e9b5SBjoern A. Zeeb #define LCNPHY_TX_PWR_CTRL_TEMPBASED 0xE001 1000*b4c3e9b5SBjoern A. Zeeb 1001*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_write_table(struct brcms_phy *pi, 1002*b4c3e9b5SBjoern A. Zeeb const struct phytbl_info *pti); 1003*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_read_table(struct brcms_phy *pi, struct phytbl_info *pti); 1004*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_set_tx_iqcc(struct brcms_phy *pi, u16 a, u16 b); 1005*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_set_tx_locc(struct brcms_phy *pi, u16 didq); 1006*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_get_tx_iqcc(struct brcms_phy *pi, u16 *a, u16 *b); 1007*b4c3e9b5SBjoern A. Zeeb u16 wlc_lcnphy_get_tx_locc(struct brcms_phy *pi); 1008*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_get_radio_loft(struct brcms_phy *pi, u8 *ei0, u8 *eq0, u8 *fi0, 1009*b4c3e9b5SBjoern A. Zeeb u8 *fq0); 1010*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_calib_modes(struct brcms_phy *pi, uint mode); 1011*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_deaf_mode(struct brcms_phy *pi, bool mode); 1012*b4c3e9b5SBjoern A. Zeeb bool wlc_phy_tpc_isenabled_lcnphy(struct brcms_phy *pi); 1013*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_tx_pwr_update_npt(struct brcms_phy *pi); 1014*b4c3e9b5SBjoern A. Zeeb s32 wlc_lcnphy_tssi2dbm(s32 tssi, s32 a1, s32 b0, s32 b1); 1015*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_get_tssi(struct brcms_phy *pi, s8 *ofdm_pwr, s8 *cck_pwr); 1016*b4c3e9b5SBjoern A. Zeeb void wlc_lcnphy_tx_power_adjustment(struct brcms_phy_pub *ppi); 1017*b4c3e9b5SBjoern A. Zeeb 1018*b4c3e9b5SBjoern A. Zeeb s32 wlc_lcnphy_rx_signal_power(struct brcms_phy *pi, s32 gain_index); 1019*b4c3e9b5SBjoern A. Zeeb 1020*b4c3e9b5SBjoern A. Zeeb #define NPHY_MAX_HPVGA1_INDEX 10 1021*b4c3e9b5SBjoern A. Zeeb #define NPHY_DEF_HPVGA1_INDEXLIMIT 7 1022*b4c3e9b5SBjoern A. Zeeb 1023*b4c3e9b5SBjoern A. Zeeb struct phy_iq_est { 1024*b4c3e9b5SBjoern A. Zeeb s32 iq_prod; 1025*b4c3e9b5SBjoern A. Zeeb u32 i_pwr; 1026*b4c3e9b5SBjoern A. Zeeb u32 q_pwr; 1027*b4c3e9b5SBjoern A. Zeeb }; 1028*b4c3e9b5SBjoern A. Zeeb 1029*b4c3e9b5SBjoern A. Zeeb void wlc_phy_stay_in_carriersearch_nphy(struct brcms_phy *pi, bool enable); 1030*b4c3e9b5SBjoern A. Zeeb 1031*b4c3e9b5SBjoern A. Zeeb #define wlc_phy_write_table_nphy(pi, pti) \ 1032*b4c3e9b5SBjoern A. Zeeb wlc_phy_write_table(pi, pti, 0x72, 0x74, 0x73) 1033*b4c3e9b5SBjoern A. Zeeb 1034*b4c3e9b5SBjoern A. Zeeb #define wlc_phy_read_table_nphy(pi, pti) \ 1035*b4c3e9b5SBjoern A. Zeeb wlc_phy_read_table(pi, pti, 0x72, 0x74, 0x73) 1036*b4c3e9b5SBjoern A. Zeeb 1037*b4c3e9b5SBjoern A. Zeeb #define wlc_nphy_table_addr(pi, id, off) \ 1038*b4c3e9b5SBjoern A. Zeeb wlc_phy_table_addr((pi), (id), (off), 0x72, 0x74, 0x73) 1039*b4c3e9b5SBjoern A. Zeeb 1040*b4c3e9b5SBjoern A. Zeeb #define wlc_nphy_table_data_write(pi, w, v) \ 1041*b4c3e9b5SBjoern A. Zeeb wlc_phy_table_data_write((pi), (w), (v)) 1042*b4c3e9b5SBjoern A. Zeeb 1043*b4c3e9b5SBjoern A. Zeeb void wlc_phy_table_read_nphy(struct brcms_phy *pi, u32, u32 l, u32 o, u32 w, 1044*b4c3e9b5SBjoern A. Zeeb void *d); 1045*b4c3e9b5SBjoern A. Zeeb void wlc_phy_table_write_nphy(struct brcms_phy *pi, u32, u32, u32, u32, 1046*b4c3e9b5SBjoern A. Zeeb const void *); 1047*b4c3e9b5SBjoern A. Zeeb 1048*b4c3e9b5SBjoern A. Zeeb #define PHY_IPA(pi) \ 1049*b4c3e9b5SBjoern A. Zeeb ((pi->ipa2g_on && CHSPEC_IS2G(pi->radio_chanspec)) || \ 1050*b4c3e9b5SBjoern A. Zeeb (pi->ipa5g_on && CHSPEC_IS5G(pi->radio_chanspec))) 1051*b4c3e9b5SBjoern A. Zeeb 1052*b4c3e9b5SBjoern A. Zeeb #define BRCMS_PHY_WAR_PR51571(pi) \ 1053*b4c3e9b5SBjoern A. Zeeb if (NREV_LT((pi)->pubpi.phy_rev, 3)) \ 1054*b4c3e9b5SBjoern A. Zeeb (void)bcma_read32(pi->d11core, D11REGOFFS(maccontrol)) 1055*b4c3e9b5SBjoern A. Zeeb 1056*b4c3e9b5SBjoern A. Zeeb void wlc_phy_cal_perical_nphy_run(struct brcms_phy *pi, u8 caltype); 1057*b4c3e9b5SBjoern A. Zeeb void wlc_phy_aci_reset_nphy(struct brcms_phy *pi); 1058*b4c3e9b5SBjoern A. Zeeb void wlc_phy_pa_override_nphy(struct brcms_phy *pi, bool en); 1059*b4c3e9b5SBjoern A. Zeeb 1060*b4c3e9b5SBjoern A. Zeeb u8 wlc_phy_get_chan_freq_range_nphy(struct brcms_phy *pi, uint chan); 1061*b4c3e9b5SBjoern A. Zeeb void wlc_phy_switch_radio_nphy(struct brcms_phy *pi, bool on); 1062*b4c3e9b5SBjoern A. Zeeb 1063*b4c3e9b5SBjoern A. Zeeb void wlc_phy_stf_chain_upd_nphy(struct brcms_phy *pi); 1064*b4c3e9b5SBjoern A. Zeeb 1065*b4c3e9b5SBjoern A. Zeeb void wlc_phy_force_rfseq_nphy(struct brcms_phy *pi, u8 cmd); 1066*b4c3e9b5SBjoern A. Zeeb s16 wlc_phy_tempsense_nphy(struct brcms_phy *pi); 1067*b4c3e9b5SBjoern A. Zeeb 1068*b4c3e9b5SBjoern A. Zeeb u16 wlc_phy_classifier_nphy(struct brcms_phy *pi, u16 mask, u16 val); 1069*b4c3e9b5SBjoern A. Zeeb 1070*b4c3e9b5SBjoern A. Zeeb void wlc_phy_rx_iq_est_nphy(struct brcms_phy *pi, struct phy_iq_est *est, 1071*b4c3e9b5SBjoern A. Zeeb u16 num_samps, u8 wait_time, u8 wait_for_crs); 1072*b4c3e9b5SBjoern A. Zeeb 1073*b4c3e9b5SBjoern A. Zeeb void wlc_phy_rx_iq_coeffs_nphy(struct brcms_phy *pi, u8 write, 1074*b4c3e9b5SBjoern A. Zeeb struct nphy_iq_comp *comp); 1075*b4c3e9b5SBjoern A. Zeeb void wlc_phy_aci_and_noise_reduction_nphy(struct brcms_phy *pi); 1076*b4c3e9b5SBjoern A. Zeeb 1077*b4c3e9b5SBjoern A. Zeeb void wlc_phy_rxcore_setstate_nphy(struct brcms_phy_pub *pih, u8 rxcore_bitmask); 1078*b4c3e9b5SBjoern A. Zeeb u8 wlc_phy_rxcore_getstate_nphy(struct brcms_phy_pub *pih); 1079*b4c3e9b5SBjoern A. Zeeb 1080*b4c3e9b5SBjoern A. Zeeb void wlc_phy_txpwrctrl_enable_nphy(struct brcms_phy *pi, u8 ctrl_type); 1081*b4c3e9b5SBjoern A. Zeeb void wlc_phy_txpwr_fixpower_nphy(struct brcms_phy *pi); 1082*b4c3e9b5SBjoern A. Zeeb void wlc_phy_txpwr_apply_nphy(struct brcms_phy *pi); 1083*b4c3e9b5SBjoern A. Zeeb void wlc_phy_txpwr_papd_cal_nphy(struct brcms_phy *pi); 1084*b4c3e9b5SBjoern A. Zeeb u16 wlc_phy_txpwr_idx_get_nphy(struct brcms_phy *pi); 1085*b4c3e9b5SBjoern A. Zeeb 1086*b4c3e9b5SBjoern A. Zeeb struct nphy_txgains wlc_phy_get_tx_gain_nphy(struct brcms_phy *pi); 1087*b4c3e9b5SBjoern A. Zeeb int wlc_phy_cal_txiqlo_nphy(struct brcms_phy *pi, 1088*b4c3e9b5SBjoern A. Zeeb struct nphy_txgains target_gain, bool full, bool m); 1089*b4c3e9b5SBjoern A. Zeeb int wlc_phy_cal_rxiq_nphy(struct brcms_phy *pi, struct nphy_txgains target_gain, 1090*b4c3e9b5SBjoern A. Zeeb u8 type, bool d); 1091*b4c3e9b5SBjoern A. Zeeb void wlc_phy_txpwr_index_nphy(struct brcms_phy *pi, u8 core_mask, 1092*b4c3e9b5SBjoern A. Zeeb s8 txpwrindex, bool res); 1093*b4c3e9b5SBjoern A. Zeeb void wlc_phy_rssisel_nphy(struct brcms_phy *pi, u8 core, u8 rssi_type); 1094*b4c3e9b5SBjoern A. Zeeb int wlc_phy_poll_rssi_nphy(struct brcms_phy *pi, u8 rssi_type, 1095*b4c3e9b5SBjoern A. Zeeb s32 *rssi_buf, u8 nsamps); 1096*b4c3e9b5SBjoern A. Zeeb void wlc_phy_rssi_cal_nphy(struct brcms_phy *pi); 1097*b4c3e9b5SBjoern A. Zeeb int wlc_phy_aci_scan_nphy(struct brcms_phy *pi); 1098*b4c3e9b5SBjoern A. Zeeb void wlc_phy_cal_txgainctrl_nphy(struct brcms_phy *pi, s32 dBm_targetpower, 1099*b4c3e9b5SBjoern A. Zeeb bool debug); 1100*b4c3e9b5SBjoern A. Zeeb int wlc_phy_tx_tone_nphy(struct brcms_phy *pi, u32 f_kHz, u16 max_val, u8 mode, 1101*b4c3e9b5SBjoern A. Zeeb u8, bool); 1102*b4c3e9b5SBjoern A. Zeeb void wlc_phy_stopplayback_nphy(struct brcms_phy *pi); 1103*b4c3e9b5SBjoern A. Zeeb void wlc_phy_est_tonepwr_nphy(struct brcms_phy *pi, s32 *qdBm_pwrbuf, 1104*b4c3e9b5SBjoern A. Zeeb u8 num_samps); 1105*b4c3e9b5SBjoern A. Zeeb void wlc_phy_radio205x_vcocal_nphy(struct brcms_phy *pi); 1106*b4c3e9b5SBjoern A. Zeeb 1107*b4c3e9b5SBjoern A. Zeeb int wlc_phy_rssi_compute_nphy(struct brcms_phy *pi, struct d11rxhdr *rxh); 1108*b4c3e9b5SBjoern A. Zeeb 1109*b4c3e9b5SBjoern A. Zeeb #define NPHY_TESTPATTERN_BPHY_EVM 0 1110*b4c3e9b5SBjoern A. Zeeb #define NPHY_TESTPATTERN_BPHY_RFCS 1 1111*b4c3e9b5SBjoern A. Zeeb 1112*b4c3e9b5SBjoern A. Zeeb void wlc_phy_nphy_tkip_rifs_war(struct brcms_phy *pi, u8 rifs); 1113*b4c3e9b5SBjoern A. Zeeb #endif /* _BRCM_PHY_INT_H_ */ 1114