📄 txc_envoy_spi3_real.c
字号:
----- ------- ------------ ----------------------
0.5.0 6/03/04 F. Giannella Initial release (beta)
*--------------------------------------------------------------------------*/
TXC_U16BIT ENVOY_RtrvSpi3ExtGlobalCountersReal (TXC_U16BIT handle,
TXC_IfSPI3_EXT_GLBL_CTR_STRUCT *spi3ExtGlobalCountersDataPtr)
{
TXC_U16BIT error = TXC_NO_ERR;
TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
TXC_REG_ACCESS_32BIT_STRUCT regData[3];
TXC_REG_32 *baseAddr;
ENVOY_ISPI_GLBL_CNT_STRUCT *spi3InputGlobalCtrsPtr;
/* First, fill the batch platform header. This function requires 5
registers to be read */
memset (®Data[0], 0, (3 * sizeof(TXC_REG_ACCESS_32BIT_STRUCT) ) );
batchData.regDataPtr = ®Data[0];
batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
batchData.semId = ENVOY_DbGetSemId();
batchData.regCount = 3;
/* MASKs */
regData[0].mask = 0xFFFFFFFF; /* reg0: 2060 */
regData[1].mask = 0xFFFFFFFF; /* reg1: 2064 */
regData[2].mask = 0xFFFFFFFF; /* reg2: 2068 */
/* determine the base address of the device */
baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);
spi3InputGlobalCtrsPtr = (ENVOY_ISPI_GLBL_CNT_STRUCT *) (baseAddr + ENVOY_ISPI_GLBL_CNT_OFFSET);
regData[0].addr = (TXC_REG_32 *) &spi3InputGlobalCtrsPtr->iSpi3GlblParErrCntReg;
regData[1].addr = (TXC_REG_32 *) &spi3InputGlobalCtrsPtr->iSpi3GlblSopErrCntReg;
regData[2].addr = (TXC_REG_32 *) &spi3InputGlobalCtrsPtr->iSpi3GlblDiscardCntReg;
/* Read the registers and return the data */
error = TXC_BatchReg32BitRead (&batchData);
if (error == TXC_NO_ERR)
{
spi3ExtGlobalCountersDataPtr->globalCtrDeviceExtension.envoyCe2Ce4GlobalCtrAttr.inputSpi3ParityCheckErrorCounter = regData[0].data;
spi3ExtGlobalCountersDataPtr->globalCtrDeviceExtension.envoyCe2Ce4GlobalCtrAttr.inputSpi3SopErrorCounter = regData[1].data;
spi3ExtGlobalCountersDataPtr->globalCtrDeviceExtension.envoyCe2Ce4GlobalCtrAttr.inputSpi3DiscardCounter = regData[2].data;
}
return error;
}
/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************
FUNCTION: ENVOY_RtrvSpi3InputGlobalStatusReal
DESCRIPTION: This function actually processess the TXC_IfSPI3_Ext_InputGlobalStatusRtrv
API function.
INPUTS: Same as TXC_IfSPI3_Ext_InputGlobalStatusRtrv except for the interfaceId
RETURNS: TXC_NO_ERR or an appropriate specific error code listed in
appendix.
CAVEATS: None
REVISION HISTORY:
Rev # Date Author Description
----- ------- ------------ ----------------------
0.5.0 6/03/04 F. Giannella Initial release (beta)
*--------------------------------------------------------------------------*/
TXC_U16BIT ENVOY_RtrvSpi3InputGlobalStatusReal (TXC_U16BIT handle,
TXC_IfSPI3_EXT_INPUT_GLBL_STATUS_STRUCT *spi3InputGlobalStatusDataPtr)
{
TXC_U16BIT error = TXC_NO_ERR;
TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
TXC_REG_ACCESS_32BIT_STRUCT regData[1];
TXC_REG_32 *baseAddr;
ENVOY_ISPI_GLBL_STATUS_STRUCT *spi3InputGlobalStatusPtr;
/* First, fill the batch platform header. This function requires 5
registers to be read */
memset (®Data[0], 0, (sizeof(TXC_REG_ACCESS_32BIT_STRUCT) ) );
batchData.regDataPtr = ®Data[0];
batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
batchData.semId = ENVOY_DbGetSemId();
batchData.regCount = 1;
/* MASKs */
regData[0].mask = 0xFF; /* reg0: 2040 */
/* determine the base address of the device */
baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);
spi3InputGlobalStatusPtr = (ENVOY_ISPI_GLBL_STATUS_STRUCT *) (baseAddr + ENVOY_ISPI_GLBL_STATUS_OFFSET);
regData[0].addr = (TXC_REG_32 *) &spi3InputGlobalStatusPtr->iSpi3StatusReg;
/* Read the registers and return the data */
error = TXC_BatchReg32BitRead (&batchData);
if (error == TXC_NO_ERR)
{
spi3InputGlobalStatusDataPtr->globalStatusDeviceExtension.envoyCe2Ce4GlobalStatusAttr.inputSpi3OverflowDropStatus = (regData[0].data) & 0x1;
spi3InputGlobalStatusDataPtr->globalStatusDeviceExtension.envoyCe2Ce4GlobalStatusAttr.inputSpi3ParityCheckErrorStatus = (regData[0].data >> 1) & 0x1;
spi3InputGlobalStatusDataPtr->globalStatusDeviceExtension.envoyCe2Ce4GlobalStatusAttr.inputSpi3PacketErrorStatus = (regData[0].data >> 2) & 0x1;
spi3InputGlobalStatusDataPtr->globalStatusDeviceExtension.envoyCe2Ce4GlobalStatusAttr.inputSpi3SopErrorStatus = (regData[0].data >>3) & 0x1;
}
return error;
}
/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************/
/*--------------------------------------------------------------------------*
FUNCTION: ENVOY_SetSpi3OutputPortCfgReal
DESCRIPTION: This function actually processess the TXC_IfSPI3_Ext_OutputPortCfgSet
API function.
INPUTS: Same as TXC_IfSPI3_Ext_OutputPortCfgSet except for the interfaceId
RETURNS: TXC_NO_ERR or an appropriate specific error code listed in
appendix.
CAVEATS: None
REVISION HISTORY:
Rev # Date Author Description
----- ------- ------------ ----------------------
0.5.0 6/03/04 F. Giannella Initial release (beta)
*--------------------------------------------------------------------------*/
TXC_U16BIT ENVOY_SetSpi3OutputPortCfgReal (TXC_U16BIT handle, TXC_U16BIT port,
TXC_IfSPI3_EXT_OUTPUT_PORT_CFG_STRUCT *spi3OutputPortCfgDataPtr)
{
TXC_U16BIT error = TXC_NO_ERR;
TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
TXC_REG_ACCESS_32BIT_STRUCT regData[1];
TXC_REG_32 * baseAddr;
TXC_U16BIT portIdx;
TXC_U16BIT startPort;
TXC_U16BIT endPort;
TXC_U16BIT portInc;
TXC_SEM_ID semId;
TXC_U16BIT rtosError;
ENVOY_OSPI_AGGR_TAG_STRUCT *spi3OutputTagPtr;
/* determine if one SPI-3 port is being reset or all ports */
GetSpi3PortRange(handle, port, &startPort, &endPort, &portInc);
/* First, fill the batch platform header. This function requires 2
registers to be written */
memset (®Data[0], 0, (sizeof(TXC_REG_ACCESS_32BIT_STRUCT) ) );
batchData.regDataPtr = ®Data[0];
batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
batchData.semId = TXC_NULL;
batchData.regCount = 1;
regData[0].mask = 0xFFFFFFFF; /* reg0: 2280 through 22FC */
/* determine the base address of the device */
baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);
spi3OutputTagPtr = (ENVOY_OSPI_AGGR_TAG_STRUCT *) (baseAddr + ENVOY_OSPI_AGGR_TAG_OFFSET);
/* loop thru all ports setting, then clearing the appropriate reset bit */
for (portIdx = startPort; portIdx < endPort; )
{
regData[0].addr = (TXC_REG_32 *) &spi3OutputTagPtr->oSpi3PortAggrTagReg[portIdx];
regData[0].data = spi3OutputPortCfgDataPtr->outputPortDeviceExtension.envoyCe2Ce4OutputPortAttr.outputSpi3AggrTag;
/* Semaphore protect the writing of the device POS phy config and the
writing of the L3 emulation block registers. */
semId = ENVOY_DbGetSemId();
rtosError = TXC_SemWait (semId, TXC_OS_SEM_WAIT_FOREVER);
if (rtosError != TXC_NO_ERR)
{
return TXC_OS_RESOURCE_ERR;
}
error = TXC_BatchReg32BitWrite (&batchData);
/* release the semaphore */
rtosError = TXC_SemPost (semId);
if (rtosError != TXC_NO_ERR)
{
return TXC_OS_RESOURCE_ERR;
}
portIdx = portIdx + portInc;
}
return error;
}
/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************
FUNCTION: ENVOY_GetSpi3OutputPortCfgReal
DESCRIPTION: This function actually processess the TXC_IfSPI3_Ext_OutputPortCfgGet
API function.
INPUTS: Same as TXC_IfSPI3_Ext_OutputPortCfgGet except for the interfaceId
RETURNS: TXC_NO_ERR or an appropriate specific error code listed in
appendix.
CAVEATS: None
REVISION HISTORY:
Rev # Date Author Description
----- ------- ------------ ----------------------
0.5.0 6/03/04 F. Giannella Initial release (beta)
*--------------------------------------------------------------------------*/
TXC_U16BIT ENVOY_GetSpi3OutputPortCfgReal (TXC_U16BIT handle,TXC_U16BIT port,
TXC_IfSPI3_EXT_OUTPUT_PORT_CFG_STRUCT *spi3OutputPortCfgDataPtr)
{
TXC_U16BIT error = TXC_NO_ERR;
TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
TXC_REG_ACCESS_32BIT_STRUCT regData[1];
TXC_REG_32 *baseAddr;
ENVOY_OSPI_AGGR_TAG_STRUCT *spi3OutputTagPtr;
/* First, fill the batch platform header. This function requires 1
register to be read */
memset (®Data[0], 0, (sizeof(TXC_REG_ACCESS_32BIT_STRUCT) ) );
batchData.regDataPtr = ®Data[0];
batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
batchData.semId = ENVOY_DbGetSemId();
batchData.regCount = 1;
/* MASKs */
regData[0].mask = 0xFFFFFFFF; /* reg0: 2280 through 22FC */
/* determine the base address of the device */
baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);
spi3OutputTagPtr = (ENVOY_OSPI_AGGR_TAG_STRUCT *) (baseAddr + ENVOY_OSPI_AGGR_TAG_OFFSET);
regData[0].addr = (TXC_REG_32 *) &spi3OutputTagPtr->oSpi3PortAggrTagReg[port];
/* Read the registers and return the data */
error = TXC_BatchReg32BitRead (&batchData);
if (error == TXC_NO_ERR)
{
spi3OutputPortCfgDataPtr->outputPortDeviceExtension.envoyCe2Ce4OutputPortAttr.outputSpi3AggrTag = regData[0].data;
}
return error;
}
/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************
FUNCTION: ENVOY_RtrvSpi3PortStatisticsReal
DESCRIPTION: This function actually processess the TXC_IfSPI3_PortStatisticsRtrv
API function.
INPUTS: Same as TXC_IfSPI3_PortStatisticsRtrv except for the interfaceId
RETURNS: TXC_NO_ERR or an appropriate specific error code listed in
appendix.
CAVEATS: None
REVISION HISTORY:
Rev # Date Author Description
----- ------- ------------ ----------------------
0.5.0 6/03/04 F. Giannella Initial release (beta)
*--------------------------------------------------------------------------*/
TXC_U16BIT ENVOY_RtrvSpi3PortStatisticsReal (TXC_U16BIT handle, TXC_U16BIT port,
TXC_IfSPI3_PORT_STATISTICS_STRUCT *spi3PortStatisticsDataPtr)
{
TXC_U16BIT error = TXC_NO_ERR;
TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
TXC_REG_ACCESS_32BIT_STRUCT regData[1];
TXC_REG_32 *baseAddr;
TXC_U16BIT portIdx;
TXC_U16BIT startPort;
TXC_U16BIT endPort;
TXC_U16BIT portInc;
ENVOY_ISPI_PORT_CNT_STRUCT *spi3InputPortCntPtr;
/* determine if one SPI-3 port is being reset or all ports */
GetSpi3PortRange(handle, port, &startPort, &endPort, &portInc);
/* First, fill the batch platform header. This function requires 5
registers to be read */
memset (®Data[0], 0, (sizeof(TXC_REG_ACCESS_32BIT_STRUCT) ) );
batchData.regDataPtr = ®Data[0];
batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
batchData.semId = ENVOY_DbGetSemId();
batchData.regCount = 1;
/* MASKs */
regData[0].mask = 0xFFFFFFFF; /* reg0: 2080 through 20FC */
/* determine the base address of the device */
baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);
spi3InputPortCntPtr = (ENVOY_ISPI_PORT_CNT_STRUCT *) (baseAddr + ENVOY_ISPI_PER_PORT_CNT_OFFSET);
for (portIdx = startPort; portIdx < endPort; )
{
regData[0].addr = (TXC_REG_32 *) &spi3InputPortCntPtr->iSpi3PktErrPortCntReg[portIdx];
/* Read the registers and return the data */
error = TXC_BatchReg32BitRead (&batchData);
if (error == TXC_NO_ERR)
{
spi3PortStatisticsDataPtr->inputSpi3ErroredPktCounter[portIdx] = regData[0].data;
spi3PortStatisticsDataPtr->inputSpi3UnerroredPktCounter[portIdx] = 0;
spi3PortStatisticsDataPtr->inputSpi3DiscardPktCounter[portIdx] = 0;
spi3PortStatisticsDataPtr->outputSpi3PktCounter[portIdx] = 0;
spi3PortStatisticsDataPtr->outputSpi3DiscardPktCounter[portIdx] = 0;
}
portIdx += portInc;
}
return error;
}
#endif /* not ENVOY_VIRTUAL_DEVICE_MODE */
/****************************************************************************
** End of Module **
****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -