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 Debugging Device Support
68 #define MAX_DEBUGGING_DEVICES_SUPPORTED 0x04
71 // Device Extension, Interface, Translator and Arbiter Signatures
73 typedef enum _PCI_SIGNATURE
75 PciPdoExtensionType
= 'icP0',
76 PciFdoExtensionType
= 'icP1',
78 PciArb_Memory
= 'icP3',
79 PciArb_Interrupt
= 'icP4',
80 PciArb_BusNumber
= 'icP5',
81 PciTrans_Interrupt
= 'icP6',
82 PciInterface_BusHandler
= 'icP7',
83 PciInterface_IntRouteHandler
= 'icP8',
84 PciInterface_PciCb
= 'icP9',
85 PciInterface_LegacyDeviceDetection
= 'icP:',
86 PciInterface_PmeHandler
= 'icP;',
87 PciInterface_DevicePresent
= 'icP<',
88 PciInterface_NativeIde
= 'icP=',
89 PciInterface_AgpTarget
= 'icP>',
90 PciInterface_Location
= 'icP?'
91 } PCI_SIGNATURE
, *PPCI_SIGNATURE
;
94 // Device Extension Logic States
96 typedef enum _PCI_STATE
103 PciSynchronizedOperation
,
108 // IRP Dispatch Logic Style
110 typedef enum _PCI_DISPATCH_STYLE
116 } PCI_DISPATCH_STYLE
;
119 // PCI Hack Entry Information
121 typedef struct _PCI_HACK_ENTRY
130 } PCI_HACK_ENTRY
, *PPCI_HACK_ENTRY
;
133 // Power State Information for Device Extension
135 typedef struct _PCI_POWER_STATE
137 SYSTEM_POWER_STATE CurrentSystemState
;
138 DEVICE_POWER_STATE CurrentDeviceState
;
139 SYSTEM_POWER_STATE SystemWakeLevel
;
140 DEVICE_POWER_STATE DeviceWakeLevel
;
141 DEVICE_POWER_STATE SystemStateMapping
[7];
143 PVOID SavedCancelRoutine
;
147 } PCI_POWER_STATE
, *PPCI_POWER_STATE
;
150 // Internal PCI Lock Structure
152 typedef struct _PCI_LOCK
156 } PCI_LOCK
, *PPCI_LOCK
;
159 // Device Extension for a Bus FDO
161 typedef struct _PCI_FDO_EXTENSION
163 SINGLE_LIST_ENTRY List
;
165 struct _PCI_MJ_DISPATCH_TABLE
*IrpDispatchTable
;
167 BOOLEAN TentativeNextState
;
168 KEVENT SecondaryExtLock
;
169 PDEVICE_OBJECT PhysicalDeviceObject
;
170 PDEVICE_OBJECT FunctionalDeviceObject
;
171 PDEVICE_OBJECT AttachedDeviceObject
;
172 KEVENT ChildListLock
;
173 struct _PCI_PDO_EXTENSION
*ChildPdoList
;
174 struct _PCI_FDO_EXTENSION
*BusRootFdoExtension
;
175 struct _PCI_FDO_EXTENSION
*ParentFdoExtension
;
176 struct _PCI_PDO_EXTENSION
*ChildBridgePdoList
;
177 PPCI_BUS_INTERFACE_STANDARD PciBusInterface
;
178 BOOLEAN MaxSubordinateBus
;
179 BUS_HANDLER
*BusHandler
;
184 BOOLEAN ArbitersInitialized
;
185 BOOLEAN BrokenVideoHackApplied
;
187 PCI_POWER_STATE PowerState
;
188 SINGLE_LIST_ENTRY SecondaryExtension
;
189 LONG ChildWaitWakeCount
;
190 PPCI_COMMON_CONFIG PreservedConfig
;
195 BOOLEAN CacheLineSize
;
196 BOOLEAN LatencyTimer
;
201 } PCI_FDO_EXTENSION
, *PPCI_FDO_EXTENSION
;
203 typedef struct _PCI_FUNCTION_RESOURCES
205 IO_RESOURCE_DESCRIPTOR Limit
[7];
206 CM_PARTIAL_RESOURCE_DESCRIPTOR Current
[7];
207 } PCI_FUNCTION_RESOURCES
, *PPCI_FUNCTION_RESOURCES
;
209 typedef union _PCI_HEADER_TYPE_DEPENDENT
219 UCHAR SubordinateBus
;
220 UCHAR SubtractiveDecode
:1;
223 UCHAR WeChangedBusNumbers
:1;
224 UCHAR IsaBitRequired
:1;
230 } PCI_HEADER_TYPE_DEPENDENT
, *PPCI_HEADER_TYPE_DEPENDENT
;
232 typedef struct _PCI_PDO_EXTENSION
236 struct _PCI_MJ_DISPATCH_TABLE
*IrpDispatchTable
;
238 BOOLEAN TentativeNextState
;
240 KEVENT SecondaryExtLock
;
241 PCI_SLOT_NUMBER Slot
;
242 PDEVICE_OBJECT PhysicalDeviceObject
;
243 PPCI_FDO_EXTENSION ParentFdoExtension
;
244 SINGLE_LIST_ENTRY SecondaryExtension
;
245 LONG BusInterfaceReferenceCount
;
246 LONG AgpInterfaceReferenceCount
;
249 USHORT SubsystemVendorId
;
255 BOOLEAN AdditionalResourceCount
;
256 BOOLEAN AdjustedInterruptLine
;
257 BOOLEAN InterruptPin
;
258 BOOLEAN RawInterruptLine
;
259 BOOLEAN CapabilitiesPtr
;
260 BOOLEAN SavedLatencyTimer
;
261 BOOLEAN SavedCacheLineSize
;
264 BOOLEAN ReportedMissing
;
265 BOOLEAN ExpectedWritebackFailure
;
266 BOOLEAN NoTouchPmeEnable
;
267 BOOLEAN LegacyDriver
;
268 BOOLEAN UpdateHardware
;
270 BOOLEAN DisablePowerDown
;
271 BOOLEAN NeedsHotPlugConfiguration
;
272 BOOLEAN SwitchedIDEToNativeMode
;
273 BOOLEAN BIOSAllowsIDESwitchToNativeMode
;
274 BOOLEAN IoSpaceUnderNativeIdeControl
;
276 PCI_POWER_STATE PowerState
;
277 PCI_HEADER_TYPE_DEPENDENT Dependent
;
279 PCI_FUNCTION_RESOURCES
*Resources
;
280 PCI_FDO_EXTENSION
*BridgeFdoExtension
;
281 struct _PCI_PDO_EXTENSION
*NextBridge
;
282 struct _PCI_PDO_EXTENSION
*NextHashEntry
;
284 PCI_PMC PowerCapabilities
;
285 BOOLEAN TargetAgpCapabilityId
;
286 USHORT CommandEnables
;
287 USHORT InitialCommand
;
288 } PCI_PDO_EXTENSION
, *PPCI_PDO_EXTENSION
;
291 // IRP Dispatch Function Type
293 typedef NTSTATUS (NTAPI
*PCI_DISPATCH_FUNCTION
)(
295 IN PIO_STACK_LOCATION IoStackLocation
,
296 IN PVOID DeviceExtension
300 // IRP Dispatch Minor Table
302 typedef struct _PCI_MN_DISPATCH_TABLE
304 PCI_DISPATCH_STYLE DispatchStyle
;
305 PCI_DISPATCH_FUNCTION DispatchFunction
;
306 } PCI_MN_DISPATCH_TABLE
, *PPCI_MN_DISPATCH_TABLE
;
309 // IRP Dispatch Major Table
311 typedef struct _PCI_MJ_DISPATCH_TABLE
313 ULONG PnpIrpMaximumMinorFunction
;
314 PPCI_MN_DISPATCH_TABLE PnpIrpDispatchTable
;
315 ULONG PowerIrpMaximumMinorFunction
;
316 PPCI_MN_DISPATCH_TABLE PowerIrpDispatchTable
;
317 PCI_DISPATCH_STYLE SystemControlIrpDispatchStyle
;
318 PCI_DISPATCH_FUNCTION SystemControlIrpDispatchFunction
;
319 PCI_DISPATCH_STYLE OtherIrpDispatchStyle
;
320 PCI_DISPATCH_FUNCTION OtherIrpDispatchFunction
;
321 } PCI_MJ_DISPATCH_TABLE
, *PPCI_MJ_DISPATCH_TABLE
;
324 // Generic PCI Interface Constructor and Initializer
326 struct _PCI_INTERFACE
;
327 typedef NTSTATUS (NTAPI
*PCI_INTERFACE_CONSTRUCTOR
)(
328 IN PVOID DeviceExtension
,
330 IN PVOID InterfaceData
,
333 IN PINTERFACE Interface
336 typedef NTSTATUS (NTAPI
*PCI_INTERFACE_INITIALIZER
)(
341 // Generic PCI Interface (Interface, Translator, Arbiter)
343 typedef struct _PCI_INTERFACE
345 CONST GUID
*InterfaceType
;
351 PCI_SIGNATURE Signature
;
352 PCI_INTERFACE_CONSTRUCTOR Constructor
;
353 PCI_INTERFACE_INITIALIZER Initializer
;
354 } PCI_INTERFACE
, *PPCI_INTERFACE
;
357 // Generic Secondary Extension Instance Header (Interface, Translator, Arbiter)
359 typedef struct PCI_SECONDARY_EXTENSION
361 SINGLE_LIST_ENTRY List
;
362 PCI_SIGNATURE ExtensionType
;
364 } PCI_SECONDARY_EXTENSION
, *PPCI_SECONDARY_EXTENSION
;
367 // PCI Arbiter Instance
369 typedef struct PCI_ARBITER_INSTANCE
371 PCI_SECONDARY_EXTENSION Header
;
372 PPCI_INTERFACE Interface
;
373 PPCI_FDO_EXTENSION BusFdoExtension
;
374 WCHAR InstanceName
[24];
375 //ARBITER_INSTANCE CommonInstance; FIXME: Need Arbiter Headers
376 } PCI_ARBITER_INSTANCE
, *PPCI_ARBITER_INSTANCE
;
379 // IRP Dispatch Routines
384 IN PDEVICE_OBJECT DeviceObject
,
392 IN PIO_STACK_LOCATION IoStackLocation
,
393 IN PPCI_FDO_EXTENSION DeviceExtension
398 PciPassIrpFromFdoToPdo(
399 IN PPCI_FDO_EXTENSION DeviceExtension
,
406 IN PPCI_FDO_EXTENSION DeviceExtension
,
412 PciIrpInvalidDeviceRequest(
414 IN PIO_STACK_LOCATION IoStackLocation
,
415 IN PPCI_FDO_EXTENSION DeviceExtension
425 IN PIO_STACK_LOCATION IoStackLocation
,
426 IN PPCI_FDO_EXTENSION DeviceExtension
433 IN PIO_STACK_LOCATION IoStackLocation
,
434 IN PPCI_FDO_EXTENSION DeviceExtension
441 IN PIO_STACK_LOCATION IoStackLocation
,
442 IN PPCI_FDO_EXTENSION DeviceExtension
451 IN PDRIVER_OBJECT DriverObject
,
452 IN PDEVICE_OBJECT PhysicalDeviceObject
457 PciFdoIrpStartDevice(
459 IN PIO_STACK_LOCATION IoStackLocation
,
460 IN PPCI_FDO_EXTENSION DeviceExtension
465 PciFdoIrpQueryRemoveDevice(
467 IN PIO_STACK_LOCATION IoStackLocation
,
468 IN PPCI_FDO_EXTENSION DeviceExtension
473 PciFdoIrpRemoveDevice(
475 IN PIO_STACK_LOCATION IoStackLocation
,
476 IN PPCI_FDO_EXTENSION DeviceExtension
481 PciFdoIrpCancelRemoveDevice(
483 IN PIO_STACK_LOCATION IoStackLocation
,
484 IN PPCI_FDO_EXTENSION DeviceExtension
491 IN PIO_STACK_LOCATION IoStackLocation
,
492 IN PPCI_FDO_EXTENSION DeviceExtension
497 PciFdoIrpQueryStopDevice(
499 IN PIO_STACK_LOCATION IoStackLocation
,
500 IN PPCI_FDO_EXTENSION DeviceExtension
505 PciFdoIrpCancelStopDevice(
507 IN PIO_STACK_LOCATION IoStackLocation
,
508 IN PPCI_FDO_EXTENSION DeviceExtension
513 PciFdoIrpQueryDeviceRelations(
515 IN PIO_STACK_LOCATION IoStackLocation
,
516 IN PPCI_FDO_EXTENSION DeviceExtension
521 PciFdoIrpQueryInterface(
523 IN PIO_STACK_LOCATION IoStackLocation
,
524 IN PPCI_FDO_EXTENSION DeviceExtension
529 PciFdoIrpQueryCapabilities(
531 IN PIO_STACK_LOCATION IoStackLocation
,
532 IN PPCI_FDO_EXTENSION DeviceExtension
537 PciFdoIrpDeviceUsageNotification(
539 IN PIO_STACK_LOCATION IoStackLocation
,
540 IN PPCI_FDO_EXTENSION DeviceExtension
545 PciFdoIrpSurpriseRemoval(
547 IN PIO_STACK_LOCATION IoStackLocation
,
548 IN PPCI_FDO_EXTENSION DeviceExtension
553 PciFdoIrpQueryLegacyBusInformation(
555 IN PIO_STACK_LOCATION IoStackLocation
,
556 IN PPCI_FDO_EXTENSION DeviceExtension
560 // Device PDO Routines
565 IN PPCI_FDO_EXTENSION DeviceExtension
,
566 IN PCI_SLOT_NUMBER Slot
,
567 OUT PDEVICE_OBJECT
*PdoDeviceObject
574 IN PIO_STACK_LOCATION IoStackLocation
,
575 IN PPCI_PDO_EXTENSION DeviceExtension
582 IN PIO_STACK_LOCATION IoStackLocation
,
583 IN PPCI_PDO_EXTENSION DeviceExtension
590 IN PIO_STACK_LOCATION IoStackLocation
,
591 IN PPCI_PDO_EXTENSION DeviceExtension
596 PciPdoIrpStartDevice(
598 IN PIO_STACK_LOCATION IoStackLocation
,
599 IN PPCI_PDO_EXTENSION DeviceExtension
604 PciPdoIrpQueryRemoveDevice(
606 IN PIO_STACK_LOCATION IoStackLocation
,
607 IN PPCI_PDO_EXTENSION DeviceExtension
612 PciPdoIrpRemoveDevice(
614 IN PIO_STACK_LOCATION IoStackLocation
,
615 IN PPCI_PDO_EXTENSION DeviceExtension
620 PciPdoIrpCancelRemoveDevice(
622 IN PIO_STACK_LOCATION IoStackLocation
,
623 IN PPCI_PDO_EXTENSION DeviceExtension
630 IN PIO_STACK_LOCATION IoStackLocation
,
631 IN PPCI_PDO_EXTENSION DeviceExtension
636 PciPdoIrpQueryStopDevice(
638 IN PIO_STACK_LOCATION IoStackLocation
,
639 IN PPCI_PDO_EXTENSION DeviceExtension
644 PciPdoIrpCancelStopDevice(
646 IN PIO_STACK_LOCATION IoStackLocation
,
647 IN PPCI_PDO_EXTENSION DeviceExtension
652 PciPdoIrpQueryDeviceRelations(
654 IN PIO_STACK_LOCATION IoStackLocation
,
655 IN PPCI_PDO_EXTENSION DeviceExtension
660 PciPdoIrpQueryInterface(
662 IN PIO_STACK_LOCATION IoStackLocation
,
663 IN PPCI_PDO_EXTENSION DeviceExtension
668 PciPdoIrpQueryCapabilities(
670 IN PIO_STACK_LOCATION IoStackLocation
,
671 IN PPCI_PDO_EXTENSION DeviceExtension
676 PciPdoIrpQueryResources(
678 IN PIO_STACK_LOCATION IoStackLocation
,
679 IN PPCI_PDO_EXTENSION DeviceExtension
684 PciPdoIrpQueryResourceRequirements(
686 IN PIO_STACK_LOCATION IoStackLocation
,
687 IN PPCI_PDO_EXTENSION DeviceExtension
692 PciPdoIrpQueryDeviceText(
694 IN PIO_STACK_LOCATION IoStackLocation
,
695 IN PPCI_PDO_EXTENSION DeviceExtension
702 IN PIO_STACK_LOCATION IoStackLocation
,
703 IN PPCI_PDO_EXTENSION DeviceExtension
708 PciPdoIrpWriteConfig(
710 IN PIO_STACK_LOCATION IoStackLocation
,
711 IN PPCI_PDO_EXTENSION DeviceExtension
718 IN PIO_STACK_LOCATION IoStackLocation
,
719 IN PPCI_PDO_EXTENSION DeviceExtension
724 PciPdoIrpQueryDeviceState(
726 IN PIO_STACK_LOCATION IoStackLocation
,
727 IN PPCI_PDO_EXTENSION DeviceExtension
732 PciPdoIrpQueryBusInformation(
734 IN PIO_STACK_LOCATION IoStackLocation
,
735 IN PPCI_PDO_EXTENSION DeviceExtension
740 PciPdoIrpDeviceUsageNotification(
742 IN PIO_STACK_LOCATION IoStackLocation
,
743 IN PPCI_PDO_EXTENSION DeviceExtension
748 PciPdoIrpSurpriseRemoval(
750 IN PIO_STACK_LOCATION IoStackLocation
,
751 IN PPCI_PDO_EXTENSION DeviceExtension
756 PciPdoIrpQueryLegacyBusInformation(
758 IN PIO_STACK_LOCATION IoStackLocation
,
759 IN PPCI_PDO_EXTENSION DeviceExtension
764 // HAL Callback/Hook Routines
773 // PCI Verifier Routines
778 IN PDRIVER_OBJECT DriverObject
799 PciBuildDefaultExclusionLists(
805 PciUnicodeStringStrStr(
806 IN PUNICODE_STRING InputString
,
807 IN PCUNICODE_STRING EqualString
,
808 IN BOOLEAN CaseInSensitive
816 IN ACCESS_MASK DesiredAccess
,
817 OUT PHANDLE KeyHandle
,
818 OUT PNTSTATUS KeyStatus
826 IN HANDLE RootHandle
,
828 OUT PVOID
*OutputBuffer
,
829 OUT PULONG OutputLength
834 PciFindParentPciFdoExtension(
835 IN PDEVICE_OBJECT DeviceObject
,
841 PciInsertEntryAtTail(
842 IN PSINGLE_LIST_ENTRY ListHead
,
843 IN PPCI_FDO_EXTENSION DeviceExtension
,
849 PciGetDeviceProperty(
850 IN PDEVICE_OBJECT DeviceObject
,
851 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
852 OUT PVOID
*OutputBuffer
858 IN PDEVICE_OBJECT DeviceObject
,
859 IN ULONG IoControlCode
,
860 IN PVOID InputBuffer
,
861 IN ULONG InputBufferLength
,
862 IN PVOID OutputBuffer
,
863 IN ULONG OutputBufferLength
868 PcipLinkSecondaryExtension(
869 IN PSINGLE_LIST_ENTRY List
,
871 IN PPCI_SECONDARY_EXTENSION SecondaryExtension
,
872 IN PCI_SIGNATURE ExtensionType
,
876 PPCI_SECONDARY_EXTENSION
878 PciFindNextSecondaryExtension(
879 IN PSINGLE_LIST_ENTRY ListHead
,
880 IN PCI_SIGNATURE ExtensionType
888 IN USHORT SubVendorId
,
889 IN USHORT SubSystemId
,
895 PciFindPdoByFunction(
896 IN PPCI_FDO_EXTENSION DeviceExtension
,
897 IN ULONG FunctionNumber
,
898 IN PPCI_COMMON_HEADER PciData
903 PciIsCriticalDeviceClass(
910 PciIsDeviceOnDebugPath(
911 IN PPCI_PDO_EXTENSION DeviceExtension
917 IN PPCI_PDO_EXTENSION DeviceExtension
,
918 OUT PPCI_COMMON_HEADER PciData
924 IN PPCI_PDO_EXTENSION DeviceExtension
,
925 OUT PPCI_COMMON_HEADER PciData
929 // Configuration Routines
933 PciGetConfigHandlers(
934 IN PPCI_FDO_EXTENSION FdoExtension
940 IN PPCI_FDO_EXTENSION DeviceExtension
,
941 IN PCI_SLOT_NUMBER Slot
,
949 PciWriteDeviceConfig(
950 IN PPCI_PDO_EXTENSION DeviceExtension
,
958 PciGetAdjustedInterruptLine(
959 IN PPCI_PDO_EXTENSION PdoExtension
963 // State Machine Logic Transition Routines
968 IN PPCI_FDO_EXTENSION DeviceExtension
973 PciBeginStateTransition(
974 IN PPCI_FDO_EXTENSION DeviceExtension
,
975 IN PCI_STATE NewState
980 PciCancelStateTransition(
981 IN PPCI_FDO_EXTENSION DeviceExtension
,
982 IN PCI_STATE NewState
987 PciCommitStateTransition(
988 IN PPCI_FDO_EXTENSION DeviceExtension
,
989 IN PCI_STATE NewState
998 PciInitializeArbiters(
999 IN PPCI_FDO_EXTENSION FdoExtension
1004 PciInitializeArbiterRanges(
1005 IN PPCI_FDO_EXTENSION DeviceExtension
,
1006 IN PCM_RESOURCE_LIST Resources
1014 PciDebugIrpDispatchDisplay(
1015 IN PIO_STACK_LOCATION IoStackLocation
,
1016 IN PPCI_FDO_EXTENSION DeviceExtension
,
1022 PciDebugDumpCommonConfig(
1023 IN PPCI_COMMON_HEADER PciData
1027 // Interface Support
1032 IN PPCI_FDO_EXTENSION DeviceExtension
,
1033 IN CONST GUID
* InterfaceType
,
1036 IN PVOID InterfaceData
,
1037 IN PINTERFACE Interface
,
1038 IN BOOLEAN LastChance
1043 PciPmeInterfaceInitializer(
1049 routeintrf_Initializer(
1055 arbusno_Initializer(
1061 agpintrf_Initializer(
1067 tranirq_Initializer(
1073 busintrf_Initializer(
1091 locintrf_Initializer(
1097 pcicbintrf_Initializer(
1103 lddintrf_Initializer(
1109 devpresent_Initializer(
1115 agpintrf_Constructor(
1116 IN PVOID DeviceExtension
,
1118 IN PVOID InterfaceData
,
1121 IN PINTERFACE Interface
1126 arbusno_Constructor(
1127 IN PVOID DeviceExtension
,
1129 IN PVOID InterfaceData
,
1132 IN PINTERFACE Interface
1137 tranirq_Constructor(
1138 IN PVOID DeviceExtension
,
1140 IN PVOID InterfaceData
,
1143 IN PINTERFACE Interface
1149 IN PVOID DeviceExtension
,
1151 IN PVOID InterfaceData
,
1154 IN PINTERFACE Interface
1159 busintrf_Constructor(
1160 IN PVOID DeviceExtension
,
1162 IN PVOID InterfaceData
,
1165 IN PINTERFACE Interface
1171 IN PVOID DeviceExtension
,
1173 IN PVOID InterfaceData
,
1176 IN PINTERFACE Interface
1181 pcicbintrf_Constructor(
1182 IN PVOID DeviceExtension
,
1184 IN PVOID InterfaceData
,
1187 IN PINTERFACE Interface
1192 lddintrf_Constructor(
1193 IN PVOID DeviceExtension
,
1195 IN PVOID InterfaceData
,
1198 IN PINTERFACE Interface
1203 locintrf_Constructor(
1204 IN PVOID DeviceExtension
,
1206 IN PVOID InterfaceData
,
1209 IN PINTERFACE Interface
1214 PciPmeInterfaceConstructor(
1215 IN PVOID DeviceExtension
,
1217 IN PVOID InterfaceData
,
1220 IN PINTERFACE Interface
1225 routeintrf_Constructor(
1226 IN PVOID DeviceExtension
,
1228 IN PVOID InterfaceData
,
1231 IN PINTERFACE Interface
1236 devpresent_Constructor(
1237 IN PVOID DeviceExtension
,
1239 IN PVOID InterfaceData
,
1242 IN PINTERFACE Interface
1246 // PCI Enumeration and Resources
1250 PciQueryDeviceRelations(
1251 IN PPCI_FDO_EXTENSION DeviceExtension
,
1252 IN OUT PDEVICE_RELATIONS
*pDeviceRelations
1256 // Identification Functions
1260 PciGetDeviceDescriptionMessage(
1266 // External Resources
1268 extern SINGLE_LIST_ENTRY PciFdoExtensionListHead
;
1269 extern KEVENT PciGlobalLock
;
1270 extern PPCI_INTERFACE PciInterfaces
[];
1271 extern PCI_INTERFACE ArbiterInterfaceBusNumber
;
1272 extern PCI_INTERFACE ArbiterInterfaceMemory
;
1273 extern PCI_INTERFACE ArbiterInterfaceIo
;
1274 extern PCI_INTERFACE BusHandlerInterface
;
1275 extern PCI_INTERFACE PciRoutingInterface
;
1276 extern PCI_INTERFACE PciCardbusPrivateInterface
;
1277 extern PCI_INTERFACE PciLegacyDeviceDetectionInterface
;
1278 extern PCI_INTERFACE PciPmeInterface
;
1279 extern PCI_INTERFACE PciDevicePresentInterface
;
1280 //extern PCI_INTERFACE PciNativeIdeInterface;
1281 extern PCI_INTERFACE PciLocationInterface
;
1282 extern PCI_INTERFACE AgpTargetInterface
;
1283 extern PCI_INTERFACE TranslatorInterfaceInterrupt
;
1284 extern PDRIVER_OBJECT PciDriverObject
;
1285 extern PWATCHDOG_TABLE WdTable
;
1286 extern PPCI_HACK_ENTRY PciHackTable
;