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 IDEInNativeMode
;
302 BOOLEAN BIOSAllowsIDESwitchToNativeMode
;
303 BOOLEAN IoSpaceUnderNativeIdeControl
;
305 BOOLEAN IoSpaceNotRequired
;
306 PCI_POWER_STATE PowerState
;
307 PCI_HEADER_TYPE_DEPENDENT Dependent
;
309 PCI_FUNCTION_RESOURCES
*Resources
;
310 PCI_FDO_EXTENSION
*BridgeFdoExtension
;
311 struct _PCI_PDO_EXTENSION
*NextBridge
;
312 struct _PCI_PDO_EXTENSION
*NextHashEntry
;
314 PCI_PMC PowerCapabilities
;
315 BOOLEAN TargetAgpCapabilityId
;
316 USHORT CommandEnables
;
317 USHORT InitialCommand
;
318 } PCI_PDO_EXTENSION
, *PPCI_PDO_EXTENSION
;
321 // IRP Dispatch Function Type
323 typedef NTSTATUS (NTAPI
*PCI_DISPATCH_FUNCTION
)(
325 IN PIO_STACK_LOCATION IoStackLocation
,
326 IN PVOID DeviceExtension
330 // IRP Dispatch Minor Table
332 typedef struct _PCI_MN_DISPATCH_TABLE
334 PCI_DISPATCH_STYLE DispatchStyle
;
335 PCI_DISPATCH_FUNCTION DispatchFunction
;
336 } PCI_MN_DISPATCH_TABLE
, *PPCI_MN_DISPATCH_TABLE
;
339 // IRP Dispatch Major Table
341 typedef struct _PCI_MJ_DISPATCH_TABLE
343 ULONG PnpIrpMaximumMinorFunction
;
344 PPCI_MN_DISPATCH_TABLE PnpIrpDispatchTable
;
345 ULONG PowerIrpMaximumMinorFunction
;
346 PPCI_MN_DISPATCH_TABLE PowerIrpDispatchTable
;
347 PCI_DISPATCH_STYLE SystemControlIrpDispatchStyle
;
348 PCI_DISPATCH_FUNCTION SystemControlIrpDispatchFunction
;
349 PCI_DISPATCH_STYLE OtherIrpDispatchStyle
;
350 PCI_DISPATCH_FUNCTION OtherIrpDispatchFunction
;
351 } PCI_MJ_DISPATCH_TABLE
, *PPCI_MJ_DISPATCH_TABLE
;
354 // Generic PCI Interface Constructor and Initializer
356 struct _PCI_INTERFACE
;
357 typedef NTSTATUS (NTAPI
*PCI_INTERFACE_CONSTRUCTOR
)(
358 IN PVOID DeviceExtension
,
360 IN PVOID InterfaceData
,
363 IN PINTERFACE Interface
366 typedef NTSTATUS (NTAPI
*PCI_INTERFACE_INITIALIZER
)(
371 // Generic PCI Interface (Interface, Translator, Arbiter)
373 typedef struct _PCI_INTERFACE
375 CONST GUID
*InterfaceType
;
381 PCI_SIGNATURE Signature
;
382 PCI_INTERFACE_CONSTRUCTOR Constructor
;
383 PCI_INTERFACE_INITIALIZER Initializer
;
384 } PCI_INTERFACE
, *PPCI_INTERFACE
;
387 // Generic Secondary Extension Instance Header (Interface, Translator, Arbiter)
389 typedef struct PCI_SECONDARY_EXTENSION
391 SINGLE_LIST_ENTRY List
;
392 PCI_SIGNATURE ExtensionType
;
394 } PCI_SECONDARY_EXTENSION
, *PPCI_SECONDARY_EXTENSION
;
397 // PCI Arbiter Instance
399 typedef struct PCI_ARBITER_INSTANCE
401 PCI_SECONDARY_EXTENSION Header
;
402 PPCI_INTERFACE Interface
;
403 PPCI_FDO_EXTENSION BusFdoExtension
;
404 WCHAR InstanceName
[24];
405 //ARBITER_INSTANCE CommonInstance; FIXME: Need Arbiter Headers
406 } PCI_ARBITER_INSTANCE
, *PPCI_ARBITER_INSTANCE
;
411 typedef struct _PCI_VERIFIER_DATA
414 VF_FAILURE_CLASS FailureClass
;
415 ULONG AssertionControl
;
416 PCHAR DebuggerMessageText
;
417 } PCI_VERIFIER_DATA
, *PPCI_VERIFIER_DATA
;
420 // PCI ID Buffer Descriptor
422 typedef struct _PCI_ID_BUFFER
425 ANSI_STRING Strings
[MAX_ANSI_STRINGS
];
426 ULONG StringSize
[MAX_ANSI_STRINGS
];
429 CHAR BufferData
[256];
430 } PCI_ID_BUFFER
, *PPCI_ID_BUFFER
;
433 // PCI Configuration Callbacks
435 struct _PCI_CONFIGURATOR_CONTEXT
;
437 typedef VOID (NTAPI
*PCI_CONFIGURATOR_INITIALIZE
)(
438 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
441 typedef VOID (NTAPI
*PCI_CONFIGURATOR_RESTORE_CURRENT
)(
442 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
445 typedef VOID (NTAPI
*PCI_CONFIGURATOR_SAVE_LIMITS
)(
446 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
449 typedef VOID (NTAPI
*PCI_CONFIGURATOR_SAVE_CURRENT_SETTINGS
)(
450 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
453 typedef VOID (NTAPI
*PCI_CONFIGURATOR_CHANGE_RESOURCE_SETTINGS
)(
454 IN PPCI_PDO_EXTENSION PdoExtension
,
455 IN PPCI_COMMON_HEADER PciData
458 typedef VOID (NTAPI
*PCI_CONFIGURATOR_GET_ADDITIONAL_RESOURCE_DESCRIPTORS
)(
459 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
,
460 IN PPCI_COMMON_HEADER PciData
,
461 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
464 typedef VOID (NTAPI
*PCI_CONFIGURATOR_RESET_DEVICE
)(
465 IN PPCI_PDO_EXTENSION PdoExtension
,
466 IN PPCI_COMMON_HEADER PciData
472 typedef struct _PCI_CONFIGURATOR
474 PCI_CONFIGURATOR_INITIALIZE Initialize
;
475 PCI_CONFIGURATOR_RESTORE_CURRENT RestoreCurrent
;
476 PCI_CONFIGURATOR_SAVE_LIMITS SaveLimits
;
477 PCI_CONFIGURATOR_SAVE_CURRENT_SETTINGS SaveCurrentSettings
;
478 PCI_CONFIGURATOR_CHANGE_RESOURCE_SETTINGS ChangeResourceSettings
;
479 PCI_CONFIGURATOR_GET_ADDITIONAL_RESOURCE_DESCRIPTORS GetAdditionalResourceDescriptors
;
480 PCI_CONFIGURATOR_RESET_DEVICE ResetDevice
;
481 } PCI_CONFIGURATOR
, *PPCI_CONFIGURATOR
;
484 // PCI Configurator Context
486 typedef struct _PCI_CONFIGURATOR_CONTEXT
488 PPCI_PDO_EXTENSION PdoExtension
;
489 PPCI_COMMON_HEADER Current
;
490 PPCI_COMMON_HEADER PciData
;
491 PPCI_CONFIGURATOR Configurator
;
492 USHORT SecondaryStatus
;
495 } PCI_CONFIGURATOR_CONTEXT
, *PPCI_CONFIGURATOR_CONTEXT
;
500 typedef VOID (NTAPI
*PCI_IPI_FUNCTION
)(
508 typedef struct _PCI_IPI_CONTEXT
512 PVOID DeviceExtension
;
513 PCI_IPI_FUNCTION Function
;
515 } PCI_IPI_CONTEXT
, *PPCI_IPI_CONTEXT
;
518 // IRP Dispatch Routines
523 IN PDEVICE_OBJECT DeviceObject
,
531 IN PIO_STACK_LOCATION IoStackLocation
,
532 IN PPCI_FDO_EXTENSION DeviceExtension
537 PciPassIrpFromFdoToPdo(
538 IN PPCI_FDO_EXTENSION DeviceExtension
,
545 IN PPCI_FDO_EXTENSION DeviceExtension
,
551 PciIrpInvalidDeviceRequest(
553 IN PIO_STACK_LOCATION IoStackLocation
,
554 IN PPCI_FDO_EXTENSION DeviceExtension
564 IN PIO_STACK_LOCATION IoStackLocation
,
565 IN PPCI_FDO_EXTENSION DeviceExtension
572 IN PIO_STACK_LOCATION IoStackLocation
,
573 IN PPCI_FDO_EXTENSION DeviceExtension
580 IN PIO_STACK_LOCATION IoStackLocation
,
581 IN PPCI_FDO_EXTENSION DeviceExtension
586 PciSetPowerManagedDevicePowerState(
587 IN PPCI_PDO_EXTENSION DeviceExtension
,
588 IN DEVICE_POWER_STATE DeviceState
,
598 IN PDRIVER_OBJECT DriverObject
,
599 IN PDEVICE_OBJECT PhysicalDeviceObject
604 PciFdoIrpStartDevice(
606 IN PIO_STACK_LOCATION IoStackLocation
,
607 IN PPCI_FDO_EXTENSION DeviceExtension
612 PciFdoIrpQueryRemoveDevice(
614 IN PIO_STACK_LOCATION IoStackLocation
,
615 IN PPCI_FDO_EXTENSION DeviceExtension
620 PciFdoIrpRemoveDevice(
622 IN PIO_STACK_LOCATION IoStackLocation
,
623 IN PPCI_FDO_EXTENSION DeviceExtension
628 PciFdoIrpCancelRemoveDevice(
630 IN PIO_STACK_LOCATION IoStackLocation
,
631 IN PPCI_FDO_EXTENSION DeviceExtension
638 IN PIO_STACK_LOCATION IoStackLocation
,
639 IN PPCI_FDO_EXTENSION DeviceExtension
644 PciFdoIrpQueryStopDevice(
646 IN PIO_STACK_LOCATION IoStackLocation
,
647 IN PPCI_FDO_EXTENSION DeviceExtension
652 PciFdoIrpCancelStopDevice(
654 IN PIO_STACK_LOCATION IoStackLocation
,
655 IN PPCI_FDO_EXTENSION DeviceExtension
660 PciFdoIrpQueryDeviceRelations(
662 IN PIO_STACK_LOCATION IoStackLocation
,
663 IN PPCI_FDO_EXTENSION DeviceExtension
668 PciFdoIrpQueryInterface(
670 IN PIO_STACK_LOCATION IoStackLocation
,
671 IN PPCI_FDO_EXTENSION DeviceExtension
676 PciFdoIrpQueryCapabilities(
678 IN PIO_STACK_LOCATION IoStackLocation
,
679 IN PPCI_FDO_EXTENSION DeviceExtension
684 PciFdoIrpDeviceUsageNotification(
686 IN PIO_STACK_LOCATION IoStackLocation
,
687 IN PPCI_FDO_EXTENSION DeviceExtension
692 PciFdoIrpSurpriseRemoval(
694 IN PIO_STACK_LOCATION IoStackLocation
,
695 IN PPCI_FDO_EXTENSION DeviceExtension
700 PciFdoIrpQueryLegacyBusInformation(
702 IN PIO_STACK_LOCATION IoStackLocation
,
703 IN PPCI_FDO_EXTENSION DeviceExtension
707 // Device PDO Routines
712 IN PPCI_FDO_EXTENSION DeviceExtension
,
713 IN PCI_SLOT_NUMBER Slot
,
714 OUT PDEVICE_OBJECT
*PdoDeviceObject
721 IN PIO_STACK_LOCATION IoStackLocation
,
722 IN PPCI_PDO_EXTENSION DeviceExtension
729 IN PIO_STACK_LOCATION IoStackLocation
,
730 IN PPCI_PDO_EXTENSION DeviceExtension
737 IN PIO_STACK_LOCATION IoStackLocation
,
738 IN PPCI_PDO_EXTENSION DeviceExtension
743 PciPdoIrpStartDevice(
745 IN PIO_STACK_LOCATION IoStackLocation
,
746 IN PPCI_PDO_EXTENSION DeviceExtension
751 PciPdoIrpQueryRemoveDevice(
753 IN PIO_STACK_LOCATION IoStackLocation
,
754 IN PPCI_PDO_EXTENSION DeviceExtension
759 PciPdoIrpRemoveDevice(
761 IN PIO_STACK_LOCATION IoStackLocation
,
762 IN PPCI_PDO_EXTENSION DeviceExtension
767 PciPdoIrpCancelRemoveDevice(
769 IN PIO_STACK_LOCATION IoStackLocation
,
770 IN PPCI_PDO_EXTENSION DeviceExtension
777 IN PIO_STACK_LOCATION IoStackLocation
,
778 IN PPCI_PDO_EXTENSION DeviceExtension
783 PciPdoIrpQueryStopDevice(
785 IN PIO_STACK_LOCATION IoStackLocation
,
786 IN PPCI_PDO_EXTENSION DeviceExtension
791 PciPdoIrpCancelStopDevice(
793 IN PIO_STACK_LOCATION IoStackLocation
,
794 IN PPCI_PDO_EXTENSION DeviceExtension
799 PciPdoIrpQueryDeviceRelations(
801 IN PIO_STACK_LOCATION IoStackLocation
,
802 IN PPCI_PDO_EXTENSION DeviceExtension
807 PciPdoIrpQueryInterface(
809 IN PIO_STACK_LOCATION IoStackLocation
,
810 IN PPCI_PDO_EXTENSION DeviceExtension
815 PciPdoIrpQueryCapabilities(
817 IN PIO_STACK_LOCATION IoStackLocation
,
818 IN PPCI_PDO_EXTENSION DeviceExtension
823 PciPdoIrpQueryResources(
825 IN PIO_STACK_LOCATION IoStackLocation
,
826 IN PPCI_PDO_EXTENSION DeviceExtension
831 PciPdoIrpQueryResourceRequirements(
833 IN PIO_STACK_LOCATION IoStackLocation
,
834 IN PPCI_PDO_EXTENSION DeviceExtension
839 PciPdoIrpQueryDeviceText(
841 IN PIO_STACK_LOCATION IoStackLocation
,
842 IN PPCI_PDO_EXTENSION DeviceExtension
849 IN PIO_STACK_LOCATION IoStackLocation
,
850 IN PPCI_PDO_EXTENSION DeviceExtension
855 PciPdoIrpWriteConfig(
857 IN PIO_STACK_LOCATION IoStackLocation
,
858 IN PPCI_PDO_EXTENSION DeviceExtension
865 IN PIO_STACK_LOCATION IoStackLocation
,
866 IN PPCI_PDO_EXTENSION DeviceExtension
871 PciPdoIrpQueryDeviceState(
873 IN PIO_STACK_LOCATION IoStackLocation
,
874 IN PPCI_PDO_EXTENSION DeviceExtension
879 PciPdoIrpQueryBusInformation(
881 IN PIO_STACK_LOCATION IoStackLocation
,
882 IN PPCI_PDO_EXTENSION DeviceExtension
887 PciPdoIrpDeviceUsageNotification(
889 IN PIO_STACK_LOCATION IoStackLocation
,
890 IN PPCI_PDO_EXTENSION DeviceExtension
895 PciPdoIrpSurpriseRemoval(
897 IN PIO_STACK_LOCATION IoStackLocation
,
898 IN PPCI_PDO_EXTENSION DeviceExtension
903 PciPdoIrpQueryLegacyBusInformation(
905 IN PIO_STACK_LOCATION IoStackLocation
,
906 IN PPCI_PDO_EXTENSION DeviceExtension
911 // HAL Callback/Hook Routines
920 // PCI Verifier Routines
925 IN PDRIVER_OBJECT DriverObject
930 PciVerifierRetrieveFailureData(
952 PciBuildDefaultExclusionLists(
958 PciUnicodeStringStrStr(
959 IN PUNICODE_STRING InputString
,
960 IN PCUNICODE_STRING EqualString
,
961 IN BOOLEAN CaseInSensitive
969 IN ACCESS_MASK DesiredAccess
,
970 OUT PHANDLE KeyHandle
,
971 OUT PNTSTATUS KeyStatus
979 IN HANDLE RootHandle
,
981 OUT PVOID
*OutputBuffer
,
982 OUT PULONG OutputLength
987 PciFindParentPciFdoExtension(
988 IN PDEVICE_OBJECT DeviceObject
,
994 PciInsertEntryAtTail(
995 IN PSINGLE_LIST_ENTRY ListHead
,
996 IN PPCI_FDO_EXTENSION DeviceExtension
,
1002 PciGetDeviceProperty(
1003 IN PDEVICE_OBJECT DeviceObject
,
1004 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
1005 OUT PVOID
*OutputBuffer
1011 IN PDEVICE_OBJECT DeviceObject
,
1012 IN ULONG IoControlCode
,
1013 IN PVOID InputBuffer
,
1014 IN ULONG InputBufferLength
,
1015 IN PVOID OutputBuffer
,
1016 IN ULONG OutputBufferLength
1021 PcipLinkSecondaryExtension(
1022 IN PSINGLE_LIST_ENTRY List
,
1024 IN PPCI_SECONDARY_EXTENSION SecondaryExtension
,
1025 IN PCI_SIGNATURE ExtensionType
,
1029 PPCI_SECONDARY_EXTENSION
1031 PciFindNextSecondaryExtension(
1032 IN PSINGLE_LIST_ENTRY ListHead
,
1033 IN PCI_SIGNATURE ExtensionType
1041 IN USHORT SubVendorId
,
1042 IN USHORT SubSystemId
,
1048 PciFindPdoByFunction(
1049 IN PPCI_FDO_EXTENSION DeviceExtension
,
1050 IN ULONG FunctionNumber
,
1051 IN PPCI_COMMON_HEADER PciData
1056 PciIsCriticalDeviceClass(
1063 PciIsDeviceOnDebugPath(
1064 IN PPCI_PDO_EXTENSION DeviceExtension
1070 IN PPCI_PDO_EXTENSION DeviceExtension
,
1071 OUT PPCI_COMMON_HEADER PciData
1077 IN PPCI_PDO_EXTENSION DeviceExtension
,
1078 OUT PPCI_COMMON_HEADER PciData
1083 PciReadDeviceCapability(
1084 IN PPCI_PDO_EXTENSION DeviceExtension
,
1086 IN ULONG CapabilityId
,
1087 OUT PPCI_CAPABILITIES_HEADER Buffer
,
1093 PciCanDisableDecodes(
1094 IN PPCI_PDO_EXTENSION DeviceExtension
,
1095 IN PPCI_COMMON_HEADER Config
,
1096 IN ULONGLONG HackFlags
,
1097 IN BOOLEAN ForPowerDown
1102 PciClassifyDeviceType(
1103 IN PPCI_PDO_EXTENSION PdoExtension
1108 PciExecuteCriticalSystemRoutine(
1109 IN ULONG_PTR IpiContext
1114 PciCreateIoDescriptorFromBarLimit(
1115 PIO_RESOURCE_DESCRIPTOR ResourceDescriptor
,
1122 PciIsSlotPresentInParentMethod(
1123 IN PPCI_PDO_EXTENSION PdoExtension
,
1130 IN PPCI_PDO_EXTENSION PdoExtension
,
1137 PciQueryBusInformation(
1138 IN PPCI_PDO_EXTENSION PdoExtension
,
1139 IN PPNP_BUS_INFORMATION
* Buffer
1144 PciQueryCapabilities(
1145 IN PPCI_PDO_EXTENSION PdoExtension
,
1146 IN OUT PDEVICE_CAPABILITIES DeviceCapability
1149 PCM_PARTIAL_RESOURCE_DESCRIPTOR
1151 PciNextPartialDescriptor(
1152 PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor
1156 // Configuration Routines
1160 PciGetConfigHandlers(
1161 IN PPCI_FDO_EXTENSION FdoExtension
1167 IN PPCI_FDO_EXTENSION DeviceExtension
,
1168 IN PCI_SLOT_NUMBER Slot
,
1176 PciWriteDeviceConfig(
1177 IN PPCI_PDO_EXTENSION DeviceExtension
,
1185 PciReadDeviceConfig(
1186 IN PPCI_PDO_EXTENSION DeviceExtension
,
1194 PciGetAdjustedInterruptLine(
1195 IN PPCI_PDO_EXTENSION PdoExtension
1199 // State Machine Logic Transition Routines
1204 IN PPCI_FDO_EXTENSION DeviceExtension
1209 PciBeginStateTransition(
1210 IN PPCI_FDO_EXTENSION DeviceExtension
,
1211 IN PCI_STATE NewState
1216 PciCancelStateTransition(
1217 IN PPCI_FDO_EXTENSION DeviceExtension
,
1218 IN PCI_STATE NewState
1223 PciCommitStateTransition(
1224 IN PPCI_FDO_EXTENSION DeviceExtension
,
1225 IN PCI_STATE NewState
1233 PciInitializeArbiters(
1234 IN PPCI_FDO_EXTENSION FdoExtension
1239 PciInitializeArbiterRanges(
1240 IN PPCI_FDO_EXTENSION DeviceExtension
,
1241 IN PCM_RESOURCE_LIST Resources
1249 PciDebugIrpDispatchDisplay(
1250 IN PIO_STACK_LOCATION IoStackLocation
,
1251 IN PPCI_FDO_EXTENSION DeviceExtension
,
1257 PciDebugDumpCommonConfig(
1258 IN PPCI_COMMON_HEADER PciData
1263 PciDebugDumpQueryCapabilities(
1264 IN PDEVICE_CAPABILITIES DeviceCaps
1269 PciDebugPrintIoResReqList(
1270 IN PIO_RESOURCE_REQUIREMENTS_LIST Requirements
1275 PciDebugPrintCmResList(
1276 IN PCM_RESOURCE_LIST ResourceList
1281 PciDebugPrintPartialResource(
1282 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialResource
1286 // Interface Support
1291 IN PPCI_FDO_EXTENSION DeviceExtension
,
1292 IN CONST GUID
* InterfaceType
,
1295 IN PVOID InterfaceData
,
1296 IN PINTERFACE Interface
,
1297 IN BOOLEAN LastChance
1302 PciPmeInterfaceInitializer(
1308 routeintrf_Initializer(
1314 arbusno_Initializer(
1320 agpintrf_Initializer(
1326 tranirq_Initializer(
1332 busintrf_Initializer(
1350 locintrf_Initializer(
1356 pcicbintrf_Initializer(
1362 lddintrf_Initializer(
1368 devpresent_Initializer(
1374 agpintrf_Constructor(
1375 IN PVOID DeviceExtension
,
1377 IN PVOID InterfaceData
,
1380 IN PINTERFACE Interface
1385 arbusno_Constructor(
1386 IN PVOID DeviceExtension
,
1388 IN PVOID InterfaceData
,
1391 IN PINTERFACE Interface
1396 tranirq_Constructor(
1397 IN PVOID DeviceExtension
,
1399 IN PVOID InterfaceData
,
1402 IN PINTERFACE Interface
1408 IN PVOID DeviceExtension
,
1410 IN PVOID InterfaceData
,
1413 IN PINTERFACE Interface
1418 busintrf_Constructor(
1419 IN PVOID DeviceExtension
,
1421 IN PVOID InterfaceData
,
1424 IN PINTERFACE Interface
1430 IN PVOID DeviceExtension
,
1432 IN PVOID InterfaceData
,
1435 IN PINTERFACE Interface
1440 ario_ApplyBrokenVideoHack(
1441 IN PPCI_FDO_EXTENSION FdoExtension
1446 pcicbintrf_Constructor(
1447 IN PVOID DeviceExtension
,
1449 IN PVOID InterfaceData
,
1452 IN PINTERFACE Interface
1457 lddintrf_Constructor(
1458 IN PVOID DeviceExtension
,
1460 IN PVOID InterfaceData
,
1463 IN PINTERFACE Interface
1468 locintrf_Constructor(
1469 IN PVOID DeviceExtension
,
1471 IN PVOID InterfaceData
,
1474 IN PINTERFACE Interface
1479 PciPmeInterfaceConstructor(
1480 IN PVOID DeviceExtension
,
1482 IN PVOID InterfaceData
,
1485 IN PINTERFACE Interface
1490 routeintrf_Constructor(
1491 IN PVOID DeviceExtension
,
1493 IN PVOID InterfaceData
,
1496 IN PINTERFACE Interface
1501 devpresent_Constructor(
1502 IN PVOID DeviceExtension
,
1504 IN PVOID InterfaceData
,
1507 IN PINTERFACE Interface
1511 // PCI Enumeration and Resources
1515 PciQueryDeviceRelations(
1516 IN PPCI_FDO_EXTENSION DeviceExtension
,
1517 IN OUT PDEVICE_RELATIONS
*pDeviceRelations
1523 IN PPCI_PDO_EXTENSION PdoExtension
,
1524 OUT PCM_RESOURCE_LIST
*Buffer
1529 PciQueryTargetDeviceRelations(
1530 IN PPCI_PDO_EXTENSION PdoExtension
,
1531 IN OUT PDEVICE_RELATIONS
*pDeviceRelations
1536 PciQueryEjectionRelations(
1537 IN PPCI_PDO_EXTENSION PdoExtension
,
1538 IN OUT PDEVICE_RELATIONS
*pDeviceRelations
1543 PciQueryRequirements(
1544 IN PPCI_PDO_EXTENSION PdoExtension
,
1545 IN OUT PIO_RESOURCE_REQUIREMENTS_LIST
*RequirementsList
1550 PciComputeNewCurrentSettings(
1551 IN PPCI_PDO_EXTENSION PdoExtension
,
1552 IN PCM_RESOURCE_LIST ResourceList
1558 IN PPCI_PDO_EXTENSION PdoExtension
,
1560 IN BOOLEAN SomethingSomethingDarkSide
1564 // Identification Functions
1568 PciGetDeviceDescriptionMessage(
1576 IN PPCI_PDO_EXTENSION PdoExtension
,
1577 IN DEVICE_TEXT_TYPE QueryType
,
1585 IN PPCI_PDO_EXTENSION DeviceExtension
,
1586 IN BUS_QUERY_ID_TYPE QueryType
,
1595 Cardbus_MassageHeaderForLimitsDetermination(
1596 IN PPCI_CONFIGURATOR_CONTEXT Context
1601 Cardbus_SaveCurrentSettings(
1602 IN PPCI_CONFIGURATOR_CONTEXT Context
1608 IN PPCI_CONFIGURATOR_CONTEXT Context
1613 Cardbus_RestoreCurrent(
1614 IN PPCI_CONFIGURATOR_CONTEXT Context
1619 Cardbus_GetAdditionalResourceDescriptors(
1620 IN PPCI_CONFIGURATOR_CONTEXT Context
,
1621 IN PPCI_COMMON_HEADER PciData
,
1622 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
1627 Cardbus_ResetDevice(
1628 IN PPCI_PDO_EXTENSION PdoExtension
,
1629 IN PPCI_COMMON_HEADER PciData
1634 Cardbus_ChangeResourceSettings(
1635 IN PPCI_PDO_EXTENSION PdoExtension
,
1636 IN PPCI_COMMON_HEADER PciData
1640 // PCI Device Support
1644 Device_MassageHeaderForLimitsDetermination(
1645 IN PPCI_CONFIGURATOR_CONTEXT Context
1650 Device_SaveCurrentSettings(
1651 IN PPCI_CONFIGURATOR_CONTEXT Context
1657 IN PPCI_CONFIGURATOR_CONTEXT Context
1662 Device_RestoreCurrent(
1663 IN PPCI_CONFIGURATOR_CONTEXT Context
1668 Device_GetAdditionalResourceDescriptors(
1669 IN PPCI_CONFIGURATOR_CONTEXT Context
,
1670 IN PPCI_COMMON_HEADER PciData
,
1671 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
1677 IN PPCI_PDO_EXTENSION PdoExtension
,
1678 IN PPCI_COMMON_HEADER PciData
1683 Device_ChangeResourceSettings(
1684 IN PPCI_PDO_EXTENSION PdoExtension
,
1685 IN PPCI_COMMON_HEADER PciData
1689 // PCI-to-PCI Bridge Device Support
1693 PPBridge_MassageHeaderForLimitsDetermination(
1694 IN PPCI_CONFIGURATOR_CONTEXT Context
1699 PPBridge_SaveCurrentSettings(
1700 IN PPCI_CONFIGURATOR_CONTEXT Context
1705 PPBridge_SaveLimits(
1706 IN PPCI_CONFIGURATOR_CONTEXT Context
1711 PPBridge_RestoreCurrent(
1712 IN PPCI_CONFIGURATOR_CONTEXT Context
1717 PPBridge_GetAdditionalResourceDescriptors(
1718 IN PPCI_CONFIGURATOR_CONTEXT Context
,
1719 IN PPCI_COMMON_HEADER PciData
,
1720 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
1725 PPBridge_ResetDevice(
1726 IN PPCI_PDO_EXTENSION PdoExtension
,
1727 IN PPCI_COMMON_HEADER PciData
1732 PPBridge_ChangeResourceSettings(
1733 IN PPCI_PDO_EXTENSION PdoExtension
,
1734 IN PPCI_COMMON_HEADER PciData
1738 // External Resources
1740 extern SINGLE_LIST_ENTRY PciFdoExtensionListHead
;
1741 extern KEVENT PciGlobalLock
;
1742 extern PPCI_INTERFACE PciInterfaces
[];
1743 extern PCI_INTERFACE ArbiterInterfaceBusNumber
;
1744 extern PCI_INTERFACE ArbiterInterfaceMemory
;
1745 extern PCI_INTERFACE ArbiterInterfaceIo
;
1746 extern PCI_INTERFACE BusHandlerInterface
;
1747 extern PCI_INTERFACE PciRoutingInterface
;
1748 extern PCI_INTERFACE PciCardbusPrivateInterface
;
1749 extern PCI_INTERFACE PciLegacyDeviceDetectionInterface
;
1750 extern PCI_INTERFACE PciPmeInterface
;
1751 extern PCI_INTERFACE PciDevicePresentInterface
;
1752 //extern PCI_INTERFACE PciNativeIdeInterface;
1753 extern PCI_INTERFACE PciLocationInterface
;
1754 extern PCI_INTERFACE AgpTargetInterface
;
1755 extern PCI_INTERFACE TranslatorInterfaceInterrupt
;
1756 extern PDRIVER_OBJECT PciDriverObject
;
1757 extern PWATCHDOG_TABLE WdTable
;
1758 extern PPCI_HACK_ENTRY PciHackTable
;
1759 extern BOOLEAN PciAssignBusNumbers
;
1760 extern BOOLEAN PciEnableNativeModeATA
;
1761 extern PPCI_IRQ_ROUTING_TABLE PciIrqRoutingTable
;
1762 extern BOOLEAN PciRunningDatacenter
;
1764 /* Exported by NTOS, should this go in the NDK? */
1765 extern NTSYSAPI BOOLEAN InitSafeBootMode
;