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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? miniport.c

?? windows ce 50 drive program
?? 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

extern int resetCS(void);
extern int initCS();

//
// 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;
	NDIS51_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.DisableInterruptHandler = NULL;
    CS8900Char.EnableInterruptHandler =	NULL;
    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;

	CS8900Char.ReturnPacketHandler     = NULL;
	CS8900Char.SendPacketsHandler      = NULL;
	CS8900Char.AllocateCompleteHandler = NULL;
	CS8900Char.CancelSendPacketsHandler = CS8900CancelSendPackets;
	CS8900Char.AdapterShutdownHandler = CS8900AdapterShutdown;
	CS8900Char.PnPEventNotifyHandler = CS8900DevicePnPEvent;

    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,
			&IOAddressStr,
			NdisParameterHexInteger
			);

		if (Status == NDIS_STATUS_SUCCESS) {
	    	IoBaseAddr = (PVOID)(ReturnedValue->ParameterData.IntegerData);
		}

		//
		// Read	interrupt number
		//
		NdisReadConfiguration(
			&Status,
			&ReturnedValue,
			ConfigHandle,
			&InterruptStr,
			NdisParameterInteger
			);

		if (Status == NDIS_STATUS_SUCCESS) {
	    	InterruptNumber = (CCHAR)(ReturnedValue->ParameterData.IntegerData);
		}
    }

    //
    // Read MaxMulticastList
	//
    NdisReadConfiguration(
		&Status,
	    &ReturnedValue,
	    ConfigHandle,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲美女视频在线| 99re8在线精品视频免费播放| 亚洲一区在线观看网站| 综合中文字幕亚洲| 成人欧美一区二区三区白人 | 欧美美女bb生活片| 欧美日韩午夜在线视频| 欧美日韩精品久久久| 欧美乱妇一区二区三区不卡视频| 欧美日韩国产精品成人| 欧美精品久久99| 欧美大胆一级视频| 26uuu亚洲| 国产区在线观看成人精品| 国产精品乱码久久久久久| 国产精品久久久久婷婷| 亚洲免费高清视频在线| 亚洲一区二区三区小说| 视频精品一区二区| 黄色精品一二区| 风间由美一区二区三区在线观看 | 亚洲综合图片区| 日韩在线观看一区二区| 久久91精品久久久久久秒播| 国产精品一区二区在线观看网站| 成人免费视频caoporn| 91亚洲精品久久久蜜桃网站| 在线观看免费一区| 欧美一区二区视频网站| 久久人人97超碰com| 国产免费观看久久| 亚洲日本在线看| 日本成人超碰在线观看| 国产一区二区福利视频| 91在线国内视频| 欧美欧美欧美欧美首页| 337p粉嫩大胆色噜噜噜噜亚洲| 国产人妖乱国产精品人妖| 一区二区三区中文字幕| 麻豆freexxxx性91精品| 99久久精品国产网站| 91精品国产91久久久久久最新毛片| 久久久噜噜噜久久人人看| 亚洲精品va在线观看| 九色综合狠狠综合久久| 99免费精品视频| 欧美一卡2卡3卡4卡| 国产精品丝袜91| 日本va欧美va精品发布| av亚洲精华国产精华精| 欧美一区三区四区| 亚洲欧洲av在线| 美国欧美日韩国产在线播放| 成人激情小说网站| 91精品国产综合久久福利| 中文字幕一区二区三区不卡 | 日韩av一二三| av福利精品导航| 日韩精品一区在线| 亚洲黄色免费网站| 国产黄人亚洲片| 91麻豆精品国产| 亚洲色图欧洲色图| 国产成人精品免费| 日韩欧美国产一二三区| 亚洲精品乱码久久久久久久久| 狠狠色伊人亚洲综合成人| 日本道精品一区二区三区| 26uuu亚洲综合色| 免费在线观看日韩欧美| 欧美在线小视频| 国产精品传媒入口麻豆| 狠狠色丁香婷婷综合| 欧美精品久久久久久久久老牛影院 | 欧美人牲a欧美精品| 国产精品美女www爽爽爽| 蜜臀av亚洲一区中文字幕| 在线观看一区日韩| 亚洲图片激情小说| 成人免费视频播放| 欧美国产日本视频| 国产高清一区日本| 久久伊99综合婷婷久久伊| 日韩精品电影一区亚洲| 在线观看中文字幕不卡| 成人免费一区二区三区视频| 国产成人8x视频一区二区| 精品国产sm最大网站免费看| 五月激情综合婷婷| 欧美美女视频在线观看| 亚洲国产另类av| 欧美在线观看18| 亚洲激情av在线| 在线免费观看一区| 一区二区三区中文字幕精品精品| 成人av动漫网站| 国产精品美日韩| 粉嫩久久99精品久久久久久夜| 精品对白一区国产伦| 男男成人高潮片免费网站| 欧美日韩国产精品自在自线| 亚洲国产成人tv| 欧美日韩一区中文字幕| 亚洲午夜私人影院| 在线观看国产精品网站| 亚洲成人免费看| 91精品婷婷国产综合久久性色| 日产欧产美韩系列久久99| 69堂国产成人免费视频| 蜜臂av日日欢夜夜爽一区| 日韩欧美一区二区视频| 精久久久久久久久久久| 久久精品亚洲国产奇米99| 国产精品一区二区三区四区| 中文字幕久久午夜不卡| 91免费观看国产| 亚洲亚洲人成综合网络| 欧美乱熟臀69xxxxxx| 伦理电影国产精品| 国产亚洲成aⅴ人片在线观看| 成人午夜在线播放| 亚洲精品乱码久久久久| 欧美日韩国产另类一区| 美脚の诱脚舐め脚责91| 国产亚洲欧美激情| 91在线看国产| 日韩精品亚洲一区二区三区免费| 精品久久国产字幕高潮| 国产iv一区二区三区| 一区二区日韩av| 欧美一卡二卡三卡四卡| 国产不卡视频在线播放| 一区二区三区四区国产精品| 欧美一级在线免费| 成人精品国产免费网站| 一区二区在线观看视频在线观看| 555www色欧美视频| 国产精品一区二区久久不卡| 中文字幕综合网| 欧美理论电影在线| 国产iv一区二区三区| 亚洲最新在线观看| 精品久久久久久久久久久久久久久久久| 粉嫩av一区二区三区| 亚洲一区二区视频| 26uuu亚洲综合色欧美 | 日韩免费电影网站| 成人黄色a**站在线观看| 亚洲第一电影网| 国产欧美一区在线| 欧美高清hd18日本| 成人视屏免费看| 奇米综合一区二区三区精品视频| 国产欧美日韩亚州综合| 欧美午夜精品免费| 粉嫩av一区二区三区粉嫩| 亚洲国产欧美日韩另类综合| 国产日产精品1区| 欧美一级午夜免费电影| 成人综合在线观看| 麻豆成人91精品二区三区| 亚洲欧洲制服丝袜| 欧美精彩视频一区二区三区| 欧美日韩美少妇| 99久久精品费精品国产一区二区 | 欧美日韩精品高清| 9人人澡人人爽人人精品| 美女被吸乳得到大胸91| 一二三区精品视频| 国产日韩欧美精品在线| 日韩一区二区免费视频| 欧洲精品视频在线观看| 成人性生交大片免费看视频在线| 青青草国产成人99久久| 一区二区三区在线观看欧美| 亚洲国产精品成人综合| 日韩欧美高清一区| 欧美日韩一区二区三区四区五区| 粉嫩aⅴ一区二区三区四区| 美女尤物国产一区| 五月天激情综合网| 亚洲一区二区三区视频在线| 自拍偷拍国产精品| 国产精品久久三| 国产日产欧美精品一区二区三区| 精品美女一区二区三区| 欧美精品少妇一区二区三区| 欧美自拍丝袜亚洲| 91女人视频在线观看| 成人免费视频一区| 懂色av一区二区夜夜嗨| 国产精品性做久久久久久| 国产成人精品一区二区三区四区| 麻豆精品一区二区三区| 免费观看91视频大全| 偷拍一区二区三区| 日日摸夜夜添夜夜添国产精品| 亚洲成人一区二区| 一区二区三区四区在线| 亚洲精品视频在线|