⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pci9052demo.h

📁 这是一个用PLX9052PCI控制芯片桥接PCI的示范程序.
💻 H
字号:
/******************************************************************************
 * File Name:
 *      PCI9052Demo.h
 * Description:
 *      The header file for the CanCard's Windows WDM driver.
 * Revision History:
 *      02-28-02 : PCI9052Demo 1.00
 ******************************************************************************/

#ifdef __cplusplus
extern "C"
{
#endif
#include <wdm.h>
#ifdef __cplusplus
}
#endif

#include "DebugPrint.h"

#include "GUIDs.h"
///////////////////////////////////////////////////////////////////////////////
// Device Extension Structure
typedef struct _DEVICE_EXTENSION 
{
	PDEVICE_OBJECT		pDeviceObject;			// device object this extension belongs to
	PDEVICE_OBJECT		pLowerDeviceObject;		// next lower driver in same stack
	PDEVICE_OBJECT		pPhysicalDeviceObject;	// the PDO

	IO_REMOVE_LOCK		RemoveLock;				// removal control locking structure

	UNICODE_STRING		InterfaceName;	    	// interface name

	DEVICE_POWER_STATE	DevicePower;			// current device power state
	SYSTEM_POWER_STATE	SystemPower;			// current system power state

	PULONG IdleCount;							// address of idle counter from idle detection registration
	DEVICE_CAPABILITIES DeviceCaps;				// copy of most recent device capabilities

	LONG Handles;								// # open handles

	// Interrupt handling variables
	ULONG				InterruptSource;
    PKINTERRUPT			pInterruptObject;		// address of interrupt object
	
	LIST_ENTRY          InterruptEventList;
    KSPIN_LOCK          InterruptEventListLock;

	PUCHAR				PortBase;				// I/O port base address 
	ULONG				PortCount;				
	// TODO add additional per-device declarations
	BOOLEAN				bMappedPort;			// true if we mapped port addr in StartDevice
	BOOLEAN				bBusy;					// true if device busy with a request
	BOOLEAN				bStalledForPower;		// power management has stalled IRP queue

	//事件对象指针
	PKEVENT				pWaitEvent;
	BOOLEAN				bSetWaitEvent;

	//PCI9052内部寄存器映射的内存资源
	ULONG				*MemBase;				
	PHYSICAL_ADDRESS	PhysicalMemBase;
	ULONG				MemCount;
	//自定义内存资源
	ULONG				*PdcMemBase;
	PHYSICAL_ADDRESS	PdcPhysicalMemBase;
	ULONG				PdcMemCount;

	signed long			UsageCount;				//The pending I/O Count
	BOOLEAN				bStopping;				//
	KEVENT				StoppingEvent;			// Set when all pending I/O complete

	BOOLEAN				GotResource;			//

	NTSTATUS			TransmitIrpStatus;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
//				Define Device Extention
////////////////////////////////////////////////////////////////////////////////////

/**********************************************
*               Init Functions
**********************************************/

VOID DriverUnload(IN PDRIVER_OBJECT pDriverObject);

/**********************************************
*               Pnp Functions
**********************************************/
NTSTATUS DispatchPnp(IN PDEVICE_OBJECT fdo,
					 IN PIRP pIrp);
NTSTATUS DefaultPnpHandler(IN PDEVICE_OBJECT fdo,
						   IN PIRP pIrp);
NTSTATUS PnpRemoveDevice(IN PDEVICE_OBJECT fdo,
						 IN PIRP pIrp);
NTSTATUS PnpStartDevice(IN PDEVICE_OBJECT fdo,
						IN PIRP pIrp);
NTSTATUS PnpStopDevice(IN PDEVICE_OBJECT fdo,
					   IN PIRP pIrp);
NTSTATUS ForwardAndWait(IN PDEVICE_OBJECT fdo,
						IN PIRP pIrp);
NTSTATUS AddDevice(IN PDRIVER_OBJECT pDriverObject,
				   IN PDEVICE_OBJECT pdo);
VOID RemoveDevice(IN PDEVICE_OBJECT fdo);
NTSTATUS StartDevice(IN PDEVICE_OBJECT fdo,
					 IN PCM_PARTIAL_RESOURCE_LIST ResourceListRaw,
					 IN PCM_PARTIAL_RESOURCE_LIST ResourceList);
VOID StopDevice(IN PDEVICE_OBJECT fdo);
BOOLEAN LockDevice(IN DEVICE_EXTENSION *pdx);
VOID UnlockDevice(IN DEVICE_EXTENSION *pdx);
NTSTATUS OnRequestComplete(IN PDEVICE_OBJECT fdo,
						   IN PIRP pIrp,
						   IN PKEVENT pKEvent);
unsigned char GetBarIndex(IN PHYSICAL_ADDRESS address,
						  IN PCI_COMMON_CONFIG *pciRegs);

NTSTATUS CompleteRequest(IN PIRP Irp,
						 IN NTSTATUS status);
NTSTATUS CompleteRequestInfo(IN PIRP Irp, 
							 IN NTSTATUS status, 
							 IN ULONG_PTR info);
/**********************************************
*               Dispath Functions
**********************************************/
NTSTATUS DispatchCreate(IN PDEVICE_OBJECT fdo,
						IN PIRP pIrp);
NTSTATUS DispatchCleanup(IN PDEVICE_OBJECT fdo,
						 IN PIRP pIrp);
NTSTATUS DispatchClose(IN PDEVICE_OBJECT fdo,
					   IN PIRP pIrp);
NTSTATUS DispatchRead(IN PDEVICE_OBJECT fdo,
					  IN PIRP pIrp);
NTSTATUS DispatchWrite(IN PDEVICE_OBJECT fdo,
					   IN PIRP pIrp);
NTSTATUS DispatchSystemControl(IN PDEVICE_OBJECT fdo,
							   IN PIRP pIrp);
NTSTATUS DispatchIoControl(IN PDEVICE_OBJECT fdo,
						   IN PIRP pIrp);
VOID StartIo(IN PDEVICE_OBJECT fdo,
				  IN PIRP pIrp);
VOID CancelIrp(IN PDEVICE_OBJECT fdo,
			   IN PIRP pIrp);

/**********************************************
*               Interupt Functions
**********************************************/
BOOLEAN OnInterrupt(IN PKINTERRUPT pInterrupt,
					IN PDEVICE_EXTENSION pdx);//PVOID pdx);	//
VOID DpcForIsr(IN PKDPC pDpc,
			   IN PDEVICE_OBJECT fdo,
			   IN PIRP Irp, 
			   IN PDEVICE_EXTENSION pdx);

BOOLEAN EnablePciInterrupt(IN PDEVICE_EXTENSION pdx);
BOOLEAN DisablePciInterrupt(IN PDEVICE_EXTENSION pdx);
/**********************************************
*               Power Functions
**********************************************/
NTSTATUS DispatchPower(IN PDEVICE_OBJECT fdo,
					   IN PIRP Irp);
NTSTATUS DefaultPowerHandler(IN PDEVICE_OBJECT fdo,
							 IN PIRP Irp);
NTSTATUS PowerSetPower(IN PDEVICE_OBJECT fdo,
						IN PIRP Irp);
NTSTATUS PowerQueryPower(IN PDEVICE_OBJECT fdo,
						  IN PIRP Irp);
NTSTATUS OnFinishPowerUp(IN PDEVICE_OBJECT fdo,
						 IN PIRP Irp,
						 IN PVOID junk);
VOID OnPowerRequestComplete(IN PDEVICE_OBJECT   DeviceObject,
							IN unsigned char    MinorFunction,
							IN POWER_STATE      PowerState, 
							IN PVOID            context,
							IN PIO_STATUS_BLOCK ioStatus);

NTSTATUS SendDeviceSetPower(IN PDEVICE_OBJECT fdo,
							IN DEVICE_POWER_STATE state,
							IN ULONG context);
VOID SetPowerState(IN PDEVICE_OBJECT fdo,
				   IN DEVICE_POWER_STATE state);
BOOLEAN EmpowerDevice(IN DEVICE_EXTENSION  *pdx,
					  IN DEVICE_POWER_STATE state);
NTSTATUS SendSelfSetPowerRequest(IN PDEVICE_OBJECT fdo,
								 IN DEVICE_POWER_STATE state);

/****************************************************************
*		Sja1000 fuctions
*****************************************************************/
//void InitSja1000(ULONG CanAddress);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -