194 lines
7.3 KiB
C
194 lines
7.3 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 MULTI_NID_SYNC_H
|
||
|
#define MULTI_NID_SYNC_H
|
||
|
|
||
|
#include "os_types.h"
|
||
|
#include "mac_ppm_scan.h"
|
||
|
#include "plc_utils.h"
|
||
|
#include "phy_bb.h"
|
||
|
#include "phy_multi_ppm.h"
|
||
|
#include "hw_war.h"
|
||
|
#include "mac_uni_cfg_api.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* ppm cal period between two bcn rx */
|
||
|
#define DEF_MULTI_SYNC_PERIOD (1000)
|
||
|
|
||
|
/* 120s to NTB */
|
||
|
#define MAX_BCN_RX_TIMEOUT_NTB (120UL * 1000 * 1000 * 25)
|
||
|
|
||
|
/* mac multi ppm update timeout, unit: 1ntb */
|
||
|
#define MAC_MULTI_UPDATE_TIMEOUT_NTB (MAX_BCN_RX_TIMEOUT_NTB >> 2)
|
||
|
|
||
|
/* calculation struct:
|
||
|
* used for storing tmp result of ppm
|
||
|
* calculation for each nid
|
||
|
* the calculation process is performed
|
||
|
* on the cpu0, and placed under pdev struct
|
||
|
*/
|
||
|
typedef struct _m_ppm_cal {
|
||
|
uint32_t nid : 24,
|
||
|
rsv : 8;
|
||
|
mac_ntb_record_ctxt_t ntb_record;
|
||
|
} m_ppm_cal_t;
|
||
|
|
||
|
typedef struct _m_ppm_cal_ctxt{
|
||
|
void *phy_ppm_ctxt;
|
||
|
uint64_t last_clear_ntb;
|
||
|
m_ppm_cal_t ppm_cal[MAX_SYNC_CCO_CNT];
|
||
|
} m_ppm_cal_ctxt_t;
|
||
|
|
||
|
/**
|
||
|
*@brief mac_multi_sync_get_ppm_tbl get ppm table
|
||
|
*@param pdev_id pdev id
|
||
|
*@param ppm_tbl point to ppm table
|
||
|
*@exception none
|
||
|
*@return uint8_t vaild nid cnt.
|
||
|
*/
|
||
|
uint8_t mac_multi_sync_get_ppm_tbl(pdevid_t pdev_id, plc_ppm_status_t *ppm_tbl);
|
||
|
|
||
|
#if ENA_SYNC_DIFF_CCO_PPM
|
||
|
|
||
|
/**
|
||
|
*@brief mac_multi_sync_init init
|
||
|
*@param pdev_id init pdev id
|
||
|
*@exception none
|
||
|
*@return none
|
||
|
*/
|
||
|
void mac_multi_sync_init(uint8_t pdev_id);
|
||
|
|
||
|
/**
|
||
|
*@brief mac_multi_ppm_record update ppm and record
|
||
|
*@param pdev_id indicate pdev id
|
||
|
*@param nid rx buf nid
|
||
|
*@param my_nid my nid
|
||
|
*@param r_ts remote timestamp
|
||
|
*@param l_ts local timestamp
|
||
|
*@param l_ntb local ntb
|
||
|
*@min_update_period min period for ppm update
|
||
|
*@ppm_err input my ppm err,
|
||
|
* unit: see PLC_NTB_PPM_SHIFT
|
||
|
*@exception none
|
||
|
*@return ERR_OK:ok
|
||
|
* ERR_FAIL:nid recorde full
|
||
|
* ERR_BUSY:period is small than min_period
|
||
|
*/
|
||
|
uint32_t mac_multi_ppm_record(uint8_t pdev_id, nid_t nid, nid_t my_nid,
|
||
|
uint32_t rate_mode, uint32_t r_ts, uint32_t l_ts, uint32_t l_ntb,
|
||
|
uint32_t min_update_period, int16_t ppm_err);
|
||
|
|
||
|
/**
|
||
|
*@brief mac_multi_sync_nid_timeout_clear clear timeout cco
|
||
|
*@param pdev_id indicate pdev id
|
||
|
*@return none
|
||
|
*/
|
||
|
void mac_multi_sync_nid_timeout_clear(uint8_t pdev_id);
|
||
|
|
||
|
/**
|
||
|
*@brief mac_myntb_to_other_ntb mac_myntb_to_other_ntb
|
||
|
*@param pdev_id indicate pdev id
|
||
|
*@param nid cur nid
|
||
|
*@array array local ntb array
|
||
|
*@array len array len
|
||
|
*@exception none
|
||
|
*@return ERR_OK:ok
|
||
|
* ERR_FAIL:nid = my_nid or nid not found
|
||
|
*/
|
||
|
uint32_t mac_myntb_to_other_ntb(uint8_t pdev_id, nid_t nid, uint32_t *array,
|
||
|
uint32_t len);
|
||
|
|
||
|
/**
|
||
|
*@brief mac_myntb_to_other_ntb mac_other_ntb_to_myntb
|
||
|
*@param pdev_id indicate pdev id
|
||
|
*@param nid cur nid
|
||
|
*@array array remote ntb array
|
||
|
*@array len array len
|
||
|
*@exception none
|
||
|
*@return ERR_OK:ok
|
||
|
* ERR_FAIL:nid = my_nid or nid not found
|
||
|
*/
|
||
|
uint32_t mac_other_ntb_to_myntb(uint8_t pdev_id, nid_t nid, uint32_t *array,
|
||
|
uint32_t len);
|
||
|
|
||
|
/**
|
||
|
*@brief mac_multi_sync_get_ena get cur enable status
|
||
|
*@param pdev_id indicate pdev id
|
||
|
*@exception none
|
||
|
*@return 0:disable, 1:enable
|
||
|
*/
|
||
|
uint8_t mac_multi_sync_get_ena(uint8_t pdev_id);
|
||
|
|
||
|
/**
|
||
|
*@brief mac_multi_sync_ena enable/disable multi sync
|
||
|
*@param pdev_id indicate pdev id
|
||
|
*@param enable_flag set enable/disable
|
||
|
*@exception none
|
||
|
*@return none
|
||
|
*/
|
||
|
void mac_multi_sync_set_ena(uint8_t pdev_id, uint8_t enable);
|
||
|
|
||
|
/**
|
||
|
*@brief mac_multi_sync_get_ppm get mac sync nid ppm
|
||
|
*@param pdev_id indicate pdev id
|
||
|
*@param nid target nid
|
||
|
*@exception none
|
||
|
*@return nid ppm
|
||
|
*/
|
||
|
int32_t mac_multi_sync_get_ppm(uint8_t pdev_id, nid_t nid);
|
||
|
|
||
|
/**
|
||
|
*@brief mac_multi_sync_apply_new_ppm_step apply new ppm step
|
||
|
*@param pdev_id indicate pdev id
|
||
|
*@param nid which nid we choose to apply
|
||
|
*@param ppm_step ppm adjust step
|
||
|
*@exception none
|
||
|
*@return none
|
||
|
*/
|
||
|
void mac_multi_sync_apply_new_ppm_step(uint8_t pdev_id, nid_t nid,
|
||
|
int8_t ppm_step);
|
||
|
|
||
|
#else /* ENA_SYNC_DIFF_CCO_PPM */
|
||
|
|
||
|
#define mac_multi_sync_init(pdev_id)
|
||
|
|
||
|
#define mac_multi_ppm_record(pdev_id, nid, my_nid, rate_mode, \
|
||
|
r_ts, l_ts, l_ntb, min_update_period, ppm_err) (ERR_FAIL)
|
||
|
|
||
|
#define mac_multi_sync_nid_timeout_clear(pdev_id)
|
||
|
|
||
|
#define mac_myntb_to_other_ntb(pdev_id, nid, array, len) (ERR_FAIL)
|
||
|
|
||
|
#define mac_other_ntb_to_myntb(pdev_id, nid, array, len) (ERR_FAIL)
|
||
|
|
||
|
#define mac_multi_sync_get_ena(pdev_id) (0)
|
||
|
|
||
|
#define mac_multi_sync_set_ena(pdev_id, enable)
|
||
|
|
||
|
#define mac_multi_sync_get_ppm(pdev_id, nid) (PLC_MAX_MAC_NTB_PPM)
|
||
|
|
||
|
#define mac_multi_sync_apply_new_ppm_step(pdev_id, nid, ppm_step)
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|