265 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			265 lines
		
	
	
		
			8.5 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 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
 |