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

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

?? ibmemacend.c

?? WINDRIVER SBC405 BSP
?? C
?? 第 1 頁 / 共 5 頁
字號:
                    /* DRV_DEBUG_DEBUG      */                       );#define DRV_LOG(FLG, X0, X1, X2, X3, X4, X5, X6) \        if (ibmEmacDebug & FLG) \            logMsg((char *)X0, (int)X1, (int)X2, (int)X3, (int)X4, \                    (int)X5, (int)X6);#define DRV_PRINT(FLG,X) \        if (ibmEmacDebug & FLG) printf X;#else /*DRV_DEBUG*/#define DRV_LOG(DBG_SW, X0, X1, X2, X3, X4, X5, X6)#define DRV_PRINT(DBG_SW,X)#endif /*DRV_DEBUG*//* forward static functions */LOCAL STATUS    ibmEmacSendCopy(EMAC_DRV_CTRL * pDrvCtrl, M_BLK_ID pMblk);LOCAL STATUS    ibmEmacSendNoCopy(EMAC_DRV_CTRL * pDrvCtrl, M_BLK_ID pMblk);LOCAL void      ibmEmacReset(EMAC_DRV_CTRL * pDrvCtrl);LOCAL void      ibmEmacInt(EMAC_DRV_CTRL * pDrvCtrl);LOCAL void      ibmEmacTxeobInt(EMAC_DRV_CTRL * pDrvCtrl);LOCAL void      ibmEmacRxeobInt(EMAC_DRV_CTRL * pDrvCtrl);LOCAL void      ibmEmacTxdeInt(EMAC_DRV_CTRL * pDrvCtrl);LOCAL void      ibmEmacRxdeInt(EMAC_DRV_CTRL * pDrvCtrl);LOCAL void      ibmEmacMalSerrInt(EMAC_DRV_CTRL * pDrvCtrl);LOCAL void      ibmEmacHandleRecvInt(EMAC_DRV_CTRL * pDrvCtrl, int resetChan);LOCAL STATUS    ibmEmacRecv(EMAC_DRV_CTRL * pDrvCtrl, MAL_BD * pRxDesc);LOCAL MAL_BD *  ibmEmacRecvDescGet(EMAC_DRV_CTRL * pDrvCtrl);LOCAL void      ibmEmacRestart(EMAC_DRV_CTRL * pDrvCtrl);LOCAL STATUS    ibmEmacRestartSetup(EMAC_DRV_CTRL * pDrvCtrl);LOCAL void      ibmEmacAddrFilterSet(EMAC_DRV_CTRL * pDrvCtrl);LOCAL void      ibmEmacSendCleanup(EMAC_DRV_CTRL * pDrvCtrl);LOCAL void      ibmEmacConfig(EMAC_DRV_CTRL * pDrvCtrl);LOCAL STATUS    ibmEmacMemInit(EMAC_DRV_CTRL * pDrvCtrl);LOCAL STATUS    ibmEmacPhyRead(EMAC_DRV_CTRL * pDrvCtrl,                               UINT8 phyReg, USHORT * value);LOCAL STATUS    ibmEmacPhyWrite(EMAC_DRV_CTRL * pDrvCtrl, UINT8 phyReg,                                USHORT value);LOCAL STATUS    ibmEmacPhyAutoNegWait(EMAC_DRV_CTRL * pDrvCtrl, UINT ticks);LOCAL STATUS    ibmEmacPhyGetData(EMAC_DRV_CTRL * pDrvCtrl);LOCAL void      ibmEmacWdRestart(EMAC_DRV_CTRL * pDrvCtrl );/* END Specific interfaces. */LOCAL STATUS    ibmEmacStart(EMAC_DRV_CTRL * pDrvCtrl);LOCAL STATUS    ibmEmacStop(EMAC_DRV_CTRL * pDrvCtrl);LOCAL STATUS    ibmEmacUnload(EMAC_DRV_CTRL * pDrvCtrl);LOCAL int       ibmEmacIoctl(EMAC_DRV_CTRL * pDrvCtrl, unsigned int cmd,			     caddr_t data);LOCAL STATUS    ibmEmacSend(EMAC_DRV_CTRL * pDrvCtrl, M_BLK_ID pBuf);LOCAL STATUS    ibmEmacMCastAddrAdd(EMAC_DRV_CTRL * pDrvCtrl, char * pAddress);LOCAL STATUS    ibmEmacMCastAddrDel(EMAC_DRV_CTRL * pDrvCtrl, char * pAddress);LOCAL STATUS    ibmEmacMCastAddrGet(EMAC_DRV_CTRL * pDrvCtrl,                                    MULTI_TABLE * pTable);LOCAL STATUS    ibmEmacPollSend(EMAC_DRV_CTRL * pDrvCtrl, M_BLK_ID pBuf);LOCAL STATUS    ibmEmacPollReceive(EMAC_DRV_CTRL * pDrvCtrl, M_BLK_ID pBuf);LOCAL STATUS    ibmEmacPollStart(EMAC_DRV_CTRL * pDrvCtrl);LOCAL STATUS    ibmEmacPollStop(EMAC_DRV_CTRL * pDrvCtrl);/* * Declare the driver function table.  This is static across all driver * instances. */LOCAL NET_FUNCS ibmEmacFuncTable =    {    (FUNCPTR) ibmEmacStart,               /* Function to start the device.    */    (FUNCPTR) ibmEmacStop,                /* Function to stop the device.     */    (FUNCPTR) ibmEmacUnload,              /* Unload function for the driver.  */    (FUNCPTR) ibmEmacIoctl,               /* Ioctl function for the driver.   */    (FUNCPTR) ibmEmacSend,                /* Send function for the driver.    */    (FUNCPTR) ibmEmacMCastAddrAdd,        /* Multicast address add.           */    (FUNCPTR) ibmEmacMCastAddrDel,        /* Multicast address delete.        */    (FUNCPTR) ibmEmacMCastAddrGet,        /* Multicast table retrieve.        */    (FUNCPTR) ibmEmacPollSend,            /* Polling send function.           */    (FUNCPTR) ibmEmacPollReceive,         /* Polling receive function.        */    endEtherAddressForm,                  /* Put address info into a packet.  */    endEtherPacketDataGet,                /* Get a pointer to packet data.    */    endEtherPacketAddrGet                 /* Get packet addresses.            */    };/******************************************************************************** ibmEmacEndLoad - initialize the driver and device** This routine initializes the driver and the device to the operational state.* All of the device-specific parameters are passed in the initString.** See ibmEmacInitParse() for the specific format of the string.** This function is meant to be called two different times during the driver* load process.  If this routine is called with the first character of the* initialization string equal to NULL, this routine will return with the name of* the device "ibmEmac" copied into initString.* If this routine is called with the actual driver parameters in initString,* it will use the parms to initialize the device and prepare the rest of the* driver for operation.** RETURNS: An END object pointer, NULL if there is an error, or 0 and the* name of the device if the first character of initString is NULL.*/END_OBJ * ibmEmacEndLoad    (    char * initString            /* String to be parsed by the driver */    )    {    EMAC_DRV_CTRL *   pDrvCtrl;    pDrvCtrl = NULL;    /* If initString is NULL, this is an error. */    if (initString == NULL)        return (NULL);    /*     * If the first char of initString is a null char, just copy     * the name of this device "emac" into initString and return.     */    if (initString[0] == 0)        {        DRV_LOG (DRV_DEBUG_LOAD, "ibmEmacEndLoad  NULL \n", 1, 2, 3, 4, 5, 6);        strcpy(initString, (char *)EMAC_DEV_NAME);        return ((END_OBJ *)OK);        }    DRV_LOG (DRV_DEBUG_LOAD, "ibmEmacEndLoad  Load \n", 1, 2, 3, 4, 5, 6);    /*     * Allocate the main device structure the driver uses to keep track of     * everything.     */    pDrvCtrl = (EMAC_DRV_CTRL *)calloc(sizeof(EMAC_DRV_CTRL), 1);    if (pDrvCtrl == NULL)        goto errorExit;    DRV_LOG (DRV_DEBUG_INFO, "pDrvCtrl = 0x%x\n", pDrvCtrl, 2, 3, 4, 5, 6);    /* Parse initString, and fill in the device structure */    if (ibmEmacInitParse(pDrvCtrl, initString) == ERROR)        {        goto errorExit;        }        /* Create the restart WatchDog */    pDrvCtrl->wdRestart = wdCreate();    /* Get the MAC address from the BSP. */    EMAC_ENET_ADDR_GET (pDrvCtrl, &(pDrvCtrl->enetAddr[0]));    /*     * Depending on the value of inputFlags, store the value needed to initiate     * the transmit of a new packet when written to the TMR0 register.     */    if (pDrvCtrl->inputFlags & EMAC_INPUT_TX_2_CHANNEL)        {        /* Use both TX channel 0 and 1 in independent mode */        pDrvCtrl->numTxChannels = 2;        pDrvCtrl->txInfo[0].getNewPacketTX = EMAC_TMR0_GNP0;        pDrvCtrl->txInfo[1].getNewPacketTX = EMAC_TMR0_GNP1;        }    else        {        /* Use TX channel 0 only */        pDrvCtrl->numTxChannels = 1;        pDrvCtrl->txInfo[0].getNewPacketTX = EMAC_TMR0_GNP0;        }    /* Initialize the END and MIB2 parts of the structure */    if (END_OBJ_INIT (&pDrvCtrl->end, (DEV_OBJ *)pDrvCtrl, EMAC_DEV_NAME,                      pDrvCtrl->unit, &ibmEmacFuncTable,                      EMAC_DEV_DESC) == ERROR     || END_MIB_INIT (&pDrvCtrl->end, M2_ifType_ethernet_csmacd,                      &pDrvCtrl->enetAddr[0], 6, ETHERMTU,                      EMAC_SPEED)                    == ERROR)        goto errorExit;    /* Call a routine to allocate memory for various needs */    if (ibmEmacMemInit(pDrvCtrl) == ERROR)        goto errorExit;#ifdef INCLUDE_ZMII    /*    *  ZMII must give the desired EMAC clocks, or else the EMAC    *  will not come out of reset.    */    if (zmiiSetInterface(pDrvCtrl->baseAdrs))        goto errorExit;#endif    /*     * Depending on the OPB bus speed, determine the correct value to use     * in the EMAC_STACR register when accessing the PHY through the MDI.     */    if (pDrvCtrl->opbSpeedMhz <= 50)        pDrvCtrl->stacrOpbSpeed = EMAC_STACR_CLK_50MHZ;    else if (pDrvCtrl->opbSpeedMhz <= 66)        pDrvCtrl->stacrOpbSpeed = EMAC_STACR_CLK_66MHZ;    else if (pDrvCtrl->opbSpeedMhz <= 83)        pDrvCtrl->stacrOpbSpeed = EMAC_STACR_CLK_83MHZ;    else        pDrvCtrl->stacrOpbSpeed = EMAC_STACR_CLK_100MHZ;    /* Setup buffer descriptors and configure the EMAC core */    if (ibmEmacRestartSetup(pDrvCtrl) == ERROR)        goto errorExit;    /* Set the flags to indicate readiness */    END_OBJ_READY (&pDrvCtrl->end,                    IFF_UP | IFF_RUNNING | IFF_NOTRAILERS | IFF_BROADCAST                    | IFF_MULTICAST);    DRV_LOG (DRV_DEBUG_LOAD, "Done loading ibmEmac...\n", 1, 2, 3, 4, 5, 6);#ifdef DRV_DEBUG    ibmEmacDebugPtr = pDrvCtrl;#endif    return (&pDrvCtrl->end);errorExit:    if (pDrvCtrl != NULL)        {        /* Free buffer memory if it was allocated */        if (pDrvCtrl->memAdrsMalloc != NULL)            {            if (pDrvCtrl->inputFlags & EMAC_INPUT_UNCACHED_BUF)                cacheDmaFree(pDrvCtrl->memAdrsMalloc);            else                free(pDrvCtrl->memAdrsMalloc);            }        /* Free the memory allocated for driver pool structure */        if (pDrvCtrl->end.pNetPool != NULL)            free(pDrvCtrl->end.pNetPool);        /* Free the memory allocated for mBlks and clBlks */        if (pDrvCtrl->mClCfg.memArea != NULL)            free(pDrvCtrl->mClCfg.memArea);        /* Free the driver control structure itself */        free((char *)pDrvCtrl);        }    return ((END_OBJ *)NULL);    }/********************************************************************************* ibmEmacInitParse - parse the initialization string** ibmEmacEndLoad() calls this function to parse the driver initialization* string and then put the parameters in the the driver control structure.** The muxLib.o module automatically prepends the unit number to the user's* initialization string from the BSP (found in configNet.h).*** RETURNS: OK, or ERROR if any arguments are invalid.*/STATUS ibmEmacInitParse    (    EMAC_DRV_CTRL *   pDrvCtrl,    char *            initString    )    {    char*       tok;    char*       pHolder = NULL;          /* string placeholder             */    char**      ppHolder = &pHolder;     /* pointer to string placeholder  */    /* Parse initString */    /* First parameter is the unit number (from muxLib.o) */    tok = strtok_r (initString, ":", ppHolder);    if (tok == NULL)        return ERROR;    pDrvCtrl->unit = atoi (tok);    /* Second parameter is the base address of the EMAC core registers */    tok = strtok_r (NULL, ":", ppHolder);    if (tok == NULL)        return ERROR;    pDrvCtrl->baseAdrs = (UINT)strtoul (tok, NULL, 16);    /*     * Third parameter is the MAL channel number EMAC TX channel 0 is     * connected to.     */    tok = strtok_r (NULL, ":", ppHolder);    if (tok == NULL)        return ERROR;    pDrvCtrl->txChn0MalChannel = atoi (tok);    /*     * Fourth parameter is the MAL channel number EMAC TX channel 1 is     * connected to.     */    tok = strtok_r (NULL, ":", ppHolder);    if (tok == NULL)        return ERROR;    pDrvCtrl->txChn1MalChannel = atoi (tok);    /*     * Fifth parameter is the MAL channel number EMAC RX channel 0 is     * connected to.     */    tok = strtok_r (NULL, ":", ppHolder);    if (tok == NULL)        return ERROR;    pDrvCtrl->rxChn0MalChannel = atoi (tok);    /* Sixth parameter is the Ethernet interrupt vector */    tok = strtok_r (NULL, ":", ppHolder);    if (tok == NULL)        return ERROR;    pDrvCtrl->ivec = atoi (tok);    /* Seventh parameter is the Ethernet interrupt level. */    tok = strtok_r (NULL, ":", ppHolder);    if (tok == NULL)        return ERROR;    pDrvCtrl->ilevel = atoi (tok);    /* Eighth parameter is the memory address which will contain buffers. */    tok = strtok_r (NULL, ":", ppHolder);    if (tok == NULL)        return ERROR;    pDrvCtrl->memInputAdrs = (char *)strtoul (tok, NULL, 16);    /* Ninth parameter is the size of the memory pointed to above. */    tok = strtok_r (NULL, ":", ppHolder);    if (tok == NULL)        return ERROR;    pDrvCtrl->memInputSize = strtoul (tok, NULL, 16);    /* Tenth parameter is input flags */    tok = strtok_r (NULL, ":", ppHolder);    if (tok == NULL)        return ERROR;    pDrvCtrl->inputFlags |= strtoul (tok, NULL, 16);    /* Eleventh parameter is the PHY address */    tok = strtok_r (NULL, ":", ppHolder);    if (tok == NULL)        return ERROR;    pDrvCtrl->phyAdrs = strtoul (tok, NULL, 10);    /* Twelveth parameter is the size of the processor's data cache line */    tok = strtok_r (NULL, ":", ppHolder);    if (tok == NULL)        return ERROR;    pDrvCtrl->cacheLineSize = atoi (tok);    /*     * Thirteenth parameter is a pointer to the MAL driver structure for the

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲自拍偷拍网站| 亚洲欧洲在线观看av| 在线免费观看不卡av| 99精品偷自拍| 91丨九色porny丨蝌蚪| 成人av在线播放网站| 国产91综合网| 91女神在线视频| 在线观看亚洲成人| 欧美日韩一本到| 欧美一卡二卡三卡四卡| 欧美成人精品1314www| 国产日产欧美一区二区三区 | 亚洲色图另类专区| 亚洲精品综合在线| 天天综合天天做天天综合| 免费高清成人在线| 国产精品18久久久久久久网站| 国产精品456| 欧美综合一区二区| 日韩小视频在线观看专区| 国产丝袜美腿一区二区三区| 国产精品久久久久影院老司| 夜夜嗨av一区二区三区| 日本成人中文字幕| 成人精品视频网站| 欧美电影在哪看比较好| 精品欧美乱码久久久久久| 国产精品私房写真福利视频| 一区二区三区国产| 狠狠色丁香婷综合久久| 色嗨嗨av一区二区三区| 日韩一级完整毛片| 亚洲品质自拍视频| 久久精品国产澳门| 99精品热视频| 精品成a人在线观看| 亚洲乱码日产精品bd| 久久精品99久久久| 91久久精品一区二区三区| 欧美一级搡bbbb搡bbbb| 亚洲视频1区2区| 加勒比av一区二区| 在线观看中文字幕不卡| 欧美激情综合在线| 日韩成人一级片| 91色在线porny| 久久久国产一区二区三区四区小说| 一区二区三区精品视频在线| 国产精品综合久久| 制服丝袜国产精品| 亚洲自拍都市欧美小说| 成人妖精视频yjsp地址| 欧美高清视频一二三区| 一区二区三区四区蜜桃| 国产69精品一区二区亚洲孕妇| 欧美一区二区三区视频免费播放 | 亚洲激情在线激情| 国产精品18久久久| 欧美tk—视频vk| 免费在线欧美视频| 欧美日韩精品一区二区三区蜜桃 | 欧美一级欧美三级在线观看 | 精品福利一二区| 美女一区二区在线观看| 678五月天丁香亚洲综合网| 亚洲一区二区三区爽爽爽爽爽| 99热精品国产| 亚洲欧美偷拍卡通变态| av午夜精品一区二区三区| 中文字幕av在线一区二区三区| 国产一区二区按摩在线观看| 精品理论电影在线观看| 久久精品国产99| 精品国产乱码久久久久久蜜臀 | 亚洲激情在线激情| 91视频免费播放| 一区二区欧美视频| 欧美美女bb生活片| 老司机免费视频一区二区三区| 日韩欧美黄色影院| 精品一区二区三区在线观看| 精品国产一区二区三区久久久蜜月| 亚洲va韩国va欧美va| 欧美日韩综合在线| 亚洲成人激情自拍| 精品日产卡一卡二卡麻豆| 国产乱码精品一区二区三区av | 亚洲欧美日韩精品久久久久| 91老师片黄在线观看| 一区二区理论电影在线观看| 欧美在线高清视频| 久久精品国产精品亚洲红杏| 久久久精品人体av艺术| voyeur盗摄精品| 一级女性全黄久久生活片免费| 欧美亚洲禁片免费| 精彩视频一区二区| 亚洲精品中文字幕乱码三区| 欧美精品在线一区二区三区| 麻豆国产精品视频| 中文字幕乱码久久午夜不卡| 成人av免费观看| 色妹子一区二区| 日韩电影在线观看一区| 国产亚洲欧美色| 91麻豆免费在线观看| 日韩av网站免费在线| 日本一区二区视频在线| 欧美日韩中文另类| 国产成人亚洲精品狼色在线| 夜夜精品浪潮av一区二区三区| 精品伦理精品一区| 欧美综合一区二区三区| 国产一区二区调教| 亚洲制服丝袜一区| 国产丝袜美腿一区二区三区| 欧美三级日韩在线| 国产一区视频网站| 亚洲v日本v欧美v久久精品| 久久毛片高清国产| 欧美色图在线观看| 国产精品99久久久久久有的能看| 一区二区三区欧美视频| 国产日韩欧美激情| 精品国精品国产尤物美女| 在线日韩av片| 91亚洲精品久久久蜜桃| 国产高清精品网站| 极品美女销魂一区二区三区| 一区二区免费视频| 亚洲人成网站色在线观看| 精品乱码亚洲一区二区不卡| 欧美日本不卡视频| 99精品久久久久久| 成人h动漫精品| 国产成人精品一区二| 韩国毛片一区二区三区| 天堂成人国产精品一区| 亚洲免费观看高清完整版在线观看熊| 欧美sm美女调教| 日韩写真欧美这视频| 7777精品伊人久久久大香线蕉经典版下载 | 欧美经典三级视频一区二区三区| 欧美一区二区三区日韩| 欧美日韩国产影片| 在线免费av一区| 欧洲另类一二三四区| 色网站国产精品| 色94色欧美sute亚洲13| 国产高清精品在线| 成人动漫一区二区| 91色porny| 欧美性大战xxxxx久久久| 欧美午夜片在线看| 欧美日韩成人综合天天影院 | 91在线国产福利| 色综合天天做天天爱| 欧美在线免费观看视频| 在线观看不卡视频| 欧美手机在线视频| 7777精品伊人久久久大香线蕉完整版 | 亚洲成人精品在线观看| 天天影视色香欲综合网老头| 日韩成人av影视| 久久99精品久久只有精品| 精品一区二区三区视频在线观看| 韩国女主播一区| a在线欧美一区| 在线观看成人免费视频| 欧美精品丝袜久久久中文字幕| 91精品久久久久久久99蜜桃| 日韩视频在线一区二区| 国产午夜精品一区二区三区视频| 国产精品久久久爽爽爽麻豆色哟哟| √…a在线天堂一区| 亚洲h动漫在线| 国产综合成人久久大片91| 99re在线精品| 7777精品伊人久久久大香线蕉的 | 91精品福利在线| 欧美一区中文字幕| 国产精品视频一二三区| 亚洲综合色视频| 国产精品一区二区在线播放| 91老师片黄在线观看| 日韩精品在线网站| 亚洲黄色免费电影| 国产一区二区视频在线| 色爱区综合激月婷婷| 欧美mv日韩mv亚洲| 一区二区欧美视频| 国产精品12区| 91精品国产色综合久久| 中文字幕日韩一区二区| 久久丁香综合五月国产三级网站| 一本大道综合伊人精品热热| 精品免费日韩av| 午夜不卡在线视频| 一本到高清视频免费精品|