亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? le1veapp.c

?? Zalink50114----TDMoIP芯片驅動源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* le1veApp.c - LE1VE card application resoure file
*
* Copyright     2004-2007 ZTE, Inc.
* author:       ZhengQishan
* date:         2004.02
*
* modification history
*------------------------------
*
*/
#include "zl5011x.h"
#include "zl5011xRdWr.h"
#include "zl5011xDpr.h"
#include "zl5011xInterrupts.h"
#include "zl5011xApi.h"
#include "zl5011xInit.h"
#include "zl5011xTdm.h"
#include "zl5011xLan.h"
#include "zl5011xMisc.h"
#include "zl5011xPacket.h"
#include "zl5011xError.h"
#include "le1veLib.h"
#include "le1veApp.h"

zl5011xParamsS *le1ve_Zl5011xParams[MAX_IF_CARD_NUM] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};


LOCAL zlStatusE initLe1veCard(zl5011xSysInitS *sysInit);
#if 0
LOCAL void populateHeader(Uint32T context, UINT8 *macAddress, Uint8T *header, Uint8T *headerLength, zl5011xProtocolTypeE *protocol);
#endif
/*-----------------------------
* zl5011xModuleInit  - init Zl5011X data structure
*
*Argument: void
*
*Return: zlStatusE - the status of init
*/
zlStatusE zl5011xModuleInit(int slot)
{
    int loop;
    zl5011xCreateDeviceS        createDevice;
    zl5011xSysInitS             sysInit;
    zl5011xWanConfigureSyncS    wanConfigureSync;
    zl5011xLanConfigureS        lanConfigure;
    zl5011xLanQueueConfigureS   lanQueueConfigure;
    zlStatusE                   result = ZL5011X_OK;
    UINT8                       *pMacAddress;
    zl5011xParamsS  			*pZl5011xParams;

    if (slot > 8 || slot < 1)
    {
        printf("Error slot number !\n");
        return(ZL5011X_ERROR_SLOT_NUM);
    }
    if (le1ve_Zl5011xParams[slot - 1] != NULL)
    {
        printf("slot %d zl5011xModuleInit have been called!\n", slot);
        return(ZL5011X_DEVICE_HAVE_BEEN_INIT);
    }

    /* create the device structure and OS objects */
    result = zl5011xCreateDeviceStructInit(&createDevice);

    if (result == ZL5011X_OK)
    {
        createDevice.baseAddress = IF_CARD_CPU_REG_BASE(slot);
        result = zl5011xCreateDevice(&pZl5011xParams, &createDevice);
        if (result != ZL5011X_OK)
        {
             printf("Init (slot %d) Zl50114 failed!\n", slot );
             return(result);
        }
        le1ve_Zl5011xParams[slot - 1] = pZl5011xParams;
        le1ve_Zl5011xParams[slot - 1]->slotNum = slot;
    }

    /* get ready to initialise the device. Default the structure entries to default
       values and then set up any required values */
    if (result == ZL5011X_OK)
    {
        result = zl5011xSysInitStructInit(pZl5011xParams, &sysInit);
        /*指定所用芯片類型,新添加*/
        sysInit.init.deviceType = ZL_DEVICE_ZL50114;

        /*TDM接口的時鐘由硬件決定*/
        sysInit.wanInit.ifType = ZL5011X_WAN_HMVIP_8M;  /*ZL5011X_WAN_STBUS_2M_X2_CLOCK;*/

        /*2倍默認值大小*/
        sysInit.wanInit.txQueueMaxNumberOfGranules = 10000;
        #if 0 /*默認2.048M 恢復時鐘涉及*/
         /*add by shf 2005.7.13 */
        if( b_physIfType(slot) == CARD_TMD_OVER_IP_4_1_T1)
        {
            sysInit.wanInit.liuFreq= ZL5011X_WAN_LIU_FREQ_1_544M;
        }
        /*end*/
        #endif

        /*LE1VE 有8Mbyte 的extern memory*/
        sysInit.configureMemory.extMemChipSize= ZL5011X_EXT_MEM_SIZE_4MB;

        /*顆粒的多少主要取決于內存的多少,?	每一個顆粒由于64字節的數據區和16字節的描述區組成。
          顆粒的大小暫定為20000*/
        /*sysInit.configureMemory.numberGranules= 40000;讓芯片自己選擇*/
    }
    /*用sysInit參數初始化Le1ve單板*/
    if (result == ZL5011X_OK)
    {
        result = initLe1veCard(&sysInit);
    }

    /* Initialise the device */
    if (result == ZL5011X_OK)
    {
        printf("ZL50114 Device Initialise\n");
        result = zl5011xSysInit(pZl5011xParams, &sysInit);
    }

    /* setup the TDM interface - in this example sync clocks */
    if (result == ZL5011X_OK)
    {
        result = zl5011xWanConfigureSyncStructInit(pZl5011xParams, &wanConfigureSync);

        if (result == ZL5011X_OK)
        { 
     
        /*add by shf 2005.7.13 */
            if( b_physIfType(slot) == CARD_TMD_OVER_IP_4_1)
            {
            wanConfigureSync.primaryRef.refFreq = ZL5011X_WAN_REF_FREQ_2_048M;
            wanConfigureSync.secondaryRef.refFreq = ZL5011X_WAN_REF_FREQ_2_048M;
	     }
	     else
	     {
	     		wanConfigureSync.primaryRef.refFreq = ZL5011X_WAN_REF_FREQ_1_544M;
                wanConfigureSync.secondaryRef.refFreq = ZL5011X_WAN_REF_FREQ_1_544M;
	     }  
         #if 0
      /*end*/
    
            wanConfigureSync.dpllConnection = ZL5011X_DPLL_SLAVE_CONNECTION;/*ZL5011X_DPLL_MASTER_CONNECTION;*/
            wanConfigureSync.dpllMasterOutputEnable = ZL5011X_FALSE;  /*ZL5011X_TRUE;*/
            wanConfigureSync.framePulsePolarity = ZL5011X_NEGATIVE ;  /*ZL5011X_POSITIVE;*/
            wanConfigureSync.framePulseWidth = ZL5011X_WAN_FRAME_2_BITS_CENTRED;/*ZL5011X_WAN_FRAME_FULL_BIT_CENTRED;*/
      #endif
      #if 0
      /*slave or master*/
         wanConfigureSync.dpllConnection = ZL5011X_DPLL_MASTER_CONNECTION;         /* enableDPLL, drive TDM_CLKo and TDM_FRMo outputs */
      
         wanConfigureSync.dpllMasterOutputEnable = ZL5011X_TRUE;                        /* enable the PLL_PRI and PLL_SEC outputs */

         wanConfigureSync.primaryRef.source = ZL5011X_WAN_STREAM_REF;                /* Take CLKi0 (connected to CLKo0) as DPLL reference input */
         wanConfigureSync.primaryRef.stream = (Uint8T)0x00; 
         wanConfigureSync.primaryRef.refFreq = ZL5011X_WAN_REF_FREQ_2_048M;
         
         wanConfigureSync.secondaryRef.source = ZL5011X_WAN_STREAM_REF;                /*secondary input, for backup only. */
         wanConfigureSync.secondaryRef.stream = (Uint8T)0x01; 
         wanConfigureSync.secondaryRef.refFreq = ZL5011X_WAN_REF_FREQ_2_048M; 
         wanConfigureSync.refPriority = ZL5011X_DPLL_PRIMARY_PRIORITY; 
         wanConfigureSync.refPolarity = ZL5011X_POSITIVE;
               
     #endif 
            /* For default values for structure wanConfigureSync, see the  function
            zl5011xWanConfigureSyncStructInit() in file zl5011xTdm.c */
            result = zl5011xWanConfigureSync(pZl5011xParams, &wanConfigureSync);

            /*ZL50114 */
            #if 0
            zl5011xTifReverseBitOrder(pZl5011xParams, ZL5011X_TRUE);
            #endif
        }
    }

    /* Configure the LAN interface - Packet Tx, Packet Rx and MAC */
    if (result == ZL5011X_OK)
    {
        pMacAddress = pZl5011xParams->macAddress[0];
        Ros_GetMacBase(b_FetchSerial(),pMacAddress);

        pMacAddress = pZl5011xParams->macAddress[1];
        Ros_GetMacBase(b_FetchSerial(),pMacAddress);

        /*兩以太接口的MAC地址不一樣*/
        pZl5011xParams->macAddress[1][ZL5011X_MAC_SIZE - 1]  += 0x40;
        result = zl5011xLanConfigureStructInit(pZl5011xParams, &lanConfigure);

        lanConfigure.macType = ZL5011X_MAC_TYPE_MII;  /* alternatively ZL5011X_MAC_TYPE_GMII */
    }

    if (result == ZL5011X_OK)
    {
        result = zl5011xLanQueueConfigureStructInit(pZl5011xParams, &lanQueueConfigure);
    }

    /* set up 2 LAN ports */
    for (loop = 0; loop < 2; loop++)
    {
        lanQueueConfigure.portNum = loop;

        if (result == ZL5011X_OK)
        {
            /* set up the LAN queues */
            result = zl5011xLanQueueConfigure(pZl5011xParams, &lanQueueConfigure);
        }

        if (result == ZL5011X_OK)
        {
            /* set up the LAN ports. Set the low byte of the MAC address to be the
            port number itself. That is port 1 becomes xx:xx:xx:xx:xx:01 */
            lanConfigure.portNum = loop;
            
            /* set the ethernet MAC address */
            bcopy (pZl5011xParams->macAddress[loop], lanConfigure.macAddress, ZL5011X_MAC_SIZE);

            result = zl5011xLanConfigure(pZl5011xParams, &lanConfigure);
        }
    }
#if 0    
    if (firstTime == OK)
    {
        /* Interrupts are required for the differential mode of operation. So, must
        initialise the interrupts before CET */
        if (result == ZL5011X_OK)
        {
            result = zl5011xIsrInitialiseStructInit(pZl5011xParams, &isrInit);

            isrInit.apiPhysIntr = 0;
            isrInit.appPhysIntr = 0;

            if (result == ZL5011X_OK)
            {
                result = zl5011xIsrInitialise(pZl5011xParams, &isrInit);
            }
        }
        firstTime = ERROR;
    }

    /* The interrupt is now initialised, so add the device to the list to be serviced */
    if (result == ZL5011X_OK)
    {
        result = zl5011xIsrAddDeviceStructInit(pZl5011xParams, &isrAddDevice);

        if (result == ZL5011X_OK)
        {
            result = zl5011xIsrAddDevice(pZl5011xParams, &isrAddDevice);
        }
    }
#endif

    return(result);
}


LOCAL zlStatusE initLe1veCard(zl5011xSysInitS *sysInit)
{
    zlStatusE result = ZL5011X_OK;

    return (result);
}

#if 0
/*-----------------------------
* le1veCreatContext - create context
*
*Argument:
* UINT32  gPort - global port
* UINT32 timeSlot - 該通道所占的時隙數,每一位表示一個時隙
*
* 說明:LE1VE最多只創建兩個context,而且context創建后,不為其分配通道(時隙)也不會工作,LE1VE的驅動
* 在初始化時直接先創建兩個context,在使用時再為其動態分配通道及配置接口屬性。
*
*Return:
* OK or ERROR if something is wrong
*/
zlStatusE le1veCreatRxContext(int slot)
{
    int contextLoop, context, stream, channelLoop;
    zl5011xParamsS                  *pZl5011xParams;
    zl5011xContextCreateS           contextCreate;
    zl5011xContextAddChannelRxS     addChannelRx;
    zl5011xWanRxPayloadConfigS      wanRxPayload;
    zl5011xPacketTxSetHeaderS       packetTxHeader;
    zl5011xContextS                 contextInfo;
    zl5011xWanRxGetPayloadLengthS   payloadLength;
    Uint8T *packetHeader;
    zlStatusE                       result = ZL5011X_OK;

    pZl5011xParams = le1ve_Zl5011xParams[slot - 1];

    /*Create the TDM input contexts (WAN Rx contexts)*/
    for (contextLoop = FIRST_CONTEXT;
        (contextLoop < (FIRST_CONTEXT + NUM_CONTEXTS)) && (result == ZL5011X_OK);
        contextLoop++)
    {

        printf("context %3d: TDM input create\n", contextLoop);

        result = zl5011xContextCreateStructInit(pZl5011xParams, &contextCreate);
        /* For default values for structure contextCreate, see the  function
        zl5011xContextCreateStructInit() in file zl5011xTdm.c */
        if (NULL == (packetHeader = (Uint8T*)malloc(100)))
        	result = ZL5011X_ERROR;
        else
        {
		pZl5011xParams->pPktTxHeader[contextLoop] = packetHeader;
        }

        if (result == ZL5011X_OK)
        {
            contextCreate.context = contextLoop;
            contextCreate.flow = ZL5011X_FLOW_WAN_PE_PKT;
            result = zl5011xContextCreateRx(pZl5011xParams, &contextCreate);
        }
    }

#if 1   /*正式版本中將刪除這段代碼,要求實現通道的動態增加/刪除*/
	/* Add channels to the TDM input contexts (structured mode only) */
	for (contextLoop = FIRST_CONTEXT;
	(contextLoop < FIRST_CONTEXT + NUM_CONTEXTS) && (result == ZL5011X_OK);
	contextLoop++)
	{
		context = contextLoop;

		for (channelLoop = 1 ; (channelLoop < 32) && (result == ZL5011X_OK); channelLoop++)
		{
			/* simply assign 32 channels to each context. */
			stream = context;
			result = zl5011xContextAddChannelRxStructInit(pZl5011xParams, &addChannelRx);

			/* the structure addChannelRx is used to associate with the context
			stream & channel numbers and some other properties  For default
			values for structure addChannelRx, see the  function
			zl5011xContextAddChannelRxStructInit() in file zl5011xTdm.c */

			if (result == ZL5011X_OK)
			{
				addChannelRx.context = context;
				addChannelRx.tdm.stream = 0;
				addChannelRx.tdm.channel = channelLoop * 4 + stream;

				result = zl5011xContextAddChannelRx(pZl5011xParams, &addChannelRx);
			}
		}
	}
#endif  /*1*/

    /* Setup the packet size for the TDM Input contexts (WAN Rx contexts) */
    for (contextLoop = FIRST_CONTEXT;
        (contextLoop < FIRST_CONTEXT + NUM_CONTEXTS) && (result == ZL5011X_OK);
        contextLoop++)
    {
        context = contextLoop;

        printf("context %3d: TDM input configure payload\n", context);

        result = zl5011xWanRxPayloadConfigStructInit(pZl5011xParams, &wanRxPayload);

        if (result == ZL5011X_OK)
        {
            wanRxPayload.context = context;
            wanRxPayload.numberOfFrames = 8;

            result = zl5011xWanRxPayloadConfig(pZl5011xParams, &wanRxPayload);
        }
    }

    /* Configure the Packet Transmit header */
    for (contextLoop = FIRST_CONTEXT;
        (contextLoop < FIRST_CONTEXT + NUM_CONTEXTS) && (result == ZL5011X_OK);
        contextLoop++)
    {
        printf("context %3d: TDM input setup header\n", contextLoop);

        /* Using a ETHERNET->IPv4->UDP->RTP->PW header */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青娱乐精品视频| 亚洲日本丝袜连裤袜办公室| 96av麻豆蜜桃一区二区| 国产自产视频一区二区三区| 蜜臀av亚洲一区中文字幕| 亚洲成人自拍偷拍| 亚洲成a人片在线观看中文| 亚洲不卡一区二区三区| 午夜精品久久久久久久| 喷白浆一区二区| 精品一区二区三区蜜桃| 国产一区91精品张津瑜| 高清国产一区二区三区| 不卡av在线网| 欧美日韩激情一区| 日韩区在线观看| 久久日韩精品一区二区五区| 久久亚洲捆绑美女| 国产精品国产自产拍在线| 国产精品久久久久久久久免费桃花 | 欧美一级黄色录像| 欧美一级电影网站| 国产日韩精品一区| 一区二区三区在线影院| 免费一级欧美片在线观看| 精品一区二区三区在线播放| 国产激情偷乱视频一区二区三区| www..com久久爱| 精品视频在线看| 久久精品亚洲一区二区三区浴池| 国产精品女主播av| 天天综合色天天| 国产凹凸在线观看一区二区| 91久久人澡人人添人人爽欧美| 555www色欧美视频| 最新日韩av在线| 美女网站一区二区| 91视频在线观看免费| 日韩精品最新网址| 亚洲激情中文1区| 国产精品91一区二区| 欧美色涩在线第一页| 国产亚洲精品久| 手机精品视频在线观看| 成人中文字幕在线| 精品免费日韩av| 最近日韩中文字幕| 国产一区二区三区在线观看免费| 日本丰满少妇一区二区三区| 精品欧美黑人一区二区三区| 亚洲一区二区欧美| 粉嫩一区二区三区性色av| 欧美老肥妇做.爰bbww| 国产精品素人视频| 免费观看91视频大全| 在线观看亚洲精品视频| 国产精品久久久久影院色老大 | 欧美日韩一区二区三区视频| 久久久综合精品| 免费成人性网站| 欧美日韩精品一区二区三区| 成人欧美一区二区三区白人| 国产盗摄女厕一区二区三区| 日韩一级片网址| 亚洲成人动漫一区| 欧美性视频一区二区三区| 亚洲国产激情av| 国产精品99久久久久久有的能看| 欧美成人乱码一区二区三区| 天堂在线一区二区| 在线电影国产精品| 天天操天天色综合| 在线成人免费视频| 日韩在线观看一区二区| 777奇米四色成人影色区| 一二三区精品视频| 欧美视频在线不卡| 亚洲国产精品视频| 欧美日韩国产高清一区| 午夜视频在线观看一区二区| 久久久五月婷婷| 国内偷窥港台综合视频在线播放| 日韩一区二区在线免费观看| 青青草国产成人99久久| 日韩精品中文字幕在线一区| 经典一区二区三区| 久久免费午夜影院| 国产91在线观看丝袜| 国产精品狼人久久影院观看方式| 丁香网亚洲国际| 亚洲女爱视频在线| 欧美日韩在线观看一区二区| 婷婷国产v国产偷v亚洲高清| 精品精品国产高清a毛片牛牛| 狠狠狠色丁香婷婷综合激情| 欧美国产丝袜视频| 97精品国产97久久久久久久久久久久 | 日韩一区二区电影| 精品影视av免费| 国产精品亲子伦对白| 91麻豆国产福利精品| 偷窥国产亚洲免费视频| 精品久久久久久无| 99国内精品久久| 日本不卡在线视频| 久久久亚洲午夜电影| 色婷婷久久久亚洲一区二区三区 | 51精品秘密在线观看| 狠狠色综合色综合网络| 国产精品乱码人人做人人爱| 欧美性猛片xxxx免费看久爱| 蜜桃av一区二区| 一区二区三区在线不卡| 欧美电影免费观看高清完整版| 99久久夜色精品国产网站| 日韩电影免费在线| 亚洲欧美日韩国产成人精品影院 | 色婷婷综合激情| 免费观看久久久4p| 亚洲女子a中天字幕| 日韩免费观看高清完整版 | 日本一区中文字幕| 亚洲欧洲综合另类| 久久久久久久久久看片| 欧美日韩国产美女| 成人av在线资源网| 精品中文字幕一区二区小辣椒| 亚洲精品免费在线观看| 精品av综合导航| 欧美精品久久天天躁| 99精品视频在线观看免费| 麻豆专区一区二区三区四区五区| 一区二区三区四区视频精品免费| 久久久久亚洲蜜桃| 9191久久久久久久久久久| 91丨porny丨国产| 丁香六月久久综合狠狠色| 精品亚洲porn| 欧美aaaaaa午夜精品| 日韩专区欧美专区| 亚洲国产日韩一级| 亚洲人成精品久久久久久| 国产偷国产偷精品高清尤物| 成人免费在线观看入口| 国产欧美日韩三区| 精品sm在线观看| 精品免费国产一区二区三区四区| 欧美巨大另类极品videosbest | 不卡的av在线| av中文字幕一区| 国产精品91一区二区| 国产一区二区电影| 国产自产v一区二区三区c| 精品一区二区三区免费观看 | 国产亚洲精品超碰| 久久久久免费观看| 久久精品男人天堂av| 26uuu国产电影一区二区| 日韩视频一区二区在线观看| 制服丝袜av成人在线看| 欧美日韩一区三区| 欧美日韩一区二区三区高清| 欧美精品在线观看播放| 91精品国产色综合久久久蜜香臀| 欧美一区二区视频在线观看| 91精品在线免费| 日韩免费高清视频| 国产欧美日韩亚州综合| 亚洲区小说区图片区qvod| 亚洲丶国产丶欧美一区二区三区| 五月天欧美精品| 国内不卡的二区三区中文字幕| 福利一区二区在线| 色呦呦一区二区三区| 欧美日本国产视频| 精品国产伦一区二区三区观看体验| 久久看人人爽人人| 亚洲另类一区二区| 美国十次了思思久久精品导航| 国产一区二区三区日韩| 91丨九色丨黑人外教| 欧美精品粉嫩高潮一区二区| 日韩午夜在线影院| 欧美极品美女视频| 日韩电影在线一区二区| 成人激情动漫在线观看| 欧美视频中文字幕| 久久综合成人精品亚洲另类欧美| 亚洲视频香蕉人妖| 极品尤物av久久免费看| av日韩在线网站| 精品理论电影在线| 亚洲精品自拍动漫在线| 热久久免费视频| 一本大道久久精品懂色aⅴ| 日韩欧美三级在线| 一区二区三区成人| 高清beeg欧美| 欧美电影免费观看高清完整版在 | 91国产丝袜在线播放|