#define PCI_HACK_HAS_REVISION_INFO 0x01
#define PCI_HACK_HAS_SUBSYSTEM_INFO 0x02
+//
+// PCI Interface Flags
+//
+#define PCI_INTERFACE_PDO 0x01
+#define PCI_INTERFACE_FDO 0x02
+#define PCI_INTERFACE_ROOT 0x04
+
+//
+// PCI Skip Function Flags
+//
+#define PCI_SKIP_DEVICE_ENUMERATION 0x01
+#define PCI_SKIP_RESOURCE_ENUMERATION 0x02
+
+//
+// PCI Debugging Device Support
+//
+#define MAX_DEBUGGING_DEVICES_SUPPORTED 0x04
+
+//
+// PCI Driver Verifier Failures
+//
+#define PCI_VERIFIER_CODES 0x04
+
//
// Device Extension, Interface, Translator and Arbiter Signatures
//
typedef enum _PCI_SIGNATURE
{
- PciPdoExtensionType = '0Pci',
- PciFdoExtensionType = '1Pci',
- PciArb_Io = '2Pci',
- PciArb_Memory = '3Pci',
- PciArb_Interrupt = '4Pci',
- PciArb_BusNumber = '5Pci',
- PciTrans_Interrupt = '6Pci',
- PciInterface_BusHandler = '7Pci',
- PciInterface_IntRouteHandler = '8Pci',
- PciInterface_PciCb = '9Pci',
- PciInterface_LegacyDeviceDetection = ':Pci',
- PciInterface_PmeHandler = ';Pci',
- PciInterface_DevicePresent = '<Pci',
- PciInterface_NativeIde = '=Pci',
- PciInterface_AgpTarget = '>Pci',
- PciInterface_Location = '?Pci'
+ PciPdoExtensionType = 'icP0',
+ PciFdoExtensionType = 'icP1',
+ PciArb_Io = 'icP2',
+ PciArb_Memory = 'icP3',
+ PciArb_Interrupt = 'icP4',
+ PciArb_BusNumber = 'icP5',
+ PciTrans_Interrupt = 'icP6',
+ PciInterface_BusHandler = 'icP7',
+ PciInterface_IntRouteHandler = 'icP8',
+ PciInterface_PciCb = 'icP9',
+ PciInterface_LegacyDeviceDetection = 'icP:',
+ PciInterface_PmeHandler = 'icP;',
+ PciInterface_DevicePresent = 'icP<',
+ PciInterface_NativeIde = 'icP=',
+ PciInterface_AgpTarget = 'icP>',
+ PciInterface_Location = 'icP?'
} PCI_SIGNATURE, *PPCI_SIGNATURE;
//
LONG BusHackFlags;
} PCI_FDO_EXTENSION, *PPCI_FDO_EXTENSION;
+typedef struct _PCI_FUNCTION_RESOURCES
+{
+ IO_RESOURCE_DESCRIPTOR Limit[7];
+ CM_PARTIAL_RESOURCE_DESCRIPTOR Current[7];
+} PCI_FUNCTION_RESOURCES, *PPCI_FUNCTION_RESOURCES;
+
+typedef union _PCI_HEADER_TYPE_DEPENDENT
+{
+ struct
+ {
+ UCHAR Spare[4];
+ } type0;
+ struct
+ {
+ UCHAR PrimaryBus;
+ UCHAR SecondaryBus;
+ UCHAR SubordinateBus;
+ UCHAR SubtractiveDecode:1;
+ UCHAR IsaBitSet:1;
+ UCHAR VgaBitSet:1;
+ UCHAR WeChangedBusNumbers:1;
+ UCHAR IsaBitRequired:1;
+ } type1;
+ struct
+ {
+ UCHAR Spare[4];
+ } type2;
+} PCI_HEADER_TYPE_DEPENDENT, *PPCI_HEADER_TYPE_DEPENDENT;
+
+typedef struct _PCI_PDO_EXTENSION
+{
+ PVOID Next;
+ ULONG ExtensionType;
+ struct _PCI_MJ_DISPATCH_TABLE *IrpDispatchTable;
+ BOOLEAN DeviceState;
+ BOOLEAN TentativeNextState;
+
+ KEVENT SecondaryExtLock;
+ PCI_SLOT_NUMBER Slot;
+ PDEVICE_OBJECT PhysicalDeviceObject;
+ PPCI_FDO_EXTENSION ParentFdoExtension;
+ SINGLE_LIST_ENTRY SecondaryExtension;
+ LONG BusInterfaceReferenceCount;
+ LONG AgpInterfaceReferenceCount;
+ USHORT VendorId;
+ USHORT DeviceId;
+ USHORT SubsystemVendorId;
+ USHORT SubsystemId;
+ BOOLEAN RevisionId;
+ BOOLEAN ProgIf;
+ BOOLEAN SubClass;
+ BOOLEAN BaseClass;
+ BOOLEAN AdditionalResourceCount;
+ BOOLEAN AdjustedInterruptLine;
+ BOOLEAN InterruptPin;
+ BOOLEAN RawInterruptLine;
+ BOOLEAN CapabilitiesPtr;
+ BOOLEAN SavedLatencyTimer;
+ BOOLEAN SavedCacheLineSize;
+ BOOLEAN HeaderType;
+ BOOLEAN NotPresent;
+ BOOLEAN ReportedMissing;
+ BOOLEAN ExpectedWritebackFailure;
+ BOOLEAN NoTouchPmeEnable;
+ BOOLEAN LegacyDriver;
+ BOOLEAN UpdateHardware;
+ BOOLEAN MovedDevice;
+ BOOLEAN DisablePowerDown;
+ BOOLEAN NeedsHotPlugConfiguration;
+ BOOLEAN SwitchedIDEToNativeMode;
+ BOOLEAN BIOSAllowsIDESwitchToNativeMode;
+ BOOLEAN IoSpaceUnderNativeIdeControl;
+ BOOLEAN OnDebugPath;
+ PCI_POWER_STATE PowerState;
+ PCI_HEADER_TYPE_DEPENDENT Dependent;
+ ULONGLONG HackFlags;
+ PCI_FUNCTION_RESOURCES *Resources;
+ PCI_FDO_EXTENSION *BridgeFdoExtension;
+ struct _PCI_PDO_EXTENSION *NextBridge;
+ struct _PCI_PDO_EXTENSION *NextHashEntry;
+ PCI_LOCK Lock;
+ PCI_PMC PowerCapabilities;
+ BOOLEAN TargetAgpCapabilityId;
+ USHORT CommandEnables;
+ USHORT InitialCommand;
+} PCI_PDO_EXTENSION, *PPCI_PDO_EXTENSION;
+
//
// IRP Dispatch Function Type
//
typedef NTSTATUS (NTAPI *PCI_DISPATCH_FUNCTION)(
IN PIRP Irp,
IN PIO_STACK_LOCATION IoStackLocation,
- IN PPCI_FDO_EXTENSION DeviceExtension
+ IN PVOID DeviceExtension
);
//
//
struct _PCI_INTERFACE;
typedef NTSTATUS (NTAPI *PCI_INTERFACE_CONSTRUCTOR)(
- IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN PVOID DeviceExtension,
IN PVOID Instance,
IN PVOID InterfaceData,
IN USHORT Version,
//
typedef struct _PCI_INTERFACE
{
- LPGUID InterfaceType;
+ CONST GUID *InterfaceType;
USHORT MinSize;
USHORT MinVersion;
USHORT MaxVersion;
//ARBITER_INSTANCE CommonInstance; FIXME: Need Arbiter Headers
} PCI_ARBITER_INSTANCE, *PPCI_ARBITER_INSTANCE;
+//
+// PCI Verifier Data
+//
+typedef struct _PCI_VERIFIER_DATA
+{
+ ULONG FailureCode;
+ VF_FAILURE_CLASS FailureClass;
+ ULONG AssertionControl;
+ PCHAR DebuggerMessageText;
+} PCI_VERIFIER_DATA, *PPCI_VERIFIER_DATA;
+
//
// IRP Dispatch Routines
//
IN PPCI_FDO_EXTENSION DeviceExtension
);
+NTSTATUS
+NTAPI
+PciPassIrpFromFdoToPdo(
+ IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN PIRP Irp
+);
+
+NTSTATUS
+NTAPI
+PciCallDownIrpStack(
+ IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN PIRP Irp
+);
+
+NTSTATUS
+NTAPI
+PciIrpInvalidDeviceRequest(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
+);
+
+//
+// Power Routines
+//
+NTSTATUS
+NTAPI
+PciFdoWaitWake(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciFdoSetPowerState(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciFdoIrpQueryPower(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciSetPowerManagedDevicePowerState(
+ IN PPCI_PDO_EXTENSION DeviceExtension,
+ IN DEVICE_POWER_STATE DeviceState,
+ IN BOOLEAN IrpSet
+);
+
//
// Bus FDO Routines
//
IN PDEVICE_OBJECT PhysicalDeviceObject
);
-//
-// HAL Callback/Hook Routines
-//
-VOID
+NTSTATUS
NTAPI
-PciHookHal(
- VOID
+PciFdoIrpStartDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
);
-//
-// PCI Verifier Routines
-//
-VOID
+NTSTATUS
NTAPI
-PciVerifierInit(
- IN PDRIVER_OBJECT DriverObject
+PciFdoIrpQueryRemoveDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
);
-//
-// Utility Routines
-//
-BOOLEAN
+NTSTATUS
NTAPI
-PciStringToUSHORT(
- IN PWCHAR String,
- OUT PUSHORT Value
+PciFdoIrpRemoveDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
);
-BOOLEAN
+NTSTATUS
NTAPI
-PciIsDatacenter(
- VOID
+PciFdoIrpCancelRemoveDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
);
NTSTATUS
NTAPI
-PciBuildDefaultExclusionLists(
- VOID
+PciFdoIrpStopDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
);
-BOOLEAN
+NTSTATUS
NTAPI
-PciUnicodeStringStrStr(
- IN PUNICODE_STRING InputString,
- IN PCUNICODE_STRING EqualString,
- IN BOOLEAN CaseInSensitive
+PciFdoIrpQueryStopDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
);
-BOOLEAN
+NTSTATUS
NTAPI
-PciOpenKey(
- IN PWCHAR KeyName,
- IN HANDLE RootKey,
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE KeyHandle,
- OUT PNTSTATUS KeyStatus
+PciFdoIrpCancelStopDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
);
NTSTATUS
NTAPI
-PciGetRegistryValue(
- IN PWCHAR ValueName,
- IN PWCHAR KeyName,
- IN HANDLE RootHandle,
- IN ULONG Type,
- OUT PVOID *OutputBuffer,
- OUT PULONG OutputLength
+PciFdoIrpQueryDeviceRelations(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
);
-PPCI_FDO_EXTENSION
+NTSTATUS
NTAPI
-PciFindParentPciFdoExtension(
- IN PDEVICE_OBJECT DeviceObject,
- IN PKEVENT Lock
+PciFdoIrpQueryInterface(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
);
-VOID
+NTSTATUS
NTAPI
-PciInsertEntryAtTail(
- IN PSINGLE_LIST_ENTRY ListHead,
- IN PPCI_FDO_EXTENSION DeviceExtension,
- IN PKEVENT Lock
+PciFdoIrpQueryCapabilities(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
);
NTSTATUS
NTAPI
-PciGetDeviceProperty(
- IN PDEVICE_OBJECT DeviceObject,
- IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
- OUT PVOID *OutputBuffer
+PciFdoIrpDeviceUsageNotification(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
);
NTSTATUS
NTAPI
-PciSendIoctl(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG IoControlCode,
- IN PVOID InputBuffer,
- IN ULONG InputBufferLength,
- IN PVOID OutputBuffer,
- IN ULONG OutputBufferLength
+PciFdoIrpSurpriseRemoval(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
);
-VOID
+NTSTATUS
NTAPI
-PcipLinkSecondaryExtension(
- IN PSINGLE_LIST_ENTRY List,
- IN PVOID Lock,
- IN PPCI_SECONDARY_EXTENSION SecondaryExtension,
- IN PCI_SIGNATURE ExtensionType,
- IN PVOID Destructor
+PciFdoIrpQueryLegacyBusInformation(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension
);
//
-// Configuration Routines
+// Device PDO Routines
//
NTSTATUS
NTAPI
-PciGetConfigHandlers(
- IN PPCI_FDO_EXTENSION FdoExtension
+PciPdoCreate(
+ IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN PCI_SLOT_NUMBER Slot,
+ OUT PDEVICE_OBJECT *PdoDeviceObject
);
-//
-// State Machine Logic Transition Routines
-//
-VOID
+NTSTATUS
NTAPI
-PciInitializeState(
- IN PPCI_FDO_EXTENSION DeviceExtension
+PciPdoWaitWake(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
);
-//
-// Arbiter Support
-//
NTSTATUS
NTAPI
-PciInitializeArbiters(
- IN PPCI_FDO_EXTENSION FdoExtension
+PciPdoSetPowerState(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpQueryPower(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpStartDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpQueryRemoveDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpRemoveDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpCancelRemoveDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpStopDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpQueryStopDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpCancelStopDevice(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpQueryDeviceRelations(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpQueryInterface(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpQueryCapabilities(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpQueryResources(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpQueryResourceRequirements(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpQueryDeviceText(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpReadConfig(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpWriteConfig(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpQueryId(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpQueryDeviceState(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpQueryBusInformation(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpDeviceUsageNotification(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpSurpriseRemoval(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciPdoIrpQueryLegacyBusInformation(
+ IN PIRP Irp,
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+
+//
+// HAL Callback/Hook Routines
+//
+VOID
+NTAPI
+PciHookHal(
+ VOID
+);
+
+//
+// PCI Verifier Routines
+//
+VOID
+NTAPI
+PciVerifierInit(
+ IN PDRIVER_OBJECT DriverObject
+);
+
+PPCI_VERIFIER_DATA
+NTAPI
+PciVerifierRetrieveFailureData(
+ IN ULONG FailureCode
+);
+
+//
+// Utility Routines
+//
+BOOLEAN
+NTAPI
+PciStringToUSHORT(
+ IN PWCHAR String,
+ OUT PUSHORT Value
+);
+
+BOOLEAN
+NTAPI
+PciIsDatacenter(
+ VOID
+);
+
+NTSTATUS
+NTAPI
+PciBuildDefaultExclusionLists(
+ VOID
+);
+
+BOOLEAN
+NTAPI
+PciUnicodeStringStrStr(
+ IN PUNICODE_STRING InputString,
+ IN PCUNICODE_STRING EqualString,
+ IN BOOLEAN CaseInSensitive
+);
+
+BOOLEAN
+NTAPI
+PciOpenKey(
+ IN PWCHAR KeyName,
+ IN HANDLE RootKey,
+ IN ACCESS_MASK DesiredAccess,
+ OUT PHANDLE KeyHandle,
+ OUT PNTSTATUS KeyStatus
+);
+
+NTSTATUS
+NTAPI
+PciGetRegistryValue(
+ IN PWCHAR ValueName,
+ IN PWCHAR KeyName,
+ IN HANDLE RootHandle,
+ IN ULONG Type,
+ OUT PVOID *OutputBuffer,
+ OUT PULONG OutputLength
+);
+
+PPCI_FDO_EXTENSION
+NTAPI
+PciFindParentPciFdoExtension(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PKEVENT Lock
+);
+
+VOID
+NTAPI
+PciInsertEntryAtTail(
+ IN PSINGLE_LIST_ENTRY ListHead,
+ IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN PKEVENT Lock
+);
+
+NTSTATUS
+NTAPI
+PciGetDeviceProperty(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
+ OUT PVOID *OutputBuffer
+);
+
+NTSTATUS
+NTAPI
+PciSendIoctl(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG IoControlCode,
+ IN PVOID InputBuffer,
+ IN ULONG InputBufferLength,
+ IN PVOID OutputBuffer,
+ IN ULONG OutputBufferLength
+);
+
+VOID
+NTAPI
+PcipLinkSecondaryExtension(
+ IN PSINGLE_LIST_ENTRY List,
+ IN PVOID Lock,
+ IN PPCI_SECONDARY_EXTENSION SecondaryExtension,
+ IN PCI_SIGNATURE ExtensionType,
+ IN PVOID Destructor
+);
+
+PPCI_SECONDARY_EXTENSION
+NTAPI
+PciFindNextSecondaryExtension(
+ IN PSINGLE_LIST_ENTRY ListHead,
+ IN PCI_SIGNATURE ExtensionType
+);
+
+ULONGLONG
+NTAPI
+PciGetHackFlags(
+ IN USHORT VendorId,
+ IN USHORT DeviceId,
+ IN USHORT SubVendorId,
+ IN USHORT SubSystemId,
+ IN UCHAR RevisionId
+);
+
+PPCI_PDO_EXTENSION
+NTAPI
+PciFindPdoByFunction(
+ IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN ULONG FunctionNumber,
+ IN PPCI_COMMON_HEADER PciData
+);
+
+BOOLEAN
+NTAPI
+PciIsCriticalDeviceClass(
+ IN UCHAR BaseClass,
+ IN UCHAR SubClass
+);
+
+BOOLEAN
+NTAPI
+PciIsDeviceOnDebugPath(
+ IN PPCI_PDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciGetBiosConfig(
+ IN PPCI_PDO_EXTENSION DeviceExtension,
+ OUT PPCI_COMMON_HEADER PciData
+);
+
+NTSTATUS
+NTAPI
+PciSaveBiosConfig(
+ IN PPCI_PDO_EXTENSION DeviceExtension,
+ OUT PPCI_COMMON_HEADER PciData
+);
+
+UCHAR
+NTAPI
+PciReadDeviceCapability(
+ IN PPCI_PDO_EXTENSION DeviceExtension,
+ IN UCHAR Offset,
+ IN ULONG CapabilityId,
+ OUT PPCI_CAPABILITIES_HEADER Buffer,
+ IN ULONG Length
+);
+
+BOOLEAN
+NTAPI
+PciCanDisableDecodes(
+ IN PPCI_PDO_EXTENSION DeviceExtension,
+ IN PPCI_COMMON_HEADER Config,
+ IN ULONGLONG HackFlags,
+ IN BOOLEAN ForPowerDown
+);
+
+//
+// Configuration Routines
+//
+NTSTATUS
+NTAPI
+PciGetConfigHandlers(
+ IN PPCI_FDO_EXTENSION FdoExtension
+);
+
+VOID
+NTAPI
+PciReadSlotConfig(
+ IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN PCI_SLOT_NUMBER Slot,
+ IN PVOID Buffer,
+ IN ULONG Offset,
+ IN ULONG Length
+);
+
+VOID
+NTAPI
+PciWriteDeviceConfig(
+ IN PPCI_PDO_EXTENSION DeviceExtension,
+ IN PVOID Buffer,
+ IN ULONG Offset,
+ IN ULONG Length
+);
+
+VOID
+NTAPI
+PciReadDeviceConfig(
+ IN PPCI_PDO_EXTENSION DeviceExtension,
+ IN PVOID Buffer,
+ IN ULONG Offset,
+ IN ULONG Length
+);
+
+UCHAR
+NTAPI
+PciGetAdjustedInterruptLine(
+ IN PPCI_PDO_EXTENSION PdoExtension
+);
+
+//
+// State Machine Logic Transition Routines
+//
+VOID
+NTAPI
+PciInitializeState(
+ IN PPCI_FDO_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+PciBeginStateTransition(
+ IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN PCI_STATE NewState
+);
+
+NTSTATUS
+NTAPI
+PciCancelStateTransition(
+ IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN PCI_STATE NewState
+);
+
+VOID
+NTAPI
+PciCommitStateTransition(
+ IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN PCI_STATE NewState
+);
+
+
+//
+// Arbiter Support
+//
+NTSTATUS
+NTAPI
+PciInitializeArbiters(
+ IN PPCI_FDO_EXTENSION FdoExtension
+);
+
+NTSTATUS
+NTAPI
+PciInitializeArbiterRanges(
+ IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN PCM_RESOURCE_LIST Resources
+);
+
+//
+// Debug Helpers
+//
+BOOLEAN
+NTAPI
+PciDebugIrpDispatchDisplay(
+ IN PIO_STACK_LOCATION IoStackLocation,
+ IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN USHORT MaxMinor
+);
+
+VOID
+NTAPI
+PciDebugDumpCommonConfig(
+ IN PPCI_COMMON_HEADER PciData
+);
+
+//
+// Interface Support
+//
+NTSTATUS
+NTAPI
+PciQueryInterface(
+ IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN CONST GUID* InterfaceType,
+ IN ULONG Size,
+ IN ULONG Version,
+ IN PVOID InterfaceData,
+ IN PINTERFACE Interface,
+ IN BOOLEAN LastChance
+);
+
+NTSTATUS
+NTAPI
+PciPmeInterfaceInitializer(
+ IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+routeintrf_Initializer(
+ IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+arbusno_Initializer(
+ IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+agpintrf_Initializer(
+ IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+tranirq_Initializer(
+ IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+busintrf_Initializer(
+ IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+armem_Initializer(
+ IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+ario_Initializer(
+ IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+locintrf_Initializer(
+ IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+pcicbintrf_Initializer(
+ IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+lddintrf_Initializer(
+ IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+devpresent_Initializer(
+ IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+agpintrf_Constructor(
+ IN PVOID DeviceExtension,
+ IN PVOID Instance,
+ IN PVOID InterfaceData,
+ IN USHORT Version,
+ IN USHORT Size,
+ IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+arbusno_Constructor(
+ IN PVOID DeviceExtension,
+ IN PVOID Instance,
+ IN PVOID InterfaceData,
+ IN USHORT Version,
+ IN USHORT Size,
+ IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+tranirq_Constructor(
+ IN PVOID DeviceExtension,
+ IN PVOID Instance,
+ IN PVOID InterfaceData,
+ IN USHORT Version,
+ IN USHORT Size,
+ IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+armem_Constructor(
+ IN PVOID DeviceExtension,
+ IN PVOID Instance,
+ IN PVOID InterfaceData,
+ IN USHORT Version,
+ IN USHORT Size,
+ IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+busintrf_Constructor(
+ IN PVOID DeviceExtension,
+ IN PVOID Instance,
+ IN PVOID InterfaceData,
+ IN USHORT Version,
+ IN USHORT Size,
+ IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+ario_Constructor(
+ IN PVOID DeviceExtension,
+ IN PVOID Instance,
+ IN PVOID InterfaceData,
+ IN USHORT Version,
+ IN USHORT Size,
+ IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+pcicbintrf_Constructor(
+ IN PVOID DeviceExtension,
+ IN PVOID Instance,
+ IN PVOID InterfaceData,
+ IN USHORT Version,
+ IN USHORT Size,
+ IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+lddintrf_Constructor(
+ IN PVOID DeviceExtension,
+ IN PVOID Instance,
+ IN PVOID InterfaceData,
+ IN USHORT Version,
+ IN USHORT Size,
+ IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+locintrf_Constructor(
+ IN PVOID DeviceExtension,
+ IN PVOID Instance,
+ IN PVOID InterfaceData,
+ IN USHORT Version,
+ IN USHORT Size,
+ IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+PciPmeInterfaceConstructor(
+ IN PVOID DeviceExtension,
+ IN PVOID Instance,
+ IN PVOID InterfaceData,
+ IN USHORT Version,
+ IN USHORT Size,
+ IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+routeintrf_Constructor(
+ IN PVOID DeviceExtension,
+ IN PVOID Instance,
+ IN PVOID InterfaceData,
+ IN USHORT Version,
+ IN USHORT Size,
+ IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+devpresent_Constructor(
+ IN PVOID DeviceExtension,
+ IN PVOID Instance,
+ IN PVOID InterfaceData,
+ IN USHORT Version,
+ IN USHORT Size,
+ IN PINTERFACE Interface
+);
+
+//
+// PCI Enumeration and Resources
+//
+NTSTATUS
+NTAPI
+PciQueryDeviceRelations(
+ IN PPCI_FDO_EXTENSION DeviceExtension,
+ IN OUT PDEVICE_RELATIONS *pDeviceRelations
+);
+
+//
+// Identification Functions
+//
+PWCHAR
+NTAPI
+PciGetDeviceDescriptionMessage(
+ IN UCHAR BaseClass,
+ IN UCHAR SubClass
);
//
extern SINGLE_LIST_ENTRY PciFdoExtensionListHead;
extern KEVENT PciGlobalLock;
extern PPCI_INTERFACE PciInterfaces[];
+extern PCI_INTERFACE ArbiterInterfaceBusNumber;
+extern PCI_INTERFACE ArbiterInterfaceMemory;
+extern PCI_INTERFACE ArbiterInterfaceIo;
+extern PCI_INTERFACE BusHandlerInterface;
+extern PCI_INTERFACE PciRoutingInterface;
+extern PCI_INTERFACE PciCardbusPrivateInterface;
+extern PCI_INTERFACE PciLegacyDeviceDetectionInterface;
+extern PCI_INTERFACE PciPmeInterface;
+extern PCI_INTERFACE PciDevicePresentInterface;
+//extern PCI_INTERFACE PciNativeIdeInterface;
+extern PCI_INTERFACE PciLocationInterface;
+extern PCI_INTERFACE AgpTargetInterface;
+extern PCI_INTERFACE TranslatorInterfaceInterrupt;
+extern PDRIVER_OBJECT PciDriverObject;
+extern PWATCHDOG_TABLE WdTable;
+extern PPCI_HACK_ENTRY PciHackTable;
/* EOF */