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

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

?? esmcend.c

?? 基于嵌入式操作系統VxWorks的lan91c111的驅動程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
#endif /* !ESMC_USE_ISR_COPY */             }        }        if (status & ESMC_INT_RX_OVRN)        {            pDev->rxOverrun++;            /* acknowledge the interrupt */            WRITE_WORD(pDev,ESMC_INTERRUPT_, ESMC_INT_RX_OVRN);        }    }    if (status & ESMC_INT_ERCV) /* early receive */    {#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);                /* disable further receive interrupts */                pDev->imask &= ~(ESMC_INT_RCV << 8);                  goto exit;             }             else             {                 pDev->flags |= ESMC_RCV_HANDLING_FLAG;#ifndef ESMC_USE_ISR_COPY                 /* disable further receive interrupts */                 pDev->imask &= ~(ESMC_INT_RCV << 8);  #endif /* !ESMC_USE_ISR_COPY */              }        }        /* acknowledge the interrupt */        WRITE_WORD(pDev,ESMC_INTERRUPT_, ESMC_INT_ERCV);    }    if (status & ESMC_INT_TX_EMPTY) /* transmit que empty */    {        /* could signal a semaphore here - or something */        /* disable further interrupts */        pDev->imask &= ~(ESMC_INT_TX_EMPTY << 8);        /* acknowledge the interrupt */        WRITE_WORD(pDev,ESMC_INTERRUPT_, ESMC_INT_TX_EMPTY);    }    if (status & ESMC_INT_TX) /* transmit complete */    {        /* save point and packet */        savedPointer = READ_WORD(pDev, ESMC_PTR);        savedPacket  = READ_WORD(pDev, ESMC_PNR) & 0x00ff;                 /* set pointer to tx  packet */        val = READ_WORD(pDev, ESMC_FIFO);        WRITE_WORD(pDev, ESMC_PNR, val);        WRITE_WORD(pDev,ESMC_PTR, ESMC_PTR_AUTOINC | ESMC_PTR_READ);        /* get status */        val = READ_WORD(pDev, ESMC_DATA_1);        /* check for fatal errors */        if(val & ESMC_TS_LATCOL)        {            pDev->lateCollisions++;        }        else if(val & ESMC_TS_16COL)        {            pDev->_16Collisions++;        }        else if(val & ESMC_TS_SQET)        {            pDev->sqet++;        }        else if(val & ESMC_TS_TXUNRN)        {            pDev->fifoTxUnderrun++;        }        else if(val & ESMC_TS_LOST_CARR)        {            pDev->lostCarrier++;        }        /* release packet */        WRITE_WORD(pDev, ESMC_MMU, ESMC_MMU_TX_RELEASE);        /* re-enable transmitter */        ESMC_SWITCH_BANK (pDev, 0);        val = READ_WORD(pDev, ESMC_TCR);        WRITE_WORD(pDev, ESMC_TCR, val | ESMC_TCR_TXEN);        ESMC_SWITCH_BANK (pDev,2);        /* restore pointers */        WRITE_WORD(pDev, ESMC_PTR, savedPointer);        WRITE_WORD(pDev, ESMC_PNR, savedPacket);        /* acknowledge the interrupt */        WRITE_WORD(pDev,ESMC_INTERRUPT_, ESMC_INT_TX);    }   exit:        /* do cleanup if necessary */    ON_EXIT_ISR(pDev);    /* restore mask and bank */    WRITE_WORD(pDev, ESMC_INTERRUPT_, pDev->imask);    ESMC_SWITCH_BANK (pDev,bank);    return;}/******************************************************************************** esmcStart - 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 esmcStart    (    END_OBJ *pObj        /* device ID */    )    {    STATUS result;    int    oldLevel;    ESMC_DEVICE * pDev = (ESMC_DEVICE *)pObj;        DRV_LOG (DRV_DEBUG_LOAD, "%s%d: esmcStart\n",         (int) DEV_NAME, pDev->unit, 3, 4, 5, 6);  #ifdef DEBUG_NET_TASK    /* turn off VX_UNBREAKABLE on net task */    {        int tid;        tid = taskNameToId("tNetTask");        if(tid != ERROR)        {            taskOptionsSet(tid, VX_UNBREAKABLE, 0);        }    }#endif        oldLevel = intLock();    SYS_INT_CONNECT (pDev, esmcIsr, (int)pDev, &result);    intUnlock(oldLevel);        if (result == ERROR)    {    DRV_LOG (DRV_DEBUG_LOAD,         "%s%d: esmcStart: could not attach interrupt\n",         (int) DEV_NAME, pDev->unit, 3, 4, 5, 6);    return (ERROR);    }    /* reset error counters */    pDev->rxOverrun = 0;    pDev->lateCollisions = 0;    pDev->_16Collisions = 0;    pDev->fifoTxUnderrun = 0;    pDev->sqet = 0;    pDev->lostCarrier = 0;    pDev->alignErr = 0;    pDev->badCrc = 0;    pDev->tooLong = 0;    pDev->tooShort = 0;    ESMC_SWITCH_BANK (pDev,0);    WRITE_WORD (pDev, ESMC_TCR, ESMC_TCR_PAD | ESMC_TCR_TXEN); /* TXenable */    WRITE_WORD (pDev, ESMC_RCR, ESMC_RCR_RXEN);                /* RX enable */    /* Enable interrupts on the chip:     *     * ERCV: (Early Receive Interrupt) set whenever a packet is beeing     *     received, and the number of bytes received into memory exeeds     *     the value programmed as ERCV_THRESHOLD.     * EPH: (Ethernet protocol Handler) is the result of the merge of     *     several possible conditions.     * RX_OVRN: The receiver aborts due to an overrun due to failed     *     memory allocation.     * TX_EMPTY: set if the TX FIFO goes empty, normally after a     *     succesful transmission.     * TX: set when at least one packet transmission was     *     completed. After servicing a packet in the FIFO the TX is set.     * RCV: set when a receive interrupt has been genetated, the first     *     packet received can be read from FIFO.     */    /* mark the interface as up and running */    END_FLAGS_SET (&pDev->endObj, (IFF_UP | IFF_RUNNING));         pDev->imask =  ( /*ESMC_INT_RX_OVRN | */ ESMC_INT_RCV |  /*ESMC_INT_ERCV | */ ESMC_INT_TX) << 8;        oldLevel = intLock();        ESMC_SWITCH_BANK (pDev,2);    /* int enable */    WRITE_WORD(pDev, ESMC_INTERRUPT_, pDev->imask);    SYS_INT_ENABLE(pDev);    intUnlock(oldLevel);    return (OK);    }/********************************************************************************* esmcStop - stop the device** This function calls BSP functions to disconnect interrupts and stop* the device from operating in interrupt mode.** RETURNS: OK or ERROR.*/LOCAL STATUS esmcStop    (    END_OBJ *pObj    /* device to be stopped */    )    {    ESMC_DEVICE *pDev = (ESMC_DEVICE *)pObj;    STATUS result = OK;    USHORT val;    DRV_LOG (DRV_DEBUG_LOAD, "%s%d: esmcStop\n",         (int) DEV_NAME, pDev->unit, 3, 4, 5, 6);    END_FLAGS_CLR (&pDev->endObj, IFF_UP | IFF_RUNNING);    /* stop/disable the device. */    ESMC_SWITCH_BANK (pDev, 2);    WRITE_WORD(pDev,ESMC_INTERRUPT_, 0);        /* mask all interrupts INT */    ESMC_SWITCH_BANK (pDev,0);    val = READ_WORD(pDev, ESMC_TCR);    WRITE_WORD (pDev, ESMC_TCR, val & ~ESMC_TCR_TXEN);  /* TX disable */    val = READ_WORD(pDev, ESMC_RCR);    WRITE_WORD (pDev, ESMC_RCR, val & ~ESMC_RCR_RXEN);  /* RX disable */    SYS_INT_DISCONNECT (pDev, (FUNCPTR)esmcIsr, (int)pDev, &result);    if (result == ERROR)    {    DRV_LOG (DRV_DEBUG_LOAD, "Could not disconnect interrupt!\n",        1, 2, 3, 4, 5, 6);    }    ESMC_SWITCH_BANK (pDev, 2);    return (result);    }/******************************************************************************** esmcUnload - unload a driver from the system** This function first brings down the device, and then frees any* stuff that was allocated by the driver in the load function.** RETURNS: OK or ERROR.*/LOCAL STATUS esmcUnload    (    END_OBJ *pObj    /* device to be unloaded */    )    {    ESMC_DEVICE *pDev = (ESMC_DEVICE *)pObj;    DRV_LOG (DRV_DEBUG_LOAD, "%s%d: esmcUnload\n",         (int) DEV_NAME, pDev->unit, 3, 4, 5, 6);    END_OBJECT_UNLOAD (&pDev->endObj);#ifdef ESMC_USE_ISR_COPY    /* Free preallocated resources */    while (lstCount(&pDev->busyClusters))        taskDelay(1);    lstFree(&pDev->freeClusters);    lstFree(&pDev->busyClusters);#endif /* ESMC_USE_ISR_COPY */                 netPoolDelete (pDev->endObj.pNetPool);    free(pDev->endObj.pNetPool);    pDev->endObj.pNetPool = NULL;    return OK;    }/********************************************************************************* esmcSend - the driver send routine** This routine takes a M_BLK_ID sends off the data in the M_BLK_ID.* The buffer must already have the addressing information properly installed* in it.  This is done by a higher layer.  The last arguments are a free* routine to be called when the device is done with the buffer and a pointer* to the argument to pass to the free routine.** RETURNS: OK, ERROR, or END_ERR_BLOCK.*/LOCAL STATUS esmcSend    (    END_OBJ *pObj,    M_BLK_ID     pMblk        /* data to send */    )    {    unsigned int    pages;    unsigned short  packetNo;    unsigned short  val;       unsigned int    ndx;    unsigned int    len;     unsigned int    writeOut;    int             oldLevel;    unsigned int    i;    STATUS          erCode;    M_BLK_ID        pCur = pMblk;        ESMC_DEVICE *pDev = (ESMC_DEVICE *)pObj;    DRV_LOG (DRV_DEBUG_FN_TRACE, "%s%d: esmcSend\n",         (int) DEV_NAME, pDev->unit, 3, 4, 5, 6);    /*     * Obtain exclusive access to transmitter.  This is necessary because     * we might have more than one stack transmitting at once.     */       END_TX_SEM_TAKE (&pDev->endObj, WAIT_FOREVER);    /*     * Delay up to 5 ticks if free pages are exhausted, which is true     * all too often on the Mainstone.     */    ESMC_SWITCH_BANK(pDev, 0);    i = 0;    do     {        val = READ_WORD(pDev, ESMC_MIR);        val = (val >> 8) & 0xFF;        if (val == 0)        {            taskDelay(1);        }    } while ((val == 0) && (i++ < 5));        /* get length from mblks */    len = 0;    while(pCur != NULL)    {        len += pCur->mBlkHdr.mLen;        pCur = pCur->mBlkHdr.mNext;    }    /* allocate transmit memory */    pages = len / 256;    oldLevel = intLock();    ESMC_SWITCH_BANK (pDev, 2);    WRITE_WORD(pDev,ESMC_INTERRUPT_, 0);        /* lock INT */    intUnlock(oldLevel);    WRITE_WORD(pDev, ESMC_MMU, ESMC_MMU_ALLOC | pages);  /* alloc mem */    for(i = 0 ; i < 10 ; i++)    {            val = READ_WORD(pDev, ESMC_INTERRUPT_);        if(val &  ESMC_INT_ALLOC)            break;    }        /*     * If no buffers are available,     * release the semaphore and return END_ERR_BLOCK.     * Do not free packet     */    packetNo = READ_WORD(pDev, ESMC_PNR) >> 8;    if(packetNo & 0x80) /* check for valid packet number */    {        erCode = END_ERR_BLOCK;        goto exit;    }    sysOutByte(pDev->base + ESMC_PNR, packetNo);  /* set the tx packet */    WRITE_WORD(pDev, ESMC_PTR, ESMC_PTR_AUTOINC); /* set the pointer */    /* copy the data to the device */    WRITE_WORD(pDev, ESMC_DATA_1, 0);             /* status */    WRITE_WORD(pDev, ESMC_DATA_1, (len + 6));     /* byte count */    pCur = pMblk;    writeOut = 0;     val = 0;    while(pCur)    {        len = pCur->mBlkHdr.mLen;        for(ndx = 0 ; ndx < pCur->mBlkHdr.mLen; ndx++)        {            if(writeOut == 1)            {                writeOut = 0;                val |= ((unsigned char)(pCur->mBlkHdr.mData[ndx]) << 8);                WRITE_WORD(pDev,ESMC_DATA_1, val);            }            else            {                writeOut = 1;                val = (unsigned char )pCur->mBlkHdr.mData[ndx];            }        }        pCur = pCur->mBlkHdr.mNext;    }    /* check for odd number of bytes */    if(writeOut == 1)    {        /*         * For odd size frames, write the last data byte         * and the Control byte as 0x20 (ODD=1).         */        WRITE_WORD(pDev,ESMC_DATA_1, 0x2000 | val);    }    else    {        /*         * For even size frames, write the last data byte as zero

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
另类欧美日韩国产在线| 国内不卡的二区三区中文字幕 | 国产精品日韩成人| 日韩精品资源二区在线| 6080国产精品一区二区| 精品视频全国免费看| 91黄视频在线观看| 色哟哟日韩精品| 91日韩精品一区| 欧美性受极品xxxx喷水| 色就色 综合激情| 色94色欧美sute亚洲13| 日本大香伊一区二区三区| 91原创在线视频| 欧美视频你懂的| 日韩视频永久免费| 国产亚洲综合色| 亚洲一区二区三区中文字幕在线| 亚洲午夜精品17c| 一区二区久久久久久| 视频一区二区不卡| 国产伦精品一区二区三区视频青涩 | 色综合一区二区| 波多野结衣欧美| 欧美日韩不卡一区二区| 欧美性生活一区| 欧美成人a视频| 亚洲男帅同性gay1069| 亚洲专区一二三| 国产精品一级片在线观看| a级精品国产片在线观看| 在线观看国产日韩| 精品区一区二区| 成人欧美一区二区三区1314| 亚洲一区在线视频| 日本午夜精品视频在线观看| 成人手机电影网| 678五月天丁香亚洲综合网| 欧美国产日韩精品免费观看| 亚洲福利国产精品| av在线播放成人| 日韩欧美你懂的| 亚洲精品成人悠悠色影视| 国产一区二区三区精品欧美日韩一区二区三区| 91在线观看污| 久久久久久毛片| 日本午夜一区二区| 色综合久久久久综合体| 久久久噜噜噜久久人人看| 一区二区三区中文字幕电影| 激情久久久久久久久久久久久久久久| 99久久久无码国产精品| 久久蜜桃一区二区| 麻豆一区二区三| 欧美精品日韩一区| 中文字幕在线不卡| 国产精品 日产精品 欧美精品| 欧美一级欧美一级在线播放| 一区二区三区国产| 色悠悠久久综合| 亚洲欧洲中文日韩久久av乱码| 国产999精品久久久久久| 亚洲精品一区在线观看| 丝瓜av网站精品一区二区| 91免费版pro下载短视频| 国产精品乱码人人做人人爱| 国产精品一线二线三线| 精品裸体舞一区二区三区| 麻豆国产精品官网| 日韩精品一区二区在线| 日韩国产成人精品| 欧美一区二区成人| 亚洲国产乱码最新视频| 91视频免费观看| 亚洲一区二区三区四区在线免费观看 | 欧美一区二区在线免费观看| 亚洲欧美激情插 | 91麻豆蜜桃一区二区三区| 欧美激情在线一区二区| 不卡的电影网站| 亚洲视频1区2区| av激情综合网| 国产精品国产三级国产专播品爱网| 国产成人自拍高清视频在线免费播放| 精品国产区一区| 国产在线观看免费一区| 精品国产一区二区国模嫣然| 国产呦萝稀缺另类资源| 国产精品国产三级国产普通话蜜臀| 国产91丝袜在线播放| 国产精品毛片久久久久久久| 色欧美乱欧美15图片| 亚洲在线视频网站| 91精品国产一区二区| 免费在线欧美视频| 国产无人区一区二区三区| 99久久国产综合精品色伊| 亚洲国产裸拍裸体视频在线观看乱了| 51久久夜色精品国产麻豆| 国产精品18久久久久久久久| 亚洲欧洲精品天堂一级| 日韩一区二区精品在线观看| 国产精品亚洲视频| 亚洲一区二区在线免费观看视频| 5月丁香婷婷综合| 成人黄色在线网站| 亚洲一二三专区| 欧美一区二区不卡视频| 91热门视频在线观看| 亚洲成av人**亚洲成av**| 精品理论电影在线观看| 色婷婷av一区二区三区软件| 激情文学综合插| 亚洲福利视频导航| 久久综合五月天婷婷伊人| 91亚洲精品乱码久久久久久蜜桃 | 精品国精品国产| 日本久久一区二区三区| 久久99久久精品| 亚洲国产日日夜夜| 国产精品久久久久永久免费观看| 欧美嫩在线观看| eeuss鲁片一区二区三区| 久久99九九99精品| 亚洲国产日韩在线一区模特| 国产精品欧美精品| 69av一区二区三区| 欧美三级韩国三级日本三斤| 成人国产精品免费观看| 久久97超碰色| 麻豆91免费看| 五月婷婷久久丁香| 亚洲综合在线第一页| 国产精品久久久久久久蜜臀| 久久久久久久久蜜桃| 精品理论电影在线| 日韩欧美中文一区| 欧美女孩性生活视频| 欧美无人高清视频在线观看| 成人丝袜高跟foot| 国产成人av影院| 国产一区二区三区四 | 日韩三级伦理片妻子的秘密按摩| 色屁屁一区二区| 在线免费观看不卡av| 色悠久久久久综合欧美99| 91小视频免费观看| 91免费看片在线观看| 99视频精品全部免费在线| 成人性生交大片免费看中文网站| 黄页视频在线91| 国产一区二区三区电影在线观看| 精品一区二区综合| 国产精品资源站在线| 成人一级视频在线观看| 国产福利精品一区| av一区二区久久| 一本大道久久a久久综合婷婷| 色综合久久中文字幕综合网| 欧美亚洲高清一区| 91精品在线麻豆| 精品国一区二区三区| 欧美精品一区二区三区蜜臀| 国产日韩av一区二区| 国产精品你懂的在线| 亚洲精品视频一区| 亚洲成a人v欧美综合天堂下载| 午夜欧美电影在线观看| 久久精品国产网站| 国产**成人网毛片九色 | 日本亚洲电影天堂| 国产乱妇无码大片在线观看| 成人国产精品免费| 欧美性感一类影片在线播放| 91精品国产免费久久综合| 日韩亚洲欧美在线| 国产精品乱码一区二区三区软件| 亚洲综合视频网| 蜜臀av亚洲一区中文字幕| 成人午夜碰碰视频| 欧美日韩夫妻久久| 欧美激情在线一区二区| 午夜av区久久| 成人美女在线观看| 欧美一区二区三区喷汁尤物| 国产亲近乱来精品视频| 亚洲一区二区三区国产| 黄一区二区三区| 精品视频在线免费看| 久久久久久久久蜜桃| 亚洲国产精品一区二区www在线| 黑人巨大精品欧美一区| 91原创在线视频| 久久综合九色综合欧美亚洲| 亚洲精品水蜜桃| 国产盗摄视频一区二区三区| 欧美一区二区三区四区高清| 亚洲精品视频免费观看| 国产一区二区免费在线| 欧美一区二区三区在线|