1300016Sadrian/* 2300016Sadrian 3300016Sadrian Broadcom B43 wireless driver 4300016Sadrian 5300016Sadrian N-PHY core code. 6300016Sadrian 7300016Sadrian Copyright (c) 2008 Michael Buesch <m@bues.ch> 8300016Sadrian Copyright (c) 2010 Rafa�� Mi��ecki <zajec5@gmail.com> 9300016Sadrian Copyright (c) 2016 Adrian Chadd <adrian@FreeBSD.org> 10300016Sadrian 11300016Sadrian This program is free software; you can redistribute it and/or modify 12300016Sadrian it under the terms of the GNU General Public License as published by 13300016Sadrian the Free Software Foundation; either version 2 of the License, or 14300016Sadrian (at your option) any later version. 15300016Sadrian 16300016Sadrian This program is distributed in the hope that it will be useful, 17300016Sadrian but WITHOUT ANY WARRANTY; without even the implied warranty of 18300016Sadrian MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19300016Sadrian GNU General Public License for more details. 20300016Sadrian 21300016Sadrian You should have received a copy of the GNU General Public License 22300016Sadrian along with this program; see the file COPYING. If not, write to 23300016Sadrian the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor, 24300016Sadrian Boston, MA 02110-1301, USA. 25300016Sadrian 26300016Sadrian*/ 27300016Sadrian 28300016Sadrian/* 29300016Sadrian * $FreeBSD$ 30300016Sadrian */ 31300016Sadrian 32300016Sadrian#ifndef __IF_BWN_PHY_N_CORE_H__ 33300016Sadrian#define __IF_BWN_PHY_N_CORE_H__ 34300016Sadrian 35300016Sadrianstruct bwn_mac; 36300016Sadrian 37300016Sadrianenum b43_nphy_spur_avoid { 38300016Sadrian BWN_SPUR_AVOID_DISABLE, 39300016Sadrian BWN_SPUR_AVOID_AUTO, 40300016Sadrian BWN_SPUR_AVOID_FORCE, 41300016Sadrian}; 42300016Sadrian 43300016Sadrian/* 44300016Sadrian * TODO: determine whether center_freq is the primary 45300016Sadrian * channel centre frequency or the actual centre centre 46300016Sadrian * frequency (eg radio tuning.) It /looks/ like it's 47300016Sadrian * actual channel centre. 48300016Sadrian */ 49300016Sadrianstruct bwn_chanspec { 50300016Sadrian uint16_t center_freq; 51300016Sadrian /* This is HT40U, HT40D, HT20, no-HT 20, etc */ 52300016Sadrian bwn_chan_type_t channel_type; 53300016Sadrian}; 54300016Sadrian 55300016Sadrianstruct bwn_phy_n_iq_comp { 56300016Sadrian int16_t a0; 57300016Sadrian int16_t b0; 58300016Sadrian int16_t a1; 59300016Sadrian int16_t b1; 60300016Sadrian}; 61300016Sadrian 62300016Sadrianstruct bwn_phy_n_rssical_cache { 63300016Sadrian uint16_t rssical_radio_regs_2G[2]; 64300016Sadrian uint16_t rssical_phy_regs_2G[12]; 65300016Sadrian 66300016Sadrian uint16_t rssical_radio_regs_5G[2]; 67300016Sadrian uint16_t rssical_phy_regs_5G[12]; 68300016Sadrian}; 69300016Sadrian 70300016Sadrianstruct bwn_phy_n_cal_cache { 71300016Sadrian uint16_t txcal_radio_regs_2G[8]; 72300016Sadrian uint16_t txcal_coeffs_2G[8]; 73300016Sadrian struct bwn_phy_n_iq_comp rxcal_coeffs_2G; 74300016Sadrian 75300016Sadrian uint16_t txcal_radio_regs_5G[8]; 76300016Sadrian uint16_t txcal_coeffs_5G[8]; 77300016Sadrian struct bwn_phy_n_iq_comp rxcal_coeffs_5G; 78300016Sadrian}; 79300016Sadrian 80300016Sadrianstruct bwn_phy_n_txpwrindex { 81300016Sadrian int8_t index; 82300016Sadrian int8_t index_internal; 83300016Sadrian int8_t index_internal_save; 84300016Sadrian uint16_t AfectrlOverride; 85300016Sadrian uint16_t AfeCtrlDacGain; 86300016Sadrian uint16_t rad_gain; 87300016Sadrian uint8_t bbmult; 88300016Sadrian uint16_t iqcomp_a; 89300016Sadrian uint16_t iqcomp_b; 90300016Sadrian uint16_t locomp; 91300016Sadrian}; 92300016Sadrian 93300016Sadrianstruct bwn_phy_n_pwr_ctl_info { 94300016Sadrian uint8_t idle_tssi_2g; 95300016Sadrian uint8_t idle_tssi_5g; 96300016Sadrian}; 97300016Sadrian 98300016Sadrianstruct bwn_phy_n { 99300016Sadrian uint8_t antsel_type; 100300016Sadrian uint8_t cal_orig_pwr_idx[2]; 101300016Sadrian uint8_t measure_hold; 102300016Sadrian uint8_t phyrxchain; 103300016Sadrian uint8_t hw_phyrxchain; 104300016Sadrian uint8_t hw_phytxchain; 105300016Sadrian uint8_t perical; 106300016Sadrian uint32_t deaf_count; 107300016Sadrian uint32_t rxcalparams; 108300016Sadrian bool hang_avoid; 109300016Sadrian bool mute; 110300016Sadrian uint16_t papd_epsilon_offset[2]; 111300016Sadrian int32_t preamble_override; 112300016Sadrian uint32_t bb_mult_save; 113300016Sadrian 114300016Sadrian bool gain_boost; 115300016Sadrian bool elna_gain_config; 116300016Sadrian bool band5g_pwrgain; 117300016Sadrian bool use_int_tx_iq_lo_cal; 118300016Sadrian bool lpf_bw_overrode_for_sample_play; 119300016Sadrian 120300016Sadrian uint8_t mphase_cal_phase_id; 121300016Sadrian uint16_t mphase_txcal_cmdidx; 122300016Sadrian uint16_t mphase_txcal_numcmds; 123300016Sadrian uint16_t mphase_txcal_bestcoeffs[11]; 124300016Sadrian 125300016Sadrian bool txpwrctrl; 126300016Sadrian bool pwg_gain_5ghz; 127300016Sadrian uint8_t tx_pwr_idx[2]; 128300016Sadrian int8_t tx_power_offset[101]; 129300016Sadrian uint16_t adj_pwr_tbl[84]; 130300016Sadrian uint16_t txcal_bbmult; 131300016Sadrian uint16_t txiqlocal_bestc[11]; 132300016Sadrian bool txiqlocal_coeffsvalid; 133300016Sadrian struct bwn_phy_n_txpwrindex txpwrindex[2]; 134300016Sadrian struct bwn_phy_n_pwr_ctl_info pwr_ctl_info[2]; 135300016Sadrian struct bwn_chanspec txiqlocal_chanspec; 136300016Sadrian struct bwn_ppr tx_pwr_max_ppr; 137300016Sadrian uint16_t tx_pwr_last_recalc_freq; 138300016Sadrian int tx_pwr_last_recalc_limit; 139300016Sadrian 140300016Sadrian uint8_t txrx_chain; 141300016Sadrian uint16_t tx_rx_cal_phy_saveregs[11]; 142300016Sadrian uint16_t tx_rx_cal_radio_saveregs[22]; 143300016Sadrian 144300016Sadrian uint16_t rfctrl_intc1_save; 145300016Sadrian uint16_t rfctrl_intc2_save; 146300016Sadrian 147300016Sadrian uint16_t classifier_state; 148300016Sadrian uint16_t clip_state[2]; 149300016Sadrian 150300016Sadrian enum b43_nphy_spur_avoid spur_avoid; 151300016Sadrian bool aband_spurwar_en; 152300016Sadrian bool gband_spurwar_en; 153300016Sadrian 154300016Sadrian bool ipa2g_on; 155300016Sadrian struct bwn_chanspec iqcal_chanspec_2G; 156300016Sadrian struct bwn_chanspec rssical_chanspec_2G; 157300016Sadrian 158300016Sadrian bool ipa5g_on; 159300016Sadrian struct bwn_chanspec iqcal_chanspec_5G; 160300016Sadrian struct bwn_chanspec rssical_chanspec_5G; 161300016Sadrian 162300016Sadrian struct bwn_phy_n_rssical_cache rssical_cache; 163300016Sadrian struct bwn_phy_n_cal_cache cal_cache; 164300016Sadrian bool crsminpwr_adjusted; 165300016Sadrian bool noisevars_adjusted; 166300016Sadrian}; 167300016Sadrian 168300016Sadrianextern bwn_txpwr_result_t bwn_nphy_op_recalc_txpower(struct bwn_mac *mac, bool ignore_tssi); 169300016Sadrianextern int bwn_nphy_op_allocate(struct bwn_mac *mac); 170300016Sadrianextern void bwn_nphy_op_prepare_structs(struct bwn_mac *mac); 171300016Sadrianextern void bwn_nphy_op_free(struct bwn_mac *mac); 172300016Sadrianextern int bwn_nphy_op_init(struct bwn_mac *mac); 173300016Sadrianextern void bwn_nphy_op_maskset(struct bwn_mac *mac, uint16_t reg, uint16_t mask, uint16_t set); 174300016Sadrianextern uint16_t bwn_nphy_op_radio_read(struct bwn_mac *mac, uint16_t reg); 175300016Sadrianextern void bwn_nphy_op_radio_write(struct bwn_mac *mac, uint16_t reg, uint16_t value); 176300016Sadrianextern void bwn_nphy_op_software_rfkill(struct bwn_mac *mac, bool blocked); 177300016Sadrianextern void bwn_nphy_op_switch_analog(struct bwn_mac *mac, bool on); 178300016Sadrianextern int bwn_nphy_op_switch_channel(struct bwn_mac *mac, unsigned int new_channel); 179300016Sadrianextern unsigned int bwn_nphy_op_get_default_chan(struct bwn_mac *mac); 180300016Sadrian 181300016Sadrian#endif /* __IF_BWN_PHY_N_CORE_H__ */ 182