📄 meclib.c
字号:
* outBandNetDetach
*
*/
STATUS outBandNetDetach (void)
{
/*
struct in_addr inetAddr;
char ipStr[INET_ADDR_LEN];
*/
int ret = 0;
ret = ifAllRoutesDelete (OUTBAND_DEV, OUTBAND_DEV_UNIT);
/*
printf ("ifAllRoutesDelete return %d\n", ret);
*/
/*
ret = ifRouteDelete (OUTBAND_DEV, OUTBAND_DEV_UNIT);
printf ("ifRouteDelete return %d\n", ret);
inetAddr.s_addr = NvRamContent.Nvram_MpIp;
inet_ntoa_b(inetAddr, ipStr);
ret = ifAddrDelete (OUTBAND_NET_DEV, ipStr);
printf ("ifAddrDelete %s return %d\n", ipStr, ret);
*/
if (OK != ipDetach (OUTBAND_DEV_UNIT, OUTBAND_DEV))
{
printf ("Outband net ipDetach failed\n");
return (ERROR);
}
return (OK);
}
/*******************************************************************************
* outBandNetAttach - debug use
*
*/
STATUS outBandNetAttach (void)
{
struct in_addr inetAddr;
char ipStr[INET_ADDR_LEN];
int ret;
if (OK != ipAttach (OUTBAND_DEV_UNIT, OUTBAND_DEV))
{
printf ("Outband net ipAttach failed\n");
return ERROR;
}
ret = ifMaskSet (OUTBAND_NET_DEV, NvRamContent.Nvram_MpMask);
printf ("ifMaskSet %x return %d\n", NvRamContent.Nvram_MpMask, ret);
inetAddr.s_addr = NvRamContent.Nvram_MpIp;
inet_ntoa_b (inetAddr, ipStr);
ret = ifAddrSet (OUTBAND_NET_DEV, ipStr);
printf ("ifAddrSet %s return %d\n", ipStr, ret);
ret = ifFlagChange (OUTBAND_NET_DEV, IFF_UP, 1);
printf ("ifFlagChange return %d\n", ret);
return (OK);
}
/*******************************************************************************
* SetMachinePara
*
*/
UINT8 npcnum = 0;
void SetMachinePara (void)
{
switch (MACHINE_TYPE)
{
case M_6910:
npcnum = 8;
break;
case M_6906:
npcnum = 5;
break;
case M_6903:
npcnum = 2;
break;
default:
npcnum = 8;
break;
}
}
/***********************************************************************
* jiao.zhaoyun added on 2007-08-14
*/
void b_portInit()
{
char ipStr[INET_ADDR_LEN]/*, castAddr[INET_ADDR_LEN]*/;
struct in_addr inetAddr;
inetAddr.s_addr = bspBbIpAddr();
inet_ntoa_b(inetAddr, ipStr);
netEndDevStart (BBC_DEV, BBC_DEV_UNIT, "", ipStr, BBC_INET_MASK);
}
#endif /* defined(PRJ_BUILD) */
/*****************************************************************************
* CPLD 读写控制接口 *
******************************************************************************/
/*******************************************************************************
* mecRegWrite - Setup MEC Register
*
* Return OK/ERROR
*
*/
int mecRegWrite (int Register, UINT8 value)
{
int oldlevel;
oldlevel = intLock ();
BCSR_REG(Register) = value;
intUnlock (oldlevel);
return (OK);
}
/*******************************************************************************
* mecRegRead - Read from MEC Register
*
* Parameter: Register offset
*
* Return: the value of UPC Register
*
*/
UINT8 mecRegRead (int Register)
{
unsigned char value;
value = BCSR_REG(Register);
return(value);
}
/*******************************************************************************
* WatchDog相关 *
******************************************************************************/
/*****************************************************************************
* enable watchdog
*/
void bsp_WatchDogEnable(void)
{
/*BCSR_REG(0x44) |= 0x1;*/
return;
}
/*****************************************************************************
* disable watchdog
*/
void bsp_WatchDogDisable(void)
{
BCSR_REG(0x44) &= ~0x1;
}
/*****************************************************************************
* clear watchdog
*/
void bsp_WatchDogClear(void)
{
BCSR_REG(0x40) = 0x1;
BCSR_REG(0x40) = 0x0;
}
/*******************************************************************************
* BOOTROM相关 *
******************************************************************************/
/*****************************************************************************
* b_getBootVersion
*/
void b_getBootVersion (char * buf, UINT32 length)
{
BOOTVER info;
int ver_size;
if (OK != bsp_getRuningBootVerInfo(&info))
{
return;
}
ver_size = strlen(info.verTag);
if (ver_size > (int)(length - 10))
{
return;
}
sprintf (buf, " %s ", info.verTag);
}
/*******************************************************************************
* ROS相关 *
*******************************************************************************/
/******************************************************************************
* sysMemRosTop
*/
char * sysMemRosTop (void)
{
return (sysPhysMemTop() - TRACE_BUF_SIZE);
}
/******************************************************************************
* sysMemRosBottom
*/
char * sysMemRosBottom (void)
{
static char * memTop = NULL;
memTop = (char *)(sysMemTop() + RAM_DISK_SIZE);
return (memTop);
}
/*******************************************************************************
* 本板控制与状态接口 *
*******************************************************************************/
/*******************************************************************************
* boardOnLine
*
*/
BOOL boardOnLine (UINT8 phySlot)
{
#ifdef INSTALL_GCSA
UINT16 val;
#elif defined(INSTALL_GCSD)
UINT8 val1;
UINT8 val2;
UINT16 val;
#endif
int shift;
if (sysMySlot == 0xFF)
return FALSE;
if (phySlot > 14)
return FALSE;
if (sysMySlot == phySlot)
return TRUE;
#ifdef INSTALL_GCSA
val = *(volatile UINT16 *)0xEB000000;
#elif defined(INSTALL_GCSD)
val1 = *(volatile UINT8 *)0xEB000000;
val2 = *(volatile UINT8 *)0xEB040000;
val = val2;
val = ( val << 8 ) | val1;
#endif
shift = phySlot;
if ((phySlot == 7) || (phySlot == 8))
shift = 7;
else if (phySlot > 8)
shift = phySlot - 1;
if (val & (1 << shift))
return TRUE;
else
return FALSE;
}
/*******************************************************************************
* bsp_ResetBoard - 复位本板
*/
void bsp_ResetBoard(void)
{
#ifdef PRJ_BUILD
Ros_MONSetRebootType(1);
#endif
mecRegWrite (0x48, 3);
intLock();
while(1)
;
}
/*******************************************************************************
* physSlotNumber
*
* RETURNS:
* 7, 8 - 7或8号槽位,这是正常值;
* 0xFF - CPLD寄存器值出错。如果不插入机框会如何?
*/
UINT8 physSlotNumber (void)
{
FAST UINT8 value;
UINT8 slot8Token = 0x01; /* default */
value = mecRegRead (0x80) & 0x03;
if(bspCpldVerNo()== 0x01)
slot8Token = 0x03;
if (value == slot8Token)
return (7);
else if (value == 0x2)
return (8);
else
return (0xFF);
}
/*******************************************************************************
* getSlaveSlotNumber
*
*/
UINT8 getSlaveSlotNumber (void)
{
FAST UINT8 value;
value = physSlotNumber();
if (value == 7)
return (8);
else if (value == 8)
return (7);
else
return (0xFF);
}
/*******************************************************************************
* sysIPAddrGet
* sysIPBroadcastAddrGet
*
* 获取板间通讯网口IP地址和广播地址
*/
UINT32 sysIPAddrGet (void)
{
char ipStr[INET_ADDR_LEN];
if (ERROR == ifAddrGet (BBC_NET_DEV, ipStr))
return (0);
return (inet_addr(ipStr));
}
UINT32 sysIPBroadcastAddrGet (void)
{
char ipStr[INET_ADDR_LEN];
if (ERROR == ifBroadcastGet (BBC_NET_DEV, ipStr))
return (0);
return (inet_addr(ipStr));
}
/*******************************************************************************
* b_getMacBase
*/
#if 0
STATUS b_getMacBase (UINT32 serial, unsigned char * pMac)
{
if (serial > 16383)
return ERROR;
pMac[0] = 0x0;
pMac[1] = 0xD0;
pMac[2] = 0xD0;
pMac[3] = 0xC8 + ((serial >> 11) & 0xFF);
pMac[4] = 0x00 + ((serial >> 3) & 0xFF);
pMac[5] = 0x00 + ((serial << 5) & 0xFF);
return OK;
}
#endif
/*lint -e40*/
UINT32 bFetchSerial (void)
{
UINT32 SerialNo;
if (OK == sysNvRamGet ((char*)&SerialNo, sizeof(SerialNo),
(int)&NvRamContent.ZXR10_6910_SerialNo - (int)&NvRamContent))
{
return min(SerialNo, ZXR10_6910_MAX_SERIAL_NO - 1);
}
return (ZXR10_6910_MAX_SERIAL_NO - 1);
}
UINT32 bsp_FetchSerial (void)
{
UINT32 SerialNo;
if (OK == sysNvRamGet ((char*)&SerialNo, sizeof(SerialNo),
(int)&NvRamContent.ZXR10_6910_SerialNo - (int)&NvRamContent))
{
return min(SerialNo, ZXR10_6910_MAX_SERIAL_NO - 1);
}
return (ZXR10_6910_MAX_SERIAL_NO - 1);
}
UINT32 b_FetchSerial (void)
{
UINT32 SerialNo;
SerialNo = NvRamContent.ZXR10_6910_SerialNo;
return min(SerialNo, ZXR10_6910_MAX_SERIAL_NO - 1);
}
/*lint +e40*/
/*******************************************************************************
* sysBdcsInit
*
*/
STATUS sysBdcsInit (void)
{
sysMySlot = physSlotNumber();
sysPeerSlot = getSlaveSlotNumber ();
b_GetLastResetSource();
return (OK);
}
/*******************************************************************************
* masterHwInit
*
*/
STATUS masterHwInit (void)
{
return OK;
}
/*******************************************************************************
* slaveHwInit
*/
STATUS slaveHwInit (void)
{
return OK;
}
/*******************************************************************************
* 机框信息接口(软件) *
*******************************************************************************/
/*******************************************************************************
* b_getFrameType
*
*/
UINT8 b_getFrameType (void)
{
UINT8 val;
val = *(volatile UINT8 *)0xE902002A;
if(val & 0x80)
return M_MBE6U;
else
return M_MB12U;
}
/*******************************************************************************
* 单板信息接口(软件) *
*******************************************************************************/
/*******************************************************************************
* b_getMachineType
*
*/
UINT8 b_getMachineType (void)
{
MACHINE_TYPE = M_6910;
return (MACHINE_TYPE);
}
/*******************************************************************************
* b_getMachineName
*
*/
void b_getMachineName (char* buffer)
{
sprintf(buffer, "ZXAN-C220");
return;
}
/*******************************************************************************
* 主备相关 *
*******************************************************************************/
/*******************************************************************************
* boardIsMaster
*
*/
BOOL boardIsMaster (void)
{
UINT8 val;
val = mecRegRead (0xF0);
if (val & 0x01)
return (FALSE);
else
return (TRUE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -