Files
kunlun/plc/halphy/inc/hw_tonemask.h

265 lines
8.5 KiB
C
Raw Normal View History

2024-09-28 14:24:04 +08:00
/****************************************************************************
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 HW_TONEMASK_H
#define HW_TONEMASK_H
#include "os_types.h"
#include "hw_tonemap.h"
#include "iot_bitops.h"
#include "phy_bb.h"
#include "phy_chn.h"
#ifdef __cplusplus
extern "C" {
#endif
#define BITS_PER_TONEMASK 1
#define BITS_PER_TONEAMP 4
#define BITS_PER_DWORD 32
#define TOTAL_TX_PHASE_DW_NUM 64
#define TOTAL_GAIN_NUM 85
#define TOTAL_NB_GAIN_NUM 85
#define TOTAL_TX_DC_NUM 4
#define TONEMASK_RMS_NUM 9
#define MASK_AMP_MAX 0xa0
#define MASK_AMP_STEP 0x20
#pragma pack(push) /* save the pack status */
#pragma pack(1) /* 1 byte align */
typedef struct _plc_band_table {
uint32_t valid_tone_number : 16,
fc_sym_num : 5,
rate_type : 2, // rate type
fd_rms_max : 9; // max rms number
uint32_t start_tone : 11, // first used tone id
resv1 : 5,
end_tone : 11, // last used tone id
resv2 : 5; // DW1
} plc_band_table_t;
typedef struct _plc_phy_band_table {
uint8_t band_id;
plc_band_table_t band_info;
} plc_phy_band_table_t;
typedef struct _plc_tonemask_rms_table {
uint32_t tonemask_id : 7,
valid_tone_number : 16,
fd_rms_max : 9;
} plc_tonemask_rms_table;
typedef struct _plc_tonemask_table {
uint32_t tone_mask_bitmap[TOTAL_TONE_MASK_NUM * BITS_PER_TONEMASK \
/ BITS_PER_DWORD]; // DW[0:47]
} plc_tonemask_table;
typedef struct _plc_tone_mask_amp_table {
uint8_t tone_mask : 1,
spur_filter : 3,
tone_amp : 4;
} plc_tone_mask_amp_table;
typedef struct _plc_tone_mask_amp_phase_table {
plc_tone_mask_amp_table tone_amp_tab[1];//TOTAL_TONE_MASK_NUM
uint32_t preamble_phase_tab[TOTAL_TX_PHASE_DW_NUM];
uint32_t fc_payload_phase_tab[TOTAL_TX_PHASE_DW_NUM];
} plc_tone_mask_amp_phase_table;
extern plc_band_table_t all_mask_band_table_r0_full;
extern plc_band_table_t all_mask_band_table_r0_low;
extern plc_band_table_t all_mask_band_table_r0_high;
extern plc_band_table_t all_mask_band_table_r1_full;
extern plc_band_table_t all_mask_band_table_r1_low;
extern plc_band_table_t all_mask_band_table_r1_high;
extern const plc_tonemask_rms_table iot_plc_tonemask_rms_all[TONEMASK_RMS_NUM];
extern const plc_tonemask_table all_mask_tone_mask_table;
extern const plc_tonemask_table all_mask_tone_mask_table_sg_band0;
extern const plc_tonemask_table all_mask_tone_mask_table_sg_band1;
extern const plc_tonemask_table all_mask_tone_mask_table_sg_band2;
extern const plc_tonemask_table all_mask_tone_mask_table_sg_band3;
#if (SUPPORT_GREEN_PHY || IOT_DTEST_ONLY_SUPPORT)
extern const plc_tonemask_table all_mask_tone_mask_table_gp;
#endif
extern const plc_tonemask_table all_mask_tone_mask_table_custom;
extern const plc_tonemask_table all_mask_tone_mask_table_sg_tide;
extern plc_band_table_t *g_plc_band_tbl_r0[MAX_HW_BAND];
extern plc_band_table_t *g_plc_band_tbl_r1[MAX_HW_BAND];
extern const plc_tone_mask_amp_phase_table all_mask_amp_phase_table;
#if SUPPORT_SOUTHERN_POWER_GRID
extern const uint32_t preamble_phase_tab_spg[TOTAL_TX_PHASE_DW_NUM];
extern const uint32_t fc_payload_phase_tab_spg[TOTAL_TX_PHASE_DW_NUM];
extern const uint32_t preamble_phase_tab_muti_band_spg[TOTAL_TX_PHASE_DW_NUM];
extern const uint32_t fc_payload_phase_tab_muti_band_spg[TOTAL_TX_PHASE_DW_NUM];
#endif
extern uint32_t all_mask_gain_table[];
/**
* @brief phy_get_plc_nsg_band_tab_info - get the iot_plc_nsg_band_all info
*
* @param band_tab [band table out pointer.]
* @return uint8_t IOT_ARRAY_CNT(iot_plc_nsg_band_all)
*/
uint8_t phy_get_plc_nsg_band_tab_info(const plc_phy_band_table_t **band_tab);
/**
* @brief phy_get_plc_gp_band_tab_info - get the iot_plc_gp_band_all info
*
* @param band_tab [band table out pointer.]
* @return uint8_t IOT_ARRAY_CNT(iot_plc_gp_band_all)
*/
uint8_t phy_get_plc_gp_band_tab_info(const plc_phy_band_table_t **band_tab);
/* caluculate how many valid tones in the band from a tone mask table.
* based on the iot_bitops.h utils
*/
uint32_t get_valid_tone_number(const plc_tonemask_table *tmt, \
uint32_t start_tone, uint32_t end_tone);
/* init the band table
* @band_start_tone - start tone id, 0 - 1535
* retrun 0 for success
*/
uint32_t init_band_table(plc_band_table_t *table, \
uint32_t band_id, \
const plc_tonemask_table *tmt, uint32_t fc_sym, \
uint32_t band_start_tone, uint32_t band_end_tone);
void print_band_table(plc_band_table_t *table);
void phy_tone_mask_amp_phase_tab_load( \
const plc_tone_mask_amp_phase_table *table, \
plc_tone_mask_id msk_id, \
uint32_t mac_proto);
/**
*@brief phy_spur_mask_set.
*
* Here is more APIs used to initialize phy configurations.
* spur mask is one of the ways to fit spur scenarios.
*@param center_idx [The index of spur siganl.]
*@param width [The total numbers which will be masked, exclude center.]
*@exception [none.]
*@return [none.]
*/
void phy_spur_mask_set(uint32_t center_idx, uint32_t width);
/**
*@brief phy_amp_mask_set.
*
* Here is more APIs used to initialize phy configurations.
* amplitude mask is one of the ways to modify used tone power.
*@param start_tone [start tone index.]
*@param start_tone [end tone index.]
*@exception [none.]
*@return [none.]
*/
void phy_amp_mask_set(uint32_t start_tone, uint32_t end_tone);
/**
*@brief phy_spur_mask_clr.
*
* used to clr phy spur mask configurations.
* spur mask is one of the ways to fit spur scenarios.
*@param center_idx [The index of spur siganl.]
*@param width [The total numbers which will be masked, exclude center.]
*@exception [none.]
*@return [none.]
*/
void phy_spur_mask_clr(uint32_t center_idx, uint32_t width);
/**
*@brief phy_band_info_get_by_id.
*
* get band info depend on band id.
*
*@param mac_proto [mac protocol.]
*@param range_id [band range id.]
*@param band_id [band id.]
*@param valid_tone_num [return valid tone number ref to band id.]
*@param fc_num [return fc number ref to band id.]
*@param start_tone [return start tone ref to band id.]
*@param end_tone [return end tone ref to band id.]
*@exception [none.]
*@return [0:success,others fail.]
*/
uint32_t phy_band_info_get_by_id( \
uint32_t mac_proto, \
uint32_t range_id, \
uint32_t band_id, \
volatile uint16_t *valid_tone_num, \
volatile uint8_t *fc_num, \
volatile uint16_t *start_tone, \
volatile uint16_t *end_tone);
/**
*@brief phy_tone_mask_ptr_get.
*
* get band tonemask array pointer id.
*
*@param mask_id [tone mask id.]
*@exception [none.]
*@return [band tonemask array pointer id.]
*/
const plc_tonemask_table *phy_tone_mask_ptr_get(plc_tone_mask_id mask_id);
/**
*@brief phy_update_tone_det_range.
*
* set tone detect range.
*
*@param [none.]
*@exception [none.]
*@return [none.]
*/
void phy_update_tone_det_range();
/**
*@brief phy_amp_mask_set_special_limit.
*
* set tone mask for special band.
*
*@param [none.]
*@exception [none.]
*@return [none.]
*/
void phy_amp_mask_set_special_limit();
/*
* @brief phy_band_tone_range_get() - get the start and end tones of the current
* band configuration
* @param start_tone: return start tone.
* @param end_tone: return end tone.
*/
void phy_band_tone_range_get(uint32_t *start_tone, uint32_t *end_tone);
#pragma pack(pop) /* restore the pack status */
#ifdef __cplusplus
}
#endif
#endif // !HW_TONEMASK_H