📄 hw_api.c
字号:
* hwSetPortStat()
* Purpose:
* Set port status
* Parameters:
* port -- port number,1-2
* enable -- 1-enable;0-disable
* Returns:
* OK or ERROR.
* Notes:
* None.
*/
UINT8 hwSetPortStat(UINT8 port, UINT8 enable)
{
UINT8 portTmp;
UINT16 regVal;
if(portInvalid(port,&portTmp))
return ERROR;
if(locPortStat[port-1] == enable)
return OK;
locPortStat[port-1] = enable;
if(localDTEType == OL100CR_X4X_V5)
{
if(portTmp == PORT_NUM_TP)
{
disPPU(SWITCH_GLOBAL1_ADDRESS);
MIIread(EXTL_PHY_ADDRESS, MII_CTRL_REG, ®Val);
if(enable)
regVal &= (~MII_CTRL_PD);
else
regVal |= MII_CTRL_PD;
MIIwrite(EXTL_PHY_ADDRESS, MII_CTRL_REG, regVal);
enPPU(SWITCH_GLOBAL1_ADDRESS);
return OK;
}
}
if(enable)
{
if(port==1)
PWR_DOWN_FX1 = PWR_UP;
else
PWR_DOWN_FX2 = PWR_UP;
}
else
{
if(port==1)
PWR_DOWN_FX1 = PWR_DOWN;
else
PWR_DOWN_FX2 = PWR_DOWN;
}
return OK;
}
/*
* Function:
* hwLfpSetPortStat()
* Purpose:
* Set port LFP status
* Parameters:
* port -- port number,1-2
* enable -- 1-enable;0-disable
* Returns:
* OK or ERROR.
* Notes:
* None.
*/
UINT8 hwLfpSetPortStat(UINT8 port, UINT8 enable)
{
UINT8 portTmp;
UINT16 regVal;
if(portInvalid(port,&portTmp))
return ERROR;
if(localDTEType == OL100CR_X4X_V5)
{
if(portTmp == PORT_NUM_TP)
{
disPPU(SWITCH_GLOBAL1_ADDRESS);
MIIread(EXTL_PHY_ADDRESS, MII_CTRL_REG, ®Val);
if(enable)
regVal &= (~MII_CTRL_PD);
else
regVal |= MII_CTRL_PD;
MIIwrite(EXTL_PHY_ADDRESS, MII_CTRL_REG, regVal);
enPPU(SWITCH_GLOBAL1_ADDRESS);
return OK;
}
}
if(enable)
{
if(port==1)
PWR_DOWN_FX1 = PWR_UP;
else
PWR_DOWN_FX2 = PWR_UP;
}
else
{
if(port==1)
PWR_DOWN_FX1 = PWR_DOWN;
else
PWR_DOWN_FX2 = PWR_DOWN;
}
return OK;
}
/*
* Function:
* hwGetPortStat()
* Purpose:
* Get port status
* Parameters:
* port -- port number,1-2
* enable -- 1-enable;0-disable
* Returns:
* OK or ERROR.
* Notes:
* None.
*/
UINT8 hwGetPortStat(UINT8 port, UINT8 *enable)
{
UINT8 portTmp;
if(portInvalid(port,&portTmp))
return ERROR;
#if 1
*enable = locPortStat[port-1];
return OK;
#else
if(localDTEType == OL100CR_X4X_V5)
{
if(portTmp == PORT_NUM_TP)
{
disPPU(SWITCH_GLOBAL1_ADDRESS);
MIIread(EXTL_PHY_ADDRESS, MII_CTRL_REG, ®Val);
if(regVal & MII_CTRL_PD)
*enable = 0;
else
*enable = 1;
MIIwrite(EXTL_PHY_ADDRESS, MII_CTRL_REG, regVal);
enPPU(SWITCH_GLOBAL1_ADDRESS);
return OK;
}
}
if(port == 1)
{
if(PWR_DOWN_FX1 == PWR_UP)
*enable = 1;
else
*enable = 0;
}
else
{
if(PWR_DOWN_FX2 == PWR_UP)
*enable = 1;
else
*enable = 0;
}
return OK;
#endif
}
/*
* Function:
* hwSetLfp()
* Purpose:
* Set LFP config
* Parameters:
* enable -- 1-enable;0-disable
* Returns:
* OK or ERROR.
* Notes:
* None.
*/
UINT8 hwSetLfp(UINT8 enable)
{
if(enable)
locLFPen = 1;
else
locLFPen = 0;
return OK;
}
/*
* Function:
* hwGetLfp()
* Purpose:
* Get LFP config
* Parameters:
* enable -- 1-enable;0-disable
* Returns:
* OK or ERROR.
* Notes:
* None.
*/
UINT8 hwGetLfp(UINT8 *enable)
{
*enable = locLFPen;
return OK;
}
/*
* Function:
* hwSetFef()
* Purpose:
* Set FEF config
* Parameters:
* enable -- 1-enable;0-disable
* Returns:
* OK or ERROR.
* Notes:
* None.
*/
UINT8 hwSetFef(UINT8 enable)
{
UINT8 fefTmp;
fefTmp = locFEFen;
if(enable)
locFEFen = 1;
else
locFEFen = 0;
if(fefTmp!=locFEFen)
hwLfpRecover();
return OK;
}
/*
* Function:
* hwGetFef()
* Purpose:
* Get FEF config
* Parameters:
* enable -- 1-enable;0-disable
* Returns:
* OK or ERROR.
* Notes:
* None.
*/
UINT8 hwGetFef(UINT8 *enable)
{
*enable = locFEFen;
return OK;
}
/*
* Function:
* hwReboot()
* Purpose:
* reboot
* Parameters:
* None.
* Returns:
* None.
* Notes:
* None.
*/
void hwReboot()
{
UINT16 temp,temp1;
for(temp=100;temp>0;temp--)
{
MCU_RST_OUT = 1;
for(temp1=30000;temp1>0;temp1--);
MCU_RST_OUT = 1;
for(temp1=30000;temp1>0;temp1--);
}
__asm JMP 0xE800/*0x4000*/;
}
/*
* Function:
* snmpTrapMonitor()
* Purpose:
* monitor status
* Parameters:
* None.
* Returns:
* None.
* Notes:
* None.
*/
void snmpColdStartTrap(void)
{
OBJ_ID_T trapOid;
trapOid.component_list[0]=1;
trapOid.component_list[1]=3;
trapOid.component_list[2]=6;
trapOid.component_list[3]=1;
trapOid.component_list[4]=4;
trapOid.component_list[5]=1;
trapOid.component_list[6]=3807;
trapOid.component_list[7]=1;
trapOid.component_list[8]=100;
trapOid.component_list[9]=100;
trapOid.num_components=10;
snmpSendTrap(&trapOid,1);
}
void snmpTrapMonitor()
{
/*
trap1----link up
trap2----link down
trap3----remote device found
trap4----remote device lost
*/
OBJ_ID_T trapOid;
trapOid.component_list[0]=1;
trapOid.component_list[1]=3;
trapOid.component_list[2]=6;
trapOid.component_list[3]=1;
trapOid.component_list[4]=4;
trapOid.component_list[5]=1;
trapOid.component_list[6]=3807;
trapOid.component_list[7]=1;
trapOid.component_list[8]=100;
trapOid.component_list[9]=100;
trapOid.num_components=10;
if(trapPort1LinkUp==1)
{
snmpSendTrap(&trapOid,2);
trapPort1LinkUp=0;
}
else if(trapPort1LinkDown==1)
{
snmpSendTrap(&trapOid,3);
trapPort1LinkDown=0;
}
else if(trapPort2LinkUp==1)
{
snmpSendTrap(&trapOid,4);
trapPort2LinkUp=0;
}
else if(trapPort2LinkDown==1)
{
snmpSendTrap(&trapOid,5);
trapPort2LinkDown=0;
}
}
/*
* Function:
* hwGetPortLink()
* Purpose:
* Get the port link status
* Parameters:
* port -- port number,1-2
* link -- 1-link up;0-link down
* Returns:
* OK or ERROR.
* Notes:
* None.
*/
UINT8 hwGetPortLink(UINT8 port, UINT8 *link)
{
UINT8 phyAddr,portTmp;
UINT16 regVal;
if(portInvalid(port,&portTmp))
return ERROR;
#if 0
if(localDTEType == OL100CR_X4X_V5)
{
if(port == PORT_NUM_TP)
{
disPPU(SWITCH_GLOBAL1_ADDRESS);
MIIread(EXTL_PHY_ADDRESS, PHY_REG_PSR, ®Val);
enPPU(SWITCH_GLOBAL1_ADDRESS);
if(regVal & 0x0400)
*link = 1;
else
*link = 0;
}
else
{
phyAddr = port + 10;
MIIread(phyAddr, QD_REG_PORT_STATUS, ®Val);
if(regVal & 0x0800)
*link = 1;
else
*link = 0;
}
}
else
{
phyAddr = port + 10;
MIIread(phyAddr, QD_REG_PORT_STATUS, ®Val);
if(regVal & 0x0800)
*link = 1;
else
*link = 0;
}
#else
phyAddr = portTmp + 0x10;
MIIread(phyAddr, QD_REG_PORT_STATUS, ®Val);
if(regVal & QD_PORT_LINK_UP)
*link = 1;
else
*link = 0;
#endif
return OK;
}
/*
* Function:
* hwGetPortDplxSpd()
* Purpose:
* Get the port duplex and speed status
* Parameters:
* port -- port number,1-2
* dplx -- 1-full;0-half
* spd -- 10/100/1000
* Returns:
* OK or ERROR.
* Notes:
* None.
*/
UINT8 hwGetPortDplxSpd(UINT8 port, UINT8 *dplx, UINT16 *spd)
{
UINT8 phyAddr,portTmp;
UINT16 regVal;
if(portInvalid(port,&portTmp))
return ERROR;
phyAddr = portTmp + 0x10;
MIIread(phyAddr, QD_REG_PORT_STATUS, ®Val);
if(regVal & QD_PORT_DPLX_FULL)
*dplx = 1;
else
*dplx = 0;
switch(regVal & QD_PORT_SPDf)
{
case QD_PORT_SPD_1000:
*spd = 1000;
break;
case QD_PORT_SPD_100:
*spd = 100;
break;
default:
*spd = 10;
break;
}
return OK;
}
void sysLogSet(UINT8 port, UINT8 stat)
{
if(stat==1)
sprintf(&sysLog[sysLogCurrent][0], "%dY%03dD%02dH%02dM%02dS-P%d UP", sysRunYear,sysRunDay,sysRunHour,sysRunMin,sysRunSec,port);
else
sprintf(&sysLog[sysLogCurrent][0], "%dY%03dD%02dH%02dM%02dS-P%d DOWN", sysRunYear,sysRunDay,sysRunHour,sysRunMin,sysRunSec,port);
if(sysLogCurrent < (SYS_LOG_MAX-1))
sysLogCurrent ++;
else
sysLogCurrent = 0;
}
/*
* Function:
* hwGetLocStatus()
* Purpose:
* Get the port status
* Parameters:
* None.
* Returns:
* None.
* Notes:
* None.
*/
void hwGetLocStatus(void)
{
UINT8 u8val;
UINT16 u16val;
if(gSnmpRebootFlag==1)
hwReboot();
if(gSnmpPort1Flag == 1)
{
hwSetPortCfg(1,locAutoCfg[0],locDuplexCfg[0],locSpeedCfg[0]);
gSnmpPort1Flag = 0;
}
if(gSnmpPort2Flag == 1)
{
hwSetPortCfg(2,locAutoCfg[1],locDuplexCfg[1],locSpeedCfg[1]);
gSnmpPort2Flag = 0;
}
if(gSnmpFlowCtrlFlag1 == 1)
{
hwSetPortFlowCtrl(1,bSnmpFlowCtrl1);
gSnmpFlowCtrlFlag1 = 0;
}
if(gSnmpFlowCtrlFlag2 == 1)
{
hwSetPortFlowCtrl(2,bSnmpFlowCtrl2);
gSnmpFlowCtrlFlag2 = 0;
}
/*get TP port status*/
if(hwGetPortLink(1, &u8val)==OK)
{
if(localOAMPort==10/*TP or FX1*/)
localOamPortLnkFault = (!u8val);
else
localNoamPortLnkStat = u8val;
if(locLink[0]!=u8val)
{
if(u8val==1)
{
trapPort1LinkUp=1;
sysLogSet(1, 1);
}
else
{
trapPort1LinkDown=1;
sysLogSet(1, 0);
}
}
locLink[0] = u8val;
}
if(hwGetPortDplxSpd(1, &u8val, &u16val)==OK)
{
locDuplexStat[0] = u8val;
locSpeedStat[0] = u16val;
}
/*get FX port status*/
if(hwGetPortLink(2, &u8val)==OK)
{
if(localOAMPort==10/*TP or FX1*/)
localNoamPortLnkStat = u8val;
else
localOamPortLnkFault = (!u8val);
if(locLink[1]!=u8val)
{
if(u8val==1)
{
trapPort2LinkUp=1;
sysLogSet(2, 1);
}
else
{
trapPort2LinkDown=1;
sysLogSet(2, 0);
}
}
locLink[1] = u8val;
}
if(hwGetPortDplxSpd(2, &u8val, &u16val)==OK)
{
locDuplexStat[1] = u8val;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -