?? zl5011xpki.c
字號:
pkiAddress= ZL5011X_PKI0_CTRL+ (portNum* sizeof( Uint32T));
status = zl5011xReadModWrite(zl5011xParams, pkiAddress,
~((ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_LINKDOWN) | (ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_N_RESET)),
((ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_LINKDOWN) | (ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_N_RESET)));
}
/* For devices that require it write relevant Control Reg bit low to indicate
the linkdown state */
if( status== ZL5011X_OK)
{
if (portNum != linkdownBitReg)
{
pkiAddress= ZL5011X_PKI0_CTRL+ (linkdownBitReg* sizeof( Uint32T));
status = zl5011xReadModWrite(zl5011xParams, pkiAddress,
~(ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_LINKDOWN),
(ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_LINKDOWN));
}
}
/* and update the state of the MAC in the structure */
if( status== ZL5011X_OK)
{
zl5011xParams->pki.lanPort[ portNum].macControl.linkDown= ZL5011X_FALSE;
}
/* make sure port is not in power save */
if( status== ZL5011X_OK)
{
pkiAddress= ZL5011X_PKI0_CTRL+ (portNum* sizeof( Uint32T));
status = zl5011xReadModWrite(zl5011xParams, pkiAddress,
~(ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_PWD_SAVE_EN),
(ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_PWD_SAVE_EN));
}
/* and update the state of the MAC in the structure */
if( status== ZL5011X_OK)
{
zl5011xParams->pki.lanPort[ portNum].macControl.powerSaveEnable= portEnabled;
}
}
else
{
status= ZL5011X_PARAMETER_INVALID;
}
}
return(status);
}
/*******************************************************************************
Function:
zl5011xPkiSetVlanMode
Description:
Inputs:
zl5011xParams Pointer to the structure for this device instance
Uint8T portNum - port number 0 to 3
zl5011xBooleanE vlanEnabled - VLAN aware enable / disable
Outputs:
Returns:
zlStatusE
Remarks:
*******************************************************************************/
extern zlStatusE zl5011xPkiSetVlanMode(zl5011xParamsS *zl5011xParams,
Uint8T portNum, zl5011xBooleanE vlanEnabled )
{
zlStatusE status = ZL5011X_OK;
Uint32T pkiAddress=0, regValue= 0;
ZL5011X_TRACE(ZL5011X_PKI_FN_ID, "zl5011xPkiSetVlanMode: port number %d vlan enabled %d",
portNum, vlanEnabled, 0, 0, 0, 0);
if( status== ZL5011X_OK)
{
status= ZL5011X_CHECK_BOOLEAN( vlanEnabled);
}
/* write relevant Control Reg VLAN Aware bit HIGH enable/LOW disable */
if( status== ZL5011X_OK)
{
pkiAddress= ZL5011X_PKI0_CTRL+ (portNum* sizeof( Uint32T));
if( vlanEnabled== ZL5011X_TRUE)
{
regValue= ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_VLAN_AWARE;
}
else
{
regValue= ~(ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_VLAN_AWARE);
}
status = zl5011xReadModWrite(zl5011xParams, pkiAddress, regValue,
ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_VLAN_AWARE);
}
/* and update this in structure */
if( status== ZL5011X_OK)
{
zl5011xParams->pki.lanPort[ portNum].macControl.vlanAware= vlanEnabled;
}
return(status);
}
/*******************************************************************************
Function:
zl5011xPkiSetInterfaceType
Description:
Inputs:
zl5011xParams Pointer to the structure for this device instance
Uint8T portNum - device internal port number, 0 to 3
zl5011xMacTypeE macType - interface type - MII, GMII, PCS
Outputs:
Returns:
zlStatusE
Remarks:
*******************************************************************************/
extern zlStatusE zl5011xPkiSetInterfaceType(zl5011xParamsS *zl5011xParams,
Uint8T portNum,
zl5011xMacTypeE macType )
{
zlStatusE status = ZL5011X_OK;
Uint32T pkiAddress=0, registerValue= 0;
Uint8T externalPortNum;
ZL5011X_TRACE(ZL5011X_PKI_FN_ID, "zl5011xPkiSetInterfaceType: port number %d mac type %d",
portNum, macType, 0, 0, 0, 0);
/* Check range of allowed types */
/* The devLimits structure assumes an external port numbering scheme with contiguous
port numbers from 0 upwards. But the portNum passed into this function is an
internal port number which may be non-contiguous. So need to convert to same
scheme for comparison */
status = zl5011xPkiInternalPortToExternal(zl5011xParams, portNum, &externalPortNum);
if( status== ZL5011X_OK)
{
switch ( macType)
{
case ZL5011X_MAC_TYPE_MII:
/* check the LAN port number is valid for the MAC type */
if (externalPortNum >= zl5011xParams->devLimits.lanNumLanPorts)
{
status = ZL5011X_PARAMETER_INVALID;
}
break;
case ZL5011X_MAC_TYPE_GMII: /* intentional fall through */
case ZL5011X_MAC_TYPE_PCS:
/* check the LAN port number is valid for the MAC type. */
if (externalPortNum >= zl5011xParams->devLimits.lanNumGbitLanPorts)
{
status = ZL5011X_PARAMETER_INVALID;
}
break;
default:
status = ZL5011X_PARAMETER_INVALID;
break;
}
}
/* write relevant Control Reg bits sel_pcs & sel_mii */
if( status== ZL5011X_OK)
{
pkiAddress= ZL5011X_PKI0_CTRL+ (portNum* sizeof( Uint32T));
switch ( macType)
{
case ZL5011X_MAC_TYPE_MII:
registerValue= ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_SEL_MII;
status = zl5011xReadModWrite(zl5011xParams, pkiAddress, registerValue,
ZL5011X_2BIT_MASK << ZL5011X_PKI_CTRL_REG_SEL_MII);
break;
case ZL5011X_MAC_TYPE_GMII:
registerValue= 0;
status = zl5011xReadModWrite(zl5011xParams, pkiAddress, registerValue,
ZL5011X_2BIT_MASK << ZL5011X_PKI_CTRL_REG_SEL_MII);
break;
case ZL5011X_MAC_TYPE_PCS:
registerValue= ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_SEL_PCS;
status = zl5011xReadModWrite(zl5011xParams, pkiAddress, registerValue,
ZL5011X_2BIT_MASK << ZL5011X_PKI_CTRL_REG_SEL_MII);
break;
default:
status= ZL5011X_PARAMETER_INVALID;
break;
}
}
/* and update this in structure */
if( status== ZL5011X_OK)
{
zl5011xParams->pki.lanPort[ portNum].macControl.macType= macType;
}
return(status);
}
/*******************************************************************************
Function:
zl5011xPkiSetPacketFiltering
Description:
Set bits in the port Control Reg to filter out various types of packet.
Overwrites prev state of the 3 filter bits.
Inputs:
zl5011xParams Pointer to the structure for this device instance
Uint8T portNum - port number 0 to 3
zl5011xBooleanE filterBroadcast, - ONE to filter out broaadcast packets
zl5011xBooleanE filterMulticast, - etc
zl5011xBooleanE filterWrongUnicast-
Outputs:
Returns:
zlStatusE
Remarks:
*******************************************************************************/
extern zlStatusE zl5011xPkiSetPacketFiltering(zl5011xParamsS *zl5011xParams,
Uint8T portNum,
zl5011xBooleanE filterBroadcast,
zl5011xBooleanE filterMulticast,
zl5011xBooleanE filterWrongUnicast)
{
zlStatusE status = ZL5011X_OK;
Uint32T RegisterBitMask= ZL5011X_3BIT_MASK << ZL5011X_PKI_CTRL_REG_ADDR_FILTER0;
Uint32T FilterThis= 0;
Uint32T pkiAddress= ZL5011X_PKI0_CTRL+ (portNum* sizeof( Uint32T));
ZL5011X_TRACE(ZL5011X_PKI_FN_ID,
"zl5011xPkiSetPacketFiltering: port number %d, set boolean values- "
"filter broadcast= %d, filter multicast= %d, filter non unicast=%d",
portNum, filterBroadcast, filterMulticast, filterWrongUnicast, 0, 0);
if( status== ZL5011X_OK)
{
status= ZL5011X_CHECK_BOOLEAN( filterBroadcast);
}
if( status== ZL5011X_OK)
{
status= ZL5011X_CHECK_BOOLEAN( filterMulticast);
}
if( status== ZL5011X_OK)
{
status= ZL5011X_CHECK_BOOLEAN( filterWrongUnicast);
}
/* write relevant Control Reg bits */
if( status== ZL5011X_OK)
{
if( filterBroadcast== ZL5011X_TRUE)
{
FilterThis= ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_ADDR_FILTER2;
}
if( filterMulticast== ZL5011X_TRUE)
{
FilterThis |= ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_ADDR_FILTER1;
}
if( filterWrongUnicast== ZL5011X_TRUE)
{
FilterThis |= ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_ADDR_FILTER0;
}
status = zl5011xReadModWrite(zl5011xParams, pkiAddress, FilterThis, RegisterBitMask);
}
/* and update this in structure */
if( status== ZL5011X_OK)
{
zl5011xParams->pki.lanPort[ portNum].macControl.filterBroadcast= filterBroadcast;
zl5011xParams->pki.lanPort[ portNum].macControl.filterMulticast= filterMulticast;
zl5011xParams->pki.lanPort[ portNum].macControl.filterWrongUnicast= filterWrongUnicast;
}
return(status);
}
/*******************************************************************************
Function:
zl5011xPkiGetEtherStats
Description:
Reads the port counters out of the device structure and formats the stats, using
64 bit counters if they are enabled. Conforms with RFC 2819 for Remote Network
Monitoring MIB (Management Information Base).
Inputs:
zl5011xParams Pointer to the structure for this device instance
Uint8T portNum - port number 0 to 3
zl5011xEtherStatsS * pEtherStats - pointer to the structure to receive the data
Outputs:
Returns:
zlStatusE
Remarks:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -