📄 private.h
字号:
/*++
Copyright (c) Microsoft Corporation. All rights reserved.
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.
Module Name:
Private.h
Abstract:
Environment:
Kernel mode
--*/
#if !defined(_PCI_EXPRESS_H_)
#define _PCI_EXPRESS_H_
//
// The device extension for the device object
//
typedef struct _DEVICE_EXTENSION {
WDFDEVICE Device;
// Following fields are specific to the hardware
// Configuration
// HW Resources
PPCIE_REGS Regs; // Registers address
PUCHAR RegsPhyBase; // Registers phy address
PUCHAR RegsBase; // Registers base address
ULONG RegsLength; // Registers base length
union
{
DMA_CSR2 bits;
ULONG ulong;
}DMACSR2;
__int64 ReadEndTsc;
__int64 WriteEndTsc;
// PHYSICAL_MEMORY
WDFINTERRUPT Interrupt; // Returned by InterruptCreate
PUCHAR BufferPhysicalAddress;
// logical address of PHYSICAL_MEMORY
PUCHAR BufferLogicalAddress;
// buffer size in bytes
SIZE_T BufferSize;
PVOID BufferSystemVirtualAddress;
PVOID BufferUserVirtualAddress;
PMDL BufferMdl;
PUCHAR Buffer2PhysicalAddress;
// logical address of PHYSICAL_MEMORY
PUCHAR Buffer2LogicalAddress;
// buffer size in bytes
SIZE_T Buffer2Size;
PVOID Buffer2SystemVirtualAddress;
PVOID Buffer2UserVirtualAddress;
PMDL Buffer2Mdl;
WDFDMAENABLER DmaEnabler;
WDFCOMMONBUFFER CommonBuffer;
PHYSICAL_ADDRESS PhysicalAddress;
PVOID VirtualAddress;
ULONG MaximumTransferLength;
WDFQUEUE IOCtrlQueue;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
//
// This will generate the function named PCIEGetDeviceContext to be use for
// retreiving the DEVICE_EXTENSION pointer.
//
WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(DEVICE_EXTENSION, PCIEGetDeviceContext)
#if !defined(ASSOC_WRITE_REQUEST_WITH_DMA_TRANSACTION)
//
// The context structure used with WdfDmaTransactionCreate
//
typedef struct TRANSACTION_CONTEXT {
WDFREQUEST Request;
} TRANSACTION_CONTEXT, * PTRANSACTION_CONTEXT;
WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(TRANSACTION_CONTEXT, PCIEGetTransactionContext)
#endif
//
// Function prototypes
//
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD PCIEEvtDeviceAdd;
EVT_WDF_OBJECT_CONTEXT_CLEANUP PCIEEvtDriverContextCleanup;
EVT_WDF_DEVICE_D0_ENTRY PCIEEvtDeviceD0Entry;
EVT_WDF_DEVICE_D0_EXIT PCIEEvtDeviceD0Exit;
EVT_WDF_DEVICE_PREPARE_HARDWARE PCIEEvtDevicePrepareHardware;
EVT_WDF_DEVICE_RELEASE_HARDWARE PCIEEvtDeviceReleaseHardware;
EVT_WDF_IO_QUEUE_IO_READ PCIEEvtIoRead;
EVT_WDF_IO_QUEUE_IO_WRITE PCIEEvtIoWrite;
EVT_WDF_INTERRUPT_ISR PCIEEvtInterruptIsr;
EVT_WDF_INTERRUPT_DPC PCIEEvtInterruptDpc;
EVT_WDF_INTERRUPT_ENABLE PCIEEvtInterruptEnable;
EVT_WDF_INTERRUPT_DISABLE PCIEEvtInterruptDisable;
NTSTATUS
PCIESetIdleAndWakeSettings(
IN PDEVICE_EXTENSION FdoData
);
NTSTATUS
PCIEInitializeDeviceExtension(
IN PDEVICE_EXTENSION DevExt
);
NTSTATUS
PCIEPrepareHardware(
IN PDEVICE_EXTENSION DevExt,
IN WDFCMRESLIST ResourcesTranslated
);
NTSTATUS
PCIEInitRead(
IN PDEVICE_EXTENSION DevExt
);
NTSTATUS
PCIEInitWrite(
IN PDEVICE_EXTENSION DevExt
);
//
// WDFINTERRUPT Support
//
NTSTATUS
PCIEInterruptCreate(
IN PDEVICE_EXTENSION DevExt
);
VOID
PCIEReadRequestComplete(
IN WDFDMATRANSACTION DmaTransaction,
IN NTSTATUS Status
);
VOID
PCIEWriteRequestComplete(
IN WDFDMATRANSACTION DmaTransaction,
IN NTSTATUS Status
);
NTSTATUS
PCIEInitializeHardware(
IN PDEVICE_EXTENSION DevExt
);
VOID
PCIEShutdown(
IN PDEVICE_EXTENSION DevExt
);
EVT_WDF_PROGRAM_DMA PCIEEvtProgramReadDma;
EVT_WDF_PROGRAM_DMA PCIEEvtProgramWriteDma;
VOID
PCIEHardwareReset(
IN PDEVICE_EXTENSION DevExt
);
NTSTATUS
PCIEInitializeDMA(
IN PDEVICE_EXTENSION DevExt
);
#pragma warning(disable:4127) // avoid conditional expression is constant error with W4
#endif // _PCI_EXPRESS_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -