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

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

?? halether.c

?? RTL8139 網卡驅動源碼 for WinCE.net CEPC
?? C
?? 第 1 頁 / 共 2 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:  
    halether.c
    
Abstract:

    Platform specific code for debug ethernet services (debug messages,
    kernel debugger, text shell (PPSH)).  These functions are all called
    from ethdbg.lib.  They are non-preemptible, and cannot make any system calls.

Functions:


Notes: 

--*/
#include <windows.h>
#include <nkintr.h>
#include <ethdbg.h>
#include <halether.h>
#include <hal.h>
#include <PCIreg.h>
#include "pc.h"
#include "bootarg.h"
#include "oalintr.h"


int __cdecl _inp  (unsigned short);
int __cdecl _outp (unsigned short, int);

//
// Function pointers to the support library functions of the currently installed debug ethernet controller.
//
PFN_EDBG_INIT                   pfnEDbgInit;
PFN_EDBG_INIT_DMABUFFER         pfnEDbgInitDMABuffer;
PFN_EDBG_ENABLE_INTS            pfnEDbgEnableInts;
PFN_EDBG_DISABLE_INTS           pfnEDbgDisableInts;
PFN_EDBG_GET_PENDING_INTS       pfnEDbgGetPendingInts;
PFN_EDBG_GET_FRAME              pfnEDbgGetFrame;
PFN_EDBG_SEND_FRAME             pfnEDbgSendFrame;
PFN_EDBG_READ_EEPROM            pfnEDbgReadEEPROM;
PFN_EDBG_WRITE_EEPROM           pfnEDbgWriteEEPROM;
PFN_EDBG_SET_OPTIONS            pfnEDbgSetOptions;
PFN_EDBG_CURRENT_PACKET_FILTER  pfnCurrentPacketFilter;
PFN_EDBG_MULTICAST_LIST         pfnMulticastList;

#define ETHDMA_BUFFER_BASE	    0x80200000      // MUST MATCH CONFIG.BIB
#define ETHDMA_BUFFER_SIZE	    0x00020000      // 128K DMA Buffer

#define EDBG_PHYSICAL_MEMORY_START (0x801DC000) // MUST MATCH CONFIG.BIB
static BOOT_ARGS *pBootArgs;

// Buffer for receiving frames into.  
UCHAR RcvBuf[1500];
extern DWORD EdbgDebugZone;

USHORT wLocalMAC[3];    // Saved copy of the mac address

// Well known DHCP ports for use with UDP
#define DHCP_SERVER_PORT 0x4300
#define DHCP_CLIENT_PORT 0x4400

// We retry more than Odo since CEPC BIOS's take longer to boot.
#define MAX_BOOTME_CNT   20
#define BOOTME_INTERVAL  3

#define PLATFORM_STRING "CEPC"

typedef struct __VendorId // NIC vendor ID.
{
    USHORT wVenId;      // Vendor Id
    USHORT wDevId;      // Device Id
    ULONG  dwUpperMAC;  // first 3 bytes of ethernet address
    UCHAR  Type;        // NIC type (EDBG_ADAPTER_xxx)
    UCHAR  *szAbbrev;   // Vendor name abbreviation
} VENDORID, *PVENDORID;

static const VENDORID VendorIds[] =
{
//   VenId   DevId     MAC           Type            Name
//  -------------------------------------------------------
    {0x0000, 0x0000, 0x004033, EDBG_ADAPTER_NE2000,  "AD" }, // Addtron Tech (ISA)
    {0x1050, 0x0940, 0x004005, EDBG_ADAPTER_NE2000,  "LS" }, // LinkSys
    {0x1050, 0x0940, 0x002078, EDBG_ADAPTER_NE2000,  "LS" }, // LinkSys
    {0x10EC, 0x8029, 0x00C0F0, EDBG_ADAPTER_NE2000,  "KS" }, // Kingston
    {0x10EC, 0x8129, 0x000000, EDBG_ADAPTER_RTL8139, "RT" }, // RealTek (Lanner)
    {0x10EC, 0x8139, 0x00900B, EDBG_ADAPTER_RTL8139, "RT" }, // RealTek (Lanner)
    {0x10EC, 0x8139, 0x00D0C9, EDBG_ADAPTER_RTL8139, "RT" }, // RealTek (Lanner)
    {0x10EC, 0x8139, 0x00E04C, EDBG_ADAPTER_RTL8139, "RT" }, // RealTek (Advantech)
    {0x100B, 0x0020, 0x00A0CC, EDBG_ADAPTER_DP83815, "NG" }  // Netgear
};
#define NUM_VENDORIDS (sizeof(VendorIds)/sizeof(VENDORID))

#ifdef IMGSHAREETH
BOOL    bNewFilter = FALSE;     //  User mode --> Kernel mode to set new filter.
DWORD   dwFilter;               //  The filter..

BOOL    bNewMulticast = FALSE;  //  User mode --> Kernel mode for new list
DWORD   dwNoOfEntry;
BOOL    ucMultiAddr[8][6];      //  The new list..  
                                //  VMINI assumes 8 multicast list entry..
                                //                          
#endif

static void
itoa10(
    int n,
    char s[]
    )
{
    int i = 0; 

    // Get absolute value of number
    unsigned int val = (unsigned int)((n < 0) ? -n : n);

    // Extract digits in reverse order
    do {
        s[i++] = (val % 10) + '0';
    } while (val /= 10);

    // Add sign if number negative
    if (n < 0) s[i++] = '-';

    s[i--] = '\0';

    // Reverse string
    for (n = 0; n < i; n++, i--) {
        char swap = s[n];
        s[n] = s[i];
        s[i] = swap;
    }
}

static DWORD
UpperDWFromMAC(EDBG_ADDR * pAddr)
{
    DWORD ret;

    //
    // The WORDs in wMAC field are in net order, so we need to do some
    // serious shifting around.
    // A hex ethernet address of 12 34 56 78 9a bc is stored in wMAC array as
    // wMAC[0] = 3412, wMAC[1] = 7856, wMAC[2] = bc9a.
    // The 4 byte return value should look like 0x00123456
    //
    ret = (pAddr->wMAC[0] & 0x00ff) << 16;
    ret |= pAddr->wMAC[0] & 0xff00;
    ret |= pAddr->wMAC[1] & 0x00ff;
    return ret;
}

void
CreateDeviceName(EDBG_ADDR *pMyAddr, char *szBuf)
{
    int i;
    DWORD dwUpperMAC = UpperDWFromMAC(pMyAddr);

    // If a device name was passed up by the bootloader, use it.
    //
    if ((pBootArgs->dwVersionSig == BOOT_ARG_VERSION_SIG) &&
        strlen(pBootArgs->szDeviceNameRoot))
        strncpy(szBuf, pBootArgs->szDeviceNameRoot, EDBG_MAX_DEV_NAMELEN);
    else
        strcpy(szBuf, PLATFORM_STRING);
    szBuf += strlen(szBuf);

    for (i=0;i<NUM_VENDORIDS;i++) {
        if (dwUpperMAC == VendorIds[i].dwUpperMAC) {
            strcat(szBuf,VendorIds[i].szAbbrev);
            szBuf += strlen(szBuf);
            break;
        }
    }
    itoa10(((pMyAddr->wMAC[2]>>8) | ((pMyAddr->wMAC[2] & 0x00ff) << 8)), szBuf);
}


#define IPSTATE_NONE    0
#define IPSTATE_GOTIP   1
#define IPSTATE_ARP     2
#define IPSTATE_ARPED   3
#define IPSTATE_RETRY   4

#define MAX_DHCP_RETRY  3


/* OEMEthInit
 *
 *  Initialization routine - called from EdbgInit() to perform platform specific
 *  HW init.  The CEPC platform uses either an SMC 91C94 Ethernet controller or
 *  an NE2000 compatible adapter (NSC 8390 ethernet controller).
 *
 *  Return Value:
 *    Return TRUE if init is successful, FALSE if error.
 */
BOOL
OEMEthInit(EDBG_ADAPTER *pAdapter)
{
    pBootArgs = (BOOT_ARGS *) ((ULONG)(*(PBYTE *)BOOT_ARG_PTR_LOCATION) | 0x80000000);

    // Some parameters included in boot args for future use, make sure these aren't set
    switch (pBootArgs->ucEdbgAdapterType) {
    case EDBG_ADAPTER_NE2000:
        pfnEDbgInit           = NE2000Init;
        pfnEDbgInitDMABuffer  = NULL;
        pfnEDbgEnableInts     = NE2000EnableInts;     
        pfnEDbgDisableInts    = NE2000DisableInts;    
        pfnEDbgGetPendingInts = NE2000GetPendingInts; 
        pfnEDbgGetFrame       = NE2000GetFrame;       
        pfnEDbgSendFrame      = NE2000SendFrame;      
        pfnEDbgReadEEPROM     = NE2000ReadEEPROM;     
        pfnEDbgWriteEEPROM    = NE2000WriteEEPROM;    
        break;
   

    case EDBG_ADAPTER_RTL8139:
        pfnEDbgInit           = RTL8139Init;
        pfnEDbgInitDMABuffer  = RTL8139InitDMABuffer;
        pfnEDbgEnableInts     = RTL8139EnableInts;     
        pfnEDbgDisableInts    = RTL8139DisableInts;    
        pfnEDbgGetPendingInts = RTL8139GetPendingInts; 
        pfnEDbgGetFrame       = RTL8139GetFrame;       
        pfnEDbgSendFrame      = RTL8139SendFrame;      
        pfnEDbgReadEEPROM     = RTL8139ReadEEPROM;     
        pfnEDbgWriteEEPROM    = RTL8139WriteEEPROM;             
        break;

	case EDBG_USB_RNDIS:
		EdbgOutputDebugString(" RNDIS Edbg!\r\n");
        pfnEDbgInit           = HostMiniInit;
        pfnEDbgEnableInts     = RndisEnableInts;     
        pfnEDbgDisableInts    = RndisDisableInts;    
        pfnEDbgGetPendingInts = RndisGetPendingInts; 
        pfnEDbgGetFrame       = RndisEDbgGetFrame;       
        pfnEDbgSendFrame      = RndisEDbgSendFrame;      
        pfnEDbgReadEEPROM     = NULL;
        pfnEDbgWriteEEPROM    = NULL;
        pfnEDbgSetOptions     = RndisSetOptions;
        pfnCurrentPacketFilter= RndisCurrentPacketFilter;
        pfnMulticastList      = RndisMulticastList;
        break ;

    default:
        EdbgOutputDebugString("Unsupported debug Ethernet parameters - adapter: %u, IRQ:%u\n",
                              pBootArgs->ucEdbgAdapterType, pBootArgs->ucEdbgIRQ);
        return (FALSE);
    }
  
    // Initialize NIC DMA buffer, if required.
    //
    if (pfnEDbgInitDMABuffer)
    {
        if (!pfnEDbgInitDMABuffer(ETHDMA_BUFFER_BASE, ETHDMA_BUFFER_SIZE))
        {
            EdbgOutputDebugString("ERROR: Failed to initialize Ethernet controller DMA buffer.\r\n");
            return FALSE;
        }
    }

    pAdapter->Addr=pBootArgs->EdbgAddr;// Inherit Eth address from Bootloader first.
    if (!pfnEDbgInit((BYTE *) pBootArgs->dwEdbgBaseAddr,1,pAdapter->Addr.wMAC) )
        return (FALSE);

    // Check the MAC address - this can be invalid if the switches are set wrong.
    if ( !pAdapter->Addr.wMAC[0] && !pAdapter->Addr.wMAC[1] && !pAdapter->Addr.wMAC[2] ) {
        EdbgOutputDebugString("Invalid Ethernet address read from the debug ethernet controller, check switch settings\n");
        return (FALSE);
    }

    // Save out local mac address.
    memcpy ((char *)wLocalMAC, pAdapter->Addr.wMAC, sizeof(wLocalMAC));
    
    EdbgOutputDebugString("Debug Ethernet card initialized, MAC Address:%B:%B:%B:%B:%B:%B\r\n",
                          pAdapter->Addr.wMAC[0] & 0x00FF, pAdapter->Addr.wMAC[0] >> 8,
                          pAdapter->Addr.wMAC[1] & 0x00FF, pAdapter->Addr.wMAC[1] >> 8,
                          pAdapter->Addr.wMAC[2] & 0x00FF, pAdapter->Addr.wMAC[2] >> 8  );

#if defined(IMGSHAREETH)
    VBridgeInit();
    VBridgeKSetLocalMacAddress((char *)wLocalMAC);
#endif

    // Fill in our SYSINTR value for the EDBG subsystem. Since we have limited IRQ
    // resources, just run in polled mode unless otherwise configured.
    if ( pBootArgs->ucEdbgIRQ )
        pAdapter->SysIntrVal = OEMTranslateIrq(pBootArgs->ucEdbgIRQ);
    else
        pAdapter->SysIntrVal = EDBG_SYSINTR_NOINTR;

    pAdapter->Addr.dwIP = pBootArgs->EdbgAddr.dwIP;
    pAdapter->DHCPLeaseTime = pBootArgs->DHCPLeaseTime;
    pAdapter->EdbgFlags = pBootArgs->EdbgFlags;

    // Enable filtering of broadcast packets (all except ARP packets) to reduce overhead.  We still have
    // to take an interrupt, but the driver can quickly determine whether a packet may be discarded without
    // having to copy all the data from the chip.   Note that we cannot turn this option on until DHCP is
    // done processing, since some DHCP servers return responses in broadcast frames.

#ifndef IMGSHAREETH
    if (pAdapter->Addr.dwIP)
        pfnEDbgSetOptions(OPT_BROADCAST_FILTERING);
#endif

    return (TRUE);
}

/* OEMEthEnableInts
 *
 *  Turn on HW interrupts.  Return TRUE if interrupts supported, or FALSE
 *  to run in polling mode for all clients.
 */
void
OEMEthEnableInts()
{
    pfnEDbgEnableInts();
}

/* OEMEthDisableInts
 *
 *  Disable HW interrupts.
 */
void
OEMEthDisableInts()
{
    pfnEDbgDisableInts();
}

#ifdef IMGSHAREETH

/* ProcessVMiniSend()
 *
 *      This routine drains the pending VMINI TX.
 * 
 */

void
ProcessVMiniSend(void)
{
    PBYTE   pVMiniData;
    DWORD   dwVMiniDataLength;

    ////////////////////////////////////////////////////////////////////////////
    //  Handle the filter if we need to..
    //
    if (bNewFilter && pfnCurrentPacketFilter)
    {
        bNewFilter = FALSE;     
        pfnCurrentPacketFilter(dwFilter);
    }       

    //
    //  Handle new multicast list..
    //  
    
    if (bNewMulticast && pfnMulticastList)
    {
        bNewMulticast = FALSE;
        pfnMulticastList(
            (PUCHAR)ucMultiAddr,
            dwNoOfEntry);
    }

    ////////////////////////////////////////////////////////////////////////////
    //  Consume all the client packets.
    //
    while (VBridgeKGetOneTxBuffer(&pVMiniData, &dwVMiniDataLength) == TRUE)
    {
        pfnEDbgSendFrame (pVMiniData, dwVMiniDataLength);
        VBridgeKGetOneTxBufferComplete(pVMiniData);
    } 

}   //  ProcessVMiniSend()

#endif

/* OEMEthISR
 *
 *    ISR routine, called by EDBG IST when Ethernet controller interrupts. Also
 *    called in polling mode, to check for received data.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
a美女胸又www黄视频久久| 国产在线不卡一区| 中文字幕中文字幕在线一区| 精品区一区二区| 久久女同精品一区二区| 精品国产免费人成在线观看| 日韩精品中文字幕一区二区三区| 91麻豆精品国产91久久久更新时间 | 欧美亚洲综合色| 在线观看国产精品网站| 欧美日韩久久一区| 91精品在线观看入口| 日韩欧美国产不卡| 国产日韩欧美精品综合| 国产精品毛片a∨一区二区三区| 国产丝袜在线精品| 日韩理论电影院| 亚洲大片免费看| 久久国产三级精品| 成人国产在线观看| 欧美日韩午夜在线视频| 欧美一区二区三区在线视频| 久久综合久久综合亚洲| 中文字幕一区二区三中文字幕| 18欧美亚洲精品| 免费在线一区观看| 成人黄色国产精品网站大全在线免费观看 | 91精品国产综合久久久久久久 | 日韩精品乱码av一区二区| 免费一级欧美片在线观看| 国内偷窥港台综合视频在线播放| 国产成人综合网| 欧美三级韩国三级日本一级| 欧美本精品男人aⅴ天堂| 亚洲日本成人在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅 | 欧美日本在线看| 久久久久久久久伊人| 亚洲自拍偷拍av| 国产成人av电影在线观看| 欧美在线高清视频| 久久九九全国免费| 日欧美一区二区| 91麻豆蜜桃一区二区三区| 精品国产1区二区| 亚洲综合精品久久| 成人美女视频在线观看18| 91麻豆精品国产自产在线观看一区| 国产欧美日韩麻豆91| 日本在线不卡一区| 欧美性受xxxx黑人xyx| 中文字幕巨乱亚洲| 国产一区日韩二区欧美三区| 欧美视频一区二区三区| 国产精品国产三级国产有无不卡 | 91美女视频网站| 国产三级久久久| 另类综合日韩欧美亚洲| 欧美色精品在线视频| 国产精品久久久99| 国产99精品视频| 精品1区2区在线观看| 美女尤物国产一区| 日韩一区二区三区在线| 亚洲午夜av在线| 色国产精品一区在线观看| 欧美韩国日本不卡| 丁香婷婷综合色啪| 欧美国产日产图区| 国产99久久久国产精品潘金网站| 精品久久一二三区| 精品在线一区二区| 精品裸体舞一区二区三区| 美女脱光内衣内裤视频久久影院| 欧美一区二区三区在线观看视频| 国产麻豆精品视频| 日韩三级中文字幕| 精品一区二区三区在线播放视频| 欧美疯狂性受xxxxx喷水图片| 亚洲尤物视频在线| 欧美老肥妇做.爰bbww视频| 亚洲国产日韩a在线播放性色| 色94色欧美sute亚洲线路一久| 中文字幕五月欧美| 91国产免费看| 性久久久久久久久| 欧美电影免费观看高清完整版在线| 午夜视频一区二区三区| 欧美一二三区在线观看| 国产自产v一区二区三区c| 国产亚洲综合性久久久影院| 国产剧情一区二区| 中文字幕一区三区| 欧美写真视频网站| 捆绑紧缚一区二区三区视频| 精品久久国产老人久久综合| 国产在线视频一区二区| 中文在线一区二区 | 亚洲免费看黄网站| 欧美日韩不卡一区二区| 精品亚洲porn| 自拍偷自拍亚洲精品播放| 欧美日韩国产一级| 国产一区二区精品在线观看| 亚洲日本护士毛茸茸| 欧美精品v国产精品v日韩精品| 青青青伊人色综合久久| 中文成人av在线| 国产精品久久久久精k8| 欧美日韩国产123区| 国产乱国产乱300精品| 尤物av一区二区| 精品日韩一区二区三区| 91网上在线视频| 精品一区二区三区在线观看国产| 国产精品第一页第二页第三页| 欧美日韩国产不卡| 成人精品电影在线观看| 性久久久久久久久| 国产精品久久久久久久久久久免费看| 欧美视频在线观看一区二区| 国产高清精品久久久久| 丝瓜av网站精品一区二区| 国产精品大尺度| 欧美sm极限捆绑bd| 精品视频一区二区三区免费| 国产精一区二区三区| 天天综合日日夜夜精品| 1000精品久久久久久久久| 精品电影一区二区三区 | 亚洲成av人片观看| 中文字幕在线不卡| 久久久久久久久久久久久女国产乱| 色就色 综合激情| 暴力调教一区二区三区| 激情综合色播激情啊| 视频一区欧美精品| 一区二区三区四区高清精品免费观看 | 亚洲天堂av老司机| 久久综合视频网| 欧美一卡二卡在线观看| 欧美日韩一区不卡| 在线精品亚洲一区二区不卡| av电影天堂一区二区在线| 国产一区二区三区四区五区入口 | 精品国精品国产| 91精品综合久久久久久| 欧美日韩一区二区三区在线看| 99久久精品免费观看| 国产剧情一区二区三区| 国产高清无密码一区二区三区| 乱中年女人伦av一区二区| 日韩av午夜在线观看| 日韩 欧美一区二区三区| 亚洲成人免费av| 性做久久久久久久免费看| 亚洲成在人线免费| 午夜精品久久久久影视| 午夜视频久久久久久| 丝袜亚洲另类欧美综合| 久久不见久久见免费视频1| 麻豆成人综合网| 国产麻豆精品久久一二三| 国产a级毛片一区| 成人一区二区三区视频| 成人av先锋影音| 色999日韩国产欧美一区二区| 在线精品视频免费播放| 欧美日韩1区2区| 精品国产一二三区| 喷水一区二区三区| 国产在线播放一区三区四| 国产黄色91视频| 色综合色狠狠综合色| 欧美日韩一区二区三区视频| 日韩精品在线一区二区| 国产拍欧美日韩视频二区| 亚洲免费看黄网站| 免费成人性网站| www.日韩av| 欧美精品第1页| 国产精品亲子伦对白| 亚洲国产日韩一区二区| 国产综合成人久久大片91| 91在线视频免费91| 日韩视频国产视频| 国产精品久久久久婷婷| 日韩电影网1区2区| 成人小视频免费观看| 欧美日韩一区二区三区四区五区| 日韩精品一区二区三区四区视频| 日本一区二区三区高清不卡| 亚洲韩国一区二区三区| 国产精品原创巨作av| 欧美少妇一区二区| 国产精品每日更新在线播放网址| 亚洲一级二级三级在线免费观看| 精品一区二区三区久久| 欧美日韩一级二级| 中文字幕欧美激情|