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

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

?? miniport.c

?? 優龍2410平臺BSP包
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*++
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

Module Name:

    miniport.c

Abstract:

    This is the	main file for the CS8900 Ethernet controller.
    This driver	conforms to the	NDIS 3.0 miniport interface.

--*/

#include "precomp.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 Cs8900DebugFlag =	
		       CS8900_DEBUG_LOUD
		       | CS8900_DEBUG_VERY_LOUD
		       // | CS8900_DEBUG_LOG
		       // | CS8900_DEBUG_CHECK_DUP_SENDS
		       // | CS8900_DEBUG_TRACK_PACKET_LENS
		       // | CS8900_DEBUG_WORKAROUND1
		       // | CS8900_DEBUG_CARD_BAD
		       // | CS8900_DEBUG_CARD_TESTS 
		       ;

//
// Debug tracing defintions
//
#define	CS8900_LOG_SIZE	256
UCHAR Cs8900LogBuffer[CS8900_LOG_SIZE]={0};
UINT Cs8900LogLoc = 0;

extern
VOID
Cs8900Log(UCHAR	c) {

    Cs8900LogBuffer[Cs8900LogLoc++] = c;

	Cs8900LogBuffer[(Cs8900LogLoc +	4) % CS8900_LOG_SIZE] =	'\0';

	if (Cs8900LogLoc >= CS8900_LOG_SIZE)
		Cs8900LogLoc = 0;
}

#endif

volatile unsigned char*	ioPacketPage;
volatile struct	gpioreg	*gpioRegs;
volatile unsigned long *v_pBlank, *v_pPort2;
volatile PLONG		v_pGpioRegs, v_pIcRegs;

//
// 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 CS8900MiniportBlock={0};

//
// List	of supported OID for this driver.
//
STATIC UINT CS8900SupportedOids[] = {
    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,
    
    OID_GEN_MEDIA_CONNECT_STATUS,
    OID_GEN_MAXIMUM_SEND_PACKETS,
    OID_GEN_VENDOR_DRIVER_VERSION,
    };

//
// 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

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 CS8900 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 CS8900Char;

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

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

    DEBUGMSG(1, (TEXT("+CS8900:DriverEntry\r\n")));
    
    RETAILMSG(1, (TEXT("+CS8900:DriverEntry\r\n")));
    
    //
    // Initialize the wrapper.
    //
    NdisMInitializeWrapper(
		&NdisWrapperHandle,
		DriverObject,
		RegistryPath,
		NULL
		);

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

    //
    // Initialize the Miniport characteristics for the call to
    // NdisMRegisterMiniport.
    //
    memset(&CS8900Char,0,sizeof(CS8900Char));
    CS8900Char.MajorNdisVersion	= CS8900_NDIS_MAJOR_VERSION;
    CS8900Char.MinorNdisVersion	= CS8900_NDIS_MINOR_VERSION;
    CS8900Char.CheckForHangHandler = NULL;
    CS8900Char.DisableInterruptHandler = CS8900DisableInterrupt;
    CS8900Char.EnableInterruptHandler =	CS8900EnableInterrupt;
    CS8900Char.HaltHandler = CS8900Halt;
    CS8900Char.HandleInterruptHandler =	CS8900HandleInterrupt;
    CS8900Char.InitializeHandler = MiniportInitialize;
    CS8900Char.ISRHandler = CS8900Isr;
    CS8900Char.QueryInformationHandler = CS8900QueryInformation;
    CS8900Char.ReconfigureHandler = NULL;
    CS8900Char.ResetHandler = CS8900Reset;
    CS8900Char.SendHandler = CS8900Send;
    CS8900Char.SetInformationHandler = CS8900SetInformation;
    CS8900Char.TransferDataHandler = CS8900TransferData;

    DEBUGMSG(1, (TEXT("CS8900:	-> NdisMRegisterMiniport\r\n")));

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

    if (Status == NDIS_STATUS_SUCCESS)
    {
		DEBUGMSG(1,
				 (TEXT("-CS8900:DriverEntry: Success!\r\n")));
		return STATUS_SUCCESS;
    }

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

    DEBUGMSG(1, (TEXT("-CS8900:DriverEntry: Fail!\r\n")));
    return STATUS_UNSUCCESSFUL;
}

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

/*++

Routine	Description:

    CS8900Initialize 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.
    //
    PCS8900_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
    // CS8900_LENGTH_OF_ADDRESS
    //
    ULONG Length;

    //
    // These are used when calling CS8900RegisterAdapter.
    //

    //
    // 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;

//    NDIS_MCA_POS_DATA	McaData;

	DEBUGMSG(1, (TEXT("+CS8900:CS8900Initialize\r\n")));

    //
    // Search for the medium type (802.3) in the given array.
    //
    for	(i = 0;	i < MediumArraySize; i++)
    {
		if (MediumArray[i] == NdisMedium802_3)
		{
		    break;
		}
    }

    if (i == MediumArraySize)
    {
		DEBUGMSG(1, (TEXT("CS8900: No Supported Media!\r\n")));
		return(	NDIS_STATUS_UNSUPPORTED_MEDIA );
    }

    *SelectedMediumIndex = i;

    //
    // Set default values.
    //
    IoBaseAddr = DEFAULT_IOBASEADDR;
    InterruptNumber = DEFAULT_INTERRUPTNUMBER;
    MaxMulticastList = DEFAULT_MULTICASTLISTMAX;

    //
    // Allocate	memory for the adapter block now.
    //
    Status = NdisAllocateMemory( (PVOID	*)&Adapter,
		   sizeof(CS8900_ADAPTER),
		   0,
		   HighestAcceptableMax
		   );

    if (Status != NDIS_STATUS_SUCCESS)
    {
		DEBUGMSG(1,
	    	(TEXT("CS8900: NdisAllocateMemory(CS8900_ADAPTER) Fail!\r\n")));
		return Status;
    }

    //
    // Clear out the adapter block, which sets all default values to FALSE,
    // or NULL.
    //
    NdisZeroMemory (Adapter, sizeof(CS8900_ADAPTER));

    //
    // Open the	configuration space.
    //
    NdisOpenConfiguration(
	    &Status,
	    &ConfigHandle,
	    ConfigurationHandle
	    );

    if (Status != NDIS_STATUS_SUCCESS)
    {
		NdisFreeMemory(Adapter,	sizeof(CS8900_ADAPTER),	0);

		DEBUGMSG(1,
	 	   (TEXT("CS8900: NdisOpenconfiguration Fail! - 0x%x\n"),
	 	   Status));
		return Status;
    }

    //
    //	Read in	the card type.
    //
    NdisReadConfiguration(
	    &Status,
	    &ReturnedValue,
	    ConfigHandle,
	    &CardTypeStr,
	    NdisParameterHexInteger
	    );
	    
    if (Status == NDIS_STATUS_SUCCESS)
		Adapter->CardType = (UINT)ReturnedValue->ParameterData.IntegerData;

	//
	// Read net	address
	//
    NdisReadNetworkAddress(
		&Status,
		&NetAddress,
		&Length,
		ConfigHandle
		);

    if ((Length	== CS8900_LENGTH_OF_ADDRESS) &&
		(Status	== NDIS_STATUS_SUCCESS)) {

		//
		// Save	the address that should	be used.
		//
		NdisMoveMemory(
			Adapter->StationAddress,
			NetAddress,
			CS8900_LENGTH_OF_ADDRESS
			);

   	}

    //
    // Read Bus	Type (for NE2/AE2 support)
    //
    NdisReadConfiguration(
	   	&Status,
	    &ReturnedValue,
	    ConfigHandle,
		&BusTypeStr,
		NdisParameterHexInteger
		);

	if (Status == NDIS_STATUS_SUCCESS) {
		Adapter->BusType = (UCHAR)ReturnedValue->ParameterData.IntegerData;
	}

	if (!SkipIobaseAndInterrupt)
	{
		//
		// Read	I/O Address
		//
		NdisReadConfiguration(
			&Status,
			&ReturnedValue,
			ConfigHandle,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费毛片a| 在线日韩av片| www.在线成人| 亚洲免费av在线| 国产日韩欧美综合一区| 成人激情午夜影院| 国产成人精品免费一区二区| 久久99精品久久久久久动态图| 亚洲成人久久影院| 丝袜美腿成人在线| 日本va欧美va瓶| av中文字幕一区| 日韩精品欧美成人高清一区二区| 日本久久电影网| 国产激情视频一区二区三区欧美| 国产98色在线|日韩| 成人av资源站| 日韩欧美一级在线播放| 精品国产青草久久久久福利| 国产拍揄自揄精品视频麻豆| 国产人伦精品一区二区| 亚洲免费观看在线视频| 亚洲欧美国产高清| 麻豆国产精品777777在线| 粉嫩13p一区二区三区| 肉丝袜脚交视频一区二区| 久久婷婷国产综合精品青草| 亚洲国产高清不卡| 日本美女一区二区三区视频| 成人一区二区视频| 91精品国产一区二区人妖| 中文字幕亚洲欧美在线不卡| 亚洲午夜在线电影| 蜜桃91丨九色丨蝌蚪91桃色| 99综合电影在线视频| 精品国产乱码久久久久久蜜臀 | 亚洲视频一二三区| 麻豆精品一区二区三区| 成人午夜精品在线| 2024国产精品| 麻豆精品视频在线观看免费| 欧美主播一区二区三区美女| 91精选在线观看| 亚洲一二三区视频在线观看| 成人av在线影院| 久久久久99精品一区| 精品一区二区av| 精品国产成人系列| 国内不卡的二区三区中文字幕 | 欧美区一区二区三区| 国产精品久久久久7777按摩 | 91啪亚洲精品| ...av二区三区久久精品| 日韩三级视频在线观看| 亚洲成人动漫在线免费观看| 精品国产不卡一区二区三区| 成人久久视频在线观看| 亚洲乱码中文字幕综合| 欧美日韩在线一区二区| 久久成人精品无人区| 中文字幕中文字幕在线一区| 欧美挠脚心视频网站| 久久超碰97中文字幕| 偷拍与自拍一区| 中日韩av电影| 精品国产自在久精品国产| 99久久免费视频.com| 久久99精品久久久久| 亚洲资源中文字幕| ...xxx性欧美| 国产日韩精品一区二区三区| 欧美三级日韩三级国产三级| eeuss鲁片一区二区三区在线观看| 日韩高清中文字幕一区| 亚洲成av人片在线| 亚洲精品日日夜夜| 中文字幕一区二区三区精华液 | 国产麻豆精品在线| 久久国产人妖系列| 日本不卡中文字幕| 日韩中文字幕av电影| 天天综合日日夜夜精品| 亚洲欧洲国产日本综合| 日韩伦理免费电影| 亚洲欧美另类在线| 18欧美乱大交hd1984| 1区2区3区国产精品| 亚洲主播在线播放| 视频一区免费在线观看| 精品一区二区在线免费观看| 美女mm1313爽爽久久久蜜臀| 99视频一区二区三区| 国产成人啪午夜精品网站男同| 国产成人精品影视| 91黄色免费版| 中文字幕日韩av资源站| 亚洲图片欧美视频| 国产精品一区二区在线看| 91蝌蚪porny| 日韩三级视频中文字幕| ...中文天堂在线一区| 捆绑变态av一区二区三区| 成人精品亚洲人成在线| 日韩一区二区三区四区五区六区 | 成人性视频免费网站| 欧美三区免费完整视频在线观看| 日韩精品一区二区三区视频播放| 国产精品视频一二三区| 久久aⅴ国产欧美74aaa| 欧美午夜一区二区三区免费大片| 久久亚洲综合色| 免费不卡在线视频| 在线免费观看日本欧美| 国产精品网友自拍| 久久精品国产99国产| 欧美性受xxxx黑人xyx性爽| 日韩午夜精品电影| 日韩精品免费视频人成| www.久久精品| 2023国产精品自拍| 精品在线观看免费| 91精品黄色片免费大全| 亚洲成av人在线观看| 欧美日韩亚洲另类| 尤物视频一区二区| 91日韩精品一区| 亚洲国产日韩精品| 欧美视频在线播放| 午夜久久久久久久久| 91精品国产综合久久福利软件 | 337p亚洲精品色噜噜| 亚洲一区二区在线免费观看视频| 94-欧美-setu| 亚洲一区二区美女| 欧美xxxxxxxx| 亚洲免费观看高清完整版在线| 粉嫩高潮美女一区二区三区| 国产欧美日韩中文久久| 99这里都是精品| 视频在线观看一区二区三区| 欧美一区二区三区免费| 国产精品影视网| 亚洲图片一区二区| 久久蜜臀中文字幕| 色诱亚洲精品久久久久久| 首页综合国产亚洲丝袜| 久久九九久精品国产免费直播| 91麻豆精品视频| 韩国精品免费视频| 午夜亚洲福利老司机| 国产欧美精品一区aⅴ影院| 欧美色图片你懂的| 国产一区二区三区在线观看免费| 亚洲人123区| 欧美精品一区二区三区蜜桃 | 日日摸夜夜添夜夜添精品视频 | 99视频精品全部免费在线| 日韩国产欧美在线播放| 综合色中文字幕| 久久男人中文字幕资源站| 欧美精品久久久久久久多人混战 | 91天堂素人约啪| 精品午夜一区二区三区在线观看| 香蕉成人伊视频在线观看| 亚洲欧美日韩国产综合在线| 欧美激情在线免费观看| 久久无码av三级| 欧美精品一区二区精品网| 欧美一区二区在线免费播放| 欧美肥大bbwbbw高潮| 欧美色综合天天久久综合精品| 在线国产亚洲欧美| 欧美伊人久久大香线蕉综合69| 日本乱码高清不卡字幕| 欧美三级中文字幕| 欧美一区二区啪啪| 欧美精品一区二| 久久久九九九九| 国产精品久久久久久久久免费樱桃| 久久久精品一品道一区| 国产精品毛片无遮挡高清| 国产精品久久久久aaaa| 亚洲一区二区偷拍精品| 日本成人在线网站| 成人黄色在线视频| 欧美日韩高清一区二区| ww亚洲ww在线观看国产| 亚洲日本丝袜连裤袜办公室| 亚洲一二三四区| 激情综合网激情| 色欲综合视频天天天| 精品国产伦理网| 亚洲五码中文字幕| 99在线视频精品| 欧美一级爆毛片| 一级女性全黄久久生活片免费| 黄色精品一二区| 制服视频三区第一页精品| 亚洲国产精品成人综合| 蜜臀精品久久久久久蜜臀 |