2 * PROJECT: ReactOS PCI Bus Driver
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: drivers/bus/pci/pci.h
5 * PURPOSE: Main Header File
6 * PROGRAMMERS: ReactOS Portable Systems Group
15 #include <drivers/pci/pci.h>
16 #include <drivers/acpi/acpi.h>
23 // Tag used in all pool allocations (Pci Bus)
25 #define PCI_POOL_TAG 'BicP'
28 // Checks if the specified FDO is the FDO for the Root PCI Bus
30 #define PCI_IS_ROOT_FDO(x) ((x)->BusRootFdoExtension == x)
33 // Assertions to make sure we are dealing with the right kind of extension
35 #define ASSERT_FDO(x) ASSERT((x)->ExtensionType == PciFdoExtensionType);
36 #define ASSERT_PDO(x) ASSERT((x)->ExtensionType == PciPdoExtensionType);
39 // PCI Hack Entry Name Lengths
41 #define PCI_HACK_ENTRY_SIZE sizeof(L"VVVVdddd") - sizeof(UNICODE_NULL)
42 #define PCI_HACK_ENTRY_REV_SIZE sizeof(L"VVVVddddRR") - sizeof(UNICODE_NULL)
43 #define PCI_HACK_ENTRY_SUBSYS_SIZE sizeof(L"VVVVddddssssIIII") - sizeof(UNICODE_NULL)
44 #define PCI_HACK_ENTRY_FULL_SIZE sizeof(L"VVVVddddssssIIIIRR") - sizeof(UNICODE_NULL)
47 // PCI Hack Entry Flags
49 #define PCI_HACK_HAS_REVISION_INFO 0x01
50 #define PCI_HACK_HAS_SUBSYSTEM_INFO 0x02
53 // PCI Interface Flags
55 #define PCI_INTERFACE_PDO 0x01
56 #define PCI_INTERFACE_FDO 0x02
57 #define PCI_INTERFACE_ROOT 0x04
60 // PCI Skip Function Flags
62 #define PCI_SKIP_DEVICE_ENUMERATION 0x01
63 #define PCI_SKIP_RESOURCE_ENUMERATION 0x02
66 // PCI Apply Hack Flags
68 #define PCI_HACK_FIXUP_BEFORE_CONFIGURATION 0x00
69 #define PCI_HACK_FIXUP_AFTER_CONFIGURATION 0x01
70 #define PCI_HACK_FIXUP_BEFORE_UPDATE 0x03
73 // PCI Debugging Device Support
75 #define MAX_DEBUGGING_DEVICES_SUPPORTED 0x04
78 // PCI Driver Verifier Failures
80 #define PCI_VERIFIER_CODES 0x04
83 // PCI ID Buffer ANSI Strings
85 #define MAX_ANSI_STRINGS 0x08
88 // Device Extension, Interface, Translator and Arbiter Signatures
90 typedef enum _PCI_SIGNATURE
92 PciPdoExtensionType
= 'icP0',
93 PciFdoExtensionType
= 'icP1',
95 PciArb_Memory
= 'icP3',
96 PciArb_Interrupt
= 'icP4',
97 PciArb_BusNumber
= 'icP5',
98 PciTrans_Interrupt
= 'icP6',
99 PciInterface_BusHandler
= 'icP7',
100 PciInterface_IntRouteHandler
= 'icP8',
101 PciInterface_PciCb
= 'icP9',
102 PciInterface_LegacyDeviceDetection
= 'icP:',
103 PciInterface_PmeHandler
= 'icP;',
104 PciInterface_DevicePresent
= 'icP<',
105 PciInterface_NativeIde
= 'icP=',
106 PciInterface_AgpTarget
= 'icP>',
107 PciInterface_Location
= 'icP?'
108 } PCI_SIGNATURE
, *PPCI_SIGNATURE
;
111 // Driver-handled PCI Device Types
113 typedef enum _PCI_DEVICE_TYPES
118 PciTypeCardbusBridge
,
123 // Device Extension Logic States
125 typedef enum _PCI_STATE
132 PciSynchronizedOperation
,
137 // IRP Dispatch Logic Style
139 typedef enum _PCI_DISPATCH_STYLE
145 } PCI_DISPATCH_STYLE
;
148 // PCI Hack Entry Information
150 typedef struct _PCI_HACK_ENTRY
159 } PCI_HACK_ENTRY
, *PPCI_HACK_ENTRY
;
162 // Power State Information for Device Extension
164 typedef struct _PCI_POWER_STATE
166 SYSTEM_POWER_STATE CurrentSystemState
;
167 DEVICE_POWER_STATE CurrentDeviceState
;
168 SYSTEM_POWER_STATE SystemWakeLevel
;
169 DEVICE_POWER_STATE DeviceWakeLevel
;
170 DEVICE_POWER_STATE SystemStateMapping
[7];
172 PVOID SavedCancelRoutine
;
176 } PCI_POWER_STATE
, *PPCI_POWER_STATE
;
179 // Internal PCI Lock Structure
181 typedef struct _PCI_LOCK
185 } PCI_LOCK
, *PPCI_LOCK
;
188 // Device Extension for a Bus FDO
190 typedef struct _PCI_FDO_EXTENSION
192 SINGLE_LIST_ENTRY List
;
194 struct _PCI_MJ_DISPATCH_TABLE
*IrpDispatchTable
;
196 BOOLEAN TentativeNextState
;
197 KEVENT SecondaryExtLock
;
198 PDEVICE_OBJECT PhysicalDeviceObject
;
199 PDEVICE_OBJECT FunctionalDeviceObject
;
200 PDEVICE_OBJECT AttachedDeviceObject
;
201 KEVENT ChildListLock
;
202 struct _PCI_PDO_EXTENSION
*ChildPdoList
;
203 struct _PCI_FDO_EXTENSION
*BusRootFdoExtension
;
204 struct _PCI_FDO_EXTENSION
*ParentFdoExtension
;
205 struct _PCI_PDO_EXTENSION
*ChildBridgePdoList
;
206 PPCI_BUS_INTERFACE_STANDARD PciBusInterface
;
207 BOOLEAN MaxSubordinateBus
;
208 BUS_HANDLER
*BusHandler
;
213 BOOLEAN ArbitersInitialized
;
214 BOOLEAN BrokenVideoHackApplied
;
216 PCI_POWER_STATE PowerState
;
217 SINGLE_LIST_ENTRY SecondaryExtension
;
218 LONG ChildWaitWakeCount
;
219 PPCI_COMMON_CONFIG PreservedConfig
;
224 BOOLEAN CacheLineSize
;
225 BOOLEAN LatencyTimer
;
230 } PCI_FDO_EXTENSION
, *PPCI_FDO_EXTENSION
;
232 typedef struct _PCI_FUNCTION_RESOURCES
234 IO_RESOURCE_DESCRIPTOR Limit
[7];
235 CM_PARTIAL_RESOURCE_DESCRIPTOR Current
[7];
236 } PCI_FUNCTION_RESOURCES
, *PPCI_FUNCTION_RESOURCES
;
238 typedef union _PCI_HEADER_TYPE_DEPENDENT
248 UCHAR SubordinateBus
;
249 UCHAR SubtractiveDecode
:1;
252 UCHAR WeChangedBusNumbers
:1;
253 UCHAR IsaBitRequired
:1;
259 } PCI_HEADER_TYPE_DEPENDENT
, *PPCI_HEADER_TYPE_DEPENDENT
;
261 typedef struct _PCI_PDO_EXTENSION
265 struct _PCI_MJ_DISPATCH_TABLE
*IrpDispatchTable
;
267 BOOLEAN TentativeNextState
;
269 KEVENT SecondaryExtLock
;
270 PCI_SLOT_NUMBER Slot
;
271 PDEVICE_OBJECT PhysicalDeviceObject
;
272 PPCI_FDO_EXTENSION ParentFdoExtension
;
273 SINGLE_LIST_ENTRY SecondaryExtension
;
274 LONG BusInterfaceReferenceCount
;
275 LONG AgpInterfaceReferenceCount
;
278 USHORT SubsystemVendorId
;
284 BOOLEAN AdditionalResourceCount
;
285 BOOLEAN AdjustedInterruptLine
;
286 BOOLEAN InterruptPin
;
287 BOOLEAN RawInterruptLine
;
288 BOOLEAN CapabilitiesPtr
;
289 BOOLEAN SavedLatencyTimer
;
290 BOOLEAN SavedCacheLineSize
;
293 BOOLEAN ReportedMissing
;
294 BOOLEAN ExpectedWritebackFailure
;
295 BOOLEAN NoTouchPmeEnable
;
296 BOOLEAN LegacyDriver
;
297 BOOLEAN UpdateHardware
;
299 BOOLEAN DisablePowerDown
;
300 BOOLEAN NeedsHotPlugConfiguration
;
301 BOOLEAN SwitchedIDEToNativeMode
;
302 BOOLEAN BIOSAllowsIDESwitchToNativeMode
;
303 BOOLEAN IoSpaceUnderNativeIdeControl
;
305 PCI_POWER_STATE PowerState
;
306 PCI_HEADER_TYPE_DEPENDENT Dependent
;
308 PCI_FUNCTION_RESOURCES
*Resources
;
309 PCI_FDO_EXTENSION
*BridgeFdoExtension
;
310 struct _PCI_PDO_EXTENSION
*NextBridge
;
311 struct _PCI_PDO_EXTENSION
*NextHashEntry
;
313 PCI_PMC PowerCapabilities
;
314 BOOLEAN TargetAgpCapabilityId
;
315 USHORT CommandEnables
;
316 USHORT InitialCommand
;
317 } PCI_PDO_EXTENSION
, *PPCI_PDO_EXTENSION
;
320 // IRP Dispatch Function Type
322 typedef NTSTATUS (NTAPI
*PCI_DISPATCH_FUNCTION
)(
324 IN PIO_STACK_LOCATION IoStackLocation
,
325 IN PVOID DeviceExtension
329 // IRP Dispatch Minor Table
331 typedef struct _PCI_MN_DISPATCH_TABLE
333 PCI_DISPATCH_STYLE DispatchStyle
;
334 PCI_DISPATCH_FUNCTION DispatchFunction
;
335 } PCI_MN_DISPATCH_TABLE
, *PPCI_MN_DISPATCH_TABLE
;
338 // IRP Dispatch Major Table
340 typedef struct _PCI_MJ_DISPATCH_TABLE
342 ULONG PnpIrpMaximumMinorFunction
;
343 PPCI_MN_DISPATCH_TABLE PnpIrpDispatchTable
;
344 ULONG PowerIrpMaximumMinorFunction
;
345 PPCI_MN_DISPATCH_TABLE PowerIrpDispatchTable
;
346 PCI_DISPATCH_STYLE SystemControlIrpDispatchStyle
;
347 PCI_DISPATCH_FUNCTION SystemControlIrpDispatchFunction
;
348 PCI_DISPATCH_STYLE OtherIrpDispatchStyle
;
349 PCI_DISPATCH_FUNCTION OtherIrpDispatchFunction
;
350 } PCI_MJ_DISPATCH_TABLE
, *PPCI_MJ_DISPATCH_TABLE
;
353 // Generic PCI Interface Constructor and Initializer
355 struct _PCI_INTERFACE
;
356 typedef NTSTATUS (NTAPI
*PCI_INTERFACE_CONSTRUCTOR
)(
357 IN PVOID DeviceExtension
,
359 IN PVOID InterfaceData
,
362 IN PINTERFACE Interface
365 typedef NTSTATUS (NTAPI
*PCI_INTERFACE_INITIALIZER
)(
370 // Generic PCI Interface (Interface, Translator, Arbiter)
372 typedef struct _PCI_INTERFACE
374 CONST GUID
*InterfaceType
;
380 PCI_SIGNATURE Signature
;
381 PCI_INTERFACE_CONSTRUCTOR Constructor
;
382 PCI_INTERFACE_INITIALIZER Initializer
;
383 } PCI_INTERFACE
, *PPCI_INTERFACE
;
386 // Generic Secondary Extension Instance Header (Interface, Translator, Arbiter)
388 typedef struct PCI_SECONDARY_EXTENSION
390 SINGLE_LIST_ENTRY List
;
391 PCI_SIGNATURE ExtensionType
;
393 } PCI_SECONDARY_EXTENSION
, *PPCI_SECONDARY_EXTENSION
;
396 // PCI Arbiter Instance
398 typedef struct PCI_ARBITER_INSTANCE
400 PCI_SECONDARY_EXTENSION Header
;
401 PPCI_INTERFACE Interface
;
402 PPCI_FDO_EXTENSION BusFdoExtension
;
403 WCHAR InstanceName
[24];
404 //ARBITER_INSTANCE CommonInstance; FIXME: Need Arbiter Headers
405 } PCI_ARBITER_INSTANCE
, *PPCI_ARBITER_INSTANCE
;
410 typedef struct _PCI_VERIFIER_DATA
413 VF_FAILURE_CLASS FailureClass
;
414 ULONG AssertionControl
;
415 PCHAR DebuggerMessageText
;
416 } PCI_VERIFIER_DATA
, *PPCI_VERIFIER_DATA
;
419 // PCI ID Buffer Descriptor
421 typedef struct _PCI_ID_BUFFER
424 ANSI_STRING Strings
[MAX_ANSI_STRINGS
];
425 ULONG StringSize
[MAX_ANSI_STRINGS
];
428 CHAR BufferData
[256];
429 } PCI_ID_BUFFER
, *PPCI_ID_BUFFER
;
432 // PCI Configuration Callbacks
434 struct _PCI_CONFIGURATOR_CONTEXT
;
436 typedef VOID (NTAPI
*PCI_CONFIGURATOR_INITIALIZE
)(
437 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
440 typedef VOID (NTAPI
*PCI_CONFIGURATOR_RESTORE_CURRENT
)(
441 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
444 typedef VOID (NTAPI
*PCI_CONFIGURATOR_SAVE_LIMITS
)(
445 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
448 typedef VOID (NTAPI
*PCI_CONFIGURATOR_SAVE_CURRENT_SETTINGS
)(
449 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
452 typedef VOID (NTAPI
*PCI_CONFIGURATOR_CHANGE_RESOURCE_SETTINGS
)(
453 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
456 typedef VOID (NTAPI
*PCI_CONFIGURATOR_GET_ADDITIONAL_RESOURCE_DESCRIPTORS
)(
457 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
,
458 IN PPCI_COMMON_HEADER PciData
,
459 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
462 typedef VOID (NTAPI
*PCI_CONFIGURATOR_RESET_DEVICE
)(
463 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
469 typedef struct _PCI_CONFIGURATOR
471 PCI_CONFIGURATOR_INITIALIZE Initialize
;
472 PCI_CONFIGURATOR_RESTORE_CURRENT RestoreCurrent
;
473 PCI_CONFIGURATOR_SAVE_LIMITS SaveLimits
;
474 PCI_CONFIGURATOR_SAVE_CURRENT_SETTINGS SaveCurrentSettings
;
475 PCI_CONFIGURATOR_CHANGE_RESOURCE_SETTINGS ChangeResourceSettings
;
476 PCI_CONFIGURATOR_GET_ADDITIONAL_RESOURCE_DESCRIPTORS GetAdditionalResourceDescriptors
;
477 PCI_CONFIGURATOR_RESET_DEVICE ResetDevice
;
478 } PCI_CONFIGURATOR
, *PPCI_CONFIGURATOR
;
481 // PCI Configurator Context
483 typedef struct _PCI_CONFIGURATOR_CONTEXT
485 PPCI_PDO_EXTENSION PdoExtension
;
486 PPCI_COMMON_HEADER Current
;
487 PPCI_COMMON_HEADER PciData
;
488 PPCI_CONFIGURATOR Configurator
;
489 USHORT SecondaryStatus
;
492 } PCI_CONFIGURATOR_CONTEXT
, *PPCI_CONFIGURATOR_CONTEXT
;
497 typedef VOID (NTAPI
*PCI_IPI_FUNCTION
)(
499 IN PPCI_CONFIGURATOR_CONTEXT Context
505 typedef struct _PCI_IPI_CONTEXT
509 PPCI_PDO_EXTENSION PdoExtension
;
510 PCI_IPI_FUNCTION Function
;
512 } PCI_IPI_CONTEXT
, *PPCI_IPI_CONTEXT
;
515 // IRP Dispatch Routines
520 IN PDEVICE_OBJECT DeviceObject
,
528 IN PIO_STACK_LOCATION IoStackLocation
,
529 IN PPCI_FDO_EXTENSION DeviceExtension
534 PciPassIrpFromFdoToPdo(
535 IN PPCI_FDO_EXTENSION DeviceExtension
,
542 IN PPCI_FDO_EXTENSION DeviceExtension
,
548 PciIrpInvalidDeviceRequest(
550 IN PIO_STACK_LOCATION IoStackLocation
,
551 IN PPCI_FDO_EXTENSION DeviceExtension
561 IN PIO_STACK_LOCATION IoStackLocation
,
562 IN PPCI_FDO_EXTENSION DeviceExtension
569 IN PIO_STACK_LOCATION IoStackLocation
,
570 IN PPCI_FDO_EXTENSION DeviceExtension
577 IN PIO_STACK_LOCATION IoStackLocation
,
578 IN PPCI_FDO_EXTENSION DeviceExtension
583 PciSetPowerManagedDevicePowerState(
584 IN PPCI_PDO_EXTENSION DeviceExtension
,
585 IN DEVICE_POWER_STATE DeviceState
,
595 IN PDRIVER_OBJECT DriverObject
,
596 IN PDEVICE_OBJECT PhysicalDeviceObject
601 PciFdoIrpStartDevice(
603 IN PIO_STACK_LOCATION IoStackLocation
,
604 IN PPCI_FDO_EXTENSION DeviceExtension
609 PciFdoIrpQueryRemoveDevice(
611 IN PIO_STACK_LOCATION IoStackLocation
,
612 IN PPCI_FDO_EXTENSION DeviceExtension
617 PciFdoIrpRemoveDevice(
619 IN PIO_STACK_LOCATION IoStackLocation
,
620 IN PPCI_FDO_EXTENSION DeviceExtension
625 PciFdoIrpCancelRemoveDevice(
627 IN PIO_STACK_LOCATION IoStackLocation
,
628 IN PPCI_FDO_EXTENSION DeviceExtension
635 IN PIO_STACK_LOCATION IoStackLocation
,
636 IN PPCI_FDO_EXTENSION DeviceExtension
641 PciFdoIrpQueryStopDevice(
643 IN PIO_STACK_LOCATION IoStackLocation
,
644 IN PPCI_FDO_EXTENSION DeviceExtension
649 PciFdoIrpCancelStopDevice(
651 IN PIO_STACK_LOCATION IoStackLocation
,
652 IN PPCI_FDO_EXTENSION DeviceExtension
657 PciFdoIrpQueryDeviceRelations(
659 IN PIO_STACK_LOCATION IoStackLocation
,
660 IN PPCI_FDO_EXTENSION DeviceExtension
665 PciFdoIrpQueryInterface(
667 IN PIO_STACK_LOCATION IoStackLocation
,
668 IN PPCI_FDO_EXTENSION DeviceExtension
673 PciFdoIrpQueryCapabilities(
675 IN PIO_STACK_LOCATION IoStackLocation
,
676 IN PPCI_FDO_EXTENSION DeviceExtension
681 PciFdoIrpDeviceUsageNotification(
683 IN PIO_STACK_LOCATION IoStackLocation
,
684 IN PPCI_FDO_EXTENSION DeviceExtension
689 PciFdoIrpSurpriseRemoval(
691 IN PIO_STACK_LOCATION IoStackLocation
,
692 IN PPCI_FDO_EXTENSION DeviceExtension
697 PciFdoIrpQueryLegacyBusInformation(
699 IN PIO_STACK_LOCATION IoStackLocation
,
700 IN PPCI_FDO_EXTENSION DeviceExtension
704 // Device PDO Routines
709 IN PPCI_FDO_EXTENSION DeviceExtension
,
710 IN PCI_SLOT_NUMBER Slot
,
711 OUT PDEVICE_OBJECT
*PdoDeviceObject
718 IN PIO_STACK_LOCATION IoStackLocation
,
719 IN PPCI_PDO_EXTENSION DeviceExtension
726 IN PIO_STACK_LOCATION IoStackLocation
,
727 IN PPCI_PDO_EXTENSION DeviceExtension
734 IN PIO_STACK_LOCATION IoStackLocation
,
735 IN PPCI_PDO_EXTENSION DeviceExtension
740 PciPdoIrpStartDevice(
742 IN PIO_STACK_LOCATION IoStackLocation
,
743 IN PPCI_PDO_EXTENSION DeviceExtension
748 PciPdoIrpQueryRemoveDevice(
750 IN PIO_STACK_LOCATION IoStackLocation
,
751 IN PPCI_PDO_EXTENSION DeviceExtension
756 PciPdoIrpRemoveDevice(
758 IN PIO_STACK_LOCATION IoStackLocation
,
759 IN PPCI_PDO_EXTENSION DeviceExtension
764 PciPdoIrpCancelRemoveDevice(
766 IN PIO_STACK_LOCATION IoStackLocation
,
767 IN PPCI_PDO_EXTENSION DeviceExtension
774 IN PIO_STACK_LOCATION IoStackLocation
,
775 IN PPCI_PDO_EXTENSION DeviceExtension
780 PciPdoIrpQueryStopDevice(
782 IN PIO_STACK_LOCATION IoStackLocation
,
783 IN PPCI_PDO_EXTENSION DeviceExtension
788 PciPdoIrpCancelStopDevice(
790 IN PIO_STACK_LOCATION IoStackLocation
,
791 IN PPCI_PDO_EXTENSION DeviceExtension
796 PciPdoIrpQueryDeviceRelations(
798 IN PIO_STACK_LOCATION IoStackLocation
,
799 IN PPCI_PDO_EXTENSION DeviceExtension
804 PciPdoIrpQueryInterface(
806 IN PIO_STACK_LOCATION IoStackLocation
,
807 IN PPCI_PDO_EXTENSION DeviceExtension
812 PciPdoIrpQueryCapabilities(
814 IN PIO_STACK_LOCATION IoStackLocation
,
815 IN PPCI_PDO_EXTENSION DeviceExtension
820 PciPdoIrpQueryResources(
822 IN PIO_STACK_LOCATION IoStackLocation
,
823 IN PPCI_PDO_EXTENSION DeviceExtension
828 PciPdoIrpQueryResourceRequirements(
830 IN PIO_STACK_LOCATION IoStackLocation
,
831 IN PPCI_PDO_EXTENSION DeviceExtension
836 PciPdoIrpQueryDeviceText(
838 IN PIO_STACK_LOCATION IoStackLocation
,
839 IN PPCI_PDO_EXTENSION DeviceExtension
846 IN PIO_STACK_LOCATION IoStackLocation
,
847 IN PPCI_PDO_EXTENSION DeviceExtension
852 PciPdoIrpWriteConfig(
854 IN PIO_STACK_LOCATION IoStackLocation
,
855 IN PPCI_PDO_EXTENSION DeviceExtension
862 IN PIO_STACK_LOCATION IoStackLocation
,
863 IN PPCI_PDO_EXTENSION DeviceExtension
868 PciPdoIrpQueryDeviceState(
870 IN PIO_STACK_LOCATION IoStackLocation
,
871 IN PPCI_PDO_EXTENSION DeviceExtension
876 PciPdoIrpQueryBusInformation(
878 IN PIO_STACK_LOCATION IoStackLocation
,
879 IN PPCI_PDO_EXTENSION DeviceExtension
884 PciPdoIrpDeviceUsageNotification(
886 IN PIO_STACK_LOCATION IoStackLocation
,
887 IN PPCI_PDO_EXTENSION DeviceExtension
892 PciPdoIrpSurpriseRemoval(
894 IN PIO_STACK_LOCATION IoStackLocation
,
895 IN PPCI_PDO_EXTENSION DeviceExtension
900 PciPdoIrpQueryLegacyBusInformation(
902 IN PIO_STACK_LOCATION IoStackLocation
,
903 IN PPCI_PDO_EXTENSION DeviceExtension
908 // HAL Callback/Hook Routines
917 // PCI Verifier Routines
922 IN PDRIVER_OBJECT DriverObject
927 PciVerifierRetrieveFailureData(
949 PciBuildDefaultExclusionLists(
955 PciUnicodeStringStrStr(
956 IN PUNICODE_STRING InputString
,
957 IN PCUNICODE_STRING EqualString
,
958 IN BOOLEAN CaseInSensitive
966 IN ACCESS_MASK DesiredAccess
,
967 OUT PHANDLE KeyHandle
,
968 OUT PNTSTATUS KeyStatus
976 IN HANDLE RootHandle
,
978 OUT PVOID
*OutputBuffer
,
979 OUT PULONG OutputLength
984 PciFindParentPciFdoExtension(
985 IN PDEVICE_OBJECT DeviceObject
,
991 PciInsertEntryAtTail(
992 IN PSINGLE_LIST_ENTRY ListHead
,
993 IN PPCI_FDO_EXTENSION DeviceExtension
,
999 PciGetDeviceProperty(
1000 IN PDEVICE_OBJECT DeviceObject
,
1001 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
1002 OUT PVOID
*OutputBuffer
1008 IN PDEVICE_OBJECT DeviceObject
,
1009 IN ULONG IoControlCode
,
1010 IN PVOID InputBuffer
,
1011 IN ULONG InputBufferLength
,
1012 IN PVOID OutputBuffer
,
1013 IN ULONG OutputBufferLength
1018 PcipLinkSecondaryExtension(
1019 IN PSINGLE_LIST_ENTRY List
,
1021 IN PPCI_SECONDARY_EXTENSION SecondaryExtension
,
1022 IN PCI_SIGNATURE ExtensionType
,
1026 PPCI_SECONDARY_EXTENSION
1028 PciFindNextSecondaryExtension(
1029 IN PSINGLE_LIST_ENTRY ListHead
,
1030 IN PCI_SIGNATURE ExtensionType
1038 IN USHORT SubVendorId
,
1039 IN USHORT SubSystemId
,
1045 PciFindPdoByFunction(
1046 IN PPCI_FDO_EXTENSION DeviceExtension
,
1047 IN ULONG FunctionNumber
,
1048 IN PPCI_COMMON_HEADER PciData
1053 PciIsCriticalDeviceClass(
1060 PciIsDeviceOnDebugPath(
1061 IN PPCI_PDO_EXTENSION DeviceExtension
1067 IN PPCI_PDO_EXTENSION DeviceExtension
,
1068 OUT PPCI_COMMON_HEADER PciData
1074 IN PPCI_PDO_EXTENSION DeviceExtension
,
1075 OUT PPCI_COMMON_HEADER PciData
1080 PciReadDeviceCapability(
1081 IN PPCI_PDO_EXTENSION DeviceExtension
,
1083 IN ULONG CapabilityId
,
1084 OUT PPCI_CAPABILITIES_HEADER Buffer
,
1090 PciCanDisableDecodes(
1091 IN PPCI_PDO_EXTENSION DeviceExtension
,
1092 IN PPCI_COMMON_HEADER Config
,
1093 IN ULONGLONG HackFlags
,
1094 IN BOOLEAN ForPowerDown
1099 PciClassifyDeviceType(
1100 IN PPCI_PDO_EXTENSION PdoExtension
1105 PciExecuteCriticalSystemRoutine(
1106 IN ULONG_PTR IpiContext
1111 PciCreateIoDescriptorFromBarLimit(
1112 PIO_RESOURCE_DESCRIPTOR ResourceDescriptor
,
1119 PciIsSlotPresentInParentMethod(
1120 IN PPCI_PDO_EXTENSION PdoExtension
,
1127 IN PPCI_PDO_EXTENSION PdoExtension
,
1134 PciQueryBusInformation(
1135 IN PPCI_PDO_EXTENSION PdoExtension
,
1136 IN PPNP_BUS_INFORMATION
* Buffer
1141 PciQueryCapabilities(
1142 IN PPCI_PDO_EXTENSION PdoExtension
,
1143 IN OUT PDEVICE_CAPABILITIES DeviceCapability
1147 // Configuration Routines
1151 PciGetConfigHandlers(
1152 IN PPCI_FDO_EXTENSION FdoExtension
1158 IN PPCI_FDO_EXTENSION DeviceExtension
,
1159 IN PCI_SLOT_NUMBER Slot
,
1167 PciWriteDeviceConfig(
1168 IN PPCI_PDO_EXTENSION DeviceExtension
,
1176 PciReadDeviceConfig(
1177 IN PPCI_PDO_EXTENSION DeviceExtension
,
1185 PciGetAdjustedInterruptLine(
1186 IN PPCI_PDO_EXTENSION PdoExtension
1190 // State Machine Logic Transition Routines
1195 IN PPCI_FDO_EXTENSION DeviceExtension
1200 PciBeginStateTransition(
1201 IN PPCI_FDO_EXTENSION DeviceExtension
,
1202 IN PCI_STATE NewState
1207 PciCancelStateTransition(
1208 IN PPCI_FDO_EXTENSION DeviceExtension
,
1209 IN PCI_STATE NewState
1214 PciCommitStateTransition(
1215 IN PPCI_FDO_EXTENSION DeviceExtension
,
1216 IN PCI_STATE NewState
1224 PciInitializeArbiters(
1225 IN PPCI_FDO_EXTENSION FdoExtension
1230 PciInitializeArbiterRanges(
1231 IN PPCI_FDO_EXTENSION DeviceExtension
,
1232 IN PCM_RESOURCE_LIST Resources
1240 PciDebugIrpDispatchDisplay(
1241 IN PIO_STACK_LOCATION IoStackLocation
,
1242 IN PPCI_FDO_EXTENSION DeviceExtension
,
1248 PciDebugDumpCommonConfig(
1249 IN PPCI_COMMON_HEADER PciData
1254 PciDebugDumpQueryCapabilities(
1255 IN PDEVICE_CAPABILITIES DeviceCaps
1259 // Interface Support
1264 IN PPCI_FDO_EXTENSION DeviceExtension
,
1265 IN CONST GUID
* InterfaceType
,
1268 IN PVOID InterfaceData
,
1269 IN PINTERFACE Interface
,
1270 IN BOOLEAN LastChance
1275 PciPmeInterfaceInitializer(
1281 routeintrf_Initializer(
1287 arbusno_Initializer(
1293 agpintrf_Initializer(
1299 tranirq_Initializer(
1305 busintrf_Initializer(
1323 locintrf_Initializer(
1329 pcicbintrf_Initializer(
1335 lddintrf_Initializer(
1341 devpresent_Initializer(
1347 agpintrf_Constructor(
1348 IN PVOID DeviceExtension
,
1350 IN PVOID InterfaceData
,
1353 IN PINTERFACE Interface
1358 arbusno_Constructor(
1359 IN PVOID DeviceExtension
,
1361 IN PVOID InterfaceData
,
1364 IN PINTERFACE Interface
1369 tranirq_Constructor(
1370 IN PVOID DeviceExtension
,
1372 IN PVOID InterfaceData
,
1375 IN PINTERFACE Interface
1381 IN PVOID DeviceExtension
,
1383 IN PVOID InterfaceData
,
1386 IN PINTERFACE Interface
1391 busintrf_Constructor(
1392 IN PVOID DeviceExtension
,
1394 IN PVOID InterfaceData
,
1397 IN PINTERFACE Interface
1403 IN PVOID DeviceExtension
,
1405 IN PVOID InterfaceData
,
1408 IN PINTERFACE Interface
1413 ario_ApplyBrokenVideoHack(
1414 IN PPCI_FDO_EXTENSION FdoExtension
1419 pcicbintrf_Constructor(
1420 IN PVOID DeviceExtension
,
1422 IN PVOID InterfaceData
,
1425 IN PINTERFACE Interface
1430 lddintrf_Constructor(
1431 IN PVOID DeviceExtension
,
1433 IN PVOID InterfaceData
,
1436 IN PINTERFACE Interface
1441 locintrf_Constructor(
1442 IN PVOID DeviceExtension
,
1444 IN PVOID InterfaceData
,
1447 IN PINTERFACE Interface
1452 PciPmeInterfaceConstructor(
1453 IN PVOID DeviceExtension
,
1455 IN PVOID InterfaceData
,
1458 IN PINTERFACE Interface
1463 routeintrf_Constructor(
1464 IN PVOID DeviceExtension
,
1466 IN PVOID InterfaceData
,
1469 IN PINTERFACE Interface
1474 devpresent_Constructor(
1475 IN PVOID DeviceExtension
,
1477 IN PVOID InterfaceData
,
1480 IN PINTERFACE Interface
1484 // PCI Enumeration and Resources
1488 PciQueryDeviceRelations(
1489 IN PPCI_FDO_EXTENSION DeviceExtension
,
1490 IN OUT PDEVICE_RELATIONS
*pDeviceRelations
1496 IN PPCI_PDO_EXTENSION PdoExtension
,
1497 OUT PCM_RESOURCE_LIST
*Buffer
1502 PciQueryTargetDeviceRelations(
1503 IN PPCI_PDO_EXTENSION PdoExtension
,
1504 IN OUT PDEVICE_RELATIONS
*pDeviceRelations
1509 PciQueryEjectionRelations(
1510 IN PPCI_PDO_EXTENSION PdoExtension
,
1511 IN OUT PDEVICE_RELATIONS
*pDeviceRelations
1516 PciQueryRequirements(
1517 IN PPCI_PDO_EXTENSION PdoExtension
,
1518 IN OUT PIO_RESOURCE_REQUIREMENTS_LIST
*RequirementsList
1522 // Identification Functions
1526 PciGetDeviceDescriptionMessage(
1534 IN PPCI_PDO_EXTENSION PdoExtension
,
1535 IN DEVICE_TEXT_TYPE QueryType
,
1543 IN PPCI_PDO_EXTENSION DeviceExtension
,
1544 IN BUS_QUERY_ID_TYPE QueryType
,
1553 Cardbus_MassageHeaderForLimitsDetermination(
1554 IN PPCI_CONFIGURATOR_CONTEXT Context
1559 Cardbus_SaveCurrentSettings(
1560 IN PPCI_CONFIGURATOR_CONTEXT Context
1566 IN PPCI_CONFIGURATOR_CONTEXT Context
1571 Cardbus_RestoreCurrent(
1572 IN PPCI_CONFIGURATOR_CONTEXT Context
1577 Cardbus_GetAdditionalResourceDescriptors(
1578 IN PPCI_CONFIGURATOR_CONTEXT Context
,
1579 IN PPCI_COMMON_HEADER PciData
,
1580 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
1585 Cardbus_ResetDevice(
1586 IN PPCI_CONFIGURATOR_CONTEXT Context
1591 Cardbus_ChangeResourceSettings(
1592 IN PPCI_CONFIGURATOR_CONTEXT Context
1596 // PCI Device Support
1600 Device_MassageHeaderForLimitsDetermination(
1601 IN PPCI_CONFIGURATOR_CONTEXT Context
1606 Device_SaveCurrentSettings(
1607 IN PPCI_CONFIGURATOR_CONTEXT Context
1613 IN PPCI_CONFIGURATOR_CONTEXT Context
1618 Device_RestoreCurrent(
1619 IN PPCI_CONFIGURATOR_CONTEXT Context
1624 Device_GetAdditionalResourceDescriptors(
1625 IN PPCI_CONFIGURATOR_CONTEXT Context
,
1626 IN PPCI_COMMON_HEADER PciData
,
1627 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
1633 IN PPCI_CONFIGURATOR_CONTEXT Context
1638 Device_ChangeResourceSettings(
1639 IN PPCI_CONFIGURATOR_CONTEXT Context
1643 // PCI-to-PCI Bridge Device Support
1647 PPBridge_MassageHeaderForLimitsDetermination(
1648 IN PPCI_CONFIGURATOR_CONTEXT Context
1653 PPBridge_SaveCurrentSettings(
1654 IN PPCI_CONFIGURATOR_CONTEXT Context
1659 PPBridge_SaveLimits(
1660 IN PPCI_CONFIGURATOR_CONTEXT Context
1665 PPBridge_RestoreCurrent(
1666 IN PPCI_CONFIGURATOR_CONTEXT Context
1671 PPBridge_GetAdditionalResourceDescriptors(
1672 IN PPCI_CONFIGURATOR_CONTEXT Context
,
1673 IN PPCI_COMMON_HEADER PciData
,
1674 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
1679 PPBridge_ResetDevice(
1680 IN PPCI_CONFIGURATOR_CONTEXT Context
1685 PPBridge_ChangeResourceSettings(
1686 IN PPCI_CONFIGURATOR_CONTEXT Context
1690 // External Resources
1692 extern SINGLE_LIST_ENTRY PciFdoExtensionListHead
;
1693 extern KEVENT PciGlobalLock
;
1694 extern PPCI_INTERFACE PciInterfaces
[];
1695 extern PCI_INTERFACE ArbiterInterfaceBusNumber
;
1696 extern PCI_INTERFACE ArbiterInterfaceMemory
;
1697 extern PCI_INTERFACE ArbiterInterfaceIo
;
1698 extern PCI_INTERFACE BusHandlerInterface
;
1699 extern PCI_INTERFACE PciRoutingInterface
;
1700 extern PCI_INTERFACE PciCardbusPrivateInterface
;
1701 extern PCI_INTERFACE PciLegacyDeviceDetectionInterface
;
1702 extern PCI_INTERFACE PciPmeInterface
;
1703 extern PCI_INTERFACE PciDevicePresentInterface
;
1704 //extern PCI_INTERFACE PciNativeIdeInterface;
1705 extern PCI_INTERFACE PciLocationInterface
;
1706 extern PCI_INTERFACE AgpTargetInterface
;
1707 extern PCI_INTERFACE TranslatorInterfaceInterrupt
;
1708 extern PDRIVER_OBJECT PciDriverObject
;
1709 extern PWATCHDOG_TABLE WdTable
;
1710 extern PPCI_HACK_ENTRY PciHackTable
;
1711 extern BOOLEAN PciAssignBusNumbers
;
1712 extern BOOLEAN PciEnableNativeModeATA
;
1713 extern PPCI_IRQ_ROUTING_TABLE PciIrqRoutingTable
;
1714 extern BOOLEAN PciRunningDatacenter
;
1716 /* Exported by NTOS, should this go in the NDK? */
1717 extern NTSYSAPI BOOLEAN InitSafeBootMode
;