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

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

?? esmcend.c

?? 基于嵌入式操作系統VxWorks的lan91c111的驅動程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
        pBuf = (unsigned char *) pNode->pCluster;        /* Fetch an mBlk */        pMblk = mBlkGet(pDev->endObj.pNetPool, M_DONTWAIT, MT_DATA);        if (!pMblk)        {            DRV_LOG(DRV_DEBUG_RX, "%s%d: esmcHandleRcvInt: Out of M blocks!\n",                    (int) DEV_NAME, pDev->unit, 3, 4, 5, 6);            /* Save the cluster node and reschedule ourselves */            oldLevel = intLock();            lstInsert(&pDev->busyClusters, NULL, (NODE *) pNode);            intUnlock(oldLevel);            netJobAdd((FUNCPTR) esmcHandleRcvInt, (int) pDev, 0, 0, 0, 0);            goto exit;        }        /* Fetch a ClBlk */        pClBlk = netClBlkGet(pDev->endObj.pNetPool, M_DONTWAIT);        if (!pClBlk)        {            DRV_LOG(DRV_DEBUG_RX, "%s%d: esmcHandleRcvInt: Out of CL blocks!\n",                    (int) DEV_NAME, pDev->unit, 3, 4, 5, 6);            /* Free the Mblk */                        netMblkFree(pDev->endObj.pNetPool, (M_BLK_ID) pMblk);            /* Save the cluster node and reschedule ourselves */            oldLevel = intLock();            lstInsert(&pDev->busyClusters, NULL, (NODE *) pNode);            intUnlock(oldLevel);            netJobAdd((FUNCPTR) esmcHandleRcvInt, (int) pDev, 0, 0, 0, 0);            goto exit;        }        /* Join ClBlk to cluster */        netClBlkJoin(pClBlk, pBuf, ESMC_BUFSIZ, NULL, 0, 0, 0);            /* Join the mBlk and ClBlk */                netMblkClJoin(pMblk, pClBlk);	/* Complete the mBlk header */        pMblk->mBlkHdr.mFlags |= M_PKTHDR;        pMblk->mBlkHdr.mLen    = pNode->length;	pMblk->mBlkPktHdr.len  = pMblk->mBlkHdr.mLen;        pMblk->mBlkHdr.mData  += pDev->offset;	/* Bump input packet counter */	END_ERR_ADD(&pDev->endObj, MIB2_IN_UCAST, +1);	/* Send up to protocol */	END_RCV_RTN_CALL(&pDev->endObj, pMblk);        /* Fetch another cluster to replace the one just loaned */        while ((pNode->pCluster = netClusterGet(pDev->endObj.pNetPool,                                                pDev->clPoolId)) == NULL)        {            DRV_LOG(DRV_DEBUG_RX, "Could not reallocate cluster; retrying\n",                    1, 2, 3, 4, 5, 6);            taskDelay(1);        }        /* Place cluster node back into free list */            oldLevel = intLock();        lstAdd(&pDev->freeClusters, (NODE *) pNode);        intUnlock(oldLevel);    }    oldLevel = intLock();    pDev->flags &= ~ESMC_RCV_HANDLING_FLAG;    intUnlock(oldLevel);    return;exit:    /* Bump the error counter */        END_ERR_ADD(&pDev->endObj, MIB2_IN_ERRS, +1);    oldLevel = intLock();    pDev->flags &= ~ESMC_RCV_HANDLING_FLAG;    intUnlock(oldLevel);    return;#else     oldLevel = intLock();    ESMC_SWITCH_BANK (pDev, 2);    WRITE_WORD(pDev,ESMC_INTERRUPT_, 0);             /* mask all interrupts */    intUnlock(oldLevel);        while (!((packetNo = READ_WORD(pDev,ESMC_FIFO)) & ESMC_FIFO_REMPTY))    {        ESMC_SWITCH_BANK (pDev, 2);        WRITE_WORD (pDev,ESMC_PTR, ESMC_PTR_READ | ESMC_PTR_RCV | ESMC_PTR_AUTOINC);        ldata = sysInLong(pDev->base + ESMC_DATA_1);        statusRx = ldata & 0x0000FFFF;        len = (ldata >> 16) & 0x0000FFFF;        DRV_LOG (DRV_DEBUG_RX, "%s%d: esmcHandleRcvInt: statusRx = 0x%0x len = 0x%0x\n",                 (int) DEV_NAME, pDev->unit, statusRx, len, 0, 0);         /* check for receive errors */        if (statusRx & ESMC_RS_ERROR_MASK)        {            /* increment appropriate error counter */            if(statusRx &  ESMC_RS_ALGNERR)                pDev->alignErr++;                        if(statusRx &  ESMC_RS_BADCRC)                pDev->badCrc++;            if(statusRx &  ESMC_RS_TOOLONG)                pDev->tooLong++;            if(statusRx &  ESMC_RS_TOOSHORT)                pDev->tooShort++;            do            {                 val = READ_WORD(pDev, ESMC_MMU);            } while (val & ESMC_MMU_BUSY);            WRITE_WORD(pDev, ESMC_MMU, ESMC_MMU_RX_RELEASE); /* release */        }        else        {            pBuf = netClusterGet (pDev->endObj.pNetPool, pDev->clPoolId);            if (!pBuf)            {                DRV_LOG (DRV_DEBUG_RX, "%s%d: esmcHandleRcvInt: Out of clusters!\n",                    (int) DEV_NAME, pDev->unit, 0, 0, 0, 0);                /* re-schedule ourselves */                netJobAdd((FUNCPTR) esmcHandleRcvInt,(int) pDev, 0, 0, 0, 0);                goto exit;            }            pMblk = mBlkGet (pDev->endObj.pNetPool, M_DONTWAIT, MT_DATA);            if (!pMblk)            {                netClFree (pDev->endObj.pNetPool, (UCHAR *) pBuf);                DRV_LOG (DRV_DEBUG_RX, "%s%d: esmcHandleRcvInt: Out of M blocks!\n",                    (int) DEV_NAME, pDev->unit, 0, 0, 0, 0);                /* re-schedule ourselves */                netJobAdd((FUNCPTR) esmcHandleRcvInt,(int) pDev, 0, 0, 0, 0);                goto exit;            }                                pClBlk = netClBlkGet (pDev->endObj.pNetPool, M_DONTWAIT);            if (!pClBlk)            {                netMblkFree (pDev->endObj.pNetPool, (M_BLK_ID)pMblk);                netClFree (pDev->endObj.pNetPool, (UCHAR *) pBuf);                DRV_LOG (DRV_DEBUG_RX, "%s%d: esmcHandleRcvInt: Out of CL blocks!\n",                    (int) DEV_NAME, pDev->unit, 0, 0, 0, 0);                /* re-schedule ourselves */                netJobAdd((FUNCPTR) esmcHandleRcvInt,(int) pDev, 0, 0, 0, 0);                goto exit;            }            /* Associate the data pointer with the MBLK */            netClBlkJoin (pClBlk, pBuf, ESMC_BUFSIZ, NULL, 0, 0, 0);                /* Associate the data pointer with the MBLK */            netMblkClJoin (pMblk, pClBlk);            /* finally - read in the packet */            pCur = (unsigned short *) (pBuf + pDev->offset);            /* adjust len for first 4 bytes read */            len -=4;            for(i = 0 ; i < (len >> 1) ; i++)            {                ldata     = sysInLong(pDev->base + ESMC_DATA_1);                val       = ldata & 0x0000FFFF;                pCur[i++] = SWAP_BYTES_IF_NECESSARY(val);                val       = (ldata >> 16) & 0x0000FFFF;                pCur[i]   = SWAP_BYTES_IF_NECESSARY(val);            }            /* adjust length for control byte and odd byte */            if (statusRx & ESMC_RS_ODDFRM)                len -= 1;            else                len -= 2;            do            {                 val = READ_WORD(pDev, ESMC_MMU);            } while (val & ESMC_MMU_BUSY);            WRITE_WORD(pDev,ESMC_MMU, ESMC_MMU_RX_RELEASE); /* release */             pMblk->mBlkHdr.mFlags |= M_PKTHDR;            pMblk->mBlkHdr.mLen    = len;            pMblk->mBlkPktHdr.len  = len;            pMblk->mBlkHdr.mData  += pDev->offset;                        /* Call the upper layer's receive routine. */            END_RCV_RTN_CALL (&pDev->endObj, pMblk);            /* Record received packet */            END_ERR_ADD (&pDev->endObj, MIB2_IN_UCAST, +1);        }    }                         /* re-enable receive interrupt */    oldLevel = intLock();    pDev->flags &= ~ESMC_RCV_HANDLING_FLAG;    pDev->imask |= (ESMC_INT_RCV << 8);    intUnlock(oldLevel);exit:    oldLevel = intLock();    WRITE_WORD(pDev, ESMC_INTERRUPT_, pDev->imask);    intUnlock(oldLevel);        DRV_LOG (DRV_DEBUG_RX, "%s%d: esmcHandleRcvInt: imask = %0x\n",                 (int) DEV_NAME, pDev->unit, pDev->imask, 0,0,0);    return;#endif /* ESMC_USE_ISR_COPY */ }#ifdef ESMC_USE_ISR_COPY/******************************************************************************** esmcIsrCopy - copy received frames from FIFO to preallocated clusters** This routine is called by the ISR to copy received frames from the FIFO* to preallocated clusters.  This should free FIFO frames more quickly,* but will increase interrupt latency.  The ESMC device register bank is* assumed to be set to 2 on entry.** RETURNS: N/A.*/LOCAL void esmcIsrCopy(    ESMC_DEVICE  *pDev){    unsigned short      packetNo = 0;    unsigned long       ldata;    unsigned short      val;    int                 length;    unsigned short      statusRx;    CLUSTER_NODE        *pNode;    BOOL                released;    unsigned short      *pCur;    int                 i;    /* Read packet number from RX fifo */    while (!((packetNo = READ_WORD(pDev, ESMC_FIFO)) & ESMC_FIFO_REMPTY))    {        /* Obtain a free preallocated cluster */        released = FALSE;        if ((pNode = (CLUSTER_NODE *) lstGet(&pDev->freeClusters)) != NULL)        {            /* Program the MMU to read the frame */                WRITE_WORD(pDev, ESMC_PTR,                       ESMC_PTR_READ | ESMC_PTR_RCV | ESMC_PTR_AUTOINC);            /* Read packet status and length */	            ldata = sysInLong(pDev->base + ESMC_DATA_1);            statusRx = ldata & 0x0000FFFF;            length = (ldata >> 16) & 0x0000FFFF;						DRV_LOG (DRV_DEBUG_FN_TRACE, "YK:%s%d: esmcIsrCopy statusRx 0x%x length %d\n",(int) DEV_NAME, pDev->unit,statusRx, length, 5, 6);            /* If no error indicated, fetch the packet */	            if (statusRx & ESMC_RS_ERROR_MASK)            {                                /* Increment appropriate error counters */                if (statusRx & ESMC_RS_ALGNERR)                    pDev->alignErr++;                            if (statusRx & ESMC_RS_BADCRC)                    pDev->badCrc++;                if (statusRx & ESMC_RS_TOOLONG)                    pDev->tooLong++;                if (statusRx & ESMC_RS_TOOSHORT)                    pDev->tooShort++;                                END_ERR_ADD(&pDev->endObj, MIB2_IN_ERRS, +1);                /* Add the node back to the free list */                lstAdd(&pDev->freeClusters, (NODE *) pNode);            }            else            {                /* Point to cluster */                pCur = (unsigned short *) ((char *) pNode->pCluster +                                           pDev->offset);                /* Adjust length for bytes already read */                                length -= 4;                                /* Copy the data from FIFO to cluster */                for (i = 0 ; i < (length >> 1) ; i++)                {                    ldata     = sysInLong(pDev->base + ESMC_DATA_1);                    val       = ldata & 0x0000FFFF;                    pCur[i++] = SWAP_BYTES_IF_NECESSARY(val);                    val       = (ldata >> 16) & 0x0000FFFF;                    pCur[i]   = SWAP_BYTES_IF_NECESSARY(val);                }                /* Adjust length for control byte and odd byte */                if (statusRx & ESMC_RS_ODDFRM)                    length -= 1;                else                    length -= 2;                                /* Wait until MMU is free */                do                {                    val = READ_WORD(pDev, ESMC_MMU);                } while (val & ESMC_MMU_BUSY);                /* Release the memory associated with the packet ASAP */                WRITE_WORD(pDev, ESMC_MMU, ESMC_MMU_RX_RELEASE);                released = TRUE;                /* Complete the cluster node and queue it to the busy list */                pNode->length   = length;                pNode->packetNo = packetNo;                pNode->statusRx = statusRx;                lstAdd(&pDev->busyClusters, (NODE *) pNode);            }        }        else        {            /* Bump the error counter */                END_ERR_ADD(&pDev->endObj, MIB2_IN_ERRS, +1);        }        if (!released)        {            /* Wait until MMU is free */	              do            {                val = READ_WORD(pDev, ESMC_MMU);            } while (val & ESMC_MMU_BUSY);            /* Release the memory associated with the packet */            WRITE_WORD(pDev, ESMC_MMU, ESMC_MMU_RX_RELEASE);        }    }}#endif /* ESMC_USE_ISR_COPY *//******************************************************************************** esmcIsr - handle controller interrupt** This routine is called at interrupt level in response to an interrupt from* the controller.** RETURNS: N/A.*/LOCAL void esmcIsr(    ESMC_DEVICE  *pDev){    unsigned short bank;    unsigned short savedPointer;    unsigned short savedPacket;    unsigned short val;    unsigned char  status;    bank = READ_WORD(pDev,ESMC_BANK_SELECT);   /* save bank */    if((bank & 0x03) != 2)        ESMC_SWITCH_BANK (pDev,2);    val = READ_WORD(pDev, ESMC_INTERRUPT_);    DRV_ASSERT(((val & 0xff00) & ~pDev->imask) == 0);    WRITE_WORD(pDev,ESMC_INTERRUPT_, 0);  /* mask all interrupts */    DRV_ASSERT((READ_WORD(pDev,ESMC_BANK_SELECT) & 0x03) == 2);    DRV_LOG (DRV_DEBUG_FN_TRACE, "%s%d: esmcIsr status=%x\n",         (int) DEV_NAME, pDev->unit, val, 4, 5, 6);    status = LO_BYTE(val) & HI_BYTE(val);    if(status == 0)        goto exit;    if (status & (ESMC_INT_RCV | ESMC_INT_RX_OVRN)) /* RX done */    {#ifdef ESMC_USE_ISR_COPY                    /* Copy and release all available received frames */                    esmcIsrCopy(pDev);            #endif /* ESMC_USE_ISR_COPY */        if(!(pDev->flags & ESMC_RCV_HANDLING_FLAG))        {            if (netJobAdd ((FUNCPTR) esmcHandleRcvInt,                    (int) pDev, 0, 0, 0, 0) == ERROR)            {                logMsg ("%s%d: failed to queue esmcHandleRcvInt\n",                        (int) DEV_NAME, pDev->unit, 3, 4, 5, 6);                /* failed netJobAdd causes panic */                goto exit;            }            else            {                pDev->flags |= ESMC_RCV_HANDLING_FLAG;#ifndef ESMC_USE_ISR_COPY                pDev->imask &= ~(ESMC_INT_RCV << 8);  /* disable further receive interrupts */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
同产精品九九九| 欧美色综合影院| 欧美视频中文字幕| 国产三级久久久| 久88久久88久久久| 欧美日韩一区二区三区四区五区| 久久无码av三级| 视频精品一区二区| 91黄视频在线| 国产精品天干天干在观线| 久久成人精品无人区| 欧美色偷偷大香| 亚洲精品国产a久久久久久| 国产米奇在线777精品观看| 日韩一卡二卡三卡| 亚洲国产中文字幕| 欧美性欧美巨大黑白大战| 亚洲欧洲综合另类在线| 国产九色精品成人porny| 日韩午夜三级在线| 丝袜美腿亚洲一区二区图片| 精品污污网站免费看| 亚洲精品乱码久久久久久久久 | 欧美一区二区三区免费观看视频| 综合久久久久综合| 成a人片国产精品| 中文字幕精品一区二区三区精品| 国产一区不卡精品| 国产色产综合色产在线视频| 国产在线精品一区二区夜色 | 色视频成人在线观看免| 国产亚洲一区二区三区在线观看 | 欧洲精品视频在线观看| 一区二区三区在线不卡| 日韩一级免费观看| 暴力调教一区二区三区| 蜜臀久久久久久久| 亚洲欧美怡红院| 制服丝袜中文字幕一区| 99精品一区二区三区| 日本在线不卡视频| 国产一区二区三区日韩| 亚洲欧美激情视频在线观看一区二区三区 | 欧美妇女性影城| 成人app网站| 精品无码三级在线观看视频| 一区二区三区在线视频免费| 欧美精品一区二区精品网| 欧美亚洲国产一区二区三区va| 国产乱码字幕精品高清av| 日本sm残虐另类| 亚洲欧美另类综合偷拍| 中文字幕av资源一区| 欧美成人性福生活免费看| 欧美少妇一区二区| 91视频在线观看| 国产成人免费视频一区| 韩国三级电影一区二区| 日韩高清一区二区| 亚洲444eee在线观看| 亚洲色图视频免费播放| 成人欧美一区二区三区在线播放| 久久久久久9999| 欧美大片顶级少妇| 日韩女优av电影| 日韩免费电影网站| 欧美人牲a欧美精品| 欧美在线视频你懂得| 色婷婷一区二区三区四区| 成人激情综合网站| www.亚洲精品| 91免费国产视频网站| av亚洲精华国产精华精华| 北条麻妃国产九九精品视频| av一区二区久久| 91久久国产最好的精华液| 在线这里只有精品| 91成人免费电影| 欧美老肥妇做.爰bbww视频| 欧美视频一区在线| 欧美福利视频一区| 日韩女优视频免费观看| 2024国产精品| 国产精品美女视频| 亚洲人成伊人成综合网小说| 亚洲在线中文字幕| 日本亚洲欧美天堂免费| 久久99精品久久久久| 国产一区二区三区不卡在线观看| 国产九九视频一区二区三区| jvid福利写真一区二区三区| 93久久精品日日躁夜夜躁欧美| 色婷婷综合久久| 欧美一卡二卡三卡| 337p粉嫩大胆色噜噜噜噜亚洲 | 91麻豆精品国产91久久久更新时间| 欧美性欧美巨大黑白大战| 欧美另类videos死尸| 精品福利在线导航| 国产精品色哟哟| 亚洲成人av一区| 国产综合色视频| 97精品国产97久久久久久久久久久久| 91福利资源站| 日韩精品一区二区三区在线| 国产亚洲1区2区3区| 亚洲精品你懂的| 久久不见久久见中文字幕免费| 粉嫩绯色av一区二区在线观看 | 亚洲精品一二三区| 五月天中文字幕一区二区| 精品一区二区久久久| 99久久久无码国产精品| 51久久夜色精品国产麻豆| 国产三级一区二区| 亚洲国产日韩综合久久精品| 国内精品免费**视频| 色婷婷久久综合| 久久综合九色欧美综合狠狠| 亚洲欧美日韩国产成人精品影院 | 丝袜诱惑制服诱惑色一区在线观看 | 一本久道中文字幕精品亚洲嫩| 欧美一区二区三区视频在线观看| 国产精品污污网站在线观看| 日韩高清一级片| 99re这里只有精品6| 精品久久久久久久久久久院品网| 一区二区三区四区在线| 国产福利一区在线| 欧美一区二区视频免费观看| 亚洲乱码一区二区三区在线观看| 日本强好片久久久久久aaa| 91麻豆免费观看| 国产亚洲一区二区三区在线观看| 午夜精品久久久久久| 99视频国产精品| 亚洲精品在线一区二区| 亚洲va欧美va人人爽| 91麻豆.com| 亚洲图片你懂的| 成人福利视频网站| 久久综合av免费| 美女在线一区二区| 欧美男人的天堂一二区| 亚洲精品乱码久久久久久| 成人一级黄色片| 国产欧美一区二区精品久导航 | 欧美自拍偷拍一区| 中文字幕av一区二区三区| 欧美aa在线视频| 欧美另类高清zo欧美| 亚洲国产精品嫩草影院| 色综合中文字幕国产 | 国产精品久久三| 国产精品一二二区| 2024国产精品| 韩国视频一区二区| 欧美大片拔萝卜| 国产在线精品一区二区不卡了| 91精品国产色综合久久不卡电影| 亚洲制服丝袜在线| 欧美亚洲免费在线一区| 亚洲黄色在线视频| 色诱亚洲精品久久久久久| 亚洲天堂网中文字| eeuss国产一区二区三区| 欧美国产精品一区| 成人天堂资源www在线| 国产欧美在线观看一区| 国产精品亚洲一区二区三区妖精 | 久久久亚洲精华液精华液精华液| 蜜臀久久久久久久| 精品伦理精品一区| 激情综合网最新| 欧美国产视频在线| 成人高清视频免费观看| 亚洲美女偷拍久久| 精品视频在线看| 久久精品国产一区二区| 亚洲精品在线免费播放| 国产精品一区二区久久精品爱涩| 欧美国产一区视频在线观看| 91在线视频免费观看| 亚洲国产成人91porn| 欧美一级淫片007| 国产福利视频一区二区三区| 亚洲国产精品99久久久久久久久| 99精品视频中文字幕| 亚洲成av人片一区二区| 欧美一级免费大片| 国产成人av一区| 亚洲一区二区在线免费看| 51精品视频一区二区三区| 国产精品99久久久久久有的能看| 国产精品三级av在线播放| 欧美视频日韩视频| 国产一区二区视频在线播放| 亚洲图片欧美激情| 日韩欧美一卡二卡| 91在线观看美女|