📄 le1veconfig.c
字号:
return ZL5011X_ERROR;
}
/*恢复CPLD时钟为普通模式*/
status = drv_le1veCPLDCetDisable(slotNum);
/*Remove Cet Device*/
if(ZL5011X_OK == status)
{
status = zl5011xCetRemoveDeviceStructInit(zl5011xParams, &CetRemoveDevice);
}
if(ZL5011X_OK == status)
{
status = zl5011xCetRemoveDevice(zl5011xParams, &CetRemoveDevice);
}
/*置标志位*/
if(ZL5011X_OK == status)
{
/*delete success*/
le1veCetDevAdded[(slotNum)-1] = 0;
}
/*所有TDMoIP板都不再使用CET.删除CET Module*/
if(0 == drv_Le1veCheckCet())
{
#if 0
/*Delete CET Module*/
/*CET Modle 和ISR Module 初始化全局变量,对于GAR多个E1VE,T1VE板,只能够
被初始化一次(见初始化代码),防止被反复清零.只有在所有TDMoIP板不再需要中断
模块和CET模块时才能卸载两个模块,需要有更多的条件判断。
*/
if(ZL5011X_OK == status)
{
status = zl5011xCetDeleteStructInit(zl5011xParams, &cetDelete);
}
if(ZL5011X_OK == status)
{
status = zl5011xCetDelete(zl5011xParams, &cetDelete);
}
/*Delete ISR Module*/
if(ZL5011X_OK == status)
{
status = zl5011xIsrDeleteStructInit(zl5011xParams, &isrDelete);
}
if(ZL5011X_OK == status)
{
status = zl5011xIsrDelete(zl5011xParams, &isrDelete);
}
if(ZL5011X_OK == status)
{
/*重置ISR,CET初始变量*/
isrInitFirstTime = ZL5011X_OK;
cetInitFirstTime = ZL5011X_OK;
}
#endif
}
zl5011xPrintErr(status);
return(status);
}
/*****************************
zlStatusE drv_Le1veCetQueneSetMode---config cet quene mode
*Description :
* config the cet quene mode for zl5011x
*Parameters :
* IN:
* gPort --global port
* zl5011xParamsS* --pointer to a e1ve device struct
* OUT:
* none
*Return :
* OK or ERROR
*----------------------------
*history:
*----------------------------
*2005.9.8 FM 17:14 shf created
*****************************/
zlStatusE drv_Le1veCetQueneSetMode(zl5011xParamsS *zl5011xParams, UINT32 gPort)
{
int slot, contextNum;
zl5011xCetQueueSetModeS cetQueueSetMode;/*add by shf for poort network*/
zlStatusE result = ZL5011X_OK;
if(NULL == zl5011xParams)
return ZL5011X_ERROR;
slot = LE1VE_SLOT_NUM(gPort);
contextNum = LE1VE_CHAN_NUM(gPort)-1;
/*printf("context %3ld: queue management enable\n", context); add by shf if network is poor*/
result = zl5011xCetQueueSetModeStructInit(zl5011xParams, &cetQueueSetMode);
/*CET 打开模式下才能使能Quene management*/
if ((result == ZL5011X_OK) && (le1veCetDevAdded[slot-1]==1))
{
cetQueueSetMode.context = contextNum;
cetQueueSetMode.mode = ZL5011X_CET_QUEUE_ENABLE;
cetQueueSetMode.resetPktDepth = ZL5011X_INVALID;
/* This uses default behaviour of resetting to half queue depth*/
result = zl5011xCetQueueSetMode(zl5011xParams, &cetQueueSetMode);
}
return result;
}
/*****************************
zlStatusE drv_Le1veConfigAdapClk---config cet for clock recovery
*Description :
* config the cet mode for zl5011x
*Parameters :
* IN:
* gPort --global port
* zl5011xParamsS* --pointer to a e1ve device struct
* OUT:
* none
*Return :
* OK or ERROR
*----------------------------
*history:
*----------------------------
*2005.9.8 FM 17:14 shf created
*****************************/
zlStatusE drv_Le1veConfigAdapClk(zl5011xParamsS *zl5011xParams, UINT32 gport)
{
int slot, contextNum;
zlStatusE result = ZL5011X_OK;
slot = LE1VE_SLOT_NUM(gport);
contextNum = LE1VE_CHAN_NUM(gport)-1;
if(NULL == zl5011xParams)
return ZL5011X_ERROR;
if(le1veCetDevAdded[slot-1] == 1)
{
/*if using adaptive clock*/
if(g_contextAttribTbl[slot-1][contextNum].adaptiveClock == LE1VE_ADAPTIVE_CLOCK_ENABLE)
{
result = drv_Le1veAdaptiveClock(zl5011xParams, gport, LE1VE_ADAPTIVE_CLOCK_ENABLE);
}
/*disable adaptive clock fot this context*/
else if(LE1VE_ADAPTIVE_CLOCK_DISABLE == g_contextAttribTbl[slot-1][contextNum].adaptiveClock)
{
result = drv_Le1veAdaptiveClock(zl5011xParams, gport, LE1VE_ADAPTIVE_CLOCK_DISABLE);
}
}
return result;
}
/*****************************
drv_Le1veAdaptiveClock---config cet for clock recovery
*Description :
* config the cet mode for zl5011x
*Parameters :
* IN:
* gPort --global port
* zl5011xParamsS* --pointer to a e1ve device struct
* OUT:
* none
*Return :
* OK or ERROR
*----------------------------
*history:
*----------------------------
*2005.9.8 FM 17:14 shf created
*****************************/
zlStatusE drv_Le1veAdaptiveClock(zl5011xParamsS *zl5011xParams, UINT32 gport, ADAPTIVE_CLOCK_ATTRIB attrib)
{
int slot,contextNum;
zl5011xCetSetModeS cetSetMode;
zl5011xWanRxGetPayloadLengthS payloadLength;
zlStatusE status = ZL5011X_OK;
slot = LE1VE_SLOT_NUM(gport);
contextNum = LE1VE_CHAN_NUM(gport)-1;
/*参数检查*/
status = ZL5011X_CHECK_SLOTNUM(slot, zl5011xParams);
if(ZL5011X_OK != status)
return status;
/*Cet 是否初始化*/
if(le1veCetDevAdded[slot-1] == 0)
return ZL5011X_ERROR;
/* configure CET for the context before actually performing the update */
printf("context %d: CET configure\n", contextNum);
if (status == ZL5011X_OK)
{
/* get the payload length, for use in setting up the packet header */
if (status == ZL5011X_OK)
{
status = zl5011xWanRxGetPayloadLengthStructInit(zl5011xParams, &payloadLength);
payloadLength.context = contextNum;
if (status == ZL5011X_OK)
{
status = zl5011xWanRxGetPayloadLength(zl5011xParams, &payloadLength);
}
}
}
/*USE 256*numFrames to determine the rtpIncrementMode --shf 2005.10.18 AM 10:00*/
payloadLength.lengthBits = 256*g_contextAttribTbl[slot - 1][contextNum].frameNumPerPkt;
if (status == ZL5011X_OK)
{
status = zl5011xCetSetModeStructInit(zl5011xParams, &cetSetMode);
if(attrib == LE1VE_ADAPTIVE_CLOCK_ENABLE)
{
cetSetMode.stream = contextNum;
cetSetMode.recoveryMode = ZL5011X_CET_ADAPTIVE;
cetSetMode.netType = ZL5011X_CET_NETWORK_METROPOLITAN;
if(payloadLength.lengthBits < ZL5011X_13BIT_MASK)
cetSetMode.rtpIncrementMode = ZL5011X_WAN_RTP_INCREMENT_BIT;
else
cetSetMode.rtpIncrementMode = ZL5011X_WAN_RTP_INCREMENT_BYTE;
if (zl5011xParams->wanIf.wanLiuFreq == ZL5011X_WAN_LIU_FREQ_44_736M)
{
/* using a byte timestmap increment rather than bit for DS3 */
cetSetMode.rtpIncrementMode = ZL5011X_WAN_RTP_INCREMENT_BYTE;
}
cetSetMode.framesPerPacket = g_contextAttribTbl[slot - 1][contextNum].frameNumPerPkt;
/* allow maximum deviation of 75 ppm for the recovered clock */
cetSetMode.ppmLimit = 75;
cetSetMode.resumeLock = ZL5011X_FALSE;
}
else if(LE1VE_ADAPTIVE_CLOCK_DISABLE== attrib)
{
cetSetMode.stream = contextNum;
cetSetMode.recoveryMode = ZL5011X_CET_DISABLED;
}
if (status == ZL5011X_OK)
{
status = zl5011xCetSetMode(zl5011xParams, &cetSetMode);
printf("context %d: zl5011xCetSetMode status %d\n",contextNum,status);
}
}
/*Cet Set Mode Success .deal with the refCnt*/
if(ZL5011X_OK == status)
{
/*increment*/
if(attrib == LE1VE_ADAPTIVE_CLOCK_ENABLE)
le1veCetRefCnt[slot-1]++;
/*decrement*/
else if(attrib == LE1VE_ADAPTIVE_CLOCK_DISABLE)
{
if((le1veCetDevAdded[slot-1] == 1) && (le1veCetRefCnt[slot-1] > 0))
le1veCetRefCnt[slot-1]--;
}
}
return status;
}
/*****************************
*drv_Le1veGetLanStat--------get lan stata
*Description :
* to get the lan statis
*Parameters:
* IN: gPort
* : zl5011xParamsS*
* out: NpIfStatisStruct*
*
*Return:
* OK or ERROR
*----------------------------
*history:
*----------------------------
*2005.7.18 AM 11:04 shf created
*****************************/
STATUS drv_Le1veGetLanStat(UINT32 gPort, void *ifStatis )
{
int slot, portNum;
Uint32T address, loop;
NpIfStatisStruct *pIfStatis=NULL;
zl5011xParamsS *pZl5011xParams=NULL;
zl5011xLanGetStatsS *lanStats=NULL;
zlStatusE status = ZL5011X_OK;
if(NULL == ifStatis)
return ZL5011X_ERROR;
else
pIfStatis = (NpIfStatisStruct *)ifStatis;
slot = LE1VE_SLOT_NUM(gPort);
/*计算以太口物理端口*/
portNum = LE1VE_PORT_NUM(gPort) - 5;
pZl5011xParams = le1ve_Zl5011xParams[slot - 1];
/*参数检测*/
status =ZL5011X_CHECK_SLOTNUM(slot, pZl5011xParams);
/*判断是否为lan port*/
if(portNum>1 || portNum<0)
return ZL5011X_ERROR;
if (ZL5011X_OK == status)
{
/* Allocate memory for the lanStats structure */
lanStats = (zl5011xLanGetStatsS *)calloc(
sizeof(zl5011xLanGetStatsS), 1);
if (NULL == lanStats)
{
status = ZL5011X_RTOS_MEMORY_FAIL;
}
}
if(ZL5011X_OK == status)
{
status = zl5011xPkiReadCounters(pZl5011xParams, portNum);
}
if(ZL5011X_OK == status)
{
lanStats->portNum = portNum;
lanStats->statsMode = ZL5011X_COLLECT_ETHER_AND_IF_STATS;
status = zl5011xLanGetStats(pZl5011xParams, lanStats);
}
/* reset PKI stats */
if (status == ZL5011X_OK)
{
address = ZL5011X_PKI_RAM_BASE + (portNum * ZL5011X_PKI_MAC_STATS_SIZE * sizeof(Uint32T));
for (loop = 0; loop < ZL5011X_PKI_MAC_STATS_SIZE; loop++)
{
if (status != ZL5011X_OK)
{
break;
}
status = zl5011xWrite(pZl5011xParams, address + (loop * sizeof(Uint32T)), 0);
}
}
/*copy the statis */
if(ZL5011X_OK == status)
{
pIfStatis->ifGport = gPort;
pIfStatis->ifStatisData[0] = lanStats->etherStats.etherStatsPkts64Octets.lo;
pIfStatis->ifStatisData[1] = lanStats->etherStats.etherStatsPkts65to127Octets.lo;
pIfStatis->ifStatisData[2] = lanStats->etherStats.etherStatsPkts128to255Octets.lo;
pIfStatis->ifStatisData[3] = lanStats->etherStats.etherStatsPkts256to511Octets.lo;
pIfStatis->ifStatisData[4] = lanStats->etherStats.etherStatsPkts512to1023Octets.lo;
pIfStatis->ifStatisData[5] = lanStats->etherStats.etherStatsPkts1024to1518Octets.lo;
pIfStatis->ifStatisData[6] = lanStats->etherStats.etherStatsUndersizePkts.lo;
pIfStatis->ifStatisData[7] = lanStats ->etherStats.etherStatsOversizePkts.lo;
pIfStatis->ifStatisInBroadPkts= lanStats->etherStats.etherStatsBroadcastPkts.lo;
pIfStatis->ifStatisInMultiPkts= lanStats->etherStats.etherStatsMulticastPkts.lo;
pIfStatis->ifStatisInOctes = lanStats->etherStats.etherStatsOctets.lo;
pIfStatis->ifStatisInPkts= lanStats->etherStats.etherStatsPkts.lo;
pIfStatis->ifStatisInUniPkts= lanStats->ifStats.ifInUcastPkts.lo;
/*the chip can't offerd the next two item statis*/
pIfStatis->ifStatisOutBroadPkts= 0;
pIfStatis->ifStatisOutMultiPkts=0;/*BroadPkts+MultiPkts=lanStats->ifStats.ifOutNUcastPkts.lo*/
pIfStatis->ifStatisOutOctes = lanStats->ifStats.ifOutOctets.lo;
pIfStatis->ifStatisOutPkts= lanStats->ifStats.ifOutUcastPkts.lo;
pIfStatis->ifStatisOutUniPkts = lanStats->ifStats.ifOutUcastPkts.lo;
}
/*free the memory for the lanStats Structure*/
if(lanStats != NULL)
{
free(lanStats);
}
if(ZL5011X_OK == status)
return OK;
else
return ERROR;
}
/*****************************
*drv_Le1vePacketForwardDeleteContextMatch(zl5011xParamsS *zl5011xParams,
* zl5011xLanRxDeleteContextMatchS *par)
*Description :
* to delete the context Match for packet forward
*Arguement:
* IN: par->context
*return:
* OK or ERROR
*-----------------------------
*History
*-----------------------------
*2005.7.21 shf created
******************************/
zlStatusE drv_Le1vePacketForwardDeleteContextMatch(zl5011xParamsS *zl5011xParams,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -