421 lines
13 KiB
C
421 lines
13 KiB
C
|
/****************************************************************************
|
||
|
|
||
|
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
|
||
|
|
||
|
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
|
||
|
be copied by any method or incorporated into another program without
|
||
|
the express written consent of Aerospace C.Power. This Information or any portion
|
||
|
thereof remains the property of Aerospace C.Power. The Information contained herein
|
||
|
is believed to be accurate and Aerospace C.Power assumes no responsibility or
|
||
|
liability for its use in any way and conveys no license or title under
|
||
|
any patent or copyright and makes no representation or warranty that this
|
||
|
Information is free from patent or copyright infringement.
|
||
|
|
||
|
****************************************************************************/
|
||
|
|
||
|
#ifndef PHY_TXRX_PWR_H
|
||
|
#define PHY_TXRX_PWR_H
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#define PHY_FULL_PWR_DBUV (137)
|
||
|
#define PHY_MP_PWR_REDUCE (30)
|
||
|
#define PHY_DEF_RMS (58)
|
||
|
#define PHY_PWR_ADJ_MAX (42)
|
||
|
#define PHY_PWR_DIG_ATT_MAX (12)
|
||
|
#define PHY_PWR_ANA_MAX (18)
|
||
|
#define PHY_PWR_ANA_STEP_LEN (6)
|
||
|
#define PHY_PWR_ANA_STEP_NUM (3)
|
||
|
#define PHY_CERT_DST_RMS (52)
|
||
|
#define PHY_PWR_TD_MIN (-12)
|
||
|
#define PHY_PWR_CTRL_THRESHHOLD (24)
|
||
|
#define MIN_TX_POWER (PHY_FULL_PWR_DBUV - PHY_PWR_ADJ_MAX)
|
||
|
|
||
|
typedef struct fd_td_ana_full{
|
||
|
uint8_t fd_pwr_int;
|
||
|
uint8_t fd_pwr_frac :5,
|
||
|
ana_pwr :3;
|
||
|
uint8_t fd_pwr_frac_lp; /* 4bit */
|
||
|
uint8_t td_pwr;
|
||
|
} fd_td_ana_full_t;
|
||
|
|
||
|
typedef struct phy_psd_full{
|
||
|
uint8_t full_dbuv;
|
||
|
uint8_t lp_dbuv;
|
||
|
} phy_psd_full_t;
|
||
|
|
||
|
typedef struct phy_fd_td_ana_full{
|
||
|
uint8_t band_id;
|
||
|
fd_td_ana_full_t fd_td_ana_full;
|
||
|
phy_psd_full_t psd_full;
|
||
|
} phy_fd_td_ana_full_t;
|
||
|
|
||
|
/**
|
||
|
*@brief phy_pgf_pga_dc_cal.
|
||
|
*
|
||
|
* config dc offset of pgf and pga moudle to analog register.
|
||
|
* update the tone mask table.
|
||
|
*@param gain_idx [The index of gain table.]
|
||
|
*@param pgf_offset [PGF DC offset.]
|
||
|
*@param pga_offset [PGA DC offset.]
|
||
|
*@exception [none.]
|
||
|
*@return [none.]
|
||
|
*/
|
||
|
void phy_pgf_pga_dc_cal(uint16_t gain_idx, \
|
||
|
uint16_t pgf_offset, uint16_t pga_offset);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_pgf_pga_dc_cal_get.
|
||
|
*
|
||
|
* get dc offset of pgf and pga from gain table.
|
||
|
* update the tone mask table.
|
||
|
*@param gain_idx [The index of gain table.]
|
||
|
*@param pgf_offset [PGF DC offset.]
|
||
|
*@param pga_offset [PGA DC offset.]
|
||
|
*@exception [none.]
|
||
|
*@return [none.]
|
||
|
*/
|
||
|
void phy_pgf_pga_dc_cal_get(uint16_t gain_idx, \
|
||
|
volatile uint16_t *pgf_offset, volatile uint16_t *pga_offset);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_pgf_bq_pga_gain_get.
|
||
|
*
|
||
|
* get gain info.
|
||
|
* update the tone mask table.
|
||
|
*@param gain_idx [The index of gain table.]
|
||
|
*@param pgf [PGF gain.]
|
||
|
*@param bq [bq gain.]
|
||
|
*@param pga [PGA gain.]
|
||
|
*@param lna [lna gain.]
|
||
|
*@param byphpf [bypass hpf.]
|
||
|
*@param enord2 [en 2ord hpf.]
|
||
|
*@param bq_qvalue [bq qvalue not use in kl1.]
|
||
|
*@exception [none.]
|
||
|
*@return [none.]
|
||
|
*/
|
||
|
void phy_pgf_bq_pga_gain_get(uint16_t gain_idx, \
|
||
|
volatile uint8_t *pgf, \
|
||
|
volatile uint8_t *bq, \
|
||
|
volatile uint8_t *pga, \
|
||
|
volatile uint8_t *lna, \
|
||
|
volatile uint8_t *byphpf, \
|
||
|
volatile uint8_t *enord2, \
|
||
|
volatile uint8_t *bq_qvalue);
|
||
|
|
||
|
/**
|
||
|
*@brief phy tone amplitue reduce(db) set.
|
||
|
*
|
||
|
*@param start_tone [The index of start tone.]
|
||
|
*@param end_tone [The index of end tone.]
|
||
|
*@param reduce_db [tx power reduce db]
|
||
|
*@exception [none.]
|
||
|
*@return [none]
|
||
|
*/
|
||
|
void phy_tone_amp_reduce_set(uint32_t start_tone, uint32_t end_tone,
|
||
|
uint8_t reduce_db);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_amp_set.
|
||
|
*
|
||
|
* Here is more APIs used to initialize phy configurations.
|
||
|
* amptitude is one of the ways to fit CUSTOM0.
|
||
|
*@param start_tone [The index of start tone.]
|
||
|
*@param end_tone [The index of end tone.]
|
||
|
*@param amp_value [The amptitude value.]
|
||
|
*@exception [none.]
|
||
|
*@return [none.]
|
||
|
*/
|
||
|
void phy_tone_amp_set(uint32_t start_tone, uint32_t end_tone, uint8_t amp_value);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_apm_clr.
|
||
|
*
|
||
|
* Here is more APIs used to initialize phy configurations.
|
||
|
* amptitude is one of the ways to fit CUSTOM0.
|
||
|
*@param start_tone [The index of start tone.]
|
||
|
*@param end_tone [The index of end tone.]
|
||
|
*@exception [none.]
|
||
|
*@return [none.]
|
||
|
*/
|
||
|
void phy_tone_apm_clr(uint32_t start_tone, uint32_t end_tone);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_rms_get_by_valid_tone.
|
||
|
*
|
||
|
* get band max rms depend on valid tone number.
|
||
|
*
|
||
|
*@param valid_tone_num [valid tone number.]
|
||
|
*@param fd_rms [return max rms with specail band id.]
|
||
|
*@exception [none.]
|
||
|
*@return [0:success,others fail.]
|
||
|
*/
|
||
|
uint32_t phy_rms_get_by_valid_tone(uint16_t valid_tone_num, uint8_t *fd_rms);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_gp_band_rms_get_by_valid_tone.
|
||
|
*
|
||
|
* get short band rms depend on valid tone number.
|
||
|
*
|
||
|
*@param valid_tone_num [valid tone number.]
|
||
|
*@param fd_rms [return max rms with specail band id.]
|
||
|
*@exception [none.]
|
||
|
*@return [0:success,others fail.]
|
||
|
*/
|
||
|
uint32_t phy_gp_band_rms_get_by_valid_tone(uint16_t valid_tone_num, uint8_t *fd_rms);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_tone_msk_rms_get_by_valid_tone.
|
||
|
*
|
||
|
* get band rms with tone mask depend on valid tone number.
|
||
|
*
|
||
|
*@param valid_tone_num [valid tone number.]
|
||
|
*@param fd_rms [return max rms with specail band id.]
|
||
|
*@exception [none.]
|
||
|
*@return [0:success,others fail.]
|
||
|
*/
|
||
|
uint32_t phy_tone_msk_rms_get_by_valid_tone(uint16_t valid_tone_num, \
|
||
|
uint8_t *fd_rms);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_time_rms_set.
|
||
|
*
|
||
|
* set time domain rms value.
|
||
|
*@param [none.]
|
||
|
*@exception [none.]
|
||
|
*@return [none.]
|
||
|
*/
|
||
|
void phy_time_rms_set(void);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_fd_rms_get.
|
||
|
*
|
||
|
* get frequency domain rms value.
|
||
|
*@param valid_tone_num [valid tone number.]
|
||
|
*@param *para_int [integer part of rms.]
|
||
|
*@param *para_frac [fractional part of rms.]
|
||
|
*@exception [none.]
|
||
|
*@return [0:success,others fail.]
|
||
|
*/
|
||
|
uint32_t phy_fd_rms_get(uint32_t valid_tone_num, uint8_t *para_int, uint8_t *para_frac);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_pwr_adjust_set.
|
||
|
*
|
||
|
* Max 42dB with 18dB ana pga and 24dB att
|
||
|
*
|
||
|
*@param uint_dbuv [target power dBuV.]
|
||
|
*@exception [none.]
|
||
|
*@return [ERR_OK and others ERR_FAIL.]
|
||
|
*/
|
||
|
uint32_t phy_pwr_adjust_set(uint8_t uint_dbuv);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_high_perf_set.
|
||
|
*
|
||
|
* enable the best performance with spur and pulse.
|
||
|
*
|
||
|
*@param en [true: enable, false: disable.]
|
||
|
*@exception [none.]
|
||
|
*@return [none.]
|
||
|
*/
|
||
|
void phy_high_perf_set(bool_t en);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_get_def_tx_power.
|
||
|
*
|
||
|
* get fd rms depend on valid tone number.
|
||
|
*
|
||
|
*@param hw_rate_id [hardware rate id.]
|
||
|
*@param hw_band_id [hardware band id.]
|
||
|
*@param para_int [return rms integer part.]
|
||
|
*@param para_frac [return rms fraction part.]
|
||
|
*@exception [none.]
|
||
|
*@return [0:success,others fail.]
|
||
|
*/
|
||
|
uint32_t phy_get_def_tx_power( \
|
||
|
uint32_t hw_rate_id, \
|
||
|
uint32_t hw_band_id, \
|
||
|
uint8_t *para_int, \
|
||
|
uint8_t *para_frac);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_get_proto_band_fc_num_from_band_table.
|
||
|
*
|
||
|
* get proto band fc num .
|
||
|
*
|
||
|
*@param proto_band_id [proto band id]
|
||
|
*@return [0:fail ,others fc num.]
|
||
|
*/
|
||
|
uint32_t phy_get_proto_band_fc_num_from_band_table(uint32_t proto_band_id);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_tx_pwr_to_fd_td_ana_value.
|
||
|
*
|
||
|
* get tx fd rms, td, analog power depend on rate and band id.
|
||
|
*
|
||
|
*@param hw_rate_id [hardware rate id.]
|
||
|
*@param band_id [proto band id.]
|
||
|
*@param uint_dbuv [tx total power.]
|
||
|
*@param fd_para_int [return fd rms integer part.]
|
||
|
*@param fd_para_frac [return fd rms fraction part.]
|
||
|
*@param td_pwr [return td power.]
|
||
|
*@param ana_pwr [return analog power.]
|
||
|
*@exception [none.]
|
||
|
*@return [0:success,others fail.]
|
||
|
*/
|
||
|
uint32_t phy_tx_pwr_to_fd_td_ana_value( \
|
||
|
uint32_t hw_rate_id, \
|
||
|
uint32_t band_id, \
|
||
|
uint8_t uint_dbuv, \
|
||
|
uint8_t *fd_pwr_int, \
|
||
|
uint8_t *fd_pwr_frac, \
|
||
|
uint8_t *td_pwr, \
|
||
|
uint8_t *ana_pwr);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_tx_pwr_psd_to_dbuv.
|
||
|
*
|
||
|
* convert psd to dbuv depend on band id.
|
||
|
*
|
||
|
*@param band_id [proto band id.]
|
||
|
*@param tbl [tx full power table.]
|
||
|
*@param tbl_len [tx full power table length.]
|
||
|
*@param uint_psd [tx psd.]
|
||
|
*@param uint_dbuv [return tx power.]
|
||
|
*@exception [none.]
|
||
|
*@return [0:success,others fail.]
|
||
|
*/
|
||
|
uint32_t phy_tx_pwr_psd_to_dbuv( \
|
||
|
uint32_t band_id, \
|
||
|
const phy_fd_td_ana_full_t *tbl, \
|
||
|
uint16_t tbl_len, \
|
||
|
uint8_t uint_psd, \
|
||
|
uint8_t *uint_dbuv);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_get_pwr_psd_fix_db. phy get psd.
|
||
|
*
|
||
|
*@exception [none.]
|
||
|
*@return [psd]
|
||
|
*/
|
||
|
uint32_t phy_get_pwr_psd_fix_db();
|
||
|
|
||
|
/**
|
||
|
*@brief phy_get_pwr_ctl_en. phy get power control enable.
|
||
|
*
|
||
|
*@exception [none.]
|
||
|
*@return [enable]
|
||
|
*/
|
||
|
uint32_t phy_get_pwr_ctl_en();
|
||
|
|
||
|
/**
|
||
|
*@brief phy_get_pwr_reduce_db. phy get power reduce db.
|
||
|
*
|
||
|
*@exception [none.]
|
||
|
*@return [reduce db]
|
||
|
*/
|
||
|
uint32_t phy_get_pwr_reduce_db();
|
||
|
|
||
|
/**
|
||
|
*@brief phy_get_tx_pwr_limit. phy get power limit.
|
||
|
*@param single_proto_band [single proto band.]
|
||
|
*@exception [none.]
|
||
|
*@return [tx power], KL1 device returns a fixed value
|
||
|
* of 0, indicating that the interface is not
|
||
|
* supported
|
||
|
*/
|
||
|
uint32_t phy_get_tx_pwr_limit(uint32_t single_proto_band);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_set_tx_pwr_limit. phy set power limit.
|
||
|
*@param pwr_db [pwr_db.]
|
||
|
*@exception [none.]
|
||
|
*@return [0]
|
||
|
*/
|
||
|
uint32_t phy_set_tx_pwr_limit(uint32_t pwr_db);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_fd_rms_update. phy_fd_rms_update.
|
||
|
*@exception [none.]
|
||
|
*@return [null]
|
||
|
*/
|
||
|
void phy_fd_rms_update(void);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_tx_resp_pwr_ctl_en.
|
||
|
*
|
||
|
* control tx sack power.
|
||
|
*
|
||
|
*@param fd_int_en [fd int ctl.]
|
||
|
*@param fd_frac_en [fd frac ctl.]
|
||
|
*@param td_en [td ctl.]
|
||
|
*@param ana_en [ana ctl.]
|
||
|
*@exception [none.]
|
||
|
*@return [none.]
|
||
|
*/
|
||
|
void phy_tx_resp_pwr_ctl_en(
|
||
|
uint8_t fd_int_en, uint8_t fd_frac_en, uint8_t td_en, uint8_t ana_en);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_set_tx_resp_pwr.
|
||
|
*
|
||
|
* control tx sack power value.
|
||
|
*
|
||
|
*@param fd_int [fd int value.]
|
||
|
*@param fd_frac [fd frac value.]
|
||
|
*@param td [td value.]
|
||
|
*@param ana [ana value.]
|
||
|
*@exception [none.]
|
||
|
*@return [none.]
|
||
|
*/
|
||
|
void phy_set_tx_resp_pwr(
|
||
|
uint8_t fd_int, uint8_t fd_frac, uint8_t td, uint8_t ana);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_overstress_power_down. phy overstress power down.
|
||
|
*
|
||
|
*@param dowm_db [down power db]
|
||
|
*@exception [none.]
|
||
|
*@return [none.]
|
||
|
*/
|
||
|
void phy_overstress_power_down(uint32_t dowm_db);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_get_default_tx_pwr. phy get default tx power.
|
||
|
*
|
||
|
*@param band_id [band id]
|
||
|
*@param uint_dbuv [set power dbuv]
|
||
|
*@param dlt_max [full power - lp power]
|
||
|
*@exception [none.]
|
||
|
*@return uint32_t [success or not]
|
||
|
*/
|
||
|
uint32_t phy_get_default_tx_pwr(uint32_t band_id, uint8_t *uint_dbuv,
|
||
|
uint8_t *dlt_max);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_set_common_pwr_reg. phy set power by reg.
|
||
|
*
|
||
|
*@param pwr_db [power db]
|
||
|
*@exception [none.]
|
||
|
*@return uint32_t [success or not]
|
||
|
*/
|
||
|
uint32_t phy_set_common_pwr_reg(uint32_t pwr_db);
|
||
|
|
||
|
/**
|
||
|
*@brief phy_set_sack_tx_power. phy set sack power by reg.
|
||
|
*
|
||
|
*@param pwr_db [power db]
|
||
|
*@exception [none.]
|
||
|
*@return void [void]
|
||
|
*/
|
||
|
void phy_set_sack_tx_power(uint32_t pwr_db);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif // !HW_TONEMASK_H
|