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

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

?? celan.c

?? Wince4.2 BSP for SH4 engineering development board
?? C
?? 第 1 頁 / 共 4 頁
字號:

//
//      Copyright (c) Renesas Technology Corp. 1999-2003 All Rights Reserved.
//
//      LAN91C111 network hardware driver
//
//----------------------------------------------------------------------------
//
//  FILE      : CELAN.C
//  CREATED   : 1998.07.22 ("ne2000.c", for NE2000 driver)
//  MODIFIED  : 2003.08.06
//  AUTHOR    : Renesas Technology Corp.
//  HARDWARE  : RENESAS HS7751RSTC01H (S1-E, ITS-DS5)
//  TARGET OS : Microsoft(R) Windows(R) CE .NET 4.2
//  FUNCTION  : LAN driver main part
//  HISTORY   : 
//              1999.04.26
//              - Released as PFM-DS6x SMC91C94 LAN driver by modifying NE2000
//               driver in PB2.12 reference drivers.
//              (Detailed history for PFM-DS6x are omitted.)
//              2002.05.29
//              - Modified for HS7751RSTC01H. Target device is changed to
//               LAN91C111.
//              2002.09.05
//              - Header style is changed and file informations are added.

/*++
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.
Copyright (c) 1995-1998 Microsoft Corporation.  All rights reserved.
--*/

#include "precomp.h"
#include "smc91c94.h"
#include <winreg.h>
#include <devload.h>
//#include <nkintr.h>
#include <oalintr.h>

//
// On debug builds tell the compiler to keep the symbols for
// internal functions, otw throw them out.
//
#if DBG
#define STATIC
#else
#define STATIC static
#endif

//
// Debugging definitions
//
#if DBG

//
// Default debug mode
//
ULONG CelanDebugFlag = 
                       CELAN_DEBUG_LOUD
                       | CELAN_DEBUG_VERY_LOUD
                       // | CELAN_DEBUG_LOG
                       // | CELAN_DEBUG_CHECK_DUP_SENDS
                       // | CELAN_DEBUG_TRACK_PACKET_LENS
                       // | CELAN_DEBUG_WORKAROUND1
                       // | CELAN_DEBUG_CARD_BAD
                       // | CELAN_DEBUG_CARD_TESTS 
                       ;

//
// Debug tracing defintions
//
#define CELAN_LOG_SIZE 256
UCHAR CelanLogBuffer[CELAN_LOG_SIZE]={0};
UINT CelanLogLoc = 0;


extern
VOID
CelanLog(UCHAR c) {

    CelanLogBuffer[CelanLogLoc++] = c;

	CelanLogBuffer[(CelanLogLoc + 4) % CELAN_LOG_SIZE] = '\0';

	if (CelanLogLoc >= CELAN_LOG_SIZE)
		CelanLogLoc = 0;
}

#endif



//
// This constant is used for places where NdisAllocateMemory
// needs to be called and the HighestAcceptableAddress does
// not matter.
//
NDIS_PHYSICAL_ADDRESS HighestAcceptableMax =
    NDIS_PHYSICAL_ADDRESS_CONST(-1,-1);

//
// The global Miniport driver block.
//

DRIVER_BLOCK CelanMiniportBlock={0};

//
// List of supported OID for this driver.
//
STATIC UINT CelanSupportedOids[] = {
    OID_GEN_SUPPORTED_LIST,
    OID_GEN_HARDWARE_STATUS,
    OID_GEN_MEDIA_SUPPORTED,
    OID_GEN_MEDIA_IN_USE,
    OID_GEN_MAXIMUM_LOOKAHEAD,
    OID_GEN_MAXIMUM_FRAME_SIZE,
    OID_GEN_MAXIMUM_TOTAL_SIZE,
    OID_GEN_MAC_OPTIONS,
    OID_GEN_PROTOCOL_OPTIONS,
    OID_GEN_LINK_SPEED,
    OID_GEN_TRANSMIT_BUFFER_SPACE,
    OID_GEN_RECEIVE_BUFFER_SPACE,
    OID_GEN_TRANSMIT_BLOCK_SIZE,
    OID_GEN_RECEIVE_BLOCK_SIZE,
    OID_GEN_VENDOR_DESCRIPTION,
    OID_GEN_VENDOR_ID,
    OID_GEN_DRIVER_VERSION,
    OID_GEN_CURRENT_PACKET_FILTER,
    OID_GEN_CURRENT_LOOKAHEAD,
    OID_GEN_XMIT_OK,
    OID_GEN_RCV_OK,
    OID_GEN_XMIT_ERROR,
    OID_GEN_RCV_ERROR,
    OID_GEN_RCV_NO_BUFFER,
    OID_802_3_PERMANENT_ADDRESS,
    OID_802_3_CURRENT_ADDRESS,
    OID_802_3_MULTICAST_LIST,
    OID_802_3_MAXIMUM_LIST_SIZE,
    OID_802_3_RCV_ERROR_ALIGNMENT,
    OID_802_3_XMIT_ONE_COLLISION,
    OID_802_3_XMIT_MORE_COLLISIONS
    };

//
// Determines whether failing the initial card test will prevent
// the adapter from being registered.
//
#ifdef CARD_TEST

BOOLEAN InitialCardTest = TRUE;

#else  // CARD_TEST

BOOLEAN InitialCardTest = FALSE;

#endif // CARD_TEST

PVOID RegisterBase;
WORD  MAC0,MAC1,MAC2;
DWORD EtherIST(PVOID pArg);

NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    );

#pragma NDIS_INIT_FUNCTION(DriverEntry)


NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )

/*++

Routine Description:

    This is the primary initialization routine for the CELAN driver.
    It is simply responsible for the intializing the wrapper and registering
    the Miniport driver.  It then calls a system and architecture specific
    routine that will initialize and register each adapter.

Arguments:

    DriverObject - Pointer to driver object created by the system.

    RegistryPath - Path to the parameters for this driver in the registry.

Return Value:

    The status of the operation.

--*/

{


    //
    // Receives the status of the NdisMRegisterMiniport operation.
    //
    NDIS_STATUS Status;

    //
    // Characteristics table for this driver.
    //
    NDIS_MINIPORT_CHARACTERISTICS CELANChar;

    //
    // Pointer to the global information for this driver
    //
    PDRIVER_BLOCK NewDriver = &CelanMiniportBlock;

    //
    // Handle for referring to the wrapper about this driver.
    //
    NDIS_HANDLE NdisWrapperHandle;

	// Handle for the registry key
	HKEY	hKey;

	ULONG	datasize, kvaluetype;
	DWORD	MacValue;

#if NDIS_WIN
    // Not compiled
    UCHAR pIds[sizeof (EISA_MCA_ADAPTER_IDS) + 3 * sizeof (USHORT)];
    ((PEISA_MCA_ADAPTER_IDS)pIds)->nEisaAdapters=0;
    ((PEISA_MCA_ADAPTER_IDS)pIds)->nMcaAdapters=3;
    *((PUSHORT)(((PEISA_MCA_ADAPTER_IDS)pIds)->IdArray) + 0)=AE2_ADAPTER_ID;
    *((PUSHORT)(((PEISA_MCA_ADAPTER_IDS)pIds)->IdArray) + 1)=UB_ADAPTER_ID;
    *((PUSHORT)(((PEISA_MCA_ADAPTER_IDS)pIds)->IdArray) + 2)=NE2_ADAPTER_ID;
    (PVOID) DriverObject = (PVOID) pIds;

#endif

    DEBUGMSG(ZONE_INIT|ZONE_FUNCTION,
        (TEXT("+CELAN:DriverEntry for %s\r\n"),RegistryPath->Buffer));
	

    //
    // Initialize the wrapper.
    //
    NdisMInitializeWrapper(
                &NdisWrapperHandle,
                DriverObject,
                RegistryPath,
                NULL
                );

	DEBUGMSG(ZONE_INIT,(TEXT("Try to open %s\r\n"),(LPCTSTR)RegistryPath->Buffer));
	if ( RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)RegistryPath->Buffer, 0,
					KEY_ALL_ACCESS, &hKey) )
	{
		DEBUGMSG (ZONE_INIT | ZONE_ERROR,
					(TEXT("Faild to open HKEY_LOCAL_MACHINE key.\r\n")));
    	return STATUS_UNSUCCESSFUL;
	}

	//
	// Get 91C94 register base address
	//
	datasize = sizeof(DWORD);
	if ( RegQueryValueEx(hKey, TEXT("RegBase"), NULL, &kvaluetype,
			(LPBYTE)&RegisterBase,&datasize) )
	{
		DEBUGMSG (ZONE_INIT | ZONE_ERROR,
					(TEXT("Faild to get RegBase value.\r\n")));
    	return STATUS_UNSUCCESSFUL;
	}

	//
	// Get MAC address
	//
	datasize = sizeof(DWORD);
	if ( RegQueryValueEx(hKey, TEXT("MAC0"), NULL, &kvaluetype,
			(LPBYTE)&MacValue,&datasize) )
	{
		DEBUGMSG (ZONE_INIT | ZONE_ERROR,
					(TEXT("Faild to get MAC0 value.\r\n")));
    	//return STATUS_UNSUCCESSFUL;
		MAC0 = 0;	// for ROM
 	}
	else
	MAC0 = (WORD)MacValue;

	datasize = sizeof(DWORD);
	if ( RegQueryValueEx(hKey, TEXT("MAC1"), NULL, &kvaluetype,
			(LPBYTE)&MacValue,&datasize) )
	{
		DEBUGMSG (ZONE_INIT | ZONE_ERROR,
					(TEXT("Faild to get MAC1 value.\r\n")));
    	//return STATUS_UNSUCCESSFUL;
		MAC1 = 0;	// for ROM
 	}
	else
	MAC1 = (WORD)MacValue;

	datasize = sizeof(DWORD);
	if ( RegQueryValueEx(hKey, TEXT("MAC2"), NULL, &kvaluetype,
			(LPBYTE)&MacValue,&datasize) )
	{
		DEBUGMSG (ZONE_INIT | ZONE_ERROR,
					(TEXT("Faild to get MAC2 value.\r\n")));
    	//return STATUS_UNSUCCESSFUL;
		MAC2 = 0;	// for ROM
 	}
	else
	MAC2 = (WORD)MacValue;

	RegCloseKey (hKey);
	DEBUGMSG (ZONE_INIT,(TEXT("SMSC91C94 register base address : %x\r\n"),RegisterBase));

    //
    // Save the global information about this driver.
    //
    NewDriver->NdisWrapperHandle = NdisWrapperHandle;
    NewDriver->AdapterQueue = (PCELAN_ADAPTER)NULL;

    //
    // Initialize the Miniport characteristics for the call to
    // NdisMRegisterMiniport.
    //
    memset(&CELANChar,0,sizeof(CELANChar));
    CELANChar.MajorNdisVersion = CELAN_NDIS_MAJOR_VERSION;
    CELANChar.MinorNdisVersion = CELAN_NDIS_MINOR_VERSION;
    CELANChar.CheckForHangHandler = NULL;
    CELANChar.DisableInterruptHandler = CelanDisableInterrupt;
    CELANChar.EnableInterruptHandler = CelanEnableInterrupt;
    CELANChar.HaltHandler = CelanHalt;
    CELANChar.HandleInterruptHandler = CelanHandleInterrupt;
    CELANChar.InitializeHandler = CelanInitialize;
    CELANChar.ISRHandler = CelanIsr;
    CELANChar.QueryInformationHandler = CelanQueryInformation;
    CELANChar.ReconfigureHandler = NULL;
    CELANChar.ResetHandler = CelanReset;
    CELANChar.SendHandler = CelanSend;
    CELANChar.SetInformationHandler = CelanSetInformation;
    CELANChar.TransferDataHandler = NULL;

    Status = NdisMRegisterMiniport(
                 NdisWrapperHandle,
                 &CELANChar,
                 sizeof(CELANChar)
                 );

    if (Status == NDIS_STATUS_SUCCESS) {
		DEBUGMSG(ZONE_INIT|ZONE_FUNCTION,
				 (TEXT("-CELAN:DriverEntry: Success\r\n")));
        return STATUS_SUCCESS;

    }

	// Terminate the wrapper.
	NdisTerminateWrapper (CelanMiniportBlock.NdisWrapperHandle, NULL);
	CelanMiniportBlock.NdisWrapperHandle = NULL;

    DEBUGMSG(ZONE_INIT|ZONE_FUNCTION,
        (TEXT("-CELAN:DriverEntry: Unsuccessful\r\n")));
    return STATUS_UNSUCCESSFUL;

}


#pragma NDIS_PAGEABLE_FUNCTION(CelanInitialize)
extern
NDIS_STATUS
CelanInitialize(
    OUT PNDIS_STATUS OpenErrorStatus,
    OUT PUINT SelectedMediumIndex,
    IN PNDIS_MEDIUM MediumArray,
    IN UINT MediumArraySize,
    IN NDIS_HANDLE MiniportAdapterHandle,
    IN NDIS_HANDLE ConfigurationHandle
    )

/*++

Routine Description:

    CelanInitialize starts an adapter and registers resources with the
    wrapper.

Arguments:

    OpenErrorStatus - Extra status bytes for opening token ring adapters.

    SelectedMediumIndex - Index of the media type chosen by the driver.

    MediumArray - Array of media types for the driver to chose from.

    MediumArraySize - Number of entries in the array.

    MiniportAdapterHandle - Handle for passing to the wrapper when
       referring to this adapter.

    ConfigurationHandle - A handle to pass to NdisOpenConfiguration.

Return Value:

    NDIS_STATUS_SUCCESS
    NDIS_STATUS_PENDING

--*/

{
    //
    // Pointer to our newly allocated adapter.
    //
    PCELAN_ADAPTER Adapter;

    //
    // The handle for reading from the registry.
    //
    NDIS_HANDLE ConfigHandle;

    //
    // The value read from the registry.
    //
    PNDIS_CONFIGURATION_PARAMETER ReturnedValue;

    //
    // String names of all the parameters that will be read.
    //
    NDIS_STRING IOAddressStr = IOADDRESS;
    NDIS_STRING InterruptStr = INTERRUPT;
    NDIS_STRING MaxMulticastListStr = MAX_MULTICAST_LIST;
    NDIS_STRING NetworkAddressStr = NETWORK_ADDRESS;
    NDIS_STRING BusTypeStr = NDIS_STRING_CONST("BusType");
    NDIS_STRING CardTypeStr = NDIS_STRING_CONST("CardType");

    //
    // TRUE if there is a configuration error.
    //
    BOOLEAN ConfigError = FALSE;

    //
    // A special value to log concerning the error.
    //
    ULONG ConfigErrorValue = 0;

    //
    // The slot number the adapter is located in, used for
    // Microchannel adapters.
    //
    UINT SlotNumber = 0;

    //
    // TRUE if it is unnecessary to read the Io Base Address
    // and Interrupt from the registry.  Used for Microchannel
    // adapters, which get this information from the slot
    // information.
    //
    BOOLEAN SkipIobaseAndInterrupt = FALSE;

    //
    // The network address the adapter should use instead of the
    // the default burned in address.
    //
    PVOID NetAddress;

    //
    // The number of bytes in the address.  It should be
    // CELAN_LENGTH_OF_ADDRESS
    //
    ULONG Length;

    //
    // These are used when calling CelanRegisterAdapter.
    //

    //
    // The physical address of the base I/O port.
    //
    PVOID IoBaseAddr;

    //
    // The interrupt number to use.
    //
    CCHAR InterruptNumber;

    //
    // The number of multicast address to be supported.
    //
    UINT MaxMulticastList;

    //
    // Temporary looping variable.
    //
    ULONG i;

    //
    // Status of Ndis calls.
    //
    NDIS_STATUS Status;


    DEBUGMSG(ZONE_FUNCTION, (TEXT("+CELAN:Initialize\r\n")));

    //
    // Search for the medium type (802.3) in the given array.
    //
    for (i = 0; i < MediumArraySize; i++){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品欧美久久久| 国产精品家庭影院| 日韩精品亚洲一区二区三区免费| 91玉足脚交白嫩脚丫在线播放| 国产欧美一区二区精品秋霞影院| 国产a视频精品免费观看| 欧美激情一区二区三区不卡 | 久久久久久久久99精品| 国产成人亚洲综合a∨婷婷图片| 国产欧美精品一区二区三区四区 | 久久一区二区视频| 高清视频一区二区| 一区二区三区欧美在线观看| 欧美天堂一区二区三区| 麻豆免费看一区二区三区| 精品国产一区二区亚洲人成毛片 | 精品中文字幕一区二区 | 中文字幕一区二区5566日韩| 色诱视频网站一区| 日韩高清在线电影| 国产亚洲一区字幕| 欧美性受xxxx黑人xyx性爽| 三级久久三级久久| 中文字幕欧美日韩一区| 欧美中文字幕不卡| 激情深爱一区二区| 亚洲黄一区二区三区| 欧美一级高清大全免费观看| 国产 欧美在线| 天涯成人国产亚洲精品一区av| 日韩精品中文字幕在线不卡尤物 | 免费的成人av| 中文字幕中文在线不卡住| 欧美蜜桃一区二区三区| 成人一区二区在线观看| 日韩中文字幕av电影| 国产精品色噜噜| 在线播放91灌醉迷j高跟美女| 国产一区中文字幕| 亚洲国产精品久久人人爱蜜臀| 久久伊人中文字幕| 欧美老肥妇做.爰bbww| 福利电影一区二区| 青草国产精品久久久久久| 综合久久久久久久| 久久亚洲一区二区三区明星换脸| 91久久一区二区| 国产成人综合网| 日本欧美加勒比视频| 亚洲欧美日韩在线| 中文字幕国产一区| 精品处破学生在线二十三| 欧美撒尿777hd撒尿| 成人app软件下载大全免费| 精品一区二区三区av| 亚洲成年人影院| 亚洲品质自拍视频| 国产精品三级电影| 久久久九九九九| 日韩美女视频在线| 91精品国产91综合久久蜜臀| 欧美曰成人黄网| 一本到不卡免费一区二区| 国产成人精品三级| 韩国欧美一区二区| 青青草成人在线观看| 水蜜桃久久夜色精品一区的特点| 亚洲三级视频在线观看| 国产精品久久久久久久浪潮网站| 久久婷婷国产综合国色天香| 欧美成人猛片aaaaaaa| 7777精品伊人久久久大香线蕉超级流畅| 欧美最新大片在线看| 一本到不卡精品视频在线观看| av中文一区二区三区| 成人高清视频在线| 99国产精品久久久久久久久久 | 88在线观看91蜜桃国自产| 欧美亚洲图片小说| 欧美日韩在线不卡| 欧美在线色视频| 欧美少妇一区二区| 欧美乱熟臀69xxxxxx| 欧美精品欧美精品系列| 4438x亚洲最大成人网| 欧美一区二区三区成人| 91麻豆精品国产91久久久久久久久 | 亚洲成人777| 亚洲午夜久久久久| 亚洲国产另类av| 同产精品九九九| 久久不见久久见免费视频7| 国内外精品视频| 成人影视亚洲图片在线| 91免费观看视频| 欧美三区免费完整视频在线观看| 欧美日韩一区成人| 日韩欧美国产不卡| 国产视频一区二区在线| 国产精品传媒视频| 亚洲福利一区二区三区| 免费不卡在线观看| 国产一区不卡精品| 一本到高清视频免费精品| 欧美日韩成人综合在线一区二区| 欧美岛国在线观看| 国产蜜臀97一区二区三区| 洋洋av久久久久久久一区| 青青草97国产精品免费观看 | 欧美精品日日鲁夜夜添| 久久久噜噜噜久噜久久综合| 国产精品视频免费| 五月激情综合网| 国产成人aaa| 欧美色男人天堂| 久久精品视频在线看| 亚洲免费观看高清完整版在线观看| 日本va欧美va欧美va精品| 成人视屏免费看| 欧美精品久久99久久在免费线| 久久免费视频一区| 亚洲国产欧美日韩另类综合| 国产精品自拍三区| 欧美日韩在线播放三区四区| 国产亚洲欧美一级| 视频一区二区中文字幕| 成人动漫精品一区二区| 日韩欧美在线影院| 一级做a爱片久久| 国产美女娇喘av呻吟久久| 欧美男同性恋视频网站| 中文字幕日韩精品一区| 精品综合免费视频观看| 欧美视频中文字幕| 国产精品欧美极品| 久久精品国产77777蜜臀| 欧美亚洲国产一区在线观看网站 | 精品久久久久99| 一区二区免费看| 97成人超碰视| 国产视频一区二区在线观看| 婷婷国产在线综合| 欧美最新大片在线看| 国产精品国产自产拍高清av| 九九九精品视频| 日韩视频中午一区| 午夜视频一区二区| 91国内精品野花午夜精品| 国产女主播在线一区二区| 另类小说色综合网站| 欧美日韩国产不卡| 亚洲一区二区三区国产| 97精品电影院| 亚洲视频在线一区二区| 成人午夜碰碰视频| 久久麻豆一区二区| 国产资源在线一区| 日韩精品在线一区二区| 日本三级亚洲精品| 制服丝袜中文字幕一区| 图片区日韩欧美亚洲| 欧美三区在线观看| 性欧美疯狂xxxxbbbb| 欧美日韩一区在线观看| 夜夜嗨av一区二区三区中文字幕| 91丨porny丨蝌蚪视频| 中日韩免费视频中文字幕| 丁香婷婷综合激情五月色| 国产亚洲短视频| 国产不卡视频在线观看| 国产欧美一区二区在线| 高清国产一区二区| 亚洲色欲色欲www在线观看| 99久久婷婷国产精品综合| 亚洲欧洲av色图| 色天使色偷偷av一区二区| 一区二区三区四区精品在线视频| 91蝌蚪porny成人天涯| 亚洲综合图片区| 91精品国产一区二区人妖| 日韩成人一区二区三区在线观看| 91精品在线观看入口| 精品综合久久久久久8888| 久久久国产精品麻豆| 成人永久看片免费视频天堂| 亚洲欧美一区二区视频| 欧美亚日韩国产aⅴ精品中极品| 亚洲一区免费观看| 555夜色666亚洲国产免| 久久精品久久精品| 中日韩免费视频中文字幕| 一本久久综合亚洲鲁鲁五月天| 婷婷综合久久一区二区三区| 欧美大肚乱孕交hd孕妇| 懂色av一区二区夜夜嗨| 亚洲一区二区三区中文字幕在线| 777奇米四色成人影色区| 国产成人在线免费观看| 亚洲综合色在线| 欧美大片免费久久精品三p|