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

📄 pcidpinc.h

📁 一个amccs5933芯片的驱动程序开发源程序和部分文档
💻 H
字号:
//*****************************************************************************
// THIS CODE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 
// OR IMPLIED.  THIS CODE IS COPYRIGHTED AND MAY NOT BE MODIFIED OR DISTRIBUTED
// WITHOUT THE WRITTEN CONSENT OF THE PRODUCER.
//
// Copyright (C) 2002, Foxen Solutions
// Copyright (C) 2002, 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 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];
  PHYSICAL_ADDRESS MemoryAccess;
  PHYSICAL_ADDRESS IOAccess;
  ULONG MemoryAccessLength;
  ULONG IOAccessLength;
  ULONG* MemoryBase;
  ULONG IOBase;
  PKINTERRUPT InterruptObject;
  INTERRUPT_DATA InterruptData;
  LL_DATA LLData;
  KSPIN_LOCK LListSpin;
  PVOID VirtualDMAAddress;
  ULONG PhysicalDMAAddress;
  PMDL MDL;
  UNICODE_STRING SymbolicLinkName;
  //PDEVICE_OBJECT PhysicalDeviceObject;
  PDEVICE_OBJECT NextLowerDeviceObject;
  KEVENT WaitEvent;

} 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 PCIDPAddDevice(
	IN PDRIVER_OBJECT  DriverObject,
	IN PDEVICE_OBJECT  PhysicalDeviceObject 
);

NTSTATUS PCIDPDispatchPower(
	IN PDEVICE_OBJECT DeviceObject, 
	IN PIRP Irp 
);

NTSTATUS PCIDPDispatchPnp( 
	IN PDEVICE_OBJECT DeviceObject, 
	IN PIRP Irp 
);

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 PDEVICE_OBJECT DeviceObject,
  IN OUT PIRP Irp,
  IN OUT PVOID IoBuffer,
  IN ULONG InputBufferLength,
  IN ULONG OutputBufferLength
);

VOID PCIDPUnMap(
  IN PDEVICE_OBJECT DeviceObject,
  IN OUT PIRP Irp,
  IN PVOID IoBuffer,
  IN ULONG InputBufferLength
);

VOID PCIDPMapDMAMem(
  IN PDEVICE_OBJECT DeviceObject,
  IN OUT PIRP Irp,
  OUT PVOID IoBuffer,
  IN ULONG OutputBufferLength
);

VOID PCIDPCancelMapDMA(
	IN PDEVICE_OBJECT DeviceObject,
	IN OUT PIRP Irp,
	IN PVOID IoBuffer,
	IN ULONG InputBufferLength
);

VOID PCIDPUnMapDMA(
  IN PDEVICE_OBJECT DeviceObject,
  IN OUT PIRP Irp,
  IN PVOID IoBuffer,
  IN ULONG InputBufferLength
);

VOID PCIDPGetPCIRegs(
  IN PDEVICE_OBJECT DeviceObject,
	IN PFILE_OBJECT FileObject,
  IN OUT PIRP Irp,
  OUT PVOID IoBuffer,
  IN ULONG OutputBufferLength
);

VOID PCIDPSetPCIRegs(
  IN PDEVICE_OBJECT DeviceObject,
	IN PFILE_OBJECT FileObject,
  IN OUT PIRP Irp,
  IN PVOID IoBuffer,
  IN ULONG 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
);


// Private
NTSTATUS StartDevice(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP Irp
);

NTSTATUS StopDevice(IN PDEVICE_OBJECT DeviceObject);

NTSTATUS CancelStopDevice(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP Irp
);

NTSTATUS RemoveDevice(IN PDEVICE_OBJECT DeviceObject);

NTSTATUS DeviceCompletionRoutine(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP Irp,
	IN PVOID Context
);

BOOLEAN GetResources(
	CM_RESOURCE_LIST* Resources,
	UCHAR CmResourceType, 
	ULONG* LIdx, 
	ULONG* DIdx
);

BOOLEAN PCIDPISR(
  IN PKINTERRUPT Interrupt,
  IN OUT PVOID Context
);

VOID PCIDPForDpcIsr(
  IN PKDPC Dpc,
  IN PDEVICE_OBJECT DeviceObject,
  IN PIRP Irp,
  IN PVOID Context
);

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 + -