📄 pcidpinc.h
字号:
//*****************************************************************************
// THIS CODE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
// OR IMPLIED. THIS CODE IS LABELED "OPEN SOFTWARE" AND MAY BE FREELY USED,
// REPRODUCED, MODIFIED, AND/OR REDISTRIBUTED WITH THE STIPULATION THAT THIS
// NOTICE REMAIN INTACT. REDISTRIBUTION OF ANY KIND IMPLIES THAT ALL
// MODIFICATIONS FALL UNDER THIS "OPEN SOFTWARE" LABEL.
//
// Copyright (C) 2000, Foxen Solutions
// Copyright (C) 2000, FXN
//
// All Rights Reserved.
//*****************************************************************************
//
// ----------------------------------------------------------------------------
// This is PCIDPinc.h. It is the include file for PCIDP.c.
// ----------------------------------------------------------------------------
#ifndef _PCIDP_INC
#define _PCIDP_INC
#include "stddef.h"
#include "ntddk.h"
// Define PCIDP card attributes
#define MemoryBaseSize 0x8000
#define DMASize 0x4000
// Define PCIDP card register offset.
#define HINT 0x139
// Define interrupt types and bit masks.
#define PCIMasterAbort 0x200
#define PCITargetAbort 0x100
#define I2OOutboundPostFIFONotEmpty 0x80
#define DMAComplete 0x20
#define LocalToHostExternalSignal 0x10
#define LocalToHostMailbox 8
#define I2OPCIFIFOOverflow 2
#define InterruptQueSize 16
// Define linked list services constants.
#define LL_NEW 0
#define LL_ACQUIRED 1
#define LL_INSERTED 2
#define LL_AVAILABLE 3
#define LL_CHECKEDOUT 4
// Define any structures, variables, etc.
typedef struct {
ULONG Type;
PIRP Irp;
} REGISTERED_INTERRUPT, *pREGISTERED_INTERRUPT;
typedef struct _LINKED_LIST{
struct _LINKED_LIST* Next;
struct _LINKED_LIST* Prev;
UCHAR Status;
REGISTERED_INTERRUPT RegisteredInterrupt;
} LINKED_LIST, *pLINKED_LIST;
typedef struct {
UCHAR QueNext;
UCHAR QueNew;
ULONG Type[InterruptQueSize];
} INTERRUPT_DATA, *pINTERRUPT_DATA;
typedef struct {
BOOLEAN IsEmpty;
USHORT InsertedCount;
USHORT FreeMax;
pLINKED_LIST CurrentLink;
} LL_DATA, *pLL_DATA;
typedef struct{
ULONG BusNumber;
PCI_SLOT_NUMBER SlotNumber;
ULONG BoardNumber;
ULONG BaseAddresses[6];
ULONG* MemoryBase;
ULONG IOBase;
PKINTERRUPT InterruptObject;
INTERRUPT_DATA InterruptData;
LL_DATA LLData;
KSPIN_LOCK LListSpin;
PVOID VirtualDMAAddress;
ULONG PhysicalDMAAddress;
PMDL MDL;
} PCIDP_EXTENSION, *pPCIDP_EXTENSION;
// Declare the prototypes for the routines that make up this driver.
// Public (System)
NTSTATUS DriverEntry(
IN OUT PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
NTSTATUS PCIDPDeviceControl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS PCIDPCreateClose(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS PCIDPCleanup(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS PCIDPUnload(
IN PDRIVER_OBJECT DriverObject
);
VOID PCIDPCancelInterrupt(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp
);
VOID PCIDPForDpcIsr(
IN PKDPC Dpc,
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
BOOLEAN PCIDPISR(
IN PKINTERRUPT Interrupt,
IN OUT PVOID Context
);
VOID PCIDPCancelMapDMARoutine(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp
);
// Public
VOID PCIDPGetDriverVersion(
IN OUT PIRP Irp,
OUT PVOID IoBuffer,
IN ULONG OutputBufferLength
);
VOID PCIDPMapBaseRegs(
IN DeviceObject,
IN OUT Irp,
IN OUT IoBuffer,
IN InputBufferLength,
IN OutputBufferLength
);
VOID PCIDPUnMap(
IN DeviceObject,
IN OUT Irp,
IN IoBuffer,
IN InputBufferLength
);
VOID PCIDPMapDMAMem(
IN DeviceObject,
IN OUT Irp,
OUT IoBuffer,
IN OutputBufferLength
);
VOID PCIDPCancelMapDMA(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp,
IN PVOID IoBuffer,
IN ULONG InputBufferLength
);
VOID PCIDPUnMapDMA(
IN DeviceObject,
IN OUT Irp,
IN IoBuffer,
IN InputBufferLength
);
VOID PCIDPGetPCIRegs(
IN DeviceObject,
IN OUT Irp,
OUT IoBuffer,
IN OutputBufferLength
);
VOID PCIDPSetPCIRegs(
IN DeviceObject,
IN OUT Irp,
IN IoBuffer,
IN InputBufferLength
);
VOID PCIDPRegisterInterrupt(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp,
IN OUT PVOID IoBuffer,
IN ULONG InputBufferLength,
IN ULONG OutputBufferLength
);
VOID PCIDPUnregisterInterrupt(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp,
IN OUT PVOID IoBuffer,
IN ULONG InputBufferLength
);
// Protected
BOOLEAN PCIDPISR(
IN PKINTERRUPT Interrupt,
IN OUT PVOID Context
);
VOID PCIDPForDpcIsr(
IN PKDPC Dpc,
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
NTSTATUS ReportResources(
IN PDEVICE_OBJECT DeviceObject,
IN PPCI_COMMON_CONFIG CardInfo
);
NTSTATUS UnReportResources(
IN PDEVICE_OBJECT DeviceObject
);
BOOLEAN GetNextEntry(
pPCIDP_EXTENSION ObjExt,
pLINKED_LIST* FirstLink,
pLINKED_LIST* CurrentLink,
pREGISTERED_INTERRUPT* Entry
);
BOOLEAN PutBackEntry(
pPCIDP_EXTENSION ObjExt,
pLINKED_LIST CurrentLink
);
BOOLEAN FreeEntry(
IN pPCIDP_EXTENSION ObjExt,
pLINKED_LIST CurrentLink
);
pLINKED_LIST GetFreeEntry(IN pPCIDP_EXTENSION ObjExt);
BOOLEAN InsertEntry(
IN pPCIDP_EXTENSION ObjExt,
IN pLINKED_LIST Entry
);
BOOLEAN DeleteAllEntries(IN pPCIDP_EXTENSION ObjExt);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -