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

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

?? if_cs89x.c

?? 嵌入式TCP/IP協議棧
?? C
字號:
/*****************************************************************************
* 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;
}

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜亚洲另类欧美| 国产日韩综合av| 99综合影院在线| 国产精品自拍在线| 国产99久久久国产精品| 国产麻豆9l精品三级站| 黄页网站大全一区二区| 久久国产福利国产秒拍| 免费在线欧美视频| 免费在线观看精品| 裸体健美xxxx欧美裸体表演| 日av在线不卡| 国内精品久久久久影院薰衣草| 蜜桃视频在线观看一区二区| 国产资源精品在线观看| 国产福利91精品一区二区三区| 国产精品911| 成人免费福利片| 色欲综合视频天天天| 欧美午夜免费电影| 欧美一区二区性放荡片| 精品久久久久久久久久久院品网| 久久色中文字幕| 国产精品国产三级国产普通话三级| 中文字幕日韩一区| 亚洲国产日韩a在线播放| 奇米色一区二区| 国产成+人+日韩+欧美+亚洲| 91在线视频免费观看| 7777精品伊人久久久大香线蕉的| 日韩一区国产二区欧美三区| 国产欧美日韩在线看| 亚洲一线二线三线久久久| 蜜臀精品一区二区三区在线观看 | 夜夜嗨av一区二区三区四季av | 欧美一区二区三区免费观看视频| 日韩精品中午字幕| 国产日本一区二区| 亚洲国产精品人人做人人爽| 精一区二区三区| 一本色道a无线码一区v| 日韩你懂的电影在线观看| 最新不卡av在线| 蜜桃一区二区三区四区| 91欧美一区二区| 欧美大白屁股肥臀xxxxxx| 亚洲狼人国产精品| 国产米奇在线777精品观看| 色婷婷激情一区二区三区| 精品国产污污免费网站入口| 一区二区三区精密机械公司| 国产在线视频不卡二| 欧美色图一区二区三区| 国产精品理论片在线观看| 天天色综合天天| 91小视频在线观看| 国产欧美一区二区三区鸳鸯浴 | 国产成人在线观看免费网站| 在线观看日韩精品| 国产精品天天看| 久久av中文字幕片| 欧美日韩一区二区在线观看 | 在线观看区一区二| 久久久久久亚洲综合影院红桃| 一区二区在线看| 北条麻妃国产九九精品视频| 久久综合九色综合久久久精品综合| 一区二区视频免费在线观看| k8久久久一区二区三区| 国产偷国产偷精品高清尤物| 蜜桃视频在线一区| 欧美一级电影网站| 日日欢夜夜爽一区| 欧美日韩一级视频| 亚洲一区二区三区中文字幕| 日本丰满少妇一区二区三区| 18成人在线观看| 91原创在线视频| 亚洲女人小视频在线观看| 成人动漫中文字幕| 中文字幕av一区 二区| 国产老女人精品毛片久久| 欧美电影免费观看高清完整版在线| 日韩国产精品大片| 精品欧美黑人一区二区三区| 久久精品国内一区二区三区| 日韩三级视频中文字幕| 激情综合一区二区三区| 精品国产91亚洲一区二区三区婷婷| 麻豆国产欧美日韩综合精品二区| 日韩精品中文字幕在线不卡尤物| 奇米精品一区二区三区在线观看一 | 成人综合婷婷国产精品久久免费| 欧美一二三区精品| 加勒比av一区二区| 久久久久国产精品麻豆| 成人免费高清在线| 一区二区三区国产| 日韩一区二区在线播放| 国产尤物一区二区在线| 中文字幕电影一区| 欧美综合一区二区三区| 日韩中文字幕区一区有砖一区 | 欧美乱熟臀69xxxxxx| 日韩精品一二三四| 久久精品一区蜜桃臀影院| 92精品国产成人观看免费| 五月婷婷激情综合网| 26uuu色噜噜精品一区二区| 成人av免费在线| 丝袜a∨在线一区二区三区不卡| 精品电影一区二区三区| 色欲综合视频天天天| 免费在线成人网| 一色屋精品亚洲香蕉网站| 7799精品视频| 成人久久久精品乱码一区二区三区| 亚洲成人激情社区| 国产视频一区在线观看| 欧美日韩三级一区二区| 极品美女销魂一区二区三区| 亚洲欧美一区二区不卡| 欧美xxxxx裸体时装秀| 97aⅴ精品视频一二三区| 美女视频第一区二区三区免费观看网站| 国产日产欧美一区| 日韩一区二区精品葵司在线| 91麻豆国产自产在线观看| 国产麻豆成人精品| 日韩国产成人精品| 亚洲欧美日韩在线播放| 久久亚洲综合色一区二区三区| 欧美制服丝袜第一页| 成人av片在线观看| 久久99精品国产.久久久久| 亚洲一区二区三区免费视频| 国产精品网曝门| 久久网站热最新地址| 91精品国产麻豆| 精品污污网站免费看| 色偷偷88欧美精品久久久| 成人国产免费视频| 国产精品系列在线播放| 久久精品国产**网站演员| 午夜一区二区三区视频| 亚洲精品乱码久久久久久久久| 国产亚洲欧美日韩俺去了| 久久一区二区视频| 精品国产百合女同互慰| 日韩欧美黄色影院| 日韩视频在线观看一区二区| 欧美日韩一区二区三区不卡| 欧美午夜免费电影| 欧美午夜理伦三级在线观看| 日本精品一区二区三区四区的功能| 成人av电影在线播放| k8久久久一区二区三区| 99国产精品久久久久久久久久久| 成人黄色网址在线观看| 不卡一区二区三区四区| 91网站最新地址| 色婷婷国产精品| 欧美日韩免费视频| 欧美日韩国产一级二级| 欧美精品xxxxbbbb| 欧美一区二区三区影视| 欧美不卡一二三| 欧美高清在线精品一区| 国产精品激情偷乱一区二区∴| 亚洲免费观看高清完整版在线观看 | 亚洲三级电影网站| 玉足女爽爽91| 婷婷激情综合网| 精品一区二区免费看| 国产一区二区三区四区五区美女 | 91精品一区二区三区在线观看| 欧美二区三区91| 精品三级在线看| 久久久亚洲午夜电影| 国产精品久久99| 日韩专区中文字幕一区二区| 精品一区二区在线观看| 99久久精品情趣| 欧美日韩情趣电影| 欧美精品一区二区三区视频| 国产精品久久久久毛片软件| 亚洲国产成人va在线观看天堂| 天天色天天爱天天射综合| 国产精品一区在线观看你懂的| 91网站最新网址| 正在播放亚洲一区| 中文字幕av在线一区二区三区| 一区二区在线观看视频| 精品在线一区二区三区| 95精品视频在线| 精品少妇一区二区| 亚洲一区国产视频| 国产 欧美在线| 91麻豆精品久久久久蜜臀| 国产精品久久久久7777按摩 |