📄 ixtimesyncacc_p.h
字号:
* Macros to handle mutexes in functions other than InitCheck *//* Lock Mutex Macro to be used by functions other than InitCheck */#define IXP400_TIMESYNCACC_MUTEX_LOCK(tsMutex) \do { \ if (IX_SUCCESS != ixOsalMutexLock(&tsMutex, IX_OSAL_WAIT_FOREVER)) \ { \ return IX_TIMESYNCACC_FAILED; \ } /* end of if (IX_SUCCESS != ixOsalMutexLock(&tsMutex, IX_OSAL_WAIT_FOREVER)) */ \} while (0) /* Don't include ';' here *//* Unlock Mutex Macro to be used by functions other than InitCheck */#define IXP400_TIMESYNCACC_MUTEX_UNLOCK(tsMutex) \do { \ if (IX_SUCCESS != ixOsalMutexUnlock(&tsMutex)) \ { \ return IX_TIMESYNCACC_FAILED; \ } /* end of if (IX_SUCCESS != ixOsalMutexUnlock(&tsMutex)) */ \} while (0) /* Don't include ';' here *//* * Macro to be used by InitCheck function *//* Release Mutex Macro */#define IXP400_TIMESYNCACC_MUTEX_RELEASE(tsMutex) \do { \ ixOsalMutexUnlock(&tsMutex); \ ixOsalMutexDestroy(&tsMutex); \} while (0) /* Don't include ';' here *//* * Typedefs used in this file *//* Block Level Registers */typedef struct{ UINT32 tsControl; /* Time Sync Control */ UINT32 tsEvent; /* Time Sync Event */ UINT32 tsAddend; /* Addend */ UINT32 tsAccum; /* Accumulator */ UINT32 tsSysTimeLo; /* SystemTime_Low */ UINT32 tsSysTimeHi; /* SystemTime_High */ UINT32 tsTrgtLo; /* TargetTime_Low */ UINT32 tsTrgtHi; /* TargetTime_High */ UINT32 tsASMSLo; /* AuxSlaveModeSnap_Low */ UINT32 tsASMSHi; /* AuxSlaveModeSnap_High */ UINT32 tsAMMSLo; /* AuxMasterModeSnap_Low */ UINT32 tsAMMSHi; /* AuxMasterModeSnap_High */} IxTimeSyncAccBlockLevelRegisters;/* Port Level Registers */typedef struct{ UINT32 tsChControl; /* TS Channel Control */ UINT32 tsChEvent; /* TS Channel Event */ UINT32 tsTxSnapLo; /* XMIT Snaphot Low */ UINT32 tsTxSnapHi; /* XMIT Snapshot High */ UINT32 tsRxSnapLo; /* RECV Snapshot Low */ UINT32 tsRxSnapHi; /* RECV Snapshot High */ UINT32 tsSrcUUIDLo; /* SourceUUID Low */ UINT32 tsSrcUUIDHi; /* SequenceID0/SourceUUID High */} IxTimeSyncAccPortLevelRegisters;/* Virtual addresses of time sync hardware registers */typedef struct{ /* Block Level Registers */ IxTimeSyncAccBlockLevelRegisters blRegisters; /* Port Level Registers */ IxTimeSyncAccPortLevelRegisters plRegisters[ IXP400_TIMESYNCACC_MAX_1588PTP_PORT];} IxTimeSyncAccRegisters;/* NPE Identifiers */typedef enum { IXP400_TIMESYNCACC_NPEA = 0, /* NPE - A (PTP Port #0) */ IXP400_TIMESYNCACC_NPEB, /* NPE - B (PTP Port #1) */ IXP400_TIMESYNCACC_NPEC, /* NPE - C (PTP Port #2) */ IXP400_TIMESYNCACC_NPE_UNKNOWN = /* NPE - Unknown (Max PTP Port) */ IXP400_TIMESYNCACC_MAX_1588PTP_PORT} IxTimeSyncAccNpeId;/* Initialisation Status */typedef enum { IXP400_TIMESYNCACC_INIT_SUCCESS = IX_SUCCESS, /* Init successful */ IXP400_TIMESYNCACC_INIT_FAIL = IX_FAIL, /* Init failed */ IXP400_TIMESYNCACC_INIT_MUTEX_FAIL, /* Fail to secure mutex */ IXP400_TIMESYNCACC_INIT_TS_SUPPORT_FAIL, /* TimeSync not supported */ IXP400_TIMESYNCACC_INIT_TS_DISABLED_FAIL, /* TimeSync feature disabled */ IXP400_TIMESYNCACC_INIT_ISR_BIND_FAIL, /* ISR not installed */ IXP400_TIMESYNCACC_INIT_MEM_ASGN_FAIL /* Virtual mem assignment fail */} IxTimeSyncAccInitStatus;/* * Variable declarations global to TimeSync access component *//* 1588 Hardware Assist enabled / disabled as found by Feature Control */static BOOL ixTs1588HardwareAssistEnabled = FALSE; /* Assume it is Disabled *//* TimeSync Hardware Registers */static IxTimeSyncAccRegisters ixTsRegisters;/* * The array of NPE Enabled variables will be set to TRUE (enabled) or * FALSE (disabled) of the NPE fused-out status with the help of the * IxFeatureCtrlAcc component. */static BOOL ixTsNpeEnabled[IXP400_TIMESYNCACC_MAX_1588PTP_PORT] ={ FALSE, /* Assume NPE-A disabled */ FALSE, /* Assume NPE-B disabled */ FALSE /* Assume NPE-C disabled */};/* * Mutexes to protect * a) the system time from frequency scaling value change during the * client request to set system time. * b) initialisation sequence completion protection mechanism */static IxOsalMutex ixTsSysTimeMutex; /* (a) */static IxOsalMutex ixTsInitChkMutex; /* (b) *//* * Client registered callback routines for * a) the target time reached or exceeded interrupt notification * b) the auxiliary time stamps availability interrupt notification */static IxTimeSyncAccTargetTimeCallback ixTsTargetTimeCallback = NULL; /*(a)*/static IxTimeSyncAccAuxTimeCallback ixTsAuxMasterTimeCallback = NULL; /*(b)*/static IxTimeSyncAccAuxTimeCallback ixTsAuxSlaveTimeCallback = NULL; /*(b)*//* * The transmit and receive timestamp statistics */static IxTimeSyncAccStats ixTsStats = { 0,0 };/* * Support functions declarations *//* TimeSync Interrupt Service Routine declaration */voidixTimeSyncAccIsr(void);/* Initialise the base address registers */PRIVATE IX_STATUSixTimeSyncAccBlPlBaseAddressesSet (void);/* Initialsation Check */PRIVATE IxTimeSyncAccInitStatusixTimeSyncAccInitCheck (void);PRIVATE IxTimeSyncAcc1588PTPPortModeixTimeSyncAccPTPPortModeGet(IxTimeSyncAcc1588PTPPort ptpPort);/* * Local functions definitions. *//* * ------------------------------------------------------------------ * * Block level configuration support functions definitions * ------------------------------------------------------------------ * *//* Enable Auxiliary Master Mode Snapshot Interrupt */PRIVATE IXP400_TIMESYNCACC_INLINE voidixTimeSyncAccControlAmmsInterruptMaskSet(void){ /* SET the amms bit */ IXP400_TIMESYNCACC_BIT_SET(ixTsRegisters.blRegisters.tsControl, IXP400_TIMESYNCACC_TSC_AMMS_MASK);} /* end of ixTimeSyncAccControlAmmsInterruptMaskSet() function *//* Enable Auxiliary Slave Mode Snapshot Interrupt */PRIVATE IXP400_TIMESYNCACC_INLINE voidixTimeSyncAccControlAsmsInterruptMaskSet(void){ /* SET the asms bit */ IXP400_TIMESYNCACC_BIT_SET(ixTsRegisters.blRegisters.tsControl, IXP400_TIMESYNCACC_TSC_ASMS_MASK);} /* end of ixTimeSyncAccControlAsmsInterruptMaskSet() function *//* Enable Target Time Interrupt */PRIVATE IXP400_TIMESYNCACC_INLINE voidixTimeSyncAccControlTtmInterruptMaskSet(void){ /* SET the ttm bit */ IXP400_TIMESYNCACC_BIT_SET(ixTsRegisters.blRegisters.tsControl, IXP400_TIMESYNCACC_TSC_TTM_MASK);} /* end of ixTimeSyncAccControlTtmInterruptMaskSet() function *//* Get Auxiliary Master Mode Snapshot Interrupt Mask value */PRIVATE IXP400_TIMESYNCACC_INLINE BOOL ixTimeSyncAccControlAmmsInterruptMaskGet(void){ /* Is the amms bit SET? */ return IXP400_TIMESYNCACC_BIT_SET_CHECK(ixTsRegisters.blRegisters.tsControl, IXP400_TIMESYNCACC_TSC_AMMS_MASK);} /* end of ixTimeSyncAccControlAmmsInterruptMaskGet() function *//* Get Auxiliary Slave Mode Snapshot Interrupt Mask value */PRIVATE IXP400_TIMESYNCACC_INLINE BOOLixTimeSyncAccControlAsmsInterruptMaskGet(void){ /* Is the asms bit SET? */ return IXP400_TIMESYNCACC_BIT_SET_CHECK(ixTsRegisters.blRegisters.tsControl, IXP400_TIMESYNCACC_TSC_ASMS_MASK);} /* end of ixTimeSyncAccControlAsmsInterruptMaskGet() function *//* Get Target Time Interrupt Mask value */PRIVATE IXP400_TIMESYNCACC_INLINE BOOLixTimeSyncAccControlTtmInterruptMaskGet(void){ /* Is the ttm bit SET? */ return IXP400_TIMESYNCACC_BIT_SET_CHECK(ixTsRegisters.blRegisters.tsControl, IXP400_TIMESYNCACC_TSC_TTM_MASK);} /* end of ixTimeSyncAccControlTtmInterruptMaskGet() function *//* Disable Auxiliary Master Mode Snapshot Interrupt */PRIVATE IXP400_TIMESYNCACC_INLINE voidixTimeSyncAccControlAmmsInterruptMaskClear(void){ /* CLEAR the amms bit */ IXP400_TIMESYNCACC_BIT_CLEAR(ixTsRegisters.blRegisters.tsControl, IXP400_TIMESYNCACC_TSC_AMMS_MASK);} /* end of ixTimeSyncAccControlAmmsInterruptMaskClear() function *//* Disable Auxiliary Slave Mode Snapshot Interrupt */PRIVATE IXP400_TIMESYNCACC_INLINE voidixTimeSyncAccControlAsmsInterruptMaskClear(void){ /* CLEAR the asms bit */ IXP400_TIMESYNCACC_BIT_CLEAR(ixTsRegisters.blRegisters.tsControl, IXP400_TIMESYNCACC_TSC_ASMS_MASK);} /* end of ixTimeSyncAccControlAsmsInterruptMaskClear() function *//* Disable Target Time Interrupt */PRIVATE IXP400_TIMESYNCACC_INLINE voidixTimeSyncAccControlTtmInterruptMaskClear(void){ /* CLEAR the ttm bit */ IXP400_TIMESYNCACC_BIT_CLEAR(ixTsRegisters.blRegisters.tsControl, IXP400_TIMESYNCACC_TSC_TTM_MASK);} /* end of ixTimeSyncAccControlTtmInterruptMaskClear() function *//* Reset Hardware Assist block */PRIVATE IXP400_TIMESYNCACC_INLINE voidixTimeSyncAccControlReset(void){ /* SET the rst bit */ IXP400_TIMESYNCACC_BIT_SET(ixTsRegisters.blRegisters.tsControl, IXP400_TIMESYNCACC_TSC_RESET); /* CLEAR the rst bit */ IXP400_TIMESYNCACC_BIT_CLEAR(ixTsRegisters.blRegisters.tsControl, IXP400_TIMESYNCACC_TSC_RESET);} /* end of ixTimeSyncAccControlReset() function *//* Poll for Auxiliary Master Mode Snapshot Captured event */PRIVATE IXP400_TIMESYNCACC_INLINE BOOL ixTimeSyncAccEventAmmsFlagGet(void){ /* Is the snm bit SET? */ return IXP400_TIMESYNCACC_BIT_SET_CHECK(ixTsRegisters.blRegisters.tsEvent, IXP400_TIMESYNCACC_TSE_SNM);} /* end of ixTimeSyncAccEventAmmsFlagGet() function *//* Poll for Auxiliary Slave Mode Snapshot Captured event */PRIVATE IXP400_TIMESYNCACC_INLINE BOOLixTimeSyncAccEventAsmsFlagGet(void){ /* Is the sns bit SET? */ return IXP400_TIMESYNCACC_BIT_SET_CHECK(ixTsRegisters.blRegisters.tsEvent, IXP400_TIMESYNCACC_TSE_SNS);} /* end of ixTimeSyncAccEventAsmsFlagGet() function *//* end of Poll for Target Time Reached event function */PRIVATE IXP400_TIMESYNCACC_INLINE BOOLixTimeSyncAccEventTtmFlagGet(void){ /* Is the ttipend bit SET? */ return IXP400_TIMESYNCACC_BIT_SET_CHECK(ixTsRegisters.blRegisters.tsEvent, IXP400_TIMESYNCACC_TSE_TTIPEND);} /* end of ixTimeSyncAccEventTtmFlagGet() function *//* Clear Auxiliary Master Mode Snapshot Captured event */PRIVATE IXP400_TIMESYNCACC_INLINE voidixTimeSyncAccEventAmmsFlagClear(void){ /* CLEAR the snm bit by writing '1' onto it */ IXP400_TIMESYNCACC_BIT_SET(ixTsRegisters.blRegisters.tsEvent,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -