203 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			203 lines
		
	
	
		
			6.7 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_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
							 |