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 // Device Extension, Interface, Translator and Arbiter Signatures
85 typedef enum _PCI_SIGNATURE
87 PciPdoExtensionType
= 'icP0',
88 PciFdoExtensionType
= 'icP1',
90 PciArb_Memory
= 'icP3',
91 PciArb_Interrupt
= 'icP4',
92 PciArb_BusNumber
= 'icP5',
93 PciTrans_Interrupt
= 'icP6',
94 PciInterface_BusHandler
= 'icP7',
95 PciInterface_IntRouteHandler
= 'icP8',
96 PciInterface_PciCb
= 'icP9',
97 PciInterface_LegacyDeviceDetection
= 'icP:',
98 PciInterface_PmeHandler
= 'icP;',
99 PciInterface_DevicePresent
= 'icP<',
100 PciInterface_NativeIde
= 'icP=',
101 PciInterface_AgpTarget
= 'icP>',
102 PciInterface_Location
= 'icP?'
103 } PCI_SIGNATURE
, *PPCI_SIGNATURE
;
106 // Driver-handled PCI Device Types
108 typedef enum _PCI_DEVICE_TYPES
113 PciTypeCardbusBridge
,
118 // Device Extension Logic States
120 typedef enum _PCI_STATE
127 PciSynchronizedOperation
,
132 // IRP Dispatch Logic Style
134 typedef enum _PCI_DISPATCH_STYLE
140 } PCI_DISPATCH_STYLE
;
143 // PCI Hack Entry Information
145 typedef struct _PCI_HACK_ENTRY
154 } PCI_HACK_ENTRY
, *PPCI_HACK_ENTRY
;
157 // Power State Information for Device Extension
159 typedef struct _PCI_POWER_STATE
161 SYSTEM_POWER_STATE CurrentSystemState
;
162 DEVICE_POWER_STATE CurrentDeviceState
;
163 SYSTEM_POWER_STATE SystemWakeLevel
;
164 DEVICE_POWER_STATE DeviceWakeLevel
;
165 DEVICE_POWER_STATE SystemStateMapping
[7];
167 PVOID SavedCancelRoutine
;
171 } PCI_POWER_STATE
, *PPCI_POWER_STATE
;
174 // Internal PCI Lock Structure
176 typedef struct _PCI_LOCK
180 } PCI_LOCK
, *PPCI_LOCK
;
183 // Device Extension for a Bus FDO
185 typedef struct _PCI_FDO_EXTENSION
187 SINGLE_LIST_ENTRY List
;
189 struct _PCI_MJ_DISPATCH_TABLE
*IrpDispatchTable
;
191 BOOLEAN TentativeNextState
;
192 KEVENT SecondaryExtLock
;
193 PDEVICE_OBJECT PhysicalDeviceObject
;
194 PDEVICE_OBJECT FunctionalDeviceObject
;
195 PDEVICE_OBJECT AttachedDeviceObject
;
196 KEVENT ChildListLock
;
197 struct _PCI_PDO_EXTENSION
*ChildPdoList
;
198 struct _PCI_FDO_EXTENSION
*BusRootFdoExtension
;
199 struct _PCI_FDO_EXTENSION
*ParentFdoExtension
;
200 struct _PCI_PDO_EXTENSION
*ChildBridgePdoList
;
201 PPCI_BUS_INTERFACE_STANDARD PciBusInterface
;
202 BOOLEAN MaxSubordinateBus
;
203 BUS_HANDLER
*BusHandler
;
208 BOOLEAN ArbitersInitialized
;
209 BOOLEAN BrokenVideoHackApplied
;
211 PCI_POWER_STATE PowerState
;
212 SINGLE_LIST_ENTRY SecondaryExtension
;
213 LONG ChildWaitWakeCount
;
214 PPCI_COMMON_CONFIG PreservedConfig
;
219 BOOLEAN CacheLineSize
;
220 BOOLEAN LatencyTimer
;
225 } PCI_FDO_EXTENSION
, *PPCI_FDO_EXTENSION
;
227 typedef struct _PCI_FUNCTION_RESOURCES
229 IO_RESOURCE_DESCRIPTOR Limit
[7];
230 CM_PARTIAL_RESOURCE_DESCRIPTOR Current
[7];
231 } PCI_FUNCTION_RESOURCES
, *PPCI_FUNCTION_RESOURCES
;
233 typedef union _PCI_HEADER_TYPE_DEPENDENT
243 UCHAR SubordinateBus
;
244 UCHAR SubtractiveDecode
:1;
247 UCHAR WeChangedBusNumbers
:1;
248 UCHAR IsaBitRequired
:1;
254 } PCI_HEADER_TYPE_DEPENDENT
, *PPCI_HEADER_TYPE_DEPENDENT
;
256 typedef struct _PCI_PDO_EXTENSION
260 struct _PCI_MJ_DISPATCH_TABLE
*IrpDispatchTable
;
262 BOOLEAN TentativeNextState
;
264 KEVENT SecondaryExtLock
;
265 PCI_SLOT_NUMBER Slot
;
266 PDEVICE_OBJECT PhysicalDeviceObject
;
267 PPCI_FDO_EXTENSION ParentFdoExtension
;
268 SINGLE_LIST_ENTRY SecondaryExtension
;
269 LONG BusInterfaceReferenceCount
;
270 LONG AgpInterfaceReferenceCount
;
273 USHORT SubsystemVendorId
;
279 BOOLEAN AdditionalResourceCount
;
280 BOOLEAN AdjustedInterruptLine
;
281 BOOLEAN InterruptPin
;
282 BOOLEAN RawInterruptLine
;
283 BOOLEAN CapabilitiesPtr
;
284 BOOLEAN SavedLatencyTimer
;
285 BOOLEAN SavedCacheLineSize
;
288 BOOLEAN ReportedMissing
;
289 BOOLEAN ExpectedWritebackFailure
;
290 BOOLEAN NoTouchPmeEnable
;
291 BOOLEAN LegacyDriver
;
292 BOOLEAN UpdateHardware
;
294 BOOLEAN DisablePowerDown
;
295 BOOLEAN NeedsHotPlugConfiguration
;
296 BOOLEAN SwitchedIDEToNativeMode
;
297 BOOLEAN BIOSAllowsIDESwitchToNativeMode
;
298 BOOLEAN IoSpaceUnderNativeIdeControl
;
300 PCI_POWER_STATE PowerState
;
301 PCI_HEADER_TYPE_DEPENDENT Dependent
;
303 PCI_FUNCTION_RESOURCES
*Resources
;
304 PCI_FDO_EXTENSION
*BridgeFdoExtension
;
305 struct _PCI_PDO_EXTENSION
*NextBridge
;
306 struct _PCI_PDO_EXTENSION
*NextHashEntry
;
308 PCI_PMC PowerCapabilities
;
309 BOOLEAN TargetAgpCapabilityId
;
310 USHORT CommandEnables
;
311 USHORT InitialCommand
;
312 } PCI_PDO_EXTENSION
, *PPCI_PDO_EXTENSION
;
315 // IRP Dispatch Function Type
317 typedef NTSTATUS (NTAPI
*PCI_DISPATCH_FUNCTION
)(
319 IN PIO_STACK_LOCATION IoStackLocation
,
320 IN PVOID DeviceExtension
324 // IRP Dispatch Minor Table
326 typedef struct _PCI_MN_DISPATCH_TABLE
328 PCI_DISPATCH_STYLE DispatchStyle
;
329 PCI_DISPATCH_FUNCTION DispatchFunction
;
330 } PCI_MN_DISPATCH_TABLE
, *PPCI_MN_DISPATCH_TABLE
;
333 // IRP Dispatch Major Table
335 typedef struct _PCI_MJ_DISPATCH_TABLE
337 ULONG PnpIrpMaximumMinorFunction
;
338 PPCI_MN_DISPATCH_TABLE PnpIrpDispatchTable
;
339 ULONG PowerIrpMaximumMinorFunction
;
340 PPCI_MN_DISPATCH_TABLE PowerIrpDispatchTable
;
341 PCI_DISPATCH_STYLE SystemControlIrpDispatchStyle
;
342 PCI_DISPATCH_FUNCTION SystemControlIrpDispatchFunction
;
343 PCI_DISPATCH_STYLE OtherIrpDispatchStyle
;
344 PCI_DISPATCH_FUNCTION OtherIrpDispatchFunction
;
345 } PCI_MJ_DISPATCH_TABLE
, *PPCI_MJ_DISPATCH_TABLE
;
348 // Generic PCI Interface Constructor and Initializer
350 struct _PCI_INTERFACE
;
351 typedef NTSTATUS (NTAPI
*PCI_INTERFACE_CONSTRUCTOR
)(
352 IN PVOID DeviceExtension
,
354 IN PVOID InterfaceData
,
357 IN PINTERFACE Interface
360 typedef NTSTATUS (NTAPI
*PCI_INTERFACE_INITIALIZER
)(
365 // Generic PCI Interface (Interface, Translator, Arbiter)
367 typedef struct _PCI_INTERFACE
369 CONST GUID
*InterfaceType
;
375 PCI_SIGNATURE Signature
;
376 PCI_INTERFACE_CONSTRUCTOR Constructor
;
377 PCI_INTERFACE_INITIALIZER Initializer
;
378 } PCI_INTERFACE
, *PPCI_INTERFACE
;
381 // Generic Secondary Extension Instance Header (Interface, Translator, Arbiter)
383 typedef struct PCI_SECONDARY_EXTENSION
385 SINGLE_LIST_ENTRY List
;
386 PCI_SIGNATURE ExtensionType
;
388 } PCI_SECONDARY_EXTENSION
, *PPCI_SECONDARY_EXTENSION
;
391 // PCI Arbiter Instance
393 typedef struct PCI_ARBITER_INSTANCE
395 PCI_SECONDARY_EXTENSION Header
;
396 PPCI_INTERFACE Interface
;
397 PPCI_FDO_EXTENSION BusFdoExtension
;
398 WCHAR InstanceName
[24];
399 //ARBITER_INSTANCE CommonInstance; FIXME: Need Arbiter Headers
400 } PCI_ARBITER_INSTANCE
, *PPCI_ARBITER_INSTANCE
;
405 typedef struct _PCI_VERIFIER_DATA
408 VF_FAILURE_CLASS FailureClass
;
409 ULONG AssertionControl
;
410 PCHAR DebuggerMessageText
;
411 } PCI_VERIFIER_DATA
, *PPCI_VERIFIER_DATA
;
414 // PCI Configuration Callbacks
416 struct _PCI_CONFIGURATOR_CONTEXT
;
418 typedef VOID (NTAPI
*PCI_CONFIGURATOR_INITIALIZE
)(
419 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
422 typedef VOID (NTAPI
*PCI_CONFIGURATOR_RESTORE_CURRENT
)(
423 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
426 typedef VOID (NTAPI
*PCI_CONFIGURATOR_SAVE_LIMITS
)(
427 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
430 typedef VOID (NTAPI
*PCI_CONFIGURATOR_SAVE_CURRENT_SETTINGS
)(
431 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
434 typedef VOID (NTAPI
*PCI_CONFIGURATOR_CHANGE_RESOURCE_SETTINGS
)(
435 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
438 typedef VOID (NTAPI
*PCI_CONFIGURATOR_GET_ADDITIONAL_RESOURCE_DESCRIPTORS
)(
439 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
,
440 IN PPCI_COMMON_HEADER PciData
,
441 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
444 typedef VOID (NTAPI
*PCI_CONFIGURATOR_RESET_DEVICE
)(
445 IN
struct _PCI_CONFIGURATOR_CONTEXT
* Context
451 typedef struct _PCI_CONFIGURATOR
453 PCI_CONFIGURATOR_INITIALIZE Initialize
;
454 PCI_CONFIGURATOR_RESTORE_CURRENT RestoreCurrent
;
455 PCI_CONFIGURATOR_SAVE_LIMITS SaveLimits
;
456 PCI_CONFIGURATOR_SAVE_CURRENT_SETTINGS SaveCurrentSettings
;
457 PCI_CONFIGURATOR_CHANGE_RESOURCE_SETTINGS ChangeResourceSettings
;
458 PCI_CONFIGURATOR_GET_ADDITIONAL_RESOURCE_DESCRIPTORS GetAdditionalResourceDescriptors
;
459 PCI_CONFIGURATOR_RESET_DEVICE ResetDevice
;
460 } PCI_CONFIGURATOR
, *PPCI_CONFIGURATOR
;
463 // PCI Configurator Context
465 typedef struct _PCI_CONFIGURATOR_CONTEXT
467 PPCI_PDO_EXTENSION PdoExtension
;
468 PPCI_COMMON_HEADER Current
;
469 PPCI_COMMON_HEADER PciData
;
470 PPCI_CONFIGURATOR Configurator
;
471 USHORT SecondaryStatus
;
474 } PCI_CONFIGURATOR_CONTEXT
, *PPCI_CONFIGURATOR_CONTEXT
;
479 typedef VOID (NTAPI
*PCI_IPI_FUNCTION
)(
481 IN PPCI_CONFIGURATOR_CONTEXT Context
487 typedef struct _PCI_IPI_CONTEXT
491 PPCI_PDO_EXTENSION PdoExtension
;
492 PCI_IPI_FUNCTION Function
;
494 } PCI_IPI_CONTEXT
, *PPCI_IPI_CONTEXT
;
497 // IRP Dispatch Routines
502 IN PDEVICE_OBJECT DeviceObject
,
510 IN PIO_STACK_LOCATION IoStackLocation
,
511 IN PPCI_FDO_EXTENSION DeviceExtension
516 PciPassIrpFromFdoToPdo(
517 IN PPCI_FDO_EXTENSION DeviceExtension
,
524 IN PPCI_FDO_EXTENSION DeviceExtension
,
530 PciIrpInvalidDeviceRequest(
532 IN PIO_STACK_LOCATION IoStackLocation
,
533 IN PPCI_FDO_EXTENSION DeviceExtension
543 IN PIO_STACK_LOCATION IoStackLocation
,
544 IN PPCI_FDO_EXTENSION DeviceExtension
551 IN PIO_STACK_LOCATION IoStackLocation
,
552 IN PPCI_FDO_EXTENSION DeviceExtension
559 IN PIO_STACK_LOCATION IoStackLocation
,
560 IN PPCI_FDO_EXTENSION DeviceExtension
565 PciSetPowerManagedDevicePowerState(
566 IN PPCI_PDO_EXTENSION DeviceExtension
,
567 IN DEVICE_POWER_STATE DeviceState
,
577 IN PDRIVER_OBJECT DriverObject
,
578 IN PDEVICE_OBJECT PhysicalDeviceObject
583 PciFdoIrpStartDevice(
585 IN PIO_STACK_LOCATION IoStackLocation
,
586 IN PPCI_FDO_EXTENSION DeviceExtension
591 PciFdoIrpQueryRemoveDevice(
593 IN PIO_STACK_LOCATION IoStackLocation
,
594 IN PPCI_FDO_EXTENSION DeviceExtension
599 PciFdoIrpRemoveDevice(
601 IN PIO_STACK_LOCATION IoStackLocation
,
602 IN PPCI_FDO_EXTENSION DeviceExtension
607 PciFdoIrpCancelRemoveDevice(
609 IN PIO_STACK_LOCATION IoStackLocation
,
610 IN PPCI_FDO_EXTENSION DeviceExtension
617 IN PIO_STACK_LOCATION IoStackLocation
,
618 IN PPCI_FDO_EXTENSION DeviceExtension
623 PciFdoIrpQueryStopDevice(
625 IN PIO_STACK_LOCATION IoStackLocation
,
626 IN PPCI_FDO_EXTENSION DeviceExtension
631 PciFdoIrpCancelStopDevice(
633 IN PIO_STACK_LOCATION IoStackLocation
,
634 IN PPCI_FDO_EXTENSION DeviceExtension
639 PciFdoIrpQueryDeviceRelations(
641 IN PIO_STACK_LOCATION IoStackLocation
,
642 IN PPCI_FDO_EXTENSION DeviceExtension
647 PciFdoIrpQueryInterface(
649 IN PIO_STACK_LOCATION IoStackLocation
,
650 IN PPCI_FDO_EXTENSION DeviceExtension
655 PciFdoIrpQueryCapabilities(
657 IN PIO_STACK_LOCATION IoStackLocation
,
658 IN PPCI_FDO_EXTENSION DeviceExtension
663 PciFdoIrpDeviceUsageNotification(
665 IN PIO_STACK_LOCATION IoStackLocation
,
666 IN PPCI_FDO_EXTENSION DeviceExtension
671 PciFdoIrpSurpriseRemoval(
673 IN PIO_STACK_LOCATION IoStackLocation
,
674 IN PPCI_FDO_EXTENSION DeviceExtension
679 PciFdoIrpQueryLegacyBusInformation(
681 IN PIO_STACK_LOCATION IoStackLocation
,
682 IN PPCI_FDO_EXTENSION DeviceExtension
686 // Device PDO Routines
691 IN PPCI_FDO_EXTENSION DeviceExtension
,
692 IN PCI_SLOT_NUMBER Slot
,
693 OUT PDEVICE_OBJECT
*PdoDeviceObject
700 IN PIO_STACK_LOCATION IoStackLocation
,
701 IN PPCI_PDO_EXTENSION DeviceExtension
708 IN PIO_STACK_LOCATION IoStackLocation
,
709 IN PPCI_PDO_EXTENSION DeviceExtension
716 IN PIO_STACK_LOCATION IoStackLocation
,
717 IN PPCI_PDO_EXTENSION DeviceExtension
722 PciPdoIrpStartDevice(
724 IN PIO_STACK_LOCATION IoStackLocation
,
725 IN PPCI_PDO_EXTENSION DeviceExtension
730 PciPdoIrpQueryRemoveDevice(
732 IN PIO_STACK_LOCATION IoStackLocation
,
733 IN PPCI_PDO_EXTENSION DeviceExtension
738 PciPdoIrpRemoveDevice(
740 IN PIO_STACK_LOCATION IoStackLocation
,
741 IN PPCI_PDO_EXTENSION DeviceExtension
746 PciPdoIrpCancelRemoveDevice(
748 IN PIO_STACK_LOCATION IoStackLocation
,
749 IN PPCI_PDO_EXTENSION DeviceExtension
756 IN PIO_STACK_LOCATION IoStackLocation
,
757 IN PPCI_PDO_EXTENSION DeviceExtension
762 PciPdoIrpQueryStopDevice(
764 IN PIO_STACK_LOCATION IoStackLocation
,
765 IN PPCI_PDO_EXTENSION DeviceExtension
770 PciPdoIrpCancelStopDevice(
772 IN PIO_STACK_LOCATION IoStackLocation
,
773 IN PPCI_PDO_EXTENSION DeviceExtension
778 PciPdoIrpQueryDeviceRelations(
780 IN PIO_STACK_LOCATION IoStackLocation
,
781 IN PPCI_PDO_EXTENSION DeviceExtension
786 PciPdoIrpQueryInterface(
788 IN PIO_STACK_LOCATION IoStackLocation
,
789 IN PPCI_PDO_EXTENSION DeviceExtension
794 PciPdoIrpQueryCapabilities(
796 IN PIO_STACK_LOCATION IoStackLocation
,
797 IN PPCI_PDO_EXTENSION DeviceExtension
802 PciPdoIrpQueryResources(
804 IN PIO_STACK_LOCATION IoStackLocation
,
805 IN PPCI_PDO_EXTENSION DeviceExtension
810 PciPdoIrpQueryResourceRequirements(
812 IN PIO_STACK_LOCATION IoStackLocation
,
813 IN PPCI_PDO_EXTENSION DeviceExtension
818 PciPdoIrpQueryDeviceText(
820 IN PIO_STACK_LOCATION IoStackLocation
,
821 IN PPCI_PDO_EXTENSION DeviceExtension
828 IN PIO_STACK_LOCATION IoStackLocation
,
829 IN PPCI_PDO_EXTENSION DeviceExtension
834 PciPdoIrpWriteConfig(
836 IN PIO_STACK_LOCATION IoStackLocation
,
837 IN PPCI_PDO_EXTENSION DeviceExtension
844 IN PIO_STACK_LOCATION IoStackLocation
,
845 IN PPCI_PDO_EXTENSION DeviceExtension
850 PciPdoIrpQueryDeviceState(
852 IN PIO_STACK_LOCATION IoStackLocation
,
853 IN PPCI_PDO_EXTENSION DeviceExtension
858 PciPdoIrpQueryBusInformation(
860 IN PIO_STACK_LOCATION IoStackLocation
,
861 IN PPCI_PDO_EXTENSION DeviceExtension
866 PciPdoIrpDeviceUsageNotification(
868 IN PIO_STACK_LOCATION IoStackLocation
,
869 IN PPCI_PDO_EXTENSION DeviceExtension
874 PciPdoIrpSurpriseRemoval(
876 IN PIO_STACK_LOCATION IoStackLocation
,
877 IN PPCI_PDO_EXTENSION DeviceExtension
882 PciPdoIrpQueryLegacyBusInformation(
884 IN PIO_STACK_LOCATION IoStackLocation
,
885 IN PPCI_PDO_EXTENSION DeviceExtension
890 // HAL Callback/Hook Routines
899 // PCI Verifier Routines
904 IN PDRIVER_OBJECT DriverObject
909 PciVerifierRetrieveFailureData(
931 PciBuildDefaultExclusionLists(
937 PciUnicodeStringStrStr(
938 IN PUNICODE_STRING InputString
,
939 IN PCUNICODE_STRING EqualString
,
940 IN BOOLEAN CaseInSensitive
948 IN ACCESS_MASK DesiredAccess
,
949 OUT PHANDLE KeyHandle
,
950 OUT PNTSTATUS KeyStatus
958 IN HANDLE RootHandle
,
960 OUT PVOID
*OutputBuffer
,
961 OUT PULONG OutputLength
966 PciFindParentPciFdoExtension(
967 IN PDEVICE_OBJECT DeviceObject
,
973 PciInsertEntryAtTail(
974 IN PSINGLE_LIST_ENTRY ListHead
,
975 IN PPCI_FDO_EXTENSION DeviceExtension
,
981 PciGetDeviceProperty(
982 IN PDEVICE_OBJECT DeviceObject
,
983 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
984 OUT PVOID
*OutputBuffer
990 IN PDEVICE_OBJECT DeviceObject
,
991 IN ULONG IoControlCode
,
992 IN PVOID InputBuffer
,
993 IN ULONG InputBufferLength
,
994 IN PVOID OutputBuffer
,
995 IN ULONG OutputBufferLength
1000 PcipLinkSecondaryExtension(
1001 IN PSINGLE_LIST_ENTRY List
,
1003 IN PPCI_SECONDARY_EXTENSION SecondaryExtension
,
1004 IN PCI_SIGNATURE ExtensionType
,
1008 PPCI_SECONDARY_EXTENSION
1010 PciFindNextSecondaryExtension(
1011 IN PSINGLE_LIST_ENTRY ListHead
,
1012 IN PCI_SIGNATURE ExtensionType
1020 IN USHORT SubVendorId
,
1021 IN USHORT SubSystemId
,
1027 PciFindPdoByFunction(
1028 IN PPCI_FDO_EXTENSION DeviceExtension
,
1029 IN ULONG FunctionNumber
,
1030 IN PPCI_COMMON_HEADER PciData
1035 PciIsCriticalDeviceClass(
1042 PciIsDeviceOnDebugPath(
1043 IN PPCI_PDO_EXTENSION DeviceExtension
1049 IN PPCI_PDO_EXTENSION DeviceExtension
,
1050 OUT PPCI_COMMON_HEADER PciData
1056 IN PPCI_PDO_EXTENSION DeviceExtension
,
1057 OUT PPCI_COMMON_HEADER PciData
1062 PciReadDeviceCapability(
1063 IN PPCI_PDO_EXTENSION DeviceExtension
,
1065 IN ULONG CapabilityId
,
1066 OUT PPCI_CAPABILITIES_HEADER Buffer
,
1072 PciCanDisableDecodes(
1073 IN PPCI_PDO_EXTENSION DeviceExtension
,
1074 IN PPCI_COMMON_HEADER Config
,
1075 IN ULONGLONG HackFlags
,
1076 IN BOOLEAN ForPowerDown
1081 PciClassifyDeviceType(
1082 IN PPCI_PDO_EXTENSION PdoExtension
1087 PciExecuteCriticalSystemRoutine(
1088 IN ULONG_PTR IpiContext
1093 PciCreateIoDescriptorFromBarLimit(
1094 PIO_RESOURCE_DESCRIPTOR ResourceDescriptor
,
1101 PciIsSlotPresentInParentMethod(
1102 IN PPCI_PDO_EXTENSION PdoExtension
,
1109 IN PPCI_PDO_EXTENSION PdoExtension
,
1115 // Configuration Routines
1119 PciGetConfigHandlers(
1120 IN PPCI_FDO_EXTENSION FdoExtension
1126 IN PPCI_FDO_EXTENSION DeviceExtension
,
1127 IN PCI_SLOT_NUMBER Slot
,
1135 PciWriteDeviceConfig(
1136 IN PPCI_PDO_EXTENSION DeviceExtension
,
1144 PciReadDeviceConfig(
1145 IN PPCI_PDO_EXTENSION DeviceExtension
,
1153 PciGetAdjustedInterruptLine(
1154 IN PPCI_PDO_EXTENSION PdoExtension
1158 // State Machine Logic Transition Routines
1163 IN PPCI_FDO_EXTENSION DeviceExtension
1168 PciBeginStateTransition(
1169 IN PPCI_FDO_EXTENSION DeviceExtension
,
1170 IN PCI_STATE NewState
1175 PciCancelStateTransition(
1176 IN PPCI_FDO_EXTENSION DeviceExtension
,
1177 IN PCI_STATE NewState
1182 PciCommitStateTransition(
1183 IN PPCI_FDO_EXTENSION DeviceExtension
,
1184 IN PCI_STATE NewState
1192 PciInitializeArbiters(
1193 IN PPCI_FDO_EXTENSION FdoExtension
1198 PciInitializeArbiterRanges(
1199 IN PPCI_FDO_EXTENSION DeviceExtension
,
1200 IN PCM_RESOURCE_LIST Resources
1208 PciDebugIrpDispatchDisplay(
1209 IN PIO_STACK_LOCATION IoStackLocation
,
1210 IN PPCI_FDO_EXTENSION DeviceExtension
,
1216 PciDebugDumpCommonConfig(
1217 IN PPCI_COMMON_HEADER PciData
1221 // Interface Support
1226 IN PPCI_FDO_EXTENSION DeviceExtension
,
1227 IN CONST GUID
* InterfaceType
,
1230 IN PVOID InterfaceData
,
1231 IN PINTERFACE Interface
,
1232 IN BOOLEAN LastChance
1237 PciPmeInterfaceInitializer(
1243 routeintrf_Initializer(
1249 arbusno_Initializer(
1255 agpintrf_Initializer(
1261 tranirq_Initializer(
1267 busintrf_Initializer(
1285 locintrf_Initializer(
1291 pcicbintrf_Initializer(
1297 lddintrf_Initializer(
1303 devpresent_Initializer(
1309 agpintrf_Constructor(
1310 IN PVOID DeviceExtension
,
1312 IN PVOID InterfaceData
,
1315 IN PINTERFACE Interface
1320 arbusno_Constructor(
1321 IN PVOID DeviceExtension
,
1323 IN PVOID InterfaceData
,
1326 IN PINTERFACE Interface
1331 tranirq_Constructor(
1332 IN PVOID DeviceExtension
,
1334 IN PVOID InterfaceData
,
1337 IN PINTERFACE Interface
1343 IN PVOID DeviceExtension
,
1345 IN PVOID InterfaceData
,
1348 IN PINTERFACE Interface
1353 busintrf_Constructor(
1354 IN PVOID DeviceExtension
,
1356 IN PVOID InterfaceData
,
1359 IN PINTERFACE Interface
1365 IN PVOID DeviceExtension
,
1367 IN PVOID InterfaceData
,
1370 IN PINTERFACE Interface
1375 ario_ApplyBrokenVideoHack(
1376 IN PPCI_FDO_EXTENSION FdoExtension
1381 pcicbintrf_Constructor(
1382 IN PVOID DeviceExtension
,
1384 IN PVOID InterfaceData
,
1387 IN PINTERFACE Interface
1392 lddintrf_Constructor(
1393 IN PVOID DeviceExtension
,
1395 IN PVOID InterfaceData
,
1398 IN PINTERFACE Interface
1403 locintrf_Constructor(
1404 IN PVOID DeviceExtension
,
1406 IN PVOID InterfaceData
,
1409 IN PINTERFACE Interface
1414 PciPmeInterfaceConstructor(
1415 IN PVOID DeviceExtension
,
1417 IN PVOID InterfaceData
,
1420 IN PINTERFACE Interface
1425 routeintrf_Constructor(
1426 IN PVOID DeviceExtension
,
1428 IN PVOID InterfaceData
,
1431 IN PINTERFACE Interface
1436 devpresent_Constructor(
1437 IN PVOID DeviceExtension
,
1439 IN PVOID InterfaceData
,
1442 IN PINTERFACE Interface
1446 // PCI Enumeration and Resources
1450 PciQueryDeviceRelations(
1451 IN PPCI_FDO_EXTENSION DeviceExtension
,
1452 IN OUT PDEVICE_RELATIONS
*pDeviceRelations
1456 // Identification Functions
1460 PciGetDeviceDescriptionMessage(
1470 Cardbus_MassageHeaderForLimitsDetermination(
1471 IN PPCI_CONFIGURATOR_CONTEXT Context
1476 Cardbus_SaveCurrentSettings(
1477 IN PPCI_CONFIGURATOR_CONTEXT Context
1483 IN PPCI_CONFIGURATOR_CONTEXT Context
1488 Cardbus_RestoreCurrent(
1489 IN PPCI_CONFIGURATOR_CONTEXT Context
1494 Cardbus_GetAdditionalResourceDescriptors(
1495 IN PPCI_CONFIGURATOR_CONTEXT Context
,
1496 IN PPCI_COMMON_HEADER PciData
,
1497 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
1502 Cardbus_ResetDevice(
1503 IN PPCI_CONFIGURATOR_CONTEXT Context
1508 Cardbus_ChangeResourceSettings(
1509 IN PPCI_CONFIGURATOR_CONTEXT Context
1513 // PCI Device Support
1517 Device_MassageHeaderForLimitsDetermination(
1518 IN PPCI_CONFIGURATOR_CONTEXT Context
1523 Device_SaveCurrentSettings(
1524 IN PPCI_CONFIGURATOR_CONTEXT Context
1530 IN PPCI_CONFIGURATOR_CONTEXT Context
1535 Device_RestoreCurrent(
1536 IN PPCI_CONFIGURATOR_CONTEXT Context
1541 Device_GetAdditionalResourceDescriptors(
1542 IN PPCI_CONFIGURATOR_CONTEXT Context
,
1543 IN PPCI_COMMON_HEADER PciData
,
1544 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
1550 IN PPCI_CONFIGURATOR_CONTEXT Context
1555 Device_ChangeResourceSettings(
1556 IN PPCI_CONFIGURATOR_CONTEXT Context
1560 // PCI-to-PCI Bridge Device Support
1564 PPBridge_MassageHeaderForLimitsDetermination(
1565 IN PPCI_CONFIGURATOR_CONTEXT Context
1570 PPBridge_SaveCurrentSettings(
1571 IN PPCI_CONFIGURATOR_CONTEXT Context
1576 PPBridge_SaveLimits(
1577 IN PPCI_CONFIGURATOR_CONTEXT Context
1582 PPBridge_RestoreCurrent(
1583 IN PPCI_CONFIGURATOR_CONTEXT Context
1588 PPBridge_GetAdditionalResourceDescriptors(
1589 IN PPCI_CONFIGURATOR_CONTEXT Context
,
1590 IN PPCI_COMMON_HEADER PciData
,
1591 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
1596 PPBridge_ResetDevice(
1597 IN PPCI_CONFIGURATOR_CONTEXT Context
1602 PPBridge_ChangeResourceSettings(
1603 IN PPCI_CONFIGURATOR_CONTEXT Context
1607 // External Resources
1609 extern SINGLE_LIST_ENTRY PciFdoExtensionListHead
;
1610 extern KEVENT PciGlobalLock
;
1611 extern PPCI_INTERFACE PciInterfaces
[];
1612 extern PCI_INTERFACE ArbiterInterfaceBusNumber
;
1613 extern PCI_INTERFACE ArbiterInterfaceMemory
;
1614 extern PCI_INTERFACE ArbiterInterfaceIo
;
1615 extern PCI_INTERFACE BusHandlerInterface
;
1616 extern PCI_INTERFACE PciRoutingInterface
;
1617 extern PCI_INTERFACE PciCardbusPrivateInterface
;
1618 extern PCI_INTERFACE PciLegacyDeviceDetectionInterface
;
1619 extern PCI_INTERFACE PciPmeInterface
;
1620 extern PCI_INTERFACE PciDevicePresentInterface
;
1621 //extern PCI_INTERFACE PciNativeIdeInterface;
1622 extern PCI_INTERFACE PciLocationInterface
;
1623 extern PCI_INTERFACE AgpTargetInterface
;
1624 extern PCI_INTERFACE TranslatorInterfaceInterrupt
;
1625 extern PDRIVER_OBJECT PciDriverObject
;
1626 extern PWATCHDOG_TABLE WdTable
;
1627 extern PPCI_HACK_ENTRY PciHackTable
;
1628 extern BOOLEAN PciAssignBusNumbers
;
1629 extern BOOLEAN PciEnableNativeModeATA
;
1631 /* Exported by NTOS, should this go in the NDK? */
1632 extern NTSYSAPI BOOLEAN InitSafeBootMode
;