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

📄 private.h

📁 基于xilinx vierex5得pci express dma设计实现。
💻 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 + -