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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? if_cs89x.c

?? 一個(gè)tcp/ip協(xié)議棧,帶有PPP、IP、TCP、UDP等協(xié)議
?? C
字號(hào):
/*****************************************************************************
* if_cs89x.c - 
*
* Copyright (c) 2001 by Cognizant Pty Ltd.
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice and the following disclaimer are included verbatim in any 
* distributions. No written agreement, license, or royalty fee is required
* for any of the authorized uses.
*
* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
* REVISION HISTORY (please don't use tabs!)
*
*(yyyy-mm-dd)
* 2001-06-01 Robert Dickenson <odin@pnc.com.au>, Cognizant Pty Ltd.
*            Original file.
*
******************************************************************************
*/
#include "..\..\netconf.h"
#include "..\..\netbuf.h"
#include "..\..\netos.h"
#include "..\..\netifdev.h"

#include "if_cs89d.h"
#include "if_cs89x.h"
#include "if_cs89r.h"
#include <stdio.h>
#include "..\..\netdebug.h"


u_short ISQSem;     // CS8900 interrupt occured, ISQSem contains ISQ value


/***********************************************************************************
 *
 * Function:    InitCS8900A(void)
 * Description: This function initializes the CS8900 to work in the mode desired
 *              for this application. Also writes the MAC to the chip.
 *      Settings are:
 *          10BaseT
 *          Full Duplex
 *          Enable RxOK interrupt
 *
 **********************************************************************************/
static unsigned char InitCS8900A(void)
{
    WritePP(ppLineCtl, LINE_CTL_10BASET);   // Set to 10BaseT
    WritePP(ppTestCtl, TEST_CTL_FDX);       // Set to full duplex
    WritePP(ppRxCfg, RX_CFG_RX_OK_IE);      // Enable RX OK interrupt
    WritePP(ppRxCtl, RX_CTL_RX_OK_A | RX_CTL_IND_A | RX_CTL_BCAST_A);
    WritePP(ppTxCfg, TX_CFG_ALL_IE);        // Enable interrupts for all Tx events
    WritePP(ppIntNum, 0);                   // Use interrupt 0 signal
//
// Now we need to write the myMAC to the CS8900
// Since we are wrong endian we need to reverse the word entries
//
//    WritePP(ppIndAddr+0, (u_short)(myMAC.mac2<<8 | myMAC.mac1));
//    WritePP(ppIndAddr+2, (u_short)(myMAC.mac4<<8 | myMAC.mac3));
//    WritePP(ppIndAddr+4, (u_short)(myMAC.mac6<<8 | myMAC.mac5));

    WritePP(ppBusCtl, 0x8000);          // Enable interrupts
    WritePP(ppLineCtl, 0x00c0);         // Enable SerRxOn  and SerTxOn

// TODO     IIMC = 0x04;                // Enable INT0 interrupts from CS8900
// TODO     INTE0AD = 0x04;             // Set interupt priority level to 4
    return 0;
}

////////////////////////////////////////////////////////////////////////////////
// 
//
static unsigned char StopCS8900A(void)
{
    return 0;
}

////////////////////////////////////////////////////////////////////////////////
// 
//
static unsigned char DriverTxPacket(NBuf* pNBuf)
{
    u_short packet_len;
    u_short TxLocPtr;
    u_short padding_cnt = 0;

    // send complete frame from NBuf to device and transmit.
    packet_len = nChainLen(pNBuf);
//    TRACE("DriverTxPacket() nChainLen - %u\n", packet_len);
    if (packet_len < 60) {                        // Minimum length is 60 bytes
        padding_cnt = 60 - packet_len;
        packet_len = 60;
    }

    WritePP(ppTxCmd, TX_CMD_START_ALL);             // Start transmitting after all bytes are sent
    WritePP(ppTxLength, packet_len);                // Tell CS8900 how many bytes
    TxLocPtr = ppTxFrame;                           // Set up CS8900 Tx location pointer
    while (!(ReadPP(ppBusSt) & BUS_ST_RDY4TXNOW)) { // Wait for CS8900 to complete previous Tx
    }
    WriteNBufPP(TxLocPtr, pNBuf);
    WritePP(ppTxCmd, TX_CMD_FORCE);              // Force send of packet - WIN32 ONLY ?
    return 0;
}


////////////////////////////////////////////////////////////////////////////////
// Ethernet device interrupt support for frame reception.
//
static NBuf* RxEthEvent(void)
{
	NBuf* headNB = NULL;
    u_short rx_status = ReadPP(ppRxStat);
    u_short packet_len = ReadPP(ppRxLength);

    OS_ENTER_CRITICAL();
	nGET(headNB);           // Grab an input buffer.
    OS_EXIT_CRITICAL();

//    TRACE("RxEthEvent() packet_len: %u\n", packet_len);

    if (headNB != NULL) {
        u_short data;
        u_short i;
        NBuf* tailNB = headNB;
        u_short wordcnt = packet_len >> 1;
        headNB->len = 0;
        for (i = 0; i < wordcnt; i++) {        // Get all data
            data = ReadPP((u_short)(ppRxFrame+(i*2))); // Get the data
//            TRACE(" %04X, ", data & 0xffff);
            tailNB = NBufPutW(data, tailNB);
            if (tailNB == NULL) {
                TRACE("RxEthEvent() error building nBuf chain ! - nFreeChain(%p)\n", headNB);
                nFreeChain(headNB);
                return (headNB = NULL);
            }
        }
/*
    {
        short i;
        char* data = nBUFTOPTR(headNB, char*);
        for (i = 0; i < packet_len; i++) {
            TRACE(" %02X : %c \n", data[i] & 0x00ff, isprint(data[i]) ? data[i] : ' ');
        }
    }
 */
//        TRACE("RxEthEvent() - posting new NBuf %p\n", headNB);
//        OSQPost(pEthRxQ, headNB);
    } else {
        TRACE("RxEthEvent() - failed to nGET()\n");
    }
    return headNB;
}


/***********************************************************************************
 *
 * Function:    __regbank(1) Intcs8900a(void)
 * Description: This is the entry point for interrupts from the CS8900
 *
 **********************************************************************************/
static void Intcs8900a(void)
{
    ISQSem = *(u_short*)portISQ;         // Interrupt occured so read first value in que
}

/***********************************************************************************
 *
 * Function:    ProcessISQ(void)
 * Description: Here we process all the interrupts held on the que ISQ.
 *              ISQSem contains the first que entry, it was read in the interrupt
 *              routine in order to reset the interrupt pin.
 *
 **********************************************************************************/
#ifdef QUEUE_TASKS
void ProcessISQ(Interface* pInterface)
{
	NBuf* headNB = NULL;
    ISQSem = 0x04; // TODO: debugging

//    do {
        switch (ISQSem & REGMASK) {
        case 0x04:          // Detected an Rx Event
            headNB = RxEthEvent();      // Go handle it
            if (headNB != NULL)
                OSQPost(pInterface->pRxQ, headNB);
            break;
        case 0x08:          // Detected a Tx Event
            break;
        case 0x0c:          // Detected a Buff event
            break;
        case 0x10:          // Detected a RxMISS event
            break;
        case 0x12:          // Detected a TXCOL event
            break;
        }                   // Those are all events generated by the CS8900
//    } while ((ISQSem = *(u_short*)portISQ) != 0x0000);
}

#else
void ProcessISQ(Interface* pInterface)
{
    ISQSem = 0x04; // TODO: debugging
//    do {
        switch (ISQSem & REGMASK) {
        case 0x04:          // Detected an Rx Event
            pInterface->rxEventCnt++;
            OSSemPost(pInterface->pSemIF);
            break;
        case 0x08:          // Detected a Tx Event
            pInterface->txEventCnt++;
            OSSemPost(pInterface->pSemIF);
            break;
        case 0x0c:          // Detected a Buff event
            break;
        case 0x10:          // Detected a RxMISS event
            break;
        case 0x12:          // Detected a TXCOL event
            break;
        }                   // Those are all events generated by the CS8900
//    } while ((ISQSem = *(u_short*)portISQ) != 0x0000);
}
#endif

////////////////////////////////////////////////////////////////////////////////
/*
1.  Declare/create new device structure
2.  Call DriverEntry(&device) to initialise func pointers
3.  
 */

static unsigned char statistics(if_statistics* pStats)
{
    return FALSE;
}

static unsigned char dummy_func(void)
{
    return TRUE;
}


unsigned char CS89X_DriverEntry(Interface* pInterface)
{
    // We should get our base address/port and perhaps interrupt 
    //  number from the Interface here and store.
    //  
/*
  OS_EVENT* pEthTxQ;
  OS_EVENT* pEthRxQ;
 */
    pInterface->start = InitCS8900A;
    pInterface->stop = StopCS8900A;
    pInterface->receive = RxEthEvent;
    pInterface->receive_ready = dummy_func;
    pInterface->transmit = DriverTxPacket;
    pInterface->transmit_ready = dummy_func;
    pInterface->statistics = statistics;
    pInterface->interrupt = ProcessISQ;

    return 0;
}

////////////////////////////////////////////////////////////////////////////////

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人一区在线观看| 在线观看www91| 午夜电影网亚洲视频| 亚洲精品在线观看网站| 91极品视觉盛宴| 国产乱子轮精品视频| 亚洲午夜精品17c| 欧美国产精品一区| 欧美不卡一区二区三区四区| 91老司机福利 在线| 精油按摩中文字幕久久| 亚洲午夜羞羞片| 国产精品久久久久久久久果冻传媒| 91精品欧美一区二区三区综合在| 一本大道av一区二区在线播放| 国产精品系列在线观看| 美女mm1313爽爽久久久蜜臀| 午夜精品免费在线| 亚洲精品国产a| 亚洲素人一区二区| 亚洲国产岛国毛片在线| 久久久久久久久久久久电影| 91精品国产品国语在线不卡| 欧美日韩视频在线一区二区| 色噜噜久久综合| 色综合天天做天天爱| 成人ar影院免费观看视频| 国产精品小仙女| 国产成a人亚洲精品| 韩国v欧美v日本v亚洲v| 美脚の诱脚舐め脚责91| 首页国产丝袜综合| 午夜精品免费在线观看| 日韩精品久久理论片| 亚洲国产成人tv| 亚洲成a人v欧美综合天堂| 亚洲一区二区三区爽爽爽爽爽| 亚洲女性喷水在线观看一区| 中文字幕日韩av资源站| 最新热久久免费视频| 亚洲欧洲日产国产综合网| 亚洲人成人一区二区在线观看 | 视频一区二区三区在线| 伊人一区二区三区| 亚洲一区二区精品3399| 亚洲综合免费观看高清完整版在线| 一区二区视频在线| 亚洲综合成人在线| 日韩av中文字幕一区二区 | 国产又粗又猛又爽又黄91精品| 精品一区二区在线看| 国产精品一区在线| 成人成人成人在线视频| 色婷婷精品大在线视频| 欧美日韩在线不卡| 欧美不卡一区二区三区| 国产欧美精品一区二区三区四区| 欧美极品xxx| 亚洲乱码国产乱码精品精98午夜| 亚洲伊人色欲综合网| 日韩一区欧美二区| 国产毛片精品一区| 99热99精品| 欧美精品久久99久久在免费线 | 国产精品免费视频一区| 中文字幕佐山爱一区二区免费| 亚洲高清免费观看高清完整版在线观看| 五月天婷婷综合| 国产综合色在线视频区| 成人午夜免费视频| 欧美日韩免费高清一区色橹橹 | 亚洲免费观看在线观看| 日韩中文字幕91| 国产sm精品调教视频网站| 色婷婷激情久久| 精品日本一线二线三线不卡| 一区二区中文字幕在线| 午夜精品久久久久| 国产精品1024| 欧洲av一区二区嗯嗯嗯啊| 精品国产乱子伦一区| 亚洲欧洲国产日韩| 老汉av免费一区二区三区| 不卡一区二区三区四区| 欧美一三区三区四区免费在线看 | 国产白丝精品91爽爽久久| 色94色欧美sute亚洲线路一久| 日韩免费一区二区| 亚洲免费视频成人| 国产精品一级二级三级| 91.xcao| 中文字幕一区二区三区视频| 美女脱光内衣内裤视频久久影院| 99麻豆久久久国产精品免费优播| 日韩欧美亚洲国产精品字幕久久久| 国产精品婷婷午夜在线观看| 日韩精品91亚洲二区在线观看| 成人爽a毛片一区二区免费| 欧美日韩大陆一区二区| 国产区在线观看成人精品| 日韩福利电影在线观看| 色噜噜狠狠一区二区三区果冻| 久久久国产综合精品女国产盗摄| 石原莉奈在线亚洲三区| www.99精品| 国产欧美一区二区三区在线看蜜臀| 人妖欧美一区二区| 欧美三电影在线| 亚洲日本欧美天堂| 国产精品18久久久久久久网站| 91精品国模一区二区三区| 亚洲最大的成人av| 99精品视频在线观看| 国产欧美精品一区aⅴ影院| 毛片av一区二区| 欧美一区二区三区四区五区| 亚洲已满18点击进入久久| 91丨九色porny丨蝌蚪| 国产精品久久久久精k8| 国产福利视频一区二区三区| 精品国产乱码久久久久久图片 | 日韩一区二区电影| 日韩高清一区在线| 欧美精品99久久久**| 亚洲一区精品在线| 91行情网站电视在线观看高清版| 一色桃子久久精品亚洲| www.欧美日韩国产在线| 国产精品久久看| 9i在线看片成人免费| 亚洲色图.com| 99re66热这里只有精品3直播| 国产清纯白嫩初高生在线观看91| 国产一区视频在线看| 精品国免费一区二区三区| 激情综合亚洲精品| 久久伊人中文字幕| 高清免费成人av| 欧美激情在线看| 91在线观看污| 一区二区三区视频在线看| 欧美综合天天夜夜久久| 亚洲va韩国va欧美va精品| 91精品国产福利在线观看 | 日韩和的一区二区| 7777精品伊人久久久大香线蕉 | 欧美精品一区二区三区高清aⅴ| 久久99精品久久久| 国产欧美精品一区二区色综合| 成人高清免费观看| 亚洲一区二区中文在线| 7799精品视频| 国产成人午夜精品5599| 国产精品国产三级国产普通话三级 | 亚洲精品国产视频| 欧美精品久久一区二区三区| 免费一区二区视频| 久久久久久99精品| 91麻豆产精品久久久久久 | 蜜臀av性久久久久蜜臀av麻豆 | 日韩精品1区2区3区| 久久综合国产精品| 91在线免费看| 日本不卡不码高清免费观看| 2023国产一二三区日本精品2022| 成人av在线观| 香港成人在线视频| 久久久久久久久久看片| 色94色欧美sute亚洲线路一久| 免费久久99精品国产| 国产精品天美传媒| 欧美日韩日日骚| 国产aⅴ综合色| 五月天网站亚洲| 中文字幕成人av| 欧美日韩大陆在线| 国产69精品久久777的优势| 亚洲伦理在线精品| 26uuu亚洲婷婷狠狠天堂| 91尤物视频在线观看| 日产精品久久久久久久性色| 中文字幕精品—区二区四季| 欧美日韩1234| 成人免费看视频| 视频一区二区三区中文字幕| 中文字幕第一区综合| 日韩一区二区在线观看视频| 波多野结衣在线aⅴ中文字幕不卡| 亚洲成av人片在www色猫咪| 久久久久97国产精华液好用吗| 欧美亚洲动漫精品| 国产精品一区二区免费不卡| 天天av天天翘天天综合网| 中文字幕不卡一区| 欧美大片日本大片免费观看| 色狠狠色狠狠综合| 成人av资源站| 激情久久五月天| 日韩电影在线观看电影| 一区二区三区在线免费视频|