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
16 #include <drivers/pci/pci.h>
17 #include <drivers/acpi/acpi.h>
18 #include <ndk/halfuncs.h>
19 #include <ndk/rtlfuncs.h>
20 #include <ndk/vffuncs.h>
22 #include <cmreslist.h>
25 // Tag used in all pool allocations (Pci Bus)
27 #define PCI_POOL_TAG 'BicP'
30 // Checks if the specified FDO is the FDO for the Root PCI Bus
32 #define PCI_IS_ROOT_FDO(x) ((x)->BusRootFdoExtension == x)
35 // Assertions to make sure we are dealing with the right kind of extension
37 #define ASSERT_FDO(x) ASSERT((x)->ExtensionType == PciFdoExtensionType);
38 #define ASSERT_PDO(x) ASSERT((x)->ExtensionType == PciPdoExtensionType);
41 // PCI Hack Entry Name Lengths
43 #define PCI_HACK_ENTRY_SIZE sizeof(L"VVVVdddd") - sizeof(UNICODE_NULL)
44 #define PCI_HACK_ENTRY_REV_SIZE sizeof(L"VVVVddddRR") - sizeof(UNICODE_NULL)
45 #define PCI_HACK_ENTRY_SUBSYS_SIZE sizeof(L"VVVVddddssssIIII") - sizeof(UNICODE_NULL)
46 #define PCI_HACK_ENTRY_FULL_SIZE sizeof(L"VVVVddddssssIIIIRR") - sizeof(UNICODE_NULL)
49 // PCI Hack Entry Flags
51 #define PCI_HACK_HAS_REVISION_INFO 0x01
52 #define PCI_HACK_HAS_SUBSYSTEM_INFO 0x02
55 // PCI Interface Flags
57 #define PCI_INTERFACE_PDO 0x01
58 #define PCI_INTERFACE_FDO 0x02
59 #define PCI_INTERFACE_ROOT 0x04
62 // PCI Skip Function Flags
64 #define PCI_SKIP_DEVICE_ENUMERATION 0x01
65 #define PCI_SKIP_RESOURCE_ENUMERATION 0x02
68 // PCI Apply Hack Flags
70 #define PCI_HACK_FIXUP_BEFORE_CONFIGURATION 0x00
71 #define PCI_HACK_FIXUP_AFTER_CONFIGURATION 0x01
72 #define PCI_HACK_FIXUP_BEFORE_UPDATE 0x03
75 // PCI Debugging Device Support
77 #define MAX_DEBUGGING_DEVICES_SUPPORTED 0x04
80 // PCI Driver Verifier Failures
82 #define PCI_VERIFIER_CODES 0x04
85 // PCI ID Buffer ANSI Strings
87 #define MAX_ANSI_STRINGS 0x08
90 // Device Extension, Interface, Translator and Arbiter Signatures
92 typedef enum _PCI_SIGNATURE
94 PciPdoExtensionType
= 'icP0',
95 PciFdoExtensionType
= 'icP1',
97 PciArb_Memory
= 'icP3',
98 PciArb_Interrupt
= 'icP4',
99 PciArb_BusNumber
= 'icP5',
100 PciTrans_Interrupt
= 'icP6',
101 PciInterface_BusHandler
= 'icP7',
102 PciInterface_IntRouteHandler
= 'icP8',
103 PciInterface_PciCb
= 'icP9',
104 PciInterface_LegacyDeviceDetection
= 'icP:',
105 PciInterface_PmeHandler
= 'icP;',
106 PciInterface_DevicePresent
= 'icP<',
107 PciInterface_NativeIde
= 'icP=',
108 PciInterface_AgpTarget
= 'icP>',
109 PciInterface_Location
= 'icP?'
110 } PCI_SIGNATURE
, *PPCI_SIGNATURE
;
113 // Driver-handled PCI Device Types
115 typedef enum _PCI_DEVICE_TYPES
120 PciTypeCardbusBridge
,
125 // Device Extension Logic States
127 typedef enum _PCI_STATE
134 PciSynchronizedOperation
,
139 // IRP Dispatch Logic Style
141 typedef enum _PCI_DISPATCH_STYLE
147 } PCI_DISPATCH_STYLE
;
150 // PCI Hack Entry Information
152 typedef struct _PCI_HACK_ENTRY
161 } PCI_HACK_ENTRY
, *PPCI_HACK_ENTRY
;
164 // Power State Information for Device Extension
166 typedef struct _PCI_POWER_STATE
168 SYSTEM_POWER_STATE CurrentSystemState
;
169 DEVICE_POWER_STATE CurrentDeviceState
;
170 SYSTEM_POWER_STATE SystemWakeLevel
;
171 DEVICE_POWER_STATE DeviceWakeLevel
;
172 DEVICE_POWER_STATE SystemStateMapping
[7];
174 PVOID SavedCancelRoutine
;
178 } PCI_POWER_STATE
, *PPCI_POWER_STATE
;
181 // Internal PCI Lock Structure
183 typedef struct _PCI_LOCK
187 } PCI_LOCK
, *PPCI_LOCK
;
190 // Device Extension for a Bus FDO
192 typedef struct _PCI_FDO_EXTENSION
194 SINGLE_LIST_ENTRY List
;
196 struct _PCI_MJ_DISPATCH_TABLE
*IrpDispatchTable
;
198 BOOLEAN TentativeNextState
;
199 KEVENT SecondaryExtLock
;
200 PDEVICE_OBJECT PhysicalDeviceObject
;
201 PDEVICE_OBJECT FunctionalDeviceObject
;
202 PDEVICE_OBJECT AttachedDeviceObject
;
203 KEVENT ChildListLock
;
204 struct _PCI_PDO_EXTENSION
*ChildPdoList
;
205 struct _PCI_FDO_EXTENSION
*BusRootFdoExtension
;
206 struct _PCI_FDO_EXTENSION
*ParentFdoExtension
;
207 struct _PCI_PDO_EXTENSION
*ChildBridgePdoList
;
208 PPCI_BUS_INTERFACE_STANDARD PciBusInterface
;
209 BOOLEAN MaxSubordinateBus
;
210 BUS_HANDLER
*BusHandler
;
215 BOOLEAN ArbitersInitialized
;
216 BOOLEAN BrokenVideoHackApplied
;
218 PCI_POWER_STATE PowerState
;
219 SINGLE_LIST_ENTRY SecondaryExtension
;
220 LONG ChildWaitWakeCount
;
221 PPCI_COMMON_CONFIG PreservedConfig
;
226 BOOLEAN CacheLineSize
;
227 BOOLEAN LatencyTimer
;
232 } PCI_FDO_EXTENSION
, *PPCI_FDO_EXTENSION
;
234 typedef struct _PCI_FUNCTION_RESOURCES
236 IO_RESOURCE_DESCRIPTOR Limit
[7];
237 CM_PARTIAL_RESOURCE_DESCRIPTOR Current
[7];
238 } PCI_FUNCTION_RESOURCES
, *PPCI_FUNCTION_RESOURCES
;
240 typedef union _PCI_HEADER_TYPE_DEPENDENT
250 UCHAR SubordinateBus
;
251 UCHAR SubtractiveDecode
:1;
254 UCHAR WeChangedBusNumbers
:1;
255 UCHAR IsaBitRequired
:1;
261 } PCI_HEADER_TYPE_DEPENDENT
, *PPCI_HEADER_TYPE_DEPENDENT
;
263 typedef struct _PCI_PDO_EXTENSION
267 struct _PCI_MJ_DISPATCH_TABLE
*IrpDispatchTable
;
269 BOOLEAN TentativeNextState
;
271 KEVENT SecondaryExtLock
;
272 PCI_SLOT_NUMBER Slot
;
273 PDEVICE_OBJECT PhysicalDeviceObject
;
274 PPCI_FDO_EXTENSION ParentFdoExtension
;
275 SINGLE_LIST_ENTRY SecondaryExtension
;
276 LONG BusInterfaceReferenceCount
;
277 LONG AgpInterfaceReferenceCount
;
280 USHORT SubsystemVendorId
;
286 BOOLEAN AdditionalResourceCount
;
287 BOOLEAN AdjustedInterruptLine
;
288 BOOLEAN InterruptPin
;
289 BOOLEAN RawInterruptLine
;
290 BOOLEAN CapabilitiesPtr
;
291 BOOLEAN SavedLatencyTimer
;
292 BOOLEAN SavedCacheLineSize
;
295 BOOLEAN ReportedMissing
;
296 BOOLEAN ExpectedWritebackFailure
;
297 BOOLEAN NoTouchPmeEnable
;
298 BOOLEAN LegacyDriver
;
299 BOOLEAN UpdateHardware
;
301 BOOLEAN DisablePowerDown
;
302 BOOLEAN NeedsHotPlugConfiguration
;
303 BOOLEAN IDEInNativeMode
;
304 BOOLEAN BIOSAllowsIDESwitchToNativeMode
;
305 BOOLEAN IoSpaceUnderNativeIdeControl
;
307 BOOLEAN IoSpaceNotRequired
;
308 PCI_POWER_STATE PowerState
;
309 PCI_HEADER_TYPE_DEPENDENT Dependent
;
311 PCI_FUNCTION_RESOURCES
*Resources
;
312 PCI_FDO_EXTENSION
*BridgeFdoExtension
;
313 struct _PCI_PDO_EXTENSION
*NextBridge
;
314 struct _PCI_PDO_EXTENSION
*NextHashEntry
;
316 PCI_PMC PowerCapabilities
;
317 BOOLEAN TargetAgpCapabilityId
;
318 USHORT CommandEnables
;
319 USHORT InitialCommand
;
320 } PCI_PDO_EXTENSION
, *PPCI_PDO_EXTENSION
;
323 // IRP Dispatch Function Type
325 typedef NTSTATUS (NTAPI
*PCI_DISPATCH_FUNCTION
)(
327 IN PIO_STACK_LOCATION IoStackLocation
,
328 IN PVOID DeviceExtension
332 // IRP Dispatch Minor Table
334 typedef struct _PCI_MN_DISPATCH_TABLE
336 PCI_DISPATCH_STYLE DispatchStyle
;
337 PCI_DISPATCH_FUNCTION DispatchFunction
;
338 } PCI_MN_DISPATCH_TABLE
, *PPCI_MN_DISPATCH_TABLE
;
341 // IRP Dispatch Major Table
343 typedef struct _PCI_MJ_DISPATCH_TABLE
345 ULONG PnpIrpMaximumMinorFunction
;
346 PPCI_MN_DISPATCH_TABLE PnpIrpDispatchTable
;
347 ULONG PowerIrpMaximumMinorFunction
;
348 PPCI_MN_DISPATCH_TABLE PowerIrpDispatchTable
;
349 PCI_DISPATCH_STYLE SystemControlIrpDispatchStyle
;
350 PCI_DISPATCH_FUNCTION SystemControlIrpDispatchFunction
;
351 PCI_DISPATCH_STYLE OtherIrpDispatchStyle
;
352 PCI_DISPATCH_FUNCTION OtherIrpDispatchFunction
;
353 } PCI_MJ_DISPATCH_TABLE
, *PPCI_MJ_DISPATCH_TABLE
;
356 // Generic PCI Interface Constructor and Initializer
358 struct _PCI_INTERFACE
;
359 typedef NTSTATUS (NTAPI
*PCI_INTERFACE_CONSTRUCTOR
)(
360 IN PVOID DeviceExtension
,
362 IN PVOID InterfaceData
,
365 IN PINTERFACE Interface
368 typedef NTSTATUS (NTAPI
*PCI_INTERFACE_INITIALIZER
)(
373 // Generic PCI Interface (Interface, Translator, Arbiter)
375 typedef struct _PCI_INTERFACE
377 CONST GUID
*InterfaceType
;
383 PCI_SIGNATURE Signature
;
384 PCI_INTERFACE_CONSTRUCTOR Constructor
;
385 PCI_INTERFACE_INITIALIZER Initializer
;
386 } PCI_INTERFACE
, *PPCI_INTERFACE
;
389 // Generic Secondary Extension Instance Header (Interface, Translator, Arbiter)
391 typedef struct PCI_SECONDARY_EXTENSION
393 SINGLE_LIST_ENTRY List
;
394 PCI_SIGNATURE ExtensionType
;
396 } PCI_SECONDARY_EXTENSION
, *PPCI_SECONDARY_EXTENSION
;
399 // PCI Arbiter Instance
401 typedef struct PCI_ARBITER_INSTANCE
403 PCI_SECONDARY_EXTENSION Header
;
404 PPCI_INTERFACE Interface
;
405 PPCI_FDO_EXTENSION BusFdoExtension
;
406 WCHAR InstanceName
[24];
407 ARBITER_INSTANCE CommonInstance
;
408 } PCI_ARBITER_INSTANCE
, *PPCI_ARBITER_INSTANCE
;
413 typedef struct _PCI_VERIFIER_DATA
416 VF_FAILURE_CLASS FailureClass
;
417 ULONG AssertionControl
;
418 PCHAR DebuggerMessageText
;
419 } PCI_VERIFIER_DATA
, *PPCI_VERIFIER_DATA
;
422 // PCI ID Buffer Descriptor
424 typedef struct _PCI_ID_BUFFER
427 ANSI_STRING Strings
[MAX_ANSI_STRINGS
];
428 ULONG StringSize
[MAX_ANSI_STRINGS
];
431 CHAR BufferData
[256];
432 } PCI_ID_BUFFER
, *PPCI_ID_BUFFER
;
435 // PCI Configuration Callbacks
437 struct _PCI_CONFIGURATOR_CONTEXT
;
439 typedef VOID (NTAPI
*PCI_CONFIGURATOR_INITIALIZE
)(
440 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
443 typedef VOID (NTAPI
*PCI_CONFIGURATOR_RESTORE_CURRENT
)(
444 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
447 typedef VOID (NTAPI
*PCI_CONFIGURATOR_SAVE_LIMITS
)(
448 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
451 typedef VOID (NTAPI
*PCI_CONFIGURATOR_SAVE_CURRENT_SETTINGS
)(
452 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
455 typedef VOID (NTAPI
*PCI_CONFIGURATOR_CHANGE_RESOURCE_SETTINGS
)(
456 IN PPCI_PDO_EXTENSION PdoExtension
,
457 IN PPCI_COMMON_HEADER PciData
460 typedef VOID (NTAPI
*PCI_CONFIGURATOR_GET_ADDITIONAL_RESOURCE_DESCRIPTORS
)(
461 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
,
462 IN PPCI_COMMON_HEADER PciData
,
463 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
466 typedef VOID (NTAPI
*PCI_CONFIGURATOR_RESET_DEVICE
)(
467 IN PPCI_PDO_EXTENSION PdoExtension
,
468 IN PPCI_COMMON_HEADER PciData
474 typedef struct _PCI_CONFIGURATOR
476 PCI_CONFIGURATOR_INITIALIZE Initialize
;
477 PCI_CONFIGURATOR_RESTORE_CURRENT RestoreCurrent
;
478 PCI_CONFIGURATOR_SAVE_LIMITS SaveLimits
;
479 PCI_CONFIGURATOR_SAVE_CURRENT_SETTINGS SaveCurrentSettings
;
480 PCI_CONFIGURATOR_CHANGE_RESOURCE_SETTINGS ChangeResourceSettings
;
481 PCI_CONFIGURATOR_GET_ADDITIONAL_RESOURCE_DESCRIPTORS GetAdditionalResourceDescriptors
;
482 PCI_CONFIGURATOR_RESET_DEVICE ResetDevice
;
483 } PCI_CONFIGURATOR
, *PPCI_CONFIGURATOR
;
486 // PCI Configurator Context
488 typedef struct _PCI_CONFIGURATOR_CONTEXT
490 PPCI_PDO_EXTENSION PdoExtension
;
491 PPCI_COMMON_HEADER Current
;
492 PPCI_COMMON_HEADER PciData
;
493 PPCI_CONFIGURATOR Configurator
;
494 USHORT SecondaryStatus
;
497 } PCI_CONFIGURATOR_CONTEXT
, *PPCI_CONFIGURATOR_CONTEXT
;
502 typedef VOID (NTAPI
*PCI_IPI_FUNCTION
)(
510 typedef struct _PCI_IPI_CONTEXT
514 PVOID DeviceExtension
;
515 PCI_IPI_FUNCTION Function
;
517 } PCI_IPI_CONTEXT
, *PPCI_IPI_CONTEXT
;
520 // PCI Legacy Device Location Cache
522 typedef struct _PCI_LEGACY_DEVICE
524 struct _PCI_LEGACY_DEVICE
*Next
;
525 PDEVICE_OBJECT DeviceObject
;
532 PDEVICE_OBJECT PhysicalDeviceObject
;
533 ROUTING_TOKEN RoutingToken
;
534 PPCI_PDO_EXTENSION PdoExtension
;
535 } PCI_LEGACY_DEVICE
, *PPCI_LEGACY_DEVICE
;
538 // IRP Dispatch Routines
541 DRIVER_DISPATCH PciDispatchIrp
;
546 IN PDEVICE_OBJECT DeviceObject
,
554 IN PIO_STACK_LOCATION IoStackLocation
,
555 IN PPCI_FDO_EXTENSION DeviceExtension
560 PciPassIrpFromFdoToPdo(
561 IN PPCI_FDO_EXTENSION DeviceExtension
,
568 IN PPCI_FDO_EXTENSION DeviceExtension
,
574 PciIrpInvalidDeviceRequest(
576 IN PIO_STACK_LOCATION IoStackLocation
,
577 IN PPCI_FDO_EXTENSION DeviceExtension
587 IN PIO_STACK_LOCATION IoStackLocation
,
588 IN PPCI_FDO_EXTENSION DeviceExtension
595 IN PIO_STACK_LOCATION IoStackLocation
,
596 IN PPCI_FDO_EXTENSION DeviceExtension
603 IN PIO_STACK_LOCATION IoStackLocation
,
604 IN PPCI_FDO_EXTENSION DeviceExtension
609 PciSetPowerManagedDevicePowerState(
610 IN PPCI_PDO_EXTENSION DeviceExtension
,
611 IN DEVICE_POWER_STATE DeviceState
,
619 DRIVER_ADD_DEVICE PciAddDevice
;
624 IN PDRIVER_OBJECT DriverObject
,
625 IN PDEVICE_OBJECT PhysicalDeviceObject
630 PciFdoIrpStartDevice(
632 IN PIO_STACK_LOCATION IoStackLocation
,
633 IN PPCI_FDO_EXTENSION DeviceExtension
638 PciFdoIrpQueryRemoveDevice(
640 IN PIO_STACK_LOCATION IoStackLocation
,
641 IN PPCI_FDO_EXTENSION DeviceExtension
646 PciFdoIrpRemoveDevice(
648 IN PIO_STACK_LOCATION IoStackLocation
,
649 IN PPCI_FDO_EXTENSION DeviceExtension
654 PciFdoIrpCancelRemoveDevice(
656 IN PIO_STACK_LOCATION IoStackLocation
,
657 IN PPCI_FDO_EXTENSION DeviceExtension
664 IN PIO_STACK_LOCATION IoStackLocation
,
665 IN PPCI_FDO_EXTENSION DeviceExtension
670 PciFdoIrpQueryStopDevice(
672 IN PIO_STACK_LOCATION IoStackLocation
,
673 IN PPCI_FDO_EXTENSION DeviceExtension
678 PciFdoIrpCancelStopDevice(
680 IN PIO_STACK_LOCATION IoStackLocation
,
681 IN PPCI_FDO_EXTENSION DeviceExtension
686 PciFdoIrpQueryDeviceRelations(
688 IN PIO_STACK_LOCATION IoStackLocation
,
689 IN PPCI_FDO_EXTENSION DeviceExtension
694 PciFdoIrpQueryInterface(
696 IN PIO_STACK_LOCATION IoStackLocation
,
697 IN PPCI_FDO_EXTENSION DeviceExtension
702 PciFdoIrpQueryCapabilities(
704 IN PIO_STACK_LOCATION IoStackLocation
,
705 IN PPCI_FDO_EXTENSION DeviceExtension
710 PciFdoIrpDeviceUsageNotification(
712 IN PIO_STACK_LOCATION IoStackLocation
,
713 IN PPCI_FDO_EXTENSION DeviceExtension
718 PciFdoIrpSurpriseRemoval(
720 IN PIO_STACK_LOCATION IoStackLocation
,
721 IN PPCI_FDO_EXTENSION DeviceExtension
726 PciFdoIrpQueryLegacyBusInformation(
728 IN PIO_STACK_LOCATION IoStackLocation
,
729 IN PPCI_FDO_EXTENSION DeviceExtension
733 // Device PDO Routines
738 IN PPCI_FDO_EXTENSION DeviceExtension
,
739 IN PCI_SLOT_NUMBER Slot
,
740 OUT PDEVICE_OBJECT
*PdoDeviceObject
747 IN PIO_STACK_LOCATION IoStackLocation
,
748 IN PPCI_PDO_EXTENSION DeviceExtension
755 IN PIO_STACK_LOCATION IoStackLocation
,
756 IN PPCI_PDO_EXTENSION DeviceExtension
763 IN PIO_STACK_LOCATION IoStackLocation
,
764 IN PPCI_PDO_EXTENSION DeviceExtension
769 PciPdoIrpStartDevice(
771 IN PIO_STACK_LOCATION IoStackLocation
,
772 IN PPCI_PDO_EXTENSION DeviceExtension
777 PciPdoIrpQueryRemoveDevice(
779 IN PIO_STACK_LOCATION IoStackLocation
,
780 IN PPCI_PDO_EXTENSION DeviceExtension
785 PciPdoIrpRemoveDevice(
787 IN PIO_STACK_LOCATION IoStackLocation
,
788 IN PPCI_PDO_EXTENSION DeviceExtension
793 PciPdoIrpCancelRemoveDevice(
795 IN PIO_STACK_LOCATION IoStackLocation
,
796 IN PPCI_PDO_EXTENSION DeviceExtension
803 IN PIO_STACK_LOCATION IoStackLocation
,
804 IN PPCI_PDO_EXTENSION DeviceExtension
809 PciPdoIrpQueryStopDevice(
811 IN PIO_STACK_LOCATION IoStackLocation
,
812 IN PPCI_PDO_EXTENSION DeviceExtension
817 PciPdoIrpCancelStopDevice(
819 IN PIO_STACK_LOCATION IoStackLocation
,
820 IN PPCI_PDO_EXTENSION DeviceExtension
825 PciPdoIrpQueryDeviceRelations(
827 IN PIO_STACK_LOCATION IoStackLocation
,
828 IN PPCI_PDO_EXTENSION DeviceExtension
833 PciPdoIrpQueryInterface(
835 IN PIO_STACK_LOCATION IoStackLocation
,
836 IN PPCI_PDO_EXTENSION DeviceExtension
841 PciPdoIrpQueryCapabilities(
843 IN PIO_STACK_LOCATION IoStackLocation
,
844 IN PPCI_PDO_EXTENSION DeviceExtension
849 PciPdoIrpQueryResources(
851 IN PIO_STACK_LOCATION IoStackLocation
,
852 IN PPCI_PDO_EXTENSION DeviceExtension
857 PciPdoIrpQueryResourceRequirements(
859 IN PIO_STACK_LOCATION IoStackLocation
,
860 IN PPCI_PDO_EXTENSION DeviceExtension
865 PciPdoIrpQueryDeviceText(
867 IN PIO_STACK_LOCATION IoStackLocation
,
868 IN PPCI_PDO_EXTENSION DeviceExtension
875 IN PIO_STACK_LOCATION IoStackLocation
,
876 IN PPCI_PDO_EXTENSION DeviceExtension
881 PciPdoIrpWriteConfig(
883 IN PIO_STACK_LOCATION IoStackLocation
,
884 IN PPCI_PDO_EXTENSION DeviceExtension
891 IN PIO_STACK_LOCATION IoStackLocation
,
892 IN PPCI_PDO_EXTENSION DeviceExtension
897 PciPdoIrpQueryDeviceState(
899 IN PIO_STACK_LOCATION IoStackLocation
,
900 IN PPCI_PDO_EXTENSION DeviceExtension
905 PciPdoIrpQueryBusInformation(
907 IN PIO_STACK_LOCATION IoStackLocation
,
908 IN PPCI_PDO_EXTENSION DeviceExtension
913 PciPdoIrpDeviceUsageNotification(
915 IN PIO_STACK_LOCATION IoStackLocation
,
916 IN PPCI_PDO_EXTENSION DeviceExtension
921 PciPdoIrpSurpriseRemoval(
923 IN PIO_STACK_LOCATION IoStackLocation
,
924 IN PPCI_PDO_EXTENSION DeviceExtension
929 PciPdoIrpQueryLegacyBusInformation(
931 IN PIO_STACK_LOCATION IoStackLocation
,
932 IN PPCI_PDO_EXTENSION DeviceExtension
937 // HAL Callback/Hook Routines
946 // PCI Verifier Routines
951 IN PDRIVER_OBJECT DriverObject
956 PciVerifierRetrieveFailureData(
978 PciBuildDefaultExclusionLists(
984 PciUnicodeStringStrStr(
985 IN PUNICODE_STRING InputString
,
986 IN PCUNICODE_STRING EqualString
,
987 IN BOOLEAN CaseInSensitive
995 IN ACCESS_MASK DesiredAccess
,
996 OUT PHANDLE KeyHandle
,
997 OUT PNTSTATUS KeyStatus
1002 PciGetRegistryValue(
1003 IN PWCHAR ValueName
,
1005 IN HANDLE RootHandle
,
1007 OUT PVOID
*OutputBuffer
,
1008 OUT PULONG OutputLength
1013 PciFindParentPciFdoExtension(
1014 IN PDEVICE_OBJECT DeviceObject
,
1020 PciInsertEntryAtTail(
1021 IN PSINGLE_LIST_ENTRY ListHead
,
1022 IN PPCI_FDO_EXTENSION DeviceExtension
,
1028 PciGetDeviceProperty(
1029 IN PDEVICE_OBJECT DeviceObject
,
1030 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
1031 OUT PVOID
*OutputBuffer
1037 IN PDEVICE_OBJECT DeviceObject
,
1038 IN ULONG IoControlCode
,
1039 IN PVOID InputBuffer
,
1040 IN ULONG InputBufferLength
,
1041 IN PVOID OutputBuffer
,
1042 IN ULONG OutputBufferLength
1047 PcipLinkSecondaryExtension(
1048 IN PSINGLE_LIST_ENTRY List
,
1050 IN PPCI_SECONDARY_EXTENSION SecondaryExtension
,
1051 IN PCI_SIGNATURE ExtensionType
,
1055 PPCI_SECONDARY_EXTENSION
1057 PciFindNextSecondaryExtension(
1058 IN PSINGLE_LIST_ENTRY ListHead
,
1059 IN PCI_SIGNATURE ExtensionType
1067 IN USHORT SubVendorId
,
1068 IN USHORT SubSystemId
,
1074 PciFindPdoByFunction(
1075 IN PPCI_FDO_EXTENSION DeviceExtension
,
1076 IN ULONG FunctionNumber
,
1077 IN PPCI_COMMON_HEADER PciData
1082 PciIsCriticalDeviceClass(
1089 PciIsDeviceOnDebugPath(
1090 IN PPCI_PDO_EXTENSION DeviceExtension
1096 IN PPCI_PDO_EXTENSION DeviceExtension
,
1097 OUT PPCI_COMMON_HEADER PciData
1103 IN PPCI_PDO_EXTENSION DeviceExtension
,
1104 OUT PPCI_COMMON_HEADER PciData
1109 PciReadDeviceCapability(
1110 IN PPCI_PDO_EXTENSION DeviceExtension
,
1112 IN ULONG CapabilityId
,
1113 OUT PPCI_CAPABILITIES_HEADER Buffer
,
1119 PciCanDisableDecodes(
1120 IN PPCI_PDO_EXTENSION DeviceExtension
,
1121 IN PPCI_COMMON_HEADER Config
,
1122 IN ULONGLONG HackFlags
,
1123 IN BOOLEAN ForPowerDown
1128 PciClassifyDeviceType(
1129 IN PPCI_PDO_EXTENSION PdoExtension
1132 KIPI_BROADCAST_WORKER PciExecuteCriticalSystemRoutine
;
1136 PciExecuteCriticalSystemRoutine(
1137 IN ULONG_PTR IpiContext
1142 PciCreateIoDescriptorFromBarLimit(
1143 PIO_RESOURCE_DESCRIPTOR ResourceDescriptor
,
1150 PciIsSlotPresentInParentMethod(
1151 IN PPCI_PDO_EXTENSION PdoExtension
,
1158 IN PPCI_PDO_EXTENSION PdoExtension
,
1165 PciQueryBusInformation(
1166 IN PPCI_PDO_EXTENSION PdoExtension
,
1167 IN PPNP_BUS_INFORMATION
* Buffer
1172 PciQueryCapabilities(
1173 IN PPCI_PDO_EXTENSION PdoExtension
,
1174 IN OUT PDEVICE_CAPABILITIES DeviceCapability
1178 // Configuration Routines
1182 PciGetConfigHandlers(
1183 IN PPCI_FDO_EXTENSION FdoExtension
1189 IN PPCI_FDO_EXTENSION DeviceExtension
,
1190 IN PCI_SLOT_NUMBER Slot
,
1198 PciWriteDeviceConfig(
1199 IN PPCI_PDO_EXTENSION DeviceExtension
,
1207 PciReadDeviceConfig(
1208 IN PPCI_PDO_EXTENSION DeviceExtension
,
1216 PciGetAdjustedInterruptLine(
1217 IN PPCI_PDO_EXTENSION PdoExtension
1221 // State Machine Logic Transition Routines
1226 IN PPCI_FDO_EXTENSION DeviceExtension
1231 PciBeginStateTransition(
1232 IN PPCI_FDO_EXTENSION DeviceExtension
,
1233 IN PCI_STATE NewState
1238 PciCancelStateTransition(
1239 IN PPCI_FDO_EXTENSION DeviceExtension
,
1240 IN PCI_STATE NewState
1245 PciCommitStateTransition(
1246 IN PPCI_FDO_EXTENSION DeviceExtension
,
1247 IN PCI_STATE NewState
1255 PciInitializeArbiters(
1256 IN PPCI_FDO_EXTENSION FdoExtension
1261 PciInitializeArbiterRanges(
1262 IN PPCI_FDO_EXTENSION DeviceExtension
,
1263 IN PCM_RESOURCE_LIST Resources
1271 PciDebugIrpDispatchDisplay(
1272 IN PIO_STACK_LOCATION IoStackLocation
,
1273 IN PPCI_FDO_EXTENSION DeviceExtension
,
1279 PciDebugDumpCommonConfig(
1280 IN PPCI_COMMON_HEADER PciData
1285 PciDebugDumpQueryCapabilities(
1286 IN PDEVICE_CAPABILITIES DeviceCaps
1291 PciDebugPrintIoResReqList(
1292 IN PIO_RESOURCE_REQUIREMENTS_LIST Requirements
1297 PciDebugPrintCmResList(
1298 IN PCM_RESOURCE_LIST ResourceList
1303 PciDebugPrintPartialResource(
1304 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialResource
1308 // Interface Support
1313 IN PPCI_FDO_EXTENSION DeviceExtension
,
1314 IN CONST GUID
* InterfaceType
,
1317 IN PVOID InterfaceData
,
1318 IN PINTERFACE Interface
,
1319 IN BOOLEAN LastChance
1324 PciPmeInterfaceInitializer(
1330 routeintrf_Initializer(
1336 arbusno_Initializer(
1342 agpintrf_Initializer(
1348 tranirq_Initializer(
1354 busintrf_Initializer(
1372 locintrf_Initializer(
1378 pcicbintrf_Initializer(
1384 lddintrf_Initializer(
1390 devpresent_Initializer(
1396 agpintrf_Constructor(
1397 IN PVOID DeviceExtension
,
1399 IN PVOID InterfaceData
,
1402 IN PINTERFACE Interface
1407 arbusno_Constructor(
1408 IN PVOID DeviceExtension
,
1410 IN PVOID InterfaceData
,
1413 IN PINTERFACE Interface
1418 tranirq_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 busintrf_Constructor(
1441 IN PVOID DeviceExtension
,
1443 IN PVOID InterfaceData
,
1446 IN PINTERFACE Interface
1452 IN PVOID DeviceExtension
,
1454 IN PVOID InterfaceData
,
1457 IN PINTERFACE Interface
1462 ario_ApplyBrokenVideoHack(
1463 IN PPCI_FDO_EXTENSION FdoExtension
1468 pcicbintrf_Constructor(
1469 IN PVOID DeviceExtension
,
1471 IN PVOID InterfaceData
,
1474 IN PINTERFACE Interface
1479 lddintrf_Constructor(
1480 IN PVOID DeviceExtension
,
1482 IN PVOID InterfaceData
,
1485 IN PINTERFACE Interface
1490 locintrf_Constructor(
1491 IN PVOID DeviceExtension
,
1493 IN PVOID InterfaceData
,
1496 IN PINTERFACE Interface
1501 PciPmeInterfaceConstructor(
1502 IN PVOID DeviceExtension
,
1504 IN PVOID InterfaceData
,
1507 IN PINTERFACE Interface
1512 routeintrf_Constructor(
1513 IN PVOID DeviceExtension
,
1515 IN PVOID InterfaceData
,
1518 IN PINTERFACE Interface
1523 devpresent_Constructor(
1524 IN PVOID DeviceExtension
,
1526 IN PVOID InterfaceData
,
1529 IN PINTERFACE Interface
1533 // PCI Enumeration and Resources
1537 PciQueryDeviceRelations(
1538 IN PPCI_FDO_EXTENSION DeviceExtension
,
1539 IN OUT PDEVICE_RELATIONS
*pDeviceRelations
1545 IN PPCI_PDO_EXTENSION PdoExtension
,
1546 OUT PCM_RESOURCE_LIST
*Buffer
1551 PciQueryTargetDeviceRelations(
1552 IN PPCI_PDO_EXTENSION PdoExtension
,
1553 IN OUT PDEVICE_RELATIONS
*pDeviceRelations
1558 PciQueryEjectionRelations(
1559 IN PPCI_PDO_EXTENSION PdoExtension
,
1560 IN OUT PDEVICE_RELATIONS
*pDeviceRelations
1565 PciQueryRequirements(
1566 IN PPCI_PDO_EXTENSION PdoExtension
,
1567 IN OUT PIO_RESOURCE_REQUIREMENTS_LIST
*RequirementsList
1572 PciComputeNewCurrentSettings(
1573 IN PPCI_PDO_EXTENSION PdoExtension
,
1574 IN PCM_RESOURCE_LIST ResourceList
1580 IN PPCI_PDO_EXTENSION PdoExtension
,
1582 IN BOOLEAN SomethingSomethingDarkSide
1587 PciBuildRequirementsList(
1588 IN PPCI_PDO_EXTENSION PdoExtension
,
1589 IN PPCI_COMMON_HEADER PciData
,
1590 OUT PIO_RESOURCE_REQUIREMENTS_LIST
* Buffer
1594 // Identification Functions
1598 PciGetDeviceDescriptionMessage(
1606 IN PPCI_PDO_EXTENSION PdoExtension
,
1607 IN DEVICE_TEXT_TYPE QueryType
,
1615 IN PPCI_PDO_EXTENSION DeviceExtension
,
1616 IN BUS_QUERY_ID_TYPE QueryType
,
1625 Cardbus_MassageHeaderForLimitsDetermination(
1626 IN PPCI_CONFIGURATOR_CONTEXT Context
1631 Cardbus_SaveCurrentSettings(
1632 IN PPCI_CONFIGURATOR_CONTEXT Context
1638 IN PPCI_CONFIGURATOR_CONTEXT Context
1643 Cardbus_RestoreCurrent(
1644 IN PPCI_CONFIGURATOR_CONTEXT Context
1649 Cardbus_GetAdditionalResourceDescriptors(
1650 IN PPCI_CONFIGURATOR_CONTEXT Context
,
1651 IN PPCI_COMMON_HEADER PciData
,
1652 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
1657 Cardbus_ResetDevice(
1658 IN PPCI_PDO_EXTENSION PdoExtension
,
1659 IN PPCI_COMMON_HEADER PciData
1664 Cardbus_ChangeResourceSettings(
1665 IN PPCI_PDO_EXTENSION PdoExtension
,
1666 IN PPCI_COMMON_HEADER PciData
1670 // PCI Device Support
1674 Device_MassageHeaderForLimitsDetermination(
1675 IN PPCI_CONFIGURATOR_CONTEXT Context
1680 Device_SaveCurrentSettings(
1681 IN PPCI_CONFIGURATOR_CONTEXT Context
1687 IN PPCI_CONFIGURATOR_CONTEXT Context
1692 Device_RestoreCurrent(
1693 IN PPCI_CONFIGURATOR_CONTEXT Context
1698 Device_GetAdditionalResourceDescriptors(
1699 IN PPCI_CONFIGURATOR_CONTEXT Context
,
1700 IN PPCI_COMMON_HEADER PciData
,
1701 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
1707 IN PPCI_PDO_EXTENSION PdoExtension
,
1708 IN PPCI_COMMON_HEADER PciData
1713 Device_ChangeResourceSettings(
1714 IN PPCI_PDO_EXTENSION PdoExtension
,
1715 IN PPCI_COMMON_HEADER PciData
1719 // PCI-to-PCI Bridge Device Support
1723 PPBridge_MassageHeaderForLimitsDetermination(
1724 IN PPCI_CONFIGURATOR_CONTEXT Context
1729 PPBridge_SaveCurrentSettings(
1730 IN PPCI_CONFIGURATOR_CONTEXT Context
1735 PPBridge_SaveLimits(
1736 IN PPCI_CONFIGURATOR_CONTEXT Context
1741 PPBridge_RestoreCurrent(
1742 IN PPCI_CONFIGURATOR_CONTEXT Context
1747 PPBridge_GetAdditionalResourceDescriptors(
1748 IN PPCI_CONFIGURATOR_CONTEXT Context
,
1749 IN PPCI_COMMON_HEADER PciData
,
1750 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
1755 PPBridge_ResetDevice(
1756 IN PPCI_PDO_EXTENSION PdoExtension
,
1757 IN PPCI_COMMON_HEADER PciData
1762 PPBridge_ChangeResourceSettings(
1763 IN PPCI_PDO_EXTENSION PdoExtension
,
1764 IN PPCI_COMMON_HEADER PciData
1768 // Bus Number Routines
1772 PciAreBusNumbersConfigured(
1773 IN PPCI_PDO_EXTENSION PdoExtension
1777 // Routine Interface
1781 PciCacheLegacyDeviceRouting(
1782 IN PDEVICE_OBJECT DeviceObject
,
1784 IN ULONG SlotNumber
,
1785 IN UCHAR InterruptLine
,
1786 IN UCHAR InterruptPin
,
1789 IN PDEVICE_OBJECT PhysicalDeviceObject
,
1790 IN PPCI_PDO_EXTENSION PdoExtension
,
1791 OUT PDEVICE_OBJECT
*pFoundDeviceObject
1795 // External Resources
1797 extern SINGLE_LIST_ENTRY PciFdoExtensionListHead
;
1798 extern KEVENT PciGlobalLock
;
1799 extern PPCI_INTERFACE PciInterfaces
[];
1800 extern PCI_INTERFACE ArbiterInterfaceBusNumber
;
1801 extern PCI_INTERFACE ArbiterInterfaceMemory
;
1802 extern PCI_INTERFACE ArbiterInterfaceIo
;
1803 extern PCI_INTERFACE BusHandlerInterface
;
1804 extern PCI_INTERFACE PciRoutingInterface
;
1805 extern PCI_INTERFACE PciCardbusPrivateInterface
;
1806 extern PCI_INTERFACE PciLegacyDeviceDetectionInterface
;
1807 extern PCI_INTERFACE PciPmeInterface
;
1808 extern PCI_INTERFACE PciDevicePresentInterface
;
1809 //extern PCI_INTERFACE PciNativeIdeInterface;
1810 extern PCI_INTERFACE PciLocationInterface
;
1811 extern PCI_INTERFACE AgpTargetInterface
;
1812 extern PCI_INTERFACE TranslatorInterfaceInterrupt
;
1813 extern PDRIVER_OBJECT PciDriverObject
;
1814 extern PWATCHDOG_TABLE WdTable
;
1815 extern PPCI_HACK_ENTRY PciHackTable
;
1816 extern BOOLEAN PciAssignBusNumbers
;
1817 extern BOOLEAN PciEnableNativeModeATA
;
1818 extern PPCI_IRQ_ROUTING_TABLE PciIrqRoutingTable
;
1819 extern BOOLEAN PciRunningDatacenter
;
1821 /* Exported by NTOS, should this go in the NDK? */
1822 extern NTSYSAPI BOOLEAN InitSafeBootMode
;
1824 #endif /* _PCIX_PCH_ */