📄 pci9052demo.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 + -