⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 le1veconfig.c

📁 Zalink50114----TDMoIP芯片驱动源码
💻 C
📖 第 1 页 / 共 5 页
字号:
       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 + -