/**************************************************************************** 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_MULTI_PPM_H #define PHY_MULTI_PPM_H #include "os_types.h" #include "phy_ppm.h" #include "hw_war.h" #ifdef __cplusplus extern "C" { #endif /* max cco cnt enable sync */ #define MAX_SYNC_CCO_CNT (PHY_SW_NN_PPM_PARA_MAX) #define RECORD_PPM_INVALID_NID 0 #define RECORD_PPM_INVALID_PPM 1 #define RECORD_PPM_VALID 2 #pragma pack(push) #pragma pack(1) /* status struct: * used for cpu1's WAR to apply the ppm, it * stores the result of ppm calculation */ typedef struct _phy_ppm_status { /* ntb ppm err, unit: 1/64 ppm */ int16_t ppm_err; uint32_t nid : 24, valid : 2, rsv : 6; } phy_ppm_status; typedef struct _phy_ppm_status_ctxt{ uint8_t enable; phy_ppm_status ppm_status[MAX_SYNC_CCO_CNT]; } phy_ppm_status_ctxt_t; #pragma pack(pop) #if ENA_SYNC_DIFF_CCO_PPM /** *@brief phy_multi_sync_set_valid_flag set flag *@param ctxt ctxt ptr *@param idx array idx *@param flag flag to set *@exception none *@return none */ void phy_multi_sync_set_valid_flag(phy_ppm_status_ctxt_t *ctxt, uint8_t idx, uint8_t valid); /** *@brief phy_multi_sync_get_record_nid get nid by idx *@param ctxt ctxt ptr *@param idx array idx *@exception none *@return uint32_t nid; */ uint32_t phy_multi_sync_get_record_nid(phy_ppm_status_ctxt_t *ctxt, uint8_t idx); /** *@brief phy_multi_sync_set_record_nid set nid *@param ctxt ctxt ptr *@param idx array idx *@param nid nid to set *@exception none *@return none */ void phy_multi_sync_set_record_nid(phy_ppm_status_ctxt_t *ctxt, uint8_t idx, uint32_t nid); /** *@brief phy_multi_sync_set_record_ppm set ppm *@param ctxt ctxt ptr *@param idx array idx *@param ppm ppm to set *@exception none *@return none */ void phy_multi_sync_set_record_ppm(phy_ppm_status_ctxt_t *ctxt, uint8_t idx, int16_t ppm); /** *@brief phy_multi_sync_get_record_ppm get ppm *@param ctxt ctxt ptr *@exception none *@return ppm */ int16_t phy_multi_sync_get_record_ppm(phy_ppm_status_ctxt_t *ctxt, uint8_t idx); /** *@brief phy_multi_sync_apply_bb_ppm find nid and sync ppm *@param ctxt ctxt ptr *@param update_flag see BB_PPM_UPDATE_METHORD *@param cur_nid cur rx fc nid *@exception none *@return none */ void phy_multi_sync_apply_bb_ppm(phy_ppm_status_ctxt_t *ctxt, uint32_t cur_nid, uint8_t update_flag); /** *@brief phy_multi_sync_get_ppm_status *@return status_ptr */ void* phy_multi_sync_get_ppm_status(); /** *@brief phy_multi_sync_get_record_idx get record idx *@param ctxt ctxt ptr *@param cur_nid cur multi sync record nid *@return idx */ uint8_t phy_multi_sync_get_record_idx(phy_ppm_status_ctxt_t *ctxt, \ uint32_t cur_nid); /** *@brief phy_multi_sync_set_enable set function enabale or not *@param ctxt ctxt ptr *@param enable 0 - disable, 1 - enable *@return none */ void phy_multi_sync_set_enable(phy_ppm_status_ctxt_t *ctxt, uint8_t enable); /** *@brief phy_multi_sync_ppm_rst rst rx ppm *@param ctxt ctxt ptr *@exception none *@return none */ void phy_multi_sync_ppm_rst(phy_ppm_status_ctxt_t *ctxt); /** *@brief phy_multi_sync_get_valid_flag get record flag *@param ctxt ctxt ptr *@param idx array idx *@exception none *@return none */ uint32_t phy_multi_sync_get_valid_flag(phy_ppm_status_ctxt_t *ctxt, uint8_t idx); /** *@brief phy_multi_sync_set_ppm set multi ppm *@param status_ctxt ctxt ptr *@param nid nid *@exception none *@return 0/1 */ uint32_t phy_multi_sync_set_ppm(phy_ppm_status_ctxt_t *status_ctxt, uint32_t nid); #else /* ENA_SYNC_DIFF_CCO_PPM */ #define phy_multi_sync_set_valid_flag(ctxt, idx, valid) #define phy_multi_sync_get_record_nid(ctxt, idx) (PLC_NID_INVALID) #define phy_multi_sync_set_record_nid(ctxt, idx, nid) #define phy_multi_sync_set_record_ppm(ctxt, idx, ppm) #define phy_multi_sync_get_record_ppm(ctxt, idx) (PLC_MAX_MAC_NTB_PPM) #define phy_multi_sync_apply_bb_ppm(ctxt, cur_nid, update_flag) #define phy_multi_sync_get_ppm_status() (NULL) #define phy_multi_sync_get_record_idx(ctxt, cur_nid) (MAX_SYNC_CCO_CNT) #define phy_multi_sync_set_enable(ctxt, enable) #define phy_multi_sync_ppm_rst(ctxt) #define phy_multi_sync_get_valid_flag(ctxt, idx) (RECORD_PPM_INVALID_NID) #define phy_multi_sync_set_ppm(status_ctxt, nid) (ERR_INVAL) #endif /* ENA_SYNC_DIFF_CCO_PPM */ #ifdef __cplusplus } #endif #endif