📄 txc_envoy_pkt_ctrl_real.c
字号:
portIdx = portIdx + portInc;
}
return error;
}
/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************
FUNCTION: ENVOY_GetIngressPacketCtrlReal
DESCRIPTION: This function actually processess the TXC_ENVOY_IngressPacketCtrlGet
INPUTS: Same as TXC_ENVOY_IngressPacketCtrlGet
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_GetIngressPacketCtrlReal (TXC_U16BIT handle, TXC_U16BIT port,
ENVOY_INGRESS_PKT_CTRL_STRUCT *ingressPktCtrlDataPtr)
{
TXC_U16BIT error;
TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
TXC_REG_ACCESS_32BIT_STRUCT regData[1];
TXC_REG_32 *baseAddr;
ENVOY_MAC_PKT_CTRL_STRUCT *macPktCtrlRegPtr;
/* First, fill the batch platform header. This function requires 1
register to be read */
memset (®Data[0], 0, (1 * sizeof(TXC_REG_ACCESS_32BIT_STRUCT) ) );
batchData.regDataPtr = ®Data[0];
batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
batchData.semId = ENVOY_DbGetSemId();
batchData.regCount = 1;
/* determine the base address of the device */
baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);
macPktCtrlRegPtr = (ENVOY_MAC_PKT_CTRL_STRUCT *) (baseAddr+macPktCtrlOffset[port] );
/* Setup the addresses and masks to read */
regData[0].addr = (TXC_REG_32 *) &(macPktCtrlRegPtr->frameCtrlReg);
regData[0].mask = 0x3F400001;
/* Read the registers and return the data */
error = TXC_BatchReg32BitRead (&batchData);
if (error == TXC_NO_ERR)
{
/* Copy the MAC Address */
ingressPktCtrlDataPtr->ingressDiscardErroredFramesEnable = (regData[0].data >> 27) & 0x1;
ingressPktCtrlDataPtr->ingressDiscardTruncatedFramesEnable = (regData[0].data >> 24) & 0x1;
ingressPktCtrlDataPtr->ingressDiscardLengthMismatchEnable = (regData[0].data >> 25) & 0x1;
ingressPktCtrlDataPtr->ingressDiscardCrcMismatchEnable = (regData[0].data >> 26) & 0x1;
ingressPktCtrlDataPtr->ingressDiscardAddressMismatchEnable = (regData[0].data >> 29) & 0x1;
ingressPktCtrlDataPtr->ingressCrcRemoveEnable = (regData[0].data >> 22) & 0x1;
ingressPktCtrlDataPtr->ingressPauseFrameDiscardEnable = (regData[0].data >> 28) & 0x1;
ingressPktCtrlDataPtr->ingressPrependEnable = regData[0].data & 0x1;
}
return error;
}
/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************
FUNCTION: ENVOY_SetEgressPacketCtrlReal
DESCRIPTION: This function actually processess the TXC_ENVOY_EgressPacketCtrlSet
API function.
INPUTS: Same as TXC_ENVOY_EgressPacketCtrlSet
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_SetEgressPacketCtrlReal (TXC_U16BIT handle, TXC_U16BIT port,
ENVOY_EGRESS_PKT_CTRL_STRUCT *egressPktCtrlDataPtr)
{
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_REG_32 *portAddr;
TXC_U16BIT portIdx;
TXC_U16BIT endPort;
TXC_U16BIT startPort;
TXC_U16BIT portInc;
ENVOY_MAC_PKT_CTRL_STRUCT *macPktCtrlRegPtr;
/* First, fill the batch platform header. This function requires 4
registers to be written */
/* This function requires 5 registers to be written */
batchData.regDataPtr = ®Data[0];
batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
batchData.semId = ENVOY_DbGetSemId();
batchData.regCount = 1;
memset ( (char *)regData, 0, sizeof(regData) );
/* determine if one MAC port is being configured or all ports */
GetPktCtrlPortRange(handle, port, &startPort, &endPort, &portInc);
/* determine the base address of the device */
baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);
regData[0].data = egressPktCtrlDataPtr->egressAddrSubstEnable << 21;
regData[0].data |= egressPktCtrlDataPtr->egressPauseFrmDiscEnable << 2;
regData[0].data |= egressPktCtrlDataPtr->egressStripEnable << 1;
regData[0].mask = 0x200006;
/* loop thru all ports setting up the MAC interface parameters */
for (portIdx = startPort; portIdx < endPort; )
{
portAddr = baseAddr + macPktCtrlOffset[portIdx];
macPktCtrlRegPtr = (ENVOY_MAC_PKT_CTRL_STRUCT *) portAddr;
regData[0].addr = (TXC_REG_32 *) &(macPktCtrlRegPtr->frameCtrlReg);
error = TXC_BatchReg32BitWrite (&batchData);
if (error != TXC_NO_ERR)
return(error);
portIdx = portIdx + portInc;
}
return error;
}
/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************
FUNCTION: ENVOY_GetEgressPacketCtrlReal
DESCRIPTION: This function actually processess the TXC_ENVOY_EgressPacketCtrlGet
API function.
INPUTS: Same as TXC_ENVOY_EgressPacketCtrlGet
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_GetEgressPacketCtrlReal (TXC_U16BIT handle, TXC_U16BIT port,
ENVOY_EGRESS_PKT_CTRL_STRUCT *egressPktCtrlDataPtr)
{
TXC_U16BIT error;
TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
TXC_REG_ACCESS_32BIT_STRUCT regData[1];
TXC_REG_32 *baseAddr;
ENVOY_MAC_PKT_CTRL_STRUCT *macPktCtrlRegPtr;
/* First, fill the batch platform header. This function requires 1
register to be read */
memset (®Data[0], 0, (1 * sizeof(TXC_REG_ACCESS_32BIT_STRUCT) ) );
batchData.regDataPtr = ®Data[0];
batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
batchData.semId = ENVOY_DbGetSemId();
batchData.regCount = 1;
/* determine the base address of the device */
baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);
macPktCtrlRegPtr = (ENVOY_MAC_PKT_CTRL_STRUCT *) (baseAddr+macPktCtrlOffset[port] );
/* Setup the addresses and masks to read */
regData[0].addr = (TXC_REG_32 *) &(macPktCtrlRegPtr->frameCtrlReg);
regData[0].mask = 0x200006;
/* Read the registers and return the data */
error = TXC_BatchReg32BitRead (&batchData);
if (error == TXC_NO_ERR)
{
egressPktCtrlDataPtr->egressAddrSubstEnable = (regData[0].data >> 21) & 0x1;
egressPktCtrlDataPtr->egressPauseFrmDiscEnable = (regData[0].data >> 2) & 0x1;
egressPktCtrlDataPtr->egressStripEnable = (regData[0].data >> 1) & 0x1;
}
return error;
}
#endif /* ENVOY_VIRTUAL_DEVICE_MODE */
/****************************************************************************
** End of Module **
****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -