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

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

?? kitl.c

?? CIRRUS 93XX系列windows mobile 6.0 BSP
?? C
字號:
//**********************************************************************
//                                                                      
// Filename: kitl.c
//                                                                      
// Description: 
//
// 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.
//
// Use of this source code is subject to the terms of the Cirrus 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 
// EULA.RTF on your install media.
//
// Copyright(c) Cirrus Logic Corporation 2005, All Rights Reserved                       
//                                                                      
#include <windows.h>
#include <nkintr.h>
#include <kitl.h>
#include <halether.h>
#include <kitlprot.h>
//#include <platform.h>
#include <memorymap.h>
#include <mdppfs.h>
#include <drv_glob.h>
#include "ethdbg.h"
#include <devload.h>
#include <oal_kitl.h>
#include <cs8950sw.h>
#include <hwdefs.h>
#include <ceddk.h>
#include <oal_args.h>
#include <oal_ethdrv.h>
#include <oalintr.h>


#define pDriverGlobals  ((PDRIVER_GLOBALS) DRIVER_GLOBALS_VIRTUAL_MEMORY)

static CHAR  gDeviceId[OAL_KITL_ID_SIZE]="";

//Use the first word of CS8950_VIRTUAL_MEMORY to store if KITL is enabled.
static ULONG *pulCS8950KitlUsed = (ULONG *)CS8950_VIRTUAL_MEMORY;


OAL_KITL_ETH_DRIVER g_kitlEthCS8900A = { 
    (OAL_KITLETH_INIT) CS8950Init, //Type cast to avoid compile warning.
    NULL, 
	NULL, 
	(OAL_KITLETH_SEND_FRAME) CS8950SendFrame, //Type cast to avoid compile warning.
	CS8950GetFrame, 
    CS8950EnableInts, 
	CS8950DisableInts, 
    NULL, 
	NULL,  
	(OAL_KITLETH_CURRENT_PACKET_FILTER) CS8950EthCurrentPacketFilter, 
	(OAL_KITLETH_MULTICAST_LIST) CS8950EthMulticastList 
};

OAL_KITL_ETH_DRIVER g_kitlEthNE2000  = OAL_ETHDRV_NE2000;

OAL_KITL_DEVICE g_kitlDeviceEp93xx[] = {
    { 
        NULL, InterfaceTypeUndefined, 
		ETHERNET_BASE,
//			PHYSICAL_SYSTEM_ASIC_REG_BASE + 0x00010000,
		0, OAL_KITL_TYPE_ETH, 
        NULL
    }, 
	{
        NULL, 0, 0, 0, 0, NULL
    }
};



#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;
UCHAR    ucMultiAddr[32][6];      //  The new list..  
                                //  VMINI assumes 32 multicast list entry..
                                //                          
#endif

/* OEMKitlStartup
 *
 *  Initialization routine - called from KitlInit() to perform platform specific
 *  HW init.
 *
 *  Return Value:
 *    Return TRUE if init is successful, FALSE if error.
 */
BOOL OEMKitlStartup (void)
{
    BOOL rc = FALSE;
    OAL_KITL_ARGS  KITLArgs;

    BOOL        bTemp;

    NKDbgPrintfW(L"+OEMKitlStartup MAC \r\n");

	memcpy(gDeviceId,
           (DRIVER_GLOBALS_POINTER)->eth.strEdbgName, 
            EDBG_MAX_DEV_NAMELEN);

    memset(&KITLArgs, 0, sizeof(OAL_KITL_ARGS));

    // By default, enable: KITL, DHCP, and VMINI...
    KITLArgs.flags = (OAL_KITL_FLAGS_ENABLED | OAL_KITL_FLAGS_DHCP | OAL_KITL_FLAGS_VMINI);
    
    KITLArgs.devLoc.IfcType     = InterfaceTypeUndefined;
    KITLArgs.devLoc.BusNumber   = 0;

    switch(pDriverGlobals->eth.EdbgHardwareType)
    {
#ifdef EP93XX_PCCARD
    case EDBG_ADAPTER_NE2000:

		g_kitlDeviceEp93xx->pDriver=&g_kitlEthNE2000;
		g_kitlDeviceEp93xx->name=L"NE2000";
		KITLArgs.devLoc.PhysicalLoc = (PVOID)(PCMCIACARD_IO_PHYSICAL + 0x320);
		KITLArgs.devLoc.LogicalLoc  = (PVOID)KITLArgs.devLoc.PhysicalLoc;

/*
        pulEthernetBase       = (ULONG *)(PCMCIACARD_IO + 0x320);
*/
        EdbgOutputDebugString("INFO: EDBG using NE2000 controller.\r\n");
        break;
#endif
    //
    case EDBG_ADAPTER_CS8950:

		g_kitlDeviceEp93xx->pDriver=&g_kitlEthCS8900A;
		g_kitlDeviceEp93xx->name=L"CS8950";

		KITLArgs.devLoc.PhysicalLoc =  (PVOID)	ETHERNET_BASE;
			//(PVOID)(PHYSICAL_SYSTEM_ASIC_REG_BASE + 0x00010000);
		KITLArgs.devLoc.LogicalLoc  = (DWORD)KITLArgs.devLoc.PhysicalLoc;

		KITLArgs.devLoc.Pin=SYSINTR_ETHER;


        //
        // CS8950 DMA's to SDRAM.  Need to give the library a physical and virtual
        // address to uncached memory.
        //
		// Reserved the first 16 bytes for pulCS8950KitlUsed.
        bTemp = CS8950DMAInit
        (
            CS8950_PHYSICAL_MEMORY+16, 
            CS8950_VIRTUAL_MEMORY+16, 
            CS8950_MEMORY_SIZE-16
        );

		//CS8950 now is used for KITL so Ethernet NDIS can check 
		// the address CS8950_VIRTUAL_MEMORY to abort NDIS.
		//Write the pattern 0x5a5a5a5a to indicate CS8950 KITL is active.
		*pulCS8950KitlUsed = 0x5a5a5a5a;

        if(!bTemp)
        {
            EdbgOutputDebugString("ERROR: Failed to Initialize CS8950 DMA buffer.\r\n");
            return FALSE;
        }

        
        //
        // We need to do this since the board does not have a MAC address.
        // Lets use the same mac address as eboot.
        //
        CS8950WriteEEPROM(0, pDriverGlobals->eth.EdbgAddr.wMAC[0]);
        CS8950WriteEEPROM(1, pDriverGlobals->eth.EdbgAddr.wMAC[1]);
        CS8950WriteEEPROM(2, pDriverGlobals->eth.EdbgAddr.wMAC[2]);
        EdbgOutputDebugString("INFO: EDBG using Internal EP931x controller.\r\n");
        break;
    default:

        EdbgOutputDebugString
        (
            "Unsupported debug Ethernet parameters - adapter: %u\n",
             pDriverGlobals->eth.EdbgHardwareType
        );
        return (FALSE);
     }

    if (gDeviceId[0] == '\0')
    {
        // We don't yet have the Ethernet controller's MAC address (this is obtained
        // in the initialization function.  Store a base name for the device, and
        // signal that it should be extended with the MAC address later.
        //
        strncpy(gDeviceId, "EP93xx", sizeof("EP93xx") -1 );
        KITLArgs.flags |= OAL_KITL_FLAGS_EXTNAME;
    }

    rc = OALKitlInit(gDeviceId, &KITLArgs, g_kitlDeviceEp93xx);

    EdbgOutputDebugString("-OEMKitlStartup(rc = %d)\r\n", rc);
    return(rc);
}





DWORD OALGetTickCount(void)
{
	extern DWORD OEMGetTickCount(void);
return OEMGetTickCount( );
}






UINT16 READ_PORT_USHORT(UINT16 *pAddr)
{
    return(*(volatile unsigned short *)pAddr);
}


void WRITE_PORT_USHORT(UINT16 *pAddr, UINT16 Data)
{
	*(volatile UINT16 *)pAddr = Data;
}


UINT16 READ_PORT_USHORT16(UINT16 *pAddr)
{
    return(*(volatile unsigned short *)pAddr);
}

void WRITE_PORT_USHORT16(UINT16 *pAddr, UINT16 Data)
{
    *(volatile UINT16 *)pAddr = Data;
}


UCHAR
READ_PORT_UCHAR(
    PUCHAR  Port
    )
{
    return *(volatile UCHAR * const)Port;
}

VOID
WRITE_PORT_UCHAR(
    PUCHAR  Port,
    UCHAR   Value
    )
{
    *(volatile UCHAR * const)Port = Value;
}

VOID
WRITE_REGISTER_USHORT(
    PUSHORT Register,
    USHORT  Value
    )
{
    *(volatile USHORT * const)Register = Value;
}


VOID
WRITE_REGISTER_ULONG(
    PULONG  Register,
    ULONG   Value
    )
{
    *(volatile ULONG * const)Register = Value;
}

USHORT
READ_REGISTER_USHORT(
    PUSHORT Register
    )
{
    return (*(volatile USHORT * const)Register);
}


ULONG
READ_REGISTER_ULONG(
    PULONG  Register
    )
{
    return (*(volatile ULONG * const)Register);
}




// 
DWORD GetSystemTimeInMsec(void) 
{          
    DWORD dwValue;

    dwValue = *TIM_DEBUGVALUELOW;
    dwValue >>= 10;                 


    // div by 1024 to get msec from usec (should really use
    // 1000 instead of 1024, but it is close enough
    dwValue|= (*TIM_DEBUGVALUEHIGH & DEBUGVALUEHIGH_MASK)<<22;
    return dwValue;
}

//****************************************************************************
// GetSystemTimeInUSec
//****************************************************************************
// 
ULONGLONG GetSystemTimeInUSec(void) 
{          
    volatile LARGE_INTEGER liValue;
    
    //
    // Must read the low value first.
    //
    liValue.LowPart = (ULONG)*TIM_DEBUGVALUELOW;
    liValue.HighPart = (ULONG)(*TIM_DEBUGVALUEHIGH & DEBUGVALUEHIGH_MASK);

    return liValue.QuadPart;
}





//****************************************************************************
// DelayInMsec
//****************************************************************************
// Delay a certain number of milliseconds.
// 
//
//
void DelayInMsec(DWORD msec)
{
    DWORD passed, startTime;

    startTime=GetSystemTimeInMsec();
    passed=0;
    
    //
    // Get stuck in this loop until 
    //
    while ( passed < msec) 
    {
       passed = GetSystemTimeInMsec()-startTime;
    }
}

//****************************************************************************
// DelayInuSec
//****************************************************************************
// Delay a certain number of microseconds.
// 
//
//
void DelayInuSec(DWORD uS)
{
    DWORD passed, startTime;

    startTime= *TIM_DEBUGVALUELOW;
    passed=0;
    
    //
    // Get stuck in this loop until 
    //
    while ( passed < uS) 
    {
       passed = (*TIM_DEBUGVALUELOW - startTime);
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产v日产∨综合v精品视频| 国产日韩欧美a| 久久免费视频色| 一区二区三区在线观看网站| 免费看欧美美女黄的网站| av一区二区三区四区| 日韩欧美亚洲一区二区| 亚洲乱码国产乱码精品精小说| 国产一区二区主播在线| 欧美日韩精品二区第二页| 亚洲欧美在线观看| 国产黄色91视频| 精品国产3级a| 男男视频亚洲欧美| 欧美福利视频一区| 夜夜嗨av一区二区三区中文字幕| 丁香六月久久综合狠狠色| 欧美大黄免费观看| 全部av―极品视觉盛宴亚洲| 在线免费一区三区| 亚洲免费资源在线播放| 岛国av在线一区| 国产亚洲欧美中文| 狠狠狠色丁香婷婷综合久久五月| 91精品国产综合久久久久久漫画 | 精品动漫一区二区三区在线观看| 亚洲图片欧美一区| 欧美三级午夜理伦三级中视频| 亚洲视频每日更新| www.亚洲色图| 国产精品国模大尺度视频| 成人午夜大片免费观看| 国产喷白浆一区二区三区| 国产99精品国产| 国产日韩欧美激情| 国产成人精品免费| 国产精品三级av在线播放| 国产成人h网站| 国产精品视频线看| 99久久精品国产一区二区三区 | 亚洲一区二区三区四区五区黄 | 亚洲综合小说图片| 欧美婷婷六月丁香综合色| 香蕉av福利精品导航| 欧美乱妇20p| 国产真实乱偷精品视频免| 久久久精品国产免大香伊| 大白屁股一区二区视频| 亚洲精品免费在线观看| 欧美日韩成人激情| 久久99精品国产.久久久久久| av亚洲精华国产精华精华| 亚洲成在线观看| 欧美一级二级在线观看| 精品一区二区影视| 国产精品区一区二区三| 色综合视频一区二区三区高清| 一区二区三区不卡视频| 欧美成人bangbros| caoporn国产精品| 天天做天天摸天天爽国产一区| 日韩欧美国产综合在线一区二区三区| 国产美女精品在线| 一区二区三区在线播| 欧美mv日韩mv国产| 不卡的电视剧免费网站有什么| 一个色综合av| 久久久精品免费网站| 欧洲亚洲国产日韩| 极品少妇xxxx精品少妇| 亚洲免费观看高清在线观看| 3d动漫精品啪啪一区二区竹菊 | 亚洲图片欧美色图| 久久久久久久综合色一本| 色999日韩国产欧美一区二区| 捆绑调教美女网站视频一区| 国产精品欧美综合在线| 欧美一区二区福利视频| 国产69精品一区二区亚洲孕妇 | 国产黑丝在线一区二区三区| 亚洲一区二区三区自拍| 国产欧美日韩视频一区二区| 欧美色中文字幕| 成人午夜av在线| 久久国产精品72免费观看| 亚洲精品免费看| 久久久精品免费网站| 制服丝袜亚洲精品中文字幕| av成人免费在线观看| 国产一区二区三区久久久| 亚洲成人精品一区| 亚洲欧美综合网| 久久久久高清精品| 欧美电视剧免费观看| 欧美精品一卡两卡| 91国偷自产一区二区开放时间| 国产成人午夜精品5599| 麻豆精品在线看| 午夜久久久久久| 亚洲成人动漫精品| 亚洲精品日产精品乱码不卡| 中文天堂在线一区| 久久亚洲综合色| 2017欧美狠狠色| 欧美成人精品3d动漫h| 91精品国产综合久久精品麻豆| 91蝌蚪国产九色| 菠萝蜜视频在线观看一区| 国产成人综合网| 精品一区二区精品| 久久99精品久久只有精品| 麻豆高清免费国产一区| 奇米影视在线99精品| 日产精品久久久久久久性色| 中文字幕一区二区三区不卡| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲一区二区偷拍精品| 亚洲色图在线视频| 亚洲欧美另类在线| 国产精品久久久久久久久免费丝袜| 国产亚洲婷婷免费| 欧美激情一区二区在线| 国产精品免费网站在线观看| 国产精品丝袜91| 成人免费一区二区三区视频| 国产精品久久久久9999吃药| 国产精品亲子伦对白| 亚洲精品视频免费观看| 亚洲精品中文在线| 亚洲国产精品欧美一二99| 日韩中文字幕区一区有砖一区 | 国产亚洲一区二区三区四区| 国产女同性恋一区二区| 国产精品久久免费看| 亚洲激情自拍偷拍| 亚洲成人一区二区在线观看| 日本欧美在线观看| 国产成人自拍在线| 99vv1com这只有精品| 欧美性猛片aaaaaaa做受| 日韩女同互慰一区二区| 国产欧美一区二区三区网站| 亚洲欧美另类久久久精品2019| 午夜精品一区二区三区免费视频| 美女被吸乳得到大胸91| 成人国产一区二区三区精品| 欧美色视频在线| 日韩视频免费观看高清完整版| 久久九九影视网| 亚洲自拍偷拍九九九| 国内外成人在线| 色婷婷久久一区二区三区麻豆| 91精品久久久久久蜜臀| 国产精品欧美一区二区三区| 五月婷婷久久综合| 国产成人免费视| 宅男在线国产精品| 国产精品国产自产拍在线| 婷婷成人综合网| 99久久99久久精品免费观看| 91精品国产麻豆| 亚洲免费av网站| 国产成人日日夜夜| 欧美日韩不卡在线| 中文字幕在线观看不卡| 视频精品一区二区| 99国内精品久久| 久久亚洲一级片| 日韩精品午夜视频| 欧美人xxxx| 国产精品无圣光一区二区| 免费观看久久久4p| 日本韩国精品在线| 国产日韩欧美一区二区三区综合| 日本午夜精品一区二区三区电影| 色狠狠一区二区| 最近中文字幕一区二区三区| 久久se这里有精品| 欧美一区二区三区视频免费播放| 一区二区三区资源| 国产91精品在线观看| 日韩精品一区二区三区在线| 亚洲成人三级小说| 欧美性色欧美a在线播放| 亚洲日本va在线观看| 国产成人高清在线| 久久久久久久久免费| 麻豆视频观看网址久久| 91 com成人网| 香蕉av福利精品导航| 卡一卡二国产精品| 亚洲一区二区三区四区五区中文 | 中文字幕欧美激情| 国内成人免费视频| 欧美一区二区三区四区在线观看| 亚洲人成精品久久久久| 成人av网站在线| 中文字幕在线观看一区二区| 成人91在线观看| 国产精品无圣光一区二区|