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

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

?? sngks32cend.c

?? 三星公司S3C4510B的VXWORKS操作系統下的BSP
?? C
?? 第 1 頁 / 共 5 頁
字號:
                               (endClDescTbl[0].clSize + 8))        + sizeof(int);        /* +8 is for proper alignment */    /* Allocate the memory for the clusters */    endClDescTbl[0].memArea =        (char *) cacheDmaMalloc (endClDescTbl[0].memSize);    if (endClDescTbl[0].memArea == NULL)        {        DRV_LOG (DRV_DEBUG_LOAD, "system memory unavailable\n",        1, 2, 3, 4, 5, 6);        return (ERROR);        }    if ((pDrvCtrl->end.pNetPool = (NET_POOL_ID) malloc (sizeof(NET_POOL)))        == NULL)        return (ERROR);    /* Initialize the memory pool. */    if (netPoolInit(pDrvCtrl->end.pNetPool, &endMclConfig,                    &endClDescTbl[0], endClDescTblNumEnt, NULL) == ERROR)        {        return (ERROR);        }    return OK;    }/******************************************************************************** sngks32cEndStart - start the device** This function calls BSP functions to connect interrupts and start the* device running in interrupt mode.** RETURNS: OK or ERROR**/LOCAL STATUS sngks32cEndStart    (    END_DEVICE *pDrvCtrl    /* device to be started */    )    {    BDMARXCON bdmaRxCon;    MACRXCON macRxCon;    DRV_LOG (DRV_DEBUG_LOAD, "Starting sng \n", 0, 0, 0, 0, 0, 0);    if (!pDrvCtrl->loaded)        return (ERROR);    pDrvCtrl->rxHandling = FALSE;    pDrvCtrl->resetting = FALSE;    /* init BDMARXCON register */    *(UINT32 *) (&bdmaRxCon) = *(volatile UINT32 *)SNGKS32C_BDMARXCON;    bdmaRxCon.rxCon_reg.recvFrameIntrEnb = 1;    bdmaRxCon.rxCon_reg.nullListIntrEnb  = 1;    bdmaRxCon.rxCon_reg.notOwnerIntrEnb  = 1;    bdmaRxCon.rxCon_reg.enable           = 1;    *(volatile UINT32 *)SNGKS32C_BDMARXCON = bdmaRxCon.rxCon_resetval;    /* init MACRXCON register */    *(UINT32 *)(&macRxCon) = *(volatile UINT32 *)SNGKS32C_MACRXCON;    macRxCon.macRxCon_reg.receiveEnable = 1;    *(volatile UINT32 *)SNGKS32C_MACRXCON = macRxCon.macRxCon_resetval;    /* Connect BDMA and MAC TX and RX interrupts */                                                         intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC (pDrvCtrl->ivecBdmaTx),                sngks32cEndBdmaTxInt, (UINT32) NULL);    intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC (pDrvCtrl->ivecBdmaRx),                sngks32cEndBdmaRxInt, (UINT32) pDrvCtrl);    intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC (pDrvCtrl->ivecMacTx),                sngks32cEndMacTxInt, (UINT32) pDrvCtrl);    intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC (pDrvCtrl->ivecMacRx),                sngks32cEndMacRxInt, (UINT32) NULL);    /* Enable all the four interrupts */     intEnable (pDrvCtrl->ivecBdmaTx);    intEnable (pDrvCtrl->ivecBdmaRx);    intEnable (pDrvCtrl->ivecMacTx);    intEnable (pDrvCtrl->ivecMacRx);#ifdef DYNAMIC_PHY    (void) wdStart (phyPollWdog, PHY_WDOG_PERIOD , (FUNCPTR) phyPoll, 0);#endif /*DYNAMIC_PHY*/    /* Set the flags to indicate that the device is up */    END_FLAGS_SET (&pDrvCtrl->end, IFF_UP | IFF_RUNNING);    return (OK);    }/***************************************************************************** * sngks32cEndBdmaTxInt - handle controller interrupt** This routine is called at interrupt level in response to an interrupt from* the BdmaTx controller.** RETURNS: N/A.*/LOCAL void sngks32cEndBdmaTxInt    (    END_DEVICE  *pDrvCtrl    /* interrupting device */    )    {    /**Nothing to be done here**/    }/******************************************************************************* sngks32cEndBdmaRxInt - handle controller interrupt** This routine is called at interrupt level in response to an interrupt from* the BdmaTx controller.** RETURNS: N/A.*/LOCAL void sngks32cEndBdmaRxInt    (    END_DEVICE  *pDrvCtrl    /* interrupting device */    )    {    BDMASTAT  bdmaStat;#ifdef NO_DMA_WHILE_PROCESSING    BDMARXCON bdmaRxCon;#endif /*NO_DMA_WHILE_PROCESSING*/    bdmaStat.stat_resetval = *(volatile UINT32 *)SNGKS32C_BDMASTAT;    /* Clear status bits */    *(volatile UINT32 *)SNGKS32C_BDMASTAT |= bdmaStat.stat_resetval;    if (!pDrvCtrl->rxHandling && !pDrvCtrl->resetting)        {                pDrvCtrl->rxHandling = TRUE;        netJobAdd ((FUNCPTR)sngks32cEndHandleRcvInt, (int)pDrvCtrl,                   bdmaStat.stat_resetval,0,0,0);#ifdef NO_DMA_WHILE_PROCESSING        /* init BDMARXCON register */        *(UINT32 *) (&bdmaRxCon) = *(volatile UINT32 *)SNGKS32C_BDMARXCON;        bdmaRxCon.rxCon_reg.enable = 0;        *(volatile UINT32 *)SNGKS32C_BDMARXCON = bdmaRxCon.rxCon_resetval;#endif /*NO_DMA_WHILE_PROCESSING*/        }    }/******************************************************************************* sngks32cEndMacTxInt - handle controller interrupt** This routine is called at interrupt level in response to an interrupt from* the MacRx controller.** RETURNS: N/A.*/LOCAL void sngks32cEndMacTxInt    (    END_DEVICE  *pDrvCtrl    /* interrupting device */    )    {    TRANSMIT_FRAME_DESC *pTxDesc;    BDMATXPTR            bdmaTxPtr;    *(UINT32 *) (&bdmaTxPtr) = *(volatile UINT32 *)(SNGKS32C_BDMATXPTR);    *(UINT32 *)(&pTxDesc) = (UINT32) (bdmaTxPtr.txPtr_reg.bdmaTxPointer);    while (pTxDesc != pDrvCtrl->pTxFrameDesc)        {        if (pTxDesc->txFrameData.o_bit == OWNED_BY_BDMA)            break;    /* Ownership is still with BDMA */        if (pTxDesc->txStatusLength.comp)            {            pDrvCtrl->statistics.txGood++;            }        else    /* Update error statistics */            {            if (pTxDesc->txStatusLength.underRun)                pDrvCtrl->statistics.txUnderErr++;            if (pTxDesc->txStatusLength.exColl)                pDrvCtrl->statistics.txExCollErr++;            if (pTxDesc->txStatusLength.txDefer)                pDrvCtrl->statistics.txDeferredErr++;            if (pTxDesc->txStatusLength.paused)                pDrvCtrl->statistics.txPaused++;            if (pTxDesc->txStatusLength.deferAl)                pDrvCtrl->statistics.txDeferErr++;            if (pTxDesc->txStatusLength.ncArr)                pDrvCtrl->statistics.txNCarrErr++;            if (pTxDesc->txStatusLength.sqeErr)                pDrvCtrl->statistics.txSQE++;            if (pTxDesc->txStatusLength.lateColl)                pDrvCtrl->statistics.txLateCollErr++;            if (pTxDesc->txStatusLength.txPar)                pDrvCtrl->statistics.txParErr++;            if (pTxDesc->txStatusLength.txHalted)                pDrvCtrl->statistics.txHalted++;            }        *(UINT32 *)(&pTxDesc->txStatusLength) = 0;    /* Clear status field */        pTxDesc = pTxDesc->nextTxFrameDesc;        }    }/******************************************************************************* sngks32cEndMacRxInt - handle controller interrupt** This routine is called at interrupt level in response to an interrupt from* the MacRx controller.** RETURNS: N/A.*/LOCAL void sngks32cEndMacRxInt    (    END_DEVICE  *pDrvCtrl    /* interrupting device */    )    {    /***Nothing to be done here***/    }/******************************************************************************** sngks32cEndHandleRcvInt - task level interrupt service for input packets** This routine is called at task level indirectly by the interrupt* service routine to do any message received processing.** RETURNS: N/A.*/LOCAL void sngks32cEndHandleRcvInt    (    END_DEVICE *pDrvCtrl,    /* interrupting device */    UINT32 stat    /* receive status */    )    {    BDMASTAT            bdmaStat;    RECEIVE_FRAME_DESC *pReceiveFrameDesc;    BDMARXCON           bdmaRxCon;    BDMARXPTR           bdmaRxPtr;    bdmaStat.stat_resetval = stat;    *(UINT32 *) (&bdmaRxPtr) = *(volatile UINT32 *)(SNGKS32C_BDMARXPTR);    *(UINT32 *) (&pReceiveFrameDesc) = bdmaRxPtr.rxPtr_reg.bdmaRxPointer;    if ((*(UINT32 *) (&pDrvCtrl->pRxFrameDesc->rxStatusLength)) == 0)        return;    if (pDrvCtrl->pRxFrameDesc->rxFrameData.o_bit == OWNED_BY_BDMA)        return;    do        {        /*         * Check if Null list interrupt has occurred.  If yes, reset         * and restart the Ethernet MAC (as given in Samsung sample code).         */        if ((bdmaStat.stat_reg.bdmaRxNullList) ||            (bdmaStat.stat_reg.bdmaRxNotOwner))            {            DRV_LOG (DRV_DEBUG_RX,                      "sngks32cEndHandleRcvInt: Null list ERROR: "                     "restarting..\n",                     0,0,0,0,0,0);            sngks32cEndStop(pDrvCtrl);    /* Stop RX and TX */            sngks32cEndReset(pDrvCtrl);    /* reset the chip */            sngks32cEndFdFree(pDrvCtrl);    /* Free the FDs */            sngks32cEndFdInitialize(pDrvCtrl);    /* Reinitialize FDs */            sngks32cEndMacInitialize(pDrvCtrl);    /* Initialize MAC */            sngks32cEndStart(pDrvCtrl);    /* Start RX and TX */            break;            }        /*         * Received a frame         */        /* Check whether any error bit is set in rxStatusLength field */        if ((*(UINT32 *)(&pDrvCtrl->pRxFrameDesc->rxStatusLength))            & 0xbfff0000)            {    /* Update error statistics counters */            DRV_LOG (DRV_DEBUG_RX_ALL,                     "sngks32cEndHandleRcvInt: packet error 0x%x\n",                     (*(UINT32 *)(&pDrvCtrl->pRxFrameDesc->rxStatusLength))                     & 0xffff0000,                     0,0,0,0,0);            pDrvCtrl->statistics.rxBad++;            if (pDrvCtrl->pRxFrameDesc->rxStatusLength.ovMax)                pDrvCtrl->statistics.rxOvMaxSize++;            if (pDrvCtrl->pRxFrameDesc->rxStatusLength.ctlRcv)                pDrvCtrl->statistics.rxCtlRecd++;            if (pDrvCtrl->pRxFrameDesc->rxStatusLength.rx10Stat)                pDrvCtrl->statistics.rx10Stat++;            if (pDrvCtrl->pRxFrameDesc->rxStatusLength.alignErr)                pDrvCtrl->statistics.rxAlignErr++;            if (pDrvCtrl->pRxFrameDesc->rxStatusLength.crcErr)                pDrvCtrl->statistics.rxCRCErr++;            if (pDrvCtrl->pRxFrameDesc->rxStatusLength.overFlow)                pDrvCtrl->statistics.rxOverflowErr++;            if (pDrvCtrl->pRxFrameDesc->rxStatusLength.longErr)                pDrvCtrl->statistics.rxLongErr++;            if (pDrvCtrl->pRxFrameDesc->rxStatusLength.rxPar)                pDrvCtrl->statistics.rxParErr++;            if (pDrvCtrl->pRxFrameDesc->rxStatusLength.rxHalted)                pDrvCtrl->statistics.rxHalted++;            }        else if (pDrvCtrl->pRxFrameDesc->rxStatusLength.good)            {            pDrvCtrl->statistics.rxGood++;            sngks32cEndRecv (pDrvCtrl, pDrvCtrl->pRxFrameDesc);            }#ifdef BUG_KS32C5000        /* For MAC bug fix */        gStatusLengthPrevious =            *(UINT32 *)(&pDrvCtrl->pRxFrameDesc->rxStatusLength);#endif /*BUG_KS32C5000*/        /* Rx status length field */        *(UINT32 *)(&pDrvCtrl->pRxFrameDesc->rxStatusLength) = 0;        /* Ownership back to BDMA */        pDrvCtrl->pRxFrameDesc->rxFrameData.o_bit = OWNED_BY_BDMA;        pDrvCtrl->pRxFrameDesc = pDrvCtrl->pRxFrameDesc->nextRxFrameDesc;        } while (pDrvCtrl->pRxFrameDesc != pReceiveFrameDesc &&                 (*(UINT32 *)(&pDrvCtrl->pRxFrameDesc->rxStatusLength)) != 0 &&                 pDrvCtrl->pRxFrameDesc->rxFrameData.o_bit != OWNED_BY_BDMA);    pDrvCtrl->rxHandling = FALSE;        *(UINT32 *) (&bdmaRxCon) = *(volatile UINT32 *)SNGKS32C_BDMARXCON;    bdmaRxCon.rxCon_reg.enable = 1 ;  /* enable rx interrupt */    *(volatile UINT32 *)SNGKS32C_BDMARXCON = bdmaRxCon.rxCon_resetval;    }/******************************************************************************** sngks32cEndRecv - process the next incoming packet** Handle one incoming packet.  The packet is checked for errors.** RETURNS: N/A.*/LOCAL STATUS sngks32cEndRecv    (    END_DEVICE         *pDrvCtrl,  /* device structure */    RECEIVE_FRAME_DESC *pRxD       /* frame descriptor */    )    {    M_BLK_ID     pMblk = NULL;    char        *pNewCluster = NULL;    CL_BLK_ID    pClBlk = NULL;    char        *pData  = (char *)pRxD->rxFrameData.frameDataPtr;    UINT32       len    = pRxD->rxStatusLength.frameLength;#ifdef BUG_KS32C5000    sngks32cEndBugFix (pRxD);  /* Support original KS32C5000 */#endif /*BUG_KS32C5000*/    if (pDrvCtrl->end.pNetPool == NULL)        {        DRV_LOG (DRV_DEBUG_RX, "sngks32cEndRecv: Illegal pNetPool on entry!\n",                 0,0,0,0,0,0);        END_ERR_ADD (&pDrvCtrl->end, MIB2_IN_ERRS, +1);        goto cleanRXD;        }    /* Add one to our unicast data. */    END_ERR_ADD (&pDrvCtrl->end, MIB2_IN_UCAST, +1);    if ((pMblk = mBlkGet (pDrvCtrl->end.pNetPool, M_DONTWAIT, MT_DATA))        == NULL)        {        DRV_LOG (DRV_DEBUG_RX, "sngks32cEndRecv: Out of M Blocks!\n",                 0,0,0,0,0,0);        END_ERR_ADD (&pDrvCtrl->end, MIB2_IN_ERRS, +1);        goto cleanRXD;        }    pNewCluster = netClusterGet (pDrvCtrl->end.pNetPool,                                 pDrvCtrl->end.pNetPool->clTbl[0]);    if (pNewCluster == NULL)        {        DRV_LOG (DRV_DEBUG_RX, "sngks32cEndRecv: Cannot loan!\n",                 0,0,0,0,0,0);        pDrvCtrl->lastError.errCode = END_ERR_NO_BUF;        muxError(&pDrvCtrl->end, &pDrvCtrl->lastError);        goto cleanRXD;        }    /* Grab a cluster block to marry to the cluster we received. */    if ((pClBlk = netClBlkGet (pDrvCtrl->end.pNetPool, M_DONTWAIT)) == NULL)        {        DRV_LOG (DRV_DEBUG_RX, "sngks32cEndRecv: Out of Cluster Blocks!\n",                 0,0,0,0,0,0);        pDrvCtrl->lastError.errCode = END_ERR_NO_BUF;        muxError(&pDrvCtrl->end, &pDrvCtrl->lastError);        goto cleanRXD;        }        END_ERR_ADD (&pDrvCtrl->end, MIB2_IN_UCAST, +1);    pData = END_CACHE_PHYS_TO_VIRT(pData);    /* Note: we rely on the hardware to pad 2 bytes so we don't need to copy to     * a new buffer to solve alignment problems     */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品国产91久久久 | 丁香啪啪综合成人亚洲小说| 日韩国产一区二| 成人动漫一区二区| 日韩欧美资源站| 亚洲一区日韩精品中文字幕| 国产精品主播直播| 欧美理论电影在线| 亚洲人精品午夜| 国产精品996| 欧美一级搡bbbb搡bbbb| 成人欧美一区二区三区小说| 蜜臀a∨国产成人精品| 91浏览器在线视频| 国产精品久久久久久久久免费桃花| 日韩主播视频在线| 91成人国产精品| 亚洲图片欧美激情| 国产精品99久久久久久久女警| 欧美精品久久久久久久久老牛影院| 国产精品夫妻自拍| 成人高清免费在线播放| 久久久精品国产99久久精品芒果| 三级欧美在线一区| 欧美日韩精品免费观看视频| 亚洲免费在线视频一区 二区| 从欧美一区二区三区| 精品黑人一区二区三区久久| 亚洲成人精品一区二区| 91国偷自产一区二区三区成为亚洲经典| 久久久精品2019中文字幕之3| 激情图片小说一区| 精品国产一区二区三区av性色| 亚洲狠狠爱一区二区三区| 91精品办公室少妇高潮对白| 亚洲视频免费在线观看| www.在线欧美| 亚洲免费在线观看| 在线观看亚洲a| 亚洲国产cao| 3751色影院一区二区三区| 亚洲福利视频三区| 91精品国产福利在线观看| 日韩高清不卡一区| 精品对白一区国产伦| 国产精品一卡二| 中文字幕制服丝袜成人av | 日本成人中文字幕| 欧美mv和日韩mv的网站| 国精产品一区一区三区mba视频 | 成人福利电影精品一区二区在线观看| 国产精品青草综合久久久久99| 国产mv日韩mv欧美| 亚洲视频资源在线| 欧美三级蜜桃2在线观看| 日韩精品91亚洲二区在线观看| 精品国产网站在线观看| www.亚洲免费av| 亚洲午夜久久久久| 日韩精品专区在线影院观看| 韩国v欧美v日本v亚洲v| 欧美激情综合在线| 在线一区二区观看| 美女网站一区二区| 中文字幕一区免费在线观看| 欧美午夜宅男影院| 精品一区二区三区免费播放| 国产精品美女久久久久av爽李琼| 欧美性受xxxx| 精品一区二区三区香蕉蜜桃| 中文文精品字幕一区二区| 欧美亚洲国产一区二区三区va | 国产精品久久久久7777按摩| 在线观看成人小视频| 激情综合亚洲精品| 中文字幕一区二区三区不卡 | 久久精品噜噜噜成人av农村| 中文字幕不卡一区| 欧美久久久久久蜜桃| 国产一区久久久| 亚洲曰韩产成在线| 国产日韩高清在线| 7777精品伊人久久久大香线蕉的 | www国产成人免费观看视频 深夜成人网| 丁香桃色午夜亚洲一区二区三区| 亚洲成av人影院| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美午夜在线观看| 成人激情黄色小说| 国内精品写真在线观看| 亚洲一级二级三级在线免费观看| 国产婷婷色一区二区三区| 欧美精品99久久久**| 99久久99久久精品免费观看| 狠狠色丁香九九婷婷综合五月| 亚洲一区二区av在线| 国产欧美精品一区二区色综合| 欧美人与性动xxxx| 色噜噜狠狠成人中文综合| 国产另类ts人妖一区二区| 香蕉影视欧美成人| 又紧又大又爽精品一区二区| 国产女主播一区| 欧美精品一区二区在线播放| 欧美麻豆精品久久久久久| 一本高清dvd不卡在线观看| 成人午夜免费视频| 国产在线精品一区二区夜色| 五月天一区二区| 亚洲综合色区另类av| 亚洲天堂a在线| 欧美激情中文字幕一区二区| 精品国产凹凸成av人网站| 制服丝袜亚洲色图| 欧美巨大另类极品videosbest| 91福利在线看| 欧美性淫爽ww久久久久无| 色婷婷狠狠综合| 色婷婷精品大在线视频| 91福利国产精品| 精品视频在线看| 欧美日韩综合在线| 欧美色中文字幕| 欧美日本在线播放| 欧美福利视频导航| 日韩视频不卡中文| 欧美成人精精品一区二区频| 日韩午夜在线观看| 久久久久国产精品免费免费搜索| 精品国产91乱码一区二区三区| 欧美成人艳星乳罩| 久久色在线视频| 国产欧美精品国产国产专区| 国产精品免费丝袜| 亚洲男人的天堂在线aⅴ视频 | 成年人国产精品| 在线观看视频一区二区欧美日韩| 欧美色偷偷大香| 日韩免费在线观看| 国产精品无圣光一区二区| 亚洲欧洲精品一区二区三区| 亚洲精品高清在线| 青青草原综合久久大伊人精品 | 亚洲成av人影院| 久久国产欧美日韩精品| 国产91丝袜在线播放| 91在线国产观看| 69久久99精品久久久久婷婷| 精品国产一区二区三区忘忧草| 亚洲国产精品二十页| 亚洲黄色在线视频| 亚洲国产欧美一区二区三区丁香婷 | 亚洲大片在线观看| 精品一区二区三区久久久| a亚洲天堂av| 欧美丰满一区二区免费视频| 欧美xxxxxxxx| 亚洲精品成a人| 经典三级一区二区| 色综合欧美在线视频区| 日韩一区二区三区免费看| 亚洲国产电影在线观看| 亚洲夂夂婷婷色拍ww47| 国产乱一区二区| 欧美日韩成人激情| 中文字幕一区二区视频| 秋霞成人午夜伦在线观看| eeuss鲁片一区二区三区在线观看| 911精品国产一区二区在线| 久久精品免费在线观看| 亚洲综合视频网| 处破女av一区二区| 欧美tickle裸体挠脚心vk| 亚洲麻豆国产自偷在线| 国产一区二区福利视频| 欧美日韩一区二区三区视频| 国产丝袜在线精品| 蜜臀91精品一区二区三区| 欧美在线综合视频| 18成人在线观看| 国内精品第一页| 91精品免费在线观看| 一区二区三区四区在线免费观看| 国产麻豆精品在线| 91精品国产欧美一区二区18| 一区二区三区四区不卡视频| 国产不卡在线播放| 26uuu成人网一区二区三区| 婷婷综合另类小说色区| 91丨porny丨首页| 欧美激情资源网| 国产裸体歌舞团一区二区| 337p亚洲精品色噜噜狠狠| 亚洲午夜久久久久久久久电影网 | 6080午夜不卡| 一区二区高清视频在线观看| 国产999精品久久久久久绿帽| 日韩精品资源二区在线| 青青草国产成人av片免费| 91超碰这里只有精品国产|