embeddedsw/XilinxProcessorIPLib/drivers/axiethernet/examples/avb/xavb.h
Jagannadha Sutradharudu Teki 2c8f92039d embeddesw: Add initial code support
Added initial support Xilinx Embedded Software.

Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
2014-06-24 16:45:01 +05:30

668 lines
25 KiB
C
Executable file

/******************************************************************************
*
* Copyright (C) 2008 - 2014 Xilinx, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/*****************************************************************************/
/**
*
* @file xavb.h
*
* This header file contains the identifiers and basic driver functions (or
* macros) that can be used to access the device. Other driver functions
* are defined in xavb.h.
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- ---- -------- -----------------------------------------------
* 1.00a mbr 09/19/08 First release
* 1.01a mbr 06/24/09 PTP frame format updates for IEEE802.1 AS draft 5-0
* 2_02a mbr 09/16/09 Updates for programmable PTP timers
* 2_04a kag 07/23/10 PTP frame format updates for IEEE802.1 AS draft 6-7
* 3_01a kag 08/29/11 Added new APIs to update the RX Filter Control Reg.
* Fix for CR:572539. Updated bit map for Rx Filter
* control reg.
* 4_0 asa 03/06/14 Fix for CR 740863. The value of XAVB_CLOCK_LOCK_THRESHOLD
* is increased to 1000ns (1 us) to make it more
* meningful and reasonable.
*
* </pre>
*
******************************************************************************/
#ifndef XAVB_H /* prevent circular inclusions */
#define XAVB_H /* by using protection macros */
#ifdef __cplusplus
extern "C" {
#endif
/***************************** Include Files *********************************/
#include "xavb_hw.h"
#include "xstatus.h"
#include "stdio.h"
/************************** Constant Definitions *****************************/
/** @name Define the Debug Level Verbosity for print messages for this driver
* @{
*/
#undef DEBUG_XAVB_LEVEL1 /* Basic messages and PTP frame reception messages */
#undef DEBUG_XAVB_LEVEL2 /* PTP Calculation messages */
#undef DEBUG_XAVB_LEVEL3 /* PTP frame transmission messages */
/** @name MAC Latency Definitions
* @{
*/
#define XAVB_TX_MAC_LATENCY_IN_NS 80
#define XAVB_RX_MAC_LATENCY_IN_NS 80
/* @} */
/** @name PTP Buffer Storage Definitions
* @{
*/
#define XAVB_PTP_TX_SYNC 0x0
#define XAVB_PTP_TX_FOLLOW_UP 0x1
#define XAVB_PTP_TX_PDELAYREQ 0x2
#define XAVB_PTP_TX_PDELAYRESP 0x3
#define XAVB_PTP_TX_PDELAYRESP_FOLLOW_UP 0x4
#define XAVB_PTP_TX_ANNOUNCE 0x5
#define XAVB_PTP_TX_SIGNALING 0x6
/* @} */
/** @name PTP Packet Message Type Definitions
* @{
*/
#define XAVB_PTP_TYPE_SYNC 0x0
#define XAVB_PTP_TYPE_FOLLOW_UP 0x8
#define XAVB_PTP_TYPE_PDELAYREQ 0x2
#define XAVB_PTP_TYPE_PDELAYRESP 0x3
#define XAVB_PTP_TYPE_PDELAYRESP_FOLLOW_UP 0xA
#define XAVB_PTP_TYPE_ANNOUNCE 0xB
#define XAVB_PTP_TYPE_SIGNALING 0xC
/* @} */
/** @name Common PTP Frame Structure Definitions.
* @{
*/
#define XAVB_PTP_PKT_CAPTURED_TIMESTAMP_OFFSET 0x000000FC
/* @} */
/** @name General Tx PTP Frame Structure Definitions.
* @{
*/
#define XAVB_PTP_TX_PKT_SA_UPPER_OFFSET 0x0000000C
#define XAVB_PTP_TX_PKT_SA_LOWER_OFFSET 0x00000010
#define XAVB_PTP_TX_PKT_TYPE_OFFSET 0x00000014
#define XAVB_PTP_TX_PKT_CORRECTION_FIELD_OFFSET 0x00000020
#define XAVB_PTP_TX_PKT_PORTID_UPPER_OFFSET 0x00000028
#define XAVB_PTP_TX_PKT_PORTID_MID_OFFSET 0x0000002C
#define XAVB_PTP_TX_PKT_PORTID_LOWER_OFFSET 0x00000030
#define XAVB_PTP_TX_PKT_SEQUENCEID_OFFSET 0x00000034
#define XAVB_PTP_TX_PKT_TIMESTAMP_UPPER_OFFSET 0x00000038
#define XAVB_PTP_TX_PKT_TIMESTAMP_MID_OFFSET 0x0000003C
#define XAVB_PTP_TX_PKT_TIMESTAMP_LOWER_OFFSET 0x00000040 /* upper 2 bytes */
#define XAVB_PTP_TX_PKT_REQ_PORTID_UPPER_OFFSET 0x00000040 /* lower 2 bytes */
#define XAVB_PTP_TX_PKT_REQ_PORTID_MID_OFFSET 0x00000044
#define XAVB_PTP_TX_PKT_REQ_PORTID_LOWER_OFFSET 0x00000048
/* @} */
/** @name Tx Announce PTP Frame Structure Definitions.
* @{
*/
#define XAVB_PTP_TX_PKT_ANNOUNCE_CURR_UTCOFF_OFFSET 0x00000040
#define XAVB_PTP_TX_PKT_ANNOUNCE_QUAL_LOW_PRI2_GMID_HI_OFFSET 0x00000048
#define XAVB_PTP_TX_PKT_ANNOUNCE_GMID_MID_OFFSET 0x0000004C
#define XAVB_PTP_TX_PKT_ANNOUNCE_GMID_LOW_STEPSREMOVED_HI_OFFSET 0x00000050
#define XAVB_PTP_TX_PKT_ANNOUNCE_STEPSREMOVED_LOW_TIMESRC_OFFSET 0x00000054
#define XAVB_PTP_TX_PKT_ANNOUNCE_TLVLEN_PATHSEQ_START_OFFSET 0x00000058
/* @} */
/** @name PTP frame constant definitions
* @{
*
* Constant value for the control field and LogMeanMessageInterval field for
* pDelayResp and pDelayRespFollowUp PTP frames (defined in IEEE802.1 AS)
*/
#define XAVB_PDELAY_LOG_MEAN_MESSAGE_INT 0x7F050000
/* @} */
/** @name Default LogMeanInterval values
* @{
*/
#define XAVB_DEFAULT_LOG_MEAN_SYNC_INTERVAL (-3) /** 2^(-3) = 125ms */
#define XAVB_DEFAULT_LOG_MEAN_PDELAY_REQ_INTERVAL 0 /** 128/128 = 2^(0) = 1 s */
#define XAVB_DEFAULT_LOG_MEAN_ANNOUNCE_INTERVAL 0 /** 128/128 = 2^(0) = 1 s */
#define XAVB_PKT_TYPE_DISABLED 0xffff
#define XAVB_MAX_SUPPORTED_LOG_MEAN_INTERVAL 8 /** 32768/128 = 256 s */
#define XAVB_MIN_SUPPORTED_LOG_MEAN_INTERVAL (-7) /** 1/128 s */
/* @} */
/** @name Announce / Sync Timeout values
* @{
*/
/** XAVB_ANNOUNCE_RECEIPT_TIMEOUT is the number of announce
* intervals without the receipt of an Announce message from
* the GM that are allowed before the GM is assumed to be no
* longer present and BMCA should be run again
*/
#define XAVB_ANNOUNCE_RECEIPT_TIMEOUT 2
/** XAVB_SYNC_RECEIPT_TIMEOUT is the number of sync intervals
* without the receipt of an Sync message from the GM that are
* allowed before the GM is assumed to be no longer present and
* BMCA should be run again
*/
#define XAVB_SYNC_RECEIPT_TIMEOUT 3
/* @} */
/** @name AS Network Requirements
* @{
*/
/** XAVB_NEIGHBOR_PROP_DELAY_THRESH is the maximum allowed delay (in nanosecs)
* across a full duplex link for which the AVB protocol is allowed to function.
* Although this parameter is defined in the IEEE spec, no default is defined.
*/
#define XAVB_NEIGHBOR_PROP_DELAY_THRESH 5000
/** XAVB_ALLOWED_LOST_RESPONSES is the number of Pdelay_Req
* messages for which a valid response is not received, above
* which the Peer should no longer be considered ASCapable
*/
#define XAVB_ALLOWED_LOST_RESPONSES 3
/* @} */
/** @name General Rx PTP Frame Structure Definitions.
* @{
*/
#define XAVB_PTP_RX_PKT_SA_UPPER_OFFSET 0x00000004
#define XAVB_PTP_RX_PKT_SA_LOWER_OFFSET 0x00000008
#define XAVB_PTP_RX_PKT_TYPE_OFFSET 0x0000000C
#define XAVB_PTP_RX_PKT_CORRECTION_FIELD_OFFSET 0x00000018
#define XAVB_PTP_RX_PKT_PORTID_UPPER_OFFSET 0x00000020
#define XAVB_PTP_RX_PKT_PORTID_MID_OFFSET 0x00000024
#define XAVB_PTP_RX_PKT_PORTID_LOWER_OFFSET 0x00000028
#define XAVB_PTP_RX_PKT_SEQUENCEID_OFFSET 0x0000002C
#define XAVB_PTP_RX_PKT_TIMESTAMP_UPPER_OFFSET 0x00000030
#define XAVB_PTP_RX_PKT_TIMESTAMP_MID_OFFSET 0x00000034
#define XAVB_PTP_RX_PKT_TIMESTAMP_LOWER_OFFSET 0x00000038 /* upper 2 bytes */
#define XAVB_PTP_RX_PKT_REQ_PORTID_UPPER_OFFSET 0x00000038 /* lower 2 bytes */
#define XAVB_PTP_RX_PKT_REQ_PORTID_MID_OFFSET 0x0000003C
#define XAVB_PTP_RX_PKT_REQ_PORTID_LOWER_OFFSET 0x00000040
/* @} */
/** @name Rx Announce PTP Frame Structure Definitions.
* @{
*/
#define XAVB_PTP_RX_PKT_ANNOUNCE_PRI1_QUAL_HI_OFFSET 0x0000003C
#define XAVB_PTP_RX_PKT_ANNOUNCE_QUAL_LOW_PRI2_GMID_HI_OFFSET 0x00000040
#define XAVB_PTP_RX_PKT_ANNOUNCE_GMID_MID_OFFSET 0x00000044
#define XAVB_PTP_RX_PKT_ANNOUNCE_GMID_LOW_STEPSREMOVED_HI_OFFSET 0x00000048
#define XAVB_PTP_RX_PKT_ANNOUNCE_STEPSREMOVED_LOW_TIMESRC_OFFSET 0x0000004C
/* @} */
/** @name Rx Signalling PTP Frame Structure Definitions.
* @{
*/
#define XAVB_PTP_RX_PKT_SIGNALING_DELAY_INTERVAL_OFFSET 0x00000044
/* @} */
/** @name Standard PTP Frame Field Definitions (from IEEE802.1AS specification).
* @{
*/
#define XAVB_PTP_ETHERTYPE 0x88F7
#define XAVB_PTP_VERSION_PTP 2
/* @} */
/** @name Real Time Clock Definitions.
* @{
*/
#define XAVB_ONE_SECOND 1000000000 /**< Value in ns */
#define XAVB_PERIOD_8KHZ 125000 /**< Value in ns */
/* @} */
/** @name Real Time Clock Locked Definitions.
* @{
* If the Slave error is > this threshold then define PTP to be
* unlocked and link not asCapable.
* @note: This threshold is not specified in IEEE 802.1as.
*/
#define XAVB_CLOCK_LOCK_THRESHOLD 1000 /**< Value in ns */
/* @} */
/** @name RTC Increment Value Update Definitions
* @{
* Define how often to re-calculate the RTC Increment This value
* indicates how many good Sync/FollowUp message pairs
* are received before the re-calculation is performed.
*/
#define XAVB_NUM_SYNC_FU_PAIR_CALC_RTC_INCREMENT 2
/* @} */
/**************************** Type Definitions *******************************/
/**
* Callback function. The first argument is a callback reference passed in by
* the upper layer when setting the callback functions, and passed back to the
* upper layer when the callback is invoked.
* The second argument is a '1' if a Grandmaster Discontinuity event has occurred
* otherwise it is '0'.
*/
typedef void (*XAvb_Handler)(void *CallBackRef, u32 TimestampsUncertain);
/**
* This typedef contains configuration information for a device.
*/
typedef struct {
u16 DeviceId; /**< Unique ID of device */
u32 BaseAddress; /**< Register base address */
} XAvb_Config;
/**
* This typedef defines the format for a data structure which stores the Port
* Identity information from received Announce packets
*/
typedef struct
{
u32 ClockIdentityUpper; /**< Upper 4 bytes of ClockIdentity */
u32 ClockIdentityLower; /**< Lower 4 bytes of ClockIdentity*/
u16 PortNumber; /**< PortNumber associated with ClockIdentity*/
} XAvb_PortIdentity;
/**
* This typedef defines the format for a data structure which stores the Clock
* Identity information from received Announce packets
*/
typedef struct
{
u32 ClockIdentityUpper; /**< Upper 4 bytes of ClockIdentity */
u32 ClockIdentityLower; /**< Lower 4 bytes of ClockIdentity*/
} XAvb_ClockIdentity;
/**
* This typedef defines the quality of a clock
*/
typedef struct
{
u8 clockClass; /**< Announce message: clockClass */
u8 clockAccuracy; /**< Announce message: clockAccuracy */
u16 offsetScaledLogVariance; /**< Announce message: offsetScaledLogVariance*/
} XAvb_ClockQuality;
/**
* This typedef defines the format for a data structure which stores the relevant
* fields which are captured from Announce Packets.
*/
typedef struct
{
XAvb_PortIdentity SourcePortIdentity; /**< Announce message: sourcePortIdentity */
XAvb_ClockIdentity GrandmasterIdentity; /**< Announce message: grandmasterIdentity */
u16 stepsRemoved; /**< Announce message: stepsRemoved */
XAvb_ClockQuality ClockQuality; /**< Announce message: grandmasterClockQuality */
u8 GrandmasterPriority1; /**< Announce message: grandmasterPriority1*/
u8 GrandmasterPriority2; /**< Announce message: grandmasterPriority2*/
u8 IAmTheRtcMaster; /**< Boolean: 1 = grandmaster, 0 = slave*/
u16 tlvLengthField; /**< Announce message: lengthField (for TLV)*/
char logMessageInterval; /**< Announce message: logMessageInterval.
* NOTE: 8-bit signed integer */
u16 AnnounceIntervalDuration; /**< Announce Interval in units of 1/128 secs */
} XAvb_BmcData;
/**
* This typedef defines the format for a data structure which stores information
* relating to the 1588 based PTP timing calculations
*/
typedef struct
{
u32 Nanosec; /**< ns value for sync frame tx request */
u32 SlaveSyncTimestamp; /**< The timestamp taken of a rx'd sync */
u32 MasterCorrectionField; /**< Correction Field from rx'd follow-up */
u32 PDelayTimestampT1; /**< T1 :PDelayReq Frame transmission */
u32 PDelayTimestampT2; /**< T2 :PDelayReq rx'd at link partner */
u32 PDelayTimestampT3; /**< T3 :PDelayResp Frame reception */
u32 PDelayTimestampT4; /**< T4 :PDelayResp tx'd by link partner */
u32 LinkDelay; /**< Last calculated value of Link Delay */
u32 NewSlaveTime; /**< RTC ns at slave for last rx'd sync */
u32 NewMasterTime; /**< RTC ns at master for last tx'd sync */
u32 OldSlaveTime; /**< Stored RTC slave ns for past sync rx */
u32 OldMasterTime; /**< Stored RTC master ns for past sync tx*/
u32 NsOffsetForPDelayResp; /**< RTC ns offset at PDelayResp tx time */
} XAvb_PtpStruct;
/**
* This typedef defines the format for a data structure which stores the last
* used sequence ID for all of the PTP timing frames.
*/
typedef struct
{
u16 SyncSequenceId; /**< SequenceId of the latest RX'd Sync message */
u16 FollowUpSequenceId; /**< SequenceId of the latest RX'd FollowUp message */
u16 PDelayReqSequenceId; /**< SequenceId of the latest TX'd PDelayReq message */
u16 PDelayRespSequenceId; /**< SequenceId of the latest RX'd PDelayResp message */
u16 PDelayFollowUpSequenceId; /**< SequenceId of the latest RX'd PDelayRespFollowUp message */
u16 OldSyncSequenceId; /**< SequenceId of the previous RX'd Sync message used
* for XAvb_UpdateRtcIncrement() calculations */
u16 NewSyncSequenceId; /**< SequenceId of the current RX'd Sync message used
* for XAvb_UpdateRtcIncrement() calculations */
} XAvb_SequenceIdStruct;
/**
* The Signalling frame defines the delays to be used between Sync Frames, Link
* Delay measurements and Announce Frame events
*/
typedef struct
{
u16 SyncIntervalDuration; /**< Sync Interval in units of 1/128 seconds */
u16 LinkDelayIntervalDuration; /**< Link Delay Interval in units of 1/128 seconds */
u16 AnnounceIntervalDuration; /**< Announce Interval in units of 1/128 seconds */
} XAvb_SignallingFrameData;
/**
* This typedef defines the various counters which have to maintained for the
* PTP operation.
*/
typedef struct
{
u8 RxPtpHardPointer; /**< The Rx PTP Buffer last written to */
u8 RxPtpSoftPointer; /**< The current software pointer to Rx Buffer */
u16 CounterSyncInterval; /**< To count units of 1/128 seconds */
u16 CounterLinkDelayInterval; /**< To count units of 1/128 seconds */
u16 CounterAnnounceInterval; /**< To count units of 1/128 seconds */
u8 CounterSyncEvents; /**< To count the number of Sync Events */
} XAvb_Counters;
/** Keep track of state machine data to make sure we're fully
* compliant with the spec
*/
typedef struct
{
u8 lostResponses; /**< Keep track of the state machine errors */
u8 rcvdPDelayResp; /**< Received a valid PDelayResp packet since PDelayReq was sent */
u8 rcvdPDelayRespFollowUp; /**< Received a valid PDelayFollowUp packet since PDelayResp was received */
XAvb_PortIdentity respPortIdentity; /**< sourcePortIdentity of the last PDelayResp packet received */
XAvb_PortIdentity respReqPortIdentity; /**< requestingPortIdentity of the last PDelayResp packet received */
} XAvb_StateMachineData;
/** This struct captures information from RX'd Sync/FollowUp message pairs in a format similiar
* to the MDSyncReceive structure described in the IEEE P802.1AS specification.
*/
typedef struct
{
/** The logMessageInterval is the value of the logMessageInterval of the time-synchronization
* event message received by this port. It is the logSyncInterval of the upstream MasterPort
* that sent the event message.*/
u8 logMessageInterval;
/** Convert logMessageInterval into a value we can relate to our 1/128 ns clk pulse */
u16 SyncIntervalDuration;
} XAvb_MDSyncReceive;
/**
* The XAvb driver instance data. The user is required to allocate a
* variable of this type for every AVB device in the system. A pointer
* to a variable of this type is then passed to the driver API functions.
*/
typedef struct {
/** hardware configuration */
XAvb_Config Config;
/** Device is initialized and ready */
u32 IsReady;
/** Is AVB enabled */
u32 AVBIsEnabled;
/** The PTP algorithm can be started and stopped as requested */
u32 PtpIsRunning;
/** The peer must be AS capable before we start full blown PTP */
u32 PeerASCapable;
/** Current PTP Slave Error is less than XAVB_CLOCK_LOCK_THRESHOLD nsec */
u32 PTPLocked;
/** Store the info from the latest RX'd Sync/Follow message pair */
XAvb_MDSyncReceive latestMDSyncReceive;
/** Contains the local port Identity information */
XAvb_PortIdentity portIdLocal;
/** Create a data structure for the Best Master Clock Algorithm (BMCA) */
XAvb_BmcData CurrentBmc;
/** Create a data structure for the Precise Timing Protocol (PTP) */
XAvb_PtpStruct PtpRecords;
/** Create a data structure to record the PTP frames Sequence ID values */
XAvb_SequenceIdStruct SequenceIdRecords;
/** Create a data structure to store the Signalling frame information */
XAvb_SignallingFrameData SignallingFrameData;
/** Create a data structure to store various PTP counters/timers */
XAvb_Counters PtpCounters;
/** Create a data structure to store state machine flags */
XAvb_StateMachineData StateMachineData;
/** Callback Handler for a GrandMaster discontinuity event */
XAvb_Handler GMDiscHandler;
/** Callback ref for a GrandMaster discontinuity event */
void *GMDiscCallBackRef;
} XAvb;
/***************** Macros (Inline Functions) Definitions *********************/
/************************** Function Prototypes ******************************/
/*
* Functions in xavb.c
*/
XStatus XAvb_CfgInitialize(XAvb *InstancePtr, \
XAvb_Config *ConfigPtr, \
u32 EffectiveAddress);
XAvb_Config *XAvb_LookupConfig(u16 DeviceId);
void XAvb_Reset(XAvb * InstancePtr);
void XAvb_Start(XAvb * InstancePtr);
void XAvb_Stop(XAvb * InstancePtr);
void XAvb_PtpTimerInterruptHandler(XAvb * InstancePtr);
void XAvb_PtpRxInterruptHandler(XAvb * InstancePtr);
void XAvb_SetupRxFilterControlPcp(XAvb * InstancePtr, \
u32 VlanPriority, \
u8 SrClass);
void XAvb_SetupRxFilterControlVid(XAvb * InstancePtr, \
u32 VlanVid, \
u8 SrClass);
void XAvb_SetupRxFilterControlMatchMode(XAvb * InstancePtr, \
u32 VlanMatchMode);
/*
* Functions in xavb_ptp_packets.c
*/
u32 XAvb_ReorderWord(u32 Data);
u32 XAvb_CompareClockIdentity(u32 BaseAddress, \
XAvb_ClockIdentity Identity1, \
XAvb_ClockIdentity Identity2);
u32 XAvb_ComparePortIdentity(u32 BaseAddress, \
XAvb_PortIdentity Identity1, \
XAvb_PortIdentity Identity2);
void XAvb_WriteToMultipleTxPtpFrames(u32 BaseAddress, \
u32 Address, \
u32 Data, \
u32 DataBitEnable, \
u8 BufferEnable);
u32 XAvb_IncSequenceId(u32 BaseAddress, \
u32 PTPFrameBaseAddress);
void XAvb_GetPortIdentity(u32 BaseAddress, \
u32 PtpFrameBaseAddr, \
u32 PortIdOffset, \
XAvb_PortIdentity *portID);
void XAvb_WaitOnTxPtpQueue(XAvb * InstancePtr);
void XAvb_MasterSendAnnounce(XAvb * InstancePtr);
void XAvb_MasterSendSync(XAvb * InstancePtr);
void XAvb_MasterSendFollowUp(XAvb * InstancePtr);
void XAvb_SendPDelayReq(XAvb * InstancePtr);
void XAvb_SendPDelayResp(XAvb * InstancePtr, \
u32 PtpFrameBaseAddr);
void XAvb_SendPDelayRespFollowUp(XAvb * InstancePtr);
u32 XAvb_IsRxFramePTP(XAvb * InstancePtr, \
u32 PtpFrameBaseAddr);
void XAvb_DecodeRxSync(XAvb * InstancePtr, \
u32 PtpFrameBaseAddr);
void XAvb_DecodeRxFollowUp(XAvb * InstancePtr, \
u32 PtpFrameBaseAddr);
void XAvb_DecodeRxPDelayResp(XAvb * InstancePtr, \
u32 PtpFrameBaseAddr);
void XAvb_DecodeRxPDelayRespFollowUp(XAvb * InstancePtr, \
u32 PtpFrameBaseAddr);
void XAvb_DecodeRxSignaling(XAvb * InstancePtr, \
u32 PtpFrameBaseAddr);
u16 XAvb_UpdateIntervalDuration(u16 currentIntervalDuration, \
char logMeanVal);
u16 XAvb_ConvertLogMeanToDuration(char logMeanVal);
char XAvb_ConvertDurationToLogMean(u16 fractionalVal);
void XAvb_UpdateLogMeanMessageInterval(u32 BaseAddress, \
u32 PtpFrameBaseAddr, \
u16 intervalDuration);
void XAvb_SetupSourcePortIdentity(XAvb * InstancePtr, \
XAvb_PortIdentity systemIdentity);
/*
* Functions in xavb_ptp_bmca.c
*/
void XAvb_DecodeTxAnnounceFrame(XAvb * InstancePtr);
void XAvb_DecodeRxAnnounceFrame(XAvb * InstancePtr, \
u32 PtpFrameBaseAddr);
void XAvb_ReadAnnounceFrame(u32 BaseAddress, \
u32 PtpFrameBaseAddr, \
XAvb_BmcData* AnnounceFrame);
void XAvb_ReadAnnounceReceiptTimeout(u32 BaseAddress, \
u32 PtpFrameBaseAddr, \
XAvb_BmcData * AnnounceFrame);
void XAvb_UpdateBmcRecords(XAvb_BmcData* NewMaster, \
XAvb_BmcData* CurrentBmc);
u32 XAvb_BestMasterClockAlgorithm(XAvb_BmcData* AnnounceFrame, \
XAvb_BmcData* CurrentBmc);
void XAvb_BecomeRtcMaster(XAvb * InstancePtr, u8 txAnnounceHasWon);
void XAvb_BecomeRtcSlave(XAvb * InstancePtr);
void XAvb_ChangePTPLockStatus(XAvb * InstancePtr, u8 locked);
void XAvb_ChangePeerASCapability(XAvb *InstancePtr, u8 capable);
void XAvb_SetGMDiscontinuityHandler(XAvb *InstancePtr, \
XAvb_Handler FuncPtr, \
void *CallBackRef);
/*
* Functions in xavb_rtc_sync.c
*/
u32 XAvb_CaptureNanoSec(u32 BaseAddress, \
u32 PtpFrameBaseAddr);
void XAvb_CalcDelay(XAvb * InstancePtr);
void XAvb_CalcRtcOffset(XAvb * InstancePtr, \
u32 PtpFrameBaseAddr);
void XAvb_UpdateRtcIncrement(XAvb * InstancePtr);
void XAvb_Adjust8kClock(u32 BaseAddress, \
u32 NewOffset);
#ifdef __cplusplus
}
#endif
#endif /* end of protection macro */