More implement of PciScanBus, now read hack flags from table (PciGetHAckFlags), and...
[reactos.git] / reactos / drivers / bus / pcix / pci.h
1 /*
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
7 */
8
9 #include <initguid.h>
10 #include <ntifs.h>
11 #include <ntagp.h>
12 #include <wdmguid.h>
13 #include <wchar.h>
14 #include <acpiioct.h>
15 #include <drivers/pci/pci.h>
16 #include <drivers/acpi/acpi.h>
17 #include "halfuncs.h"
18 #include "rtlfuncs.h"
19 #include "vffuncs.h"
20 #include "bugcodes.h"
21
22 //
23 // Tag used in all pool allocations (Pci Bus)
24 //
25 #define PCI_POOL_TAG 'BicP'
26
27 //
28 // Checks if the specified FDO is the FDO for the Root PCI Bus
29 //
30 #define PCI_IS_ROOT_FDO(x) ((x)->BusRootFdoExtension == x)
31
32 //
33 // Assertions to make sure we are dealing with the right kind of extension
34 //
35 #define ASSERT_FDO(x) ASSERT((x)->ExtensionType == PciFdoExtensionType);
36 #define ASSERT_PDO(x) ASSERT((x)->ExtensionType == PciPdoExtensionType);
37
38 //
39 // PCI Hack Entry Name Lengths
40 //
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)
45
46 //
47 // PCI Hack Entry Flags
48 //
49 #define PCI_HACK_HAS_REVISION_INFO 0x01
50 #define PCI_HACK_HAS_SUBSYSTEM_INFO 0x02
51
52 //
53 // PCI Interface Flags
54 //
55 #define PCI_INTERFACE_PDO 0x01
56 #define PCI_INTERFACE_FDO 0x02
57 #define PCI_INTERFACE_ROOT 0x04
58
59 //
60 // PCI Skip Function FLags
61 //
62 #define PCI_SKIP_DEVICE_ENUMERATION 0x01
63 #define PCI_SKIP_RESOURCE_ENUMERATION 0x02
64
65 //
66 // Device Extension, Interface, Translator and Arbiter Signatures
67 //
68 typedef enum _PCI_SIGNATURE
69 {
70 PciPdoExtensionType = 'icP0',
71 PciFdoExtensionType = 'icP1',
72 PciArb_Io = 'icP2',
73 PciArb_Memory = 'icP3',
74 PciArb_Interrupt = 'icP4',
75 PciArb_BusNumber = 'icP5',
76 PciTrans_Interrupt = 'icP6',
77 PciInterface_BusHandler = 'icP7',
78 PciInterface_IntRouteHandler = 'icP8',
79 PciInterface_PciCb = 'icP9',
80 PciInterface_LegacyDeviceDetection = 'icP:',
81 PciInterface_PmeHandler = 'icP;',
82 PciInterface_DevicePresent = 'icP<',
83 PciInterface_NativeIde = 'icP=',
84 PciInterface_AgpTarget = 'icP>',
85 PciInterface_Location = 'icP?'
86 } PCI_SIGNATURE, *PPCI_SIGNATURE;
87
88 //
89 // Device Extension Logic States
90 //
91 typedef enum _PCI_STATE
92 {
93 PciNotStarted,
94 PciStarted,
95 PciDeleted,
96 PciStopped,
97 PciSurpriseRemoved,
98 PciSynchronizedOperation,
99 PciMaxObjectState
100 } PCI_STATE;
101
102 //
103 // IRP Dispatch Logic Style
104 //
105 typedef enum _PCI_DISPATCH_STYLE
106 {
107 IRP_COMPLETE,
108 IRP_DOWNWARD,
109 IRP_UPWARD,
110 IRP_DISPATCH,
111 } PCI_DISPATCH_STYLE;
112
113 //
114 // PCI Hack Entry Information
115 //
116 typedef struct _PCI_HACK_ENTRY
117 {
118 USHORT VendorID;
119 USHORT DeviceID;
120 USHORT SubVendorID;
121 USHORT SubSystemID;
122 ULONGLONG HackFlags;
123 USHORT RevisionID;
124 UCHAR Flags;
125 } PCI_HACK_ENTRY, *PPCI_HACK_ENTRY;
126
127 //
128 // Power State Information for Device Extension
129 //
130 typedef struct _PCI_POWER_STATE
131 {
132 SYSTEM_POWER_STATE CurrentSystemState;
133 DEVICE_POWER_STATE CurrentDeviceState;
134 SYSTEM_POWER_STATE SystemWakeLevel;
135 DEVICE_POWER_STATE DeviceWakeLevel;
136 DEVICE_POWER_STATE SystemStateMapping[7];
137 PIRP WaitWakeIrp;
138 PVOID SavedCancelRoutine;
139 LONG Paging;
140 LONG Hibernate;
141 LONG CrashDump;
142 } PCI_POWER_STATE, *PPCI_POWER_STATE;
143
144 //
145 // Internal PCI Lock Structure
146 //
147 typedef struct _PCI_LOCK
148 {
149 LONG Atom;
150 BOOLEAN OldIrql;
151 } PCI_LOCK, *PPCI_LOCK;
152
153 //
154 // Device Extension for a Bus FDO
155 //
156 typedef struct _PCI_FDO_EXTENSION
157 {
158 SINGLE_LIST_ENTRY List;
159 ULONG ExtensionType;
160 struct _PCI_MJ_DISPATCH_TABLE *IrpDispatchTable;
161 BOOLEAN DeviceState;
162 BOOLEAN TentativeNextState;
163 KEVENT SecondaryExtLock;
164 PDEVICE_OBJECT PhysicalDeviceObject;
165 PDEVICE_OBJECT FunctionalDeviceObject;
166 PDEVICE_OBJECT AttachedDeviceObject;
167 KEVENT ChildListLock;
168 struct _PCI_PDO_EXTENSION *ChildPdoList;
169 struct _PCI_FDO_EXTENSION *BusRootFdoExtension;
170 struct _PCI_FDO_EXTENSION *ParentFdoExtension;
171 struct _PCI_PDO_EXTENSION *ChildBridgePdoList;
172 PPCI_BUS_INTERFACE_STANDARD PciBusInterface;
173 BOOLEAN MaxSubordinateBus;
174 BUS_HANDLER *BusHandler;
175 BOOLEAN BaseBus;
176 BOOLEAN Fake;
177 BOOLEAN ChildDelete;
178 BOOLEAN Scanned;
179 BOOLEAN ArbitersInitialized;
180 BOOLEAN BrokenVideoHackApplied;
181 BOOLEAN Hibernated;
182 PCI_POWER_STATE PowerState;
183 SINGLE_LIST_ENTRY SecondaryExtension;
184 LONG ChildWaitWakeCount;
185 PPCI_COMMON_CONFIG PreservedConfig;
186 PCI_LOCK Lock;
187 struct
188 {
189 BOOLEAN Acquired;
190 BOOLEAN CacheLineSize;
191 BOOLEAN LatencyTimer;
192 BOOLEAN EnablePERR;
193 BOOLEAN EnableSERR;
194 } HotPlugParameters;
195 LONG BusHackFlags;
196 } PCI_FDO_EXTENSION, *PPCI_FDO_EXTENSION;
197
198 typedef struct _PCI_FUNCTION_RESOURCES
199 {
200 IO_RESOURCE_DESCRIPTOR Limit[7];
201 CM_PARTIAL_RESOURCE_DESCRIPTOR Current[7];
202 } PCI_FUNCTION_RESOURCES, *PPCI_FUNCTION_RESOURCES;
203
204 typedef union _PCI_HEADER_TYPE_DEPENDENT
205 {
206 struct
207 {
208 UCHAR Spare[4];
209 } type0;
210 struct
211 {
212 UCHAR PrimaryBus;
213 UCHAR SecondaryBus;
214 UCHAR SubordinateBus;
215 UCHAR SubtractiveDecode:1;
216 UCHAR IsaBitSet:1;
217 UCHAR VgaBitSet:1;
218 UCHAR WeChangedBusNumbers:1;
219 UCHAR IsaBitRequired:1;
220 } type1;
221 struct
222 {
223 UCHAR Spare[4];
224 } type2;
225 } PCI_HEADER_TYPE_DEPENDENT, *PPCI_HEADER_TYPE_DEPENDENT;
226
227 typedef struct _PCI_PDO_EXTENSION
228 {
229 PVOID Next;
230 ULONG ExtensionType;
231 struct _PCI_MJ_DISPATCH_TABLE *IrpDispatchTable;
232 BOOLEAN DeviceState;
233 BOOLEAN TentativeNextState;
234
235 KEVENT SecondaryExtLock;
236 PCI_SLOT_NUMBER Slot;
237 PDEVICE_OBJECT PhysicalDeviceObject;
238 PPCI_FDO_EXTENSION ParentFdoExtension;
239 SINGLE_LIST_ENTRY SecondaryExtension;
240 LONG BusInterfaceReferenceCount;
241 LONG AgpInterfaceReferenceCount;
242 USHORT VendorId;
243 USHORT DeviceId;
244 USHORT SubsystemVendorId;
245 USHORT SubsystemId;
246 BOOLEAN RevisionId;
247 BOOLEAN ProgIf;
248 BOOLEAN SubClass;
249 BOOLEAN BaseClass;
250 BOOLEAN AdditionalResourceCount;
251 BOOLEAN AdjustedInterruptLine;
252 BOOLEAN InterruptPin;
253 BOOLEAN RawInterruptLine;
254 BOOLEAN CapabilitiesPtr;
255 BOOLEAN SavedLatencyTimer;
256 BOOLEAN SavedCacheLineSize;
257 BOOLEAN HeaderType;
258 BOOLEAN NotPresent;
259 BOOLEAN ReportedMissing;
260 BOOLEAN ExpectedWritebackFailure;
261 BOOLEAN NoTouchPmeEnable;
262 BOOLEAN LegacyDriver;
263 BOOLEAN UpdateHardware;
264 BOOLEAN MovedDevice;
265 BOOLEAN DisablePowerDown;
266 BOOLEAN NeedsHotPlugConfiguration;
267 BOOLEAN SwitchedIDEToNativeMode;
268 BOOLEAN BIOSAllowsIDESwitchToNativeMode;
269 BOOLEAN IoSpaceUnderNativeIdeControl;
270 BOOLEAN OnDebugPath;
271 PCI_POWER_STATE PowerState;
272 PCI_HEADER_TYPE_DEPENDENT Dependent;
273 ULONGLONG HackFlags;
274 PCI_FUNCTION_RESOURCES *Resources;
275 PCI_FDO_EXTENSION *BridgeFdoExtension;
276 struct _PCI_PDO_EXTENSION *NextBridge;
277 struct _PCI_PDO_EXTENSION *NextHashEntry;
278 PCI_LOCK Lock;
279 PCI_PMC PowerCapabilities;
280 BOOLEAN TargetAgpCapabilityId;
281 USHORT CommandEnables;
282 USHORT InitialCommand;
283 } PCI_PDO_EXTENSION, *PPCI_PDO_EXTENSION;
284
285 //
286 // IRP Dispatch Function Type
287 //
288 typedef NTSTATUS (NTAPI *PCI_DISPATCH_FUNCTION)(
289 IN PIRP Irp,
290 IN PIO_STACK_LOCATION IoStackLocation,
291 IN PPCI_FDO_EXTENSION DeviceExtension
292 );
293
294 //
295 // IRP Dispatch Minor Table
296 //
297 typedef struct _PCI_MN_DISPATCH_TABLE
298 {
299 PCI_DISPATCH_STYLE DispatchStyle;
300 PCI_DISPATCH_FUNCTION DispatchFunction;
301 } PCI_MN_DISPATCH_TABLE, *PPCI_MN_DISPATCH_TABLE;
302
303 //
304 // IRP Dispatch Major Table
305 //
306 typedef struct _PCI_MJ_DISPATCH_TABLE
307 {
308 ULONG PnpIrpMaximumMinorFunction;
309 PPCI_MN_DISPATCH_TABLE PnpIrpDispatchTable;
310 ULONG PowerIrpMaximumMinorFunction;
311 PPCI_MN_DISPATCH_TABLE PowerIrpDispatchTable;
312 PCI_DISPATCH_STYLE SystemControlIrpDispatchStyle;
313 PCI_DISPATCH_FUNCTION SystemControlIrpDispatchFunction;
314 PCI_DISPATCH_STYLE OtherIrpDispatchStyle;
315 PCI_DISPATCH_FUNCTION OtherIrpDispatchFunction;
316 } PCI_MJ_DISPATCH_TABLE, *PPCI_MJ_DISPATCH_TABLE;
317
318 //
319 // Generic PCI Interface Constructor and Initializer
320 //
321 struct _PCI_INTERFACE;
322 typedef NTSTATUS (NTAPI *PCI_INTERFACE_CONSTRUCTOR)(
323 IN PVOID DeviceExtension,
324 IN PVOID Instance,
325 IN PVOID InterfaceData,
326 IN USHORT Version,
327 IN USHORT Size,
328 IN PINTERFACE Interface
329 );
330
331 typedef NTSTATUS (NTAPI *PCI_INTERFACE_INITIALIZER)(
332 IN PVOID Instance
333 );
334
335 //
336 // Generic PCI Interface (Interface, Translator, Arbiter)
337 //
338 typedef struct _PCI_INTERFACE
339 {
340 CONST GUID *InterfaceType;
341 USHORT MinSize;
342 USHORT MinVersion;
343 USHORT MaxVersion;
344 USHORT Flags;
345 LONG ReferenceCount;
346 PCI_SIGNATURE Signature;
347 PCI_INTERFACE_CONSTRUCTOR Constructor;
348 PCI_INTERFACE_INITIALIZER Initializer;
349 } PCI_INTERFACE, *PPCI_INTERFACE;
350
351 //
352 // Generic Secondary Extension Instance Header (Interface, Translator, Arbiter)
353 //
354 typedef struct PCI_SECONDARY_EXTENSION
355 {
356 SINGLE_LIST_ENTRY List;
357 PCI_SIGNATURE ExtensionType;
358 PVOID Destructor;
359 } PCI_SECONDARY_EXTENSION, *PPCI_SECONDARY_EXTENSION;
360
361 //
362 // PCI Arbiter Instance
363 //
364 typedef struct PCI_ARBITER_INSTANCE
365 {
366 PCI_SECONDARY_EXTENSION Header;
367 PPCI_INTERFACE Interface;
368 PPCI_FDO_EXTENSION BusFdoExtension;
369 WCHAR InstanceName[24];
370 //ARBITER_INSTANCE CommonInstance; FIXME: Need Arbiter Headers
371 } PCI_ARBITER_INSTANCE, *PPCI_ARBITER_INSTANCE;
372
373 //
374 // IRP Dispatch Routines
375 //
376 NTSTATUS
377 NTAPI
378 PciDispatchIrp(
379 IN PDEVICE_OBJECT DeviceObject,
380 IN PIRP Irp
381 );
382
383 NTSTATUS
384 NTAPI
385 PciIrpNotSupported(
386 IN PIRP Irp,
387 IN PIO_STACK_LOCATION IoStackLocation,
388 IN PPCI_FDO_EXTENSION DeviceExtension
389 );
390
391 NTSTATUS
392 NTAPI
393 PciPassIrpFromFdoToPdo(
394 IN PPCI_FDO_EXTENSION DeviceExtension,
395 IN PIRP Irp
396 );
397
398 NTSTATUS
399 NTAPI
400 PciCallDownIrpStack(
401 IN PPCI_FDO_EXTENSION DeviceExtension,
402 IN PIRP Irp
403 );
404
405 //
406 // Power Routines
407 //
408 NTSTATUS
409 NTAPI
410 PciFdoWaitWake(
411 IN PIRP Irp,
412 IN PIO_STACK_LOCATION IoStackLocation,
413 IN PPCI_FDO_EXTENSION DeviceExtension
414 );
415
416 NTSTATUS
417 NTAPI
418 PciFdoSetPowerState(
419 IN PIRP Irp,
420 IN PIO_STACK_LOCATION IoStackLocation,
421 IN PPCI_FDO_EXTENSION DeviceExtension
422 );
423
424 NTSTATUS
425 NTAPI
426 PciFdoIrpQueryPower(
427 IN PIRP Irp,
428 IN PIO_STACK_LOCATION IoStackLocation,
429 IN PPCI_FDO_EXTENSION DeviceExtension
430 );
431
432 //
433 // Bus FDO Routines
434 //
435 NTSTATUS
436 NTAPI
437 PciAddDevice(
438 IN PDRIVER_OBJECT DriverObject,
439 IN PDEVICE_OBJECT PhysicalDeviceObject
440 );
441
442 NTSTATUS
443 NTAPI
444 PciFdoIrpStartDevice(
445 IN PIRP Irp,
446 IN PIO_STACK_LOCATION IoStackLocation,
447 IN PPCI_FDO_EXTENSION DeviceExtension
448 );
449
450 NTSTATUS
451 NTAPI
452 PciFdoIrpQueryRemoveDevice(
453 IN PIRP Irp,
454 IN PIO_STACK_LOCATION IoStackLocation,
455 IN PPCI_FDO_EXTENSION DeviceExtension
456 );
457
458 NTSTATUS
459 NTAPI
460 PciFdoIrpRemoveDevice(
461 IN PIRP Irp,
462 IN PIO_STACK_LOCATION IoStackLocation,
463 IN PPCI_FDO_EXTENSION DeviceExtension
464 );
465
466 NTSTATUS
467 NTAPI
468 PciFdoIrpCancelRemoveDevice(
469 IN PIRP Irp,
470 IN PIO_STACK_LOCATION IoStackLocation,
471 IN PPCI_FDO_EXTENSION DeviceExtension
472 );
473
474 NTSTATUS
475 NTAPI
476 PciFdoIrpStopDevice(
477 IN PIRP Irp,
478 IN PIO_STACK_LOCATION IoStackLocation,
479 IN PPCI_FDO_EXTENSION DeviceExtension
480 );
481
482 NTSTATUS
483 NTAPI
484 PciFdoIrpQueryStopDevice(
485 IN PIRP Irp,
486 IN PIO_STACK_LOCATION IoStackLocation,
487 IN PPCI_FDO_EXTENSION DeviceExtension
488 );
489
490 NTSTATUS
491 NTAPI
492 PciFdoIrpCancelStopDevice(
493 IN PIRP Irp,
494 IN PIO_STACK_LOCATION IoStackLocation,
495 IN PPCI_FDO_EXTENSION DeviceExtension
496 );
497
498 NTSTATUS
499 NTAPI
500 PciFdoIrpQueryDeviceRelations(
501 IN PIRP Irp,
502 IN PIO_STACK_LOCATION IoStackLocation,
503 IN PPCI_FDO_EXTENSION DeviceExtension
504 );
505
506 NTSTATUS
507 NTAPI
508 PciFdoIrpQueryInterface(
509 IN PIRP Irp,
510 IN PIO_STACK_LOCATION IoStackLocation,
511 IN PPCI_FDO_EXTENSION DeviceExtension
512 );
513
514 NTSTATUS
515 NTAPI
516 PciFdoIrpQueryCapabilities(
517 IN PIRP Irp,
518 IN PIO_STACK_LOCATION IoStackLocation,
519 IN PPCI_FDO_EXTENSION DeviceExtension
520 );
521
522 NTSTATUS
523 NTAPI
524 PciFdoIrpDeviceUsageNotification(
525 IN PIRP Irp,
526 IN PIO_STACK_LOCATION IoStackLocation,
527 IN PPCI_FDO_EXTENSION DeviceExtension
528 );
529
530 NTSTATUS
531 NTAPI
532 PciFdoIrpSurpriseRemoval(
533 IN PIRP Irp,
534 IN PIO_STACK_LOCATION IoStackLocation,
535 IN PPCI_FDO_EXTENSION DeviceExtension
536 );
537
538 NTSTATUS
539 NTAPI
540 PciFdoIrpQueryLegacyBusInformation(
541 IN PIRP Irp,
542 IN PIO_STACK_LOCATION IoStackLocation,
543 IN PPCI_FDO_EXTENSION DeviceExtension
544 );
545
546 //
547 // HAL Callback/Hook Routines
548 //
549 VOID
550 NTAPI
551 PciHookHal(
552 VOID
553 );
554
555 //
556 // PCI Verifier Routines
557 //
558 VOID
559 NTAPI
560 PciVerifierInit(
561 IN PDRIVER_OBJECT DriverObject
562 );
563
564 //
565 // Utility Routines
566 //
567 BOOLEAN
568 NTAPI
569 PciStringToUSHORT(
570 IN PWCHAR String,
571 OUT PUSHORT Value
572 );
573
574 BOOLEAN
575 NTAPI
576 PciIsDatacenter(
577 VOID
578 );
579
580 NTSTATUS
581 NTAPI
582 PciBuildDefaultExclusionLists(
583 VOID
584 );
585
586 BOOLEAN
587 NTAPI
588 PciUnicodeStringStrStr(
589 IN PUNICODE_STRING InputString,
590 IN PCUNICODE_STRING EqualString,
591 IN BOOLEAN CaseInSensitive
592 );
593
594 BOOLEAN
595 NTAPI
596 PciOpenKey(
597 IN PWCHAR KeyName,
598 IN HANDLE RootKey,
599 IN ACCESS_MASK DesiredAccess,
600 OUT PHANDLE KeyHandle,
601 OUT PNTSTATUS KeyStatus
602 );
603
604 NTSTATUS
605 NTAPI
606 PciGetRegistryValue(
607 IN PWCHAR ValueName,
608 IN PWCHAR KeyName,
609 IN HANDLE RootHandle,
610 IN ULONG Type,
611 OUT PVOID *OutputBuffer,
612 OUT PULONG OutputLength
613 );
614
615 PPCI_FDO_EXTENSION
616 NTAPI
617 PciFindParentPciFdoExtension(
618 IN PDEVICE_OBJECT DeviceObject,
619 IN PKEVENT Lock
620 );
621
622 VOID
623 NTAPI
624 PciInsertEntryAtTail(
625 IN PSINGLE_LIST_ENTRY ListHead,
626 IN PPCI_FDO_EXTENSION DeviceExtension,
627 IN PKEVENT Lock
628 );
629
630 NTSTATUS
631 NTAPI
632 PciGetDeviceProperty(
633 IN PDEVICE_OBJECT DeviceObject,
634 IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
635 OUT PVOID *OutputBuffer
636 );
637
638 NTSTATUS
639 NTAPI
640 PciSendIoctl(
641 IN PDEVICE_OBJECT DeviceObject,
642 IN ULONG IoControlCode,
643 IN PVOID InputBuffer,
644 IN ULONG InputBufferLength,
645 IN PVOID OutputBuffer,
646 IN ULONG OutputBufferLength
647 );
648
649 VOID
650 NTAPI
651 PcipLinkSecondaryExtension(
652 IN PSINGLE_LIST_ENTRY List,
653 IN PVOID Lock,
654 IN PPCI_SECONDARY_EXTENSION SecondaryExtension,
655 IN PCI_SIGNATURE ExtensionType,
656 IN PVOID Destructor
657 );
658
659 PPCI_SECONDARY_EXTENSION
660 NTAPI
661 PciFindNextSecondaryExtension(
662 IN PSINGLE_LIST_ENTRY ListHead,
663 IN PCI_SIGNATURE ExtensionType
664 );
665
666 ULONGLONG
667 NTAPI
668 PciGetHackFlags(
669 IN USHORT VendorId,
670 IN USHORT DeviceId,
671 IN USHORT SubVendorId,
672 IN USHORT SubSystemId,
673 IN UCHAR RevisionId
674 );
675
676 PPCI_PDO_EXTENSION
677 NTAPI
678 PciFindPdoByFunction(
679 IN PPCI_FDO_EXTENSION DeviceExtension,
680 IN ULONG FunctionNumber,
681 IN PPCI_COMMON_HEADER PciData
682 );
683
684 BOOLEAN
685 NTAPI
686 PciIsCriticalDeviceClass(
687 IN UCHAR BaseClass,
688 IN UCHAR SubClass
689 );
690
691 //
692 // Configuration Routines
693 //
694 NTSTATUS
695 NTAPI
696 PciGetConfigHandlers(
697 IN PPCI_FDO_EXTENSION FdoExtension
698 );
699
700 VOID
701 NTAPI
702 PciReadSlotConfig(
703 IN PPCI_FDO_EXTENSION DeviceExtension,
704 IN PCI_SLOT_NUMBER Slot,
705 IN PVOID Buffer,
706 IN ULONG Offset,
707 IN ULONG Length
708 );
709
710 //
711 // State Machine Logic Transition Routines
712 //
713 VOID
714 NTAPI
715 PciInitializeState(
716 IN PPCI_FDO_EXTENSION DeviceExtension
717 );
718
719 NTSTATUS
720 NTAPI
721 PciBeginStateTransition(
722 IN PPCI_FDO_EXTENSION DeviceExtension,
723 IN PCI_STATE NewState
724 );
725
726 NTSTATUS
727 NTAPI
728 PciCancelStateTransition(
729 IN PPCI_FDO_EXTENSION DeviceExtension,
730 IN PCI_STATE NewState
731 );
732
733 VOID
734 NTAPI
735 PciCommitStateTransition(
736 IN PPCI_FDO_EXTENSION DeviceExtension,
737 IN PCI_STATE NewState
738 );
739
740
741 //
742 // Arbiter Support
743 //
744 NTSTATUS
745 NTAPI
746 PciInitializeArbiters(
747 IN PPCI_FDO_EXTENSION FdoExtension
748 );
749
750 NTSTATUS
751 NTAPI
752 PciInitializeArbiterRanges(
753 IN PPCI_FDO_EXTENSION DeviceExtension,
754 IN PCM_RESOURCE_LIST Resources
755 );
756
757 //
758 // Debug Helpers
759 //
760 BOOLEAN
761 NTAPI
762 PciDebugIrpDispatchDisplay(
763 IN PIO_STACK_LOCATION IoStackLocation,
764 IN PPCI_FDO_EXTENSION DeviceExtension,
765 IN USHORT MaxMinor
766 );
767
768 VOID
769 NTAPI
770 PciDebugDumpCommonConfig(
771 IN PPCI_COMMON_HEADER PciData
772 );
773
774 //
775 // Interface Support
776 //
777 NTSTATUS
778 NTAPI
779 PciQueryInterface(
780 IN PPCI_FDO_EXTENSION DeviceExtension,
781 IN CONST GUID* InterfaceType,
782 IN ULONG Size,
783 IN ULONG Version,
784 IN PVOID InterfaceData,
785 IN PINTERFACE Interface,
786 IN BOOLEAN LastChance
787 );
788
789 NTSTATUS
790 NTAPI
791 PciPmeInterfaceInitializer(
792 IN PVOID Instance
793 );
794
795 NTSTATUS
796 NTAPI
797 routeintrf_Initializer(
798 IN PVOID Instance
799 );
800
801 NTSTATUS
802 NTAPI
803 arbusno_Initializer(
804 IN PVOID Instance
805 );
806
807 NTSTATUS
808 NTAPI
809 agpintrf_Initializer(
810 IN PVOID Instance
811 );
812
813 NTSTATUS
814 NTAPI
815 tranirq_Initializer(
816 IN PVOID Instance
817 );
818
819 NTSTATUS
820 NTAPI
821 busintrf_Initializer(
822 IN PVOID Instance
823 );
824
825 NTSTATUS
826 NTAPI
827 armem_Initializer(
828 IN PVOID Instance
829 );
830
831 NTSTATUS
832 NTAPI
833 ario_Initializer(
834 IN PVOID Instance
835 );
836
837 NTSTATUS
838 NTAPI
839 locintrf_Initializer(
840 IN PVOID Instance
841 );
842
843 NTSTATUS
844 NTAPI
845 pcicbintrf_Initializer(
846 IN PVOID Instance
847 );
848
849 NTSTATUS
850 NTAPI
851 lddintrf_Initializer(
852 IN PVOID Instance
853 );
854
855 NTSTATUS
856 NTAPI
857 devpresent_Initializer(
858 IN PVOID Instance
859 );
860
861 NTSTATUS
862 NTAPI
863 agpintrf_Constructor(
864 IN PVOID DeviceExtension,
865 IN PVOID Instance,
866 IN PVOID InterfaceData,
867 IN USHORT Version,
868 IN USHORT Size,
869 IN PINTERFACE Interface
870 );
871
872 NTSTATUS
873 NTAPI
874 arbusno_Constructor(
875 IN PVOID DeviceExtension,
876 IN PVOID Instance,
877 IN PVOID InterfaceData,
878 IN USHORT Version,
879 IN USHORT Size,
880 IN PINTERFACE Interface
881 );
882
883 NTSTATUS
884 NTAPI
885 tranirq_Constructor(
886 IN PVOID DeviceExtension,
887 IN PVOID Instance,
888 IN PVOID InterfaceData,
889 IN USHORT Version,
890 IN USHORT Size,
891 IN PINTERFACE Interface
892 );
893
894 NTSTATUS
895 NTAPI
896 armem_Constructor(
897 IN PVOID DeviceExtension,
898 IN PVOID Instance,
899 IN PVOID InterfaceData,
900 IN USHORT Version,
901 IN USHORT Size,
902 IN PINTERFACE Interface
903 );
904
905 NTSTATUS
906 NTAPI
907 busintrf_Constructor(
908 IN PVOID DeviceExtension,
909 IN PVOID Instance,
910 IN PVOID InterfaceData,
911 IN USHORT Version,
912 IN USHORT Size,
913 IN PINTERFACE Interface
914 );
915
916 NTSTATUS
917 NTAPI
918 ario_Constructor(
919 IN PVOID DeviceExtension,
920 IN PVOID Instance,
921 IN PVOID InterfaceData,
922 IN USHORT Version,
923 IN USHORT Size,
924 IN PINTERFACE Interface
925 );
926
927 NTSTATUS
928 NTAPI
929 pcicbintrf_Constructor(
930 IN PVOID DeviceExtension,
931 IN PVOID Instance,
932 IN PVOID InterfaceData,
933 IN USHORT Version,
934 IN USHORT Size,
935 IN PINTERFACE Interface
936 );
937
938 NTSTATUS
939 NTAPI
940 lddintrf_Constructor(
941 IN PVOID DeviceExtension,
942 IN PVOID Instance,
943 IN PVOID InterfaceData,
944 IN USHORT Version,
945 IN USHORT Size,
946 IN PINTERFACE Interface
947 );
948
949 NTSTATUS
950 NTAPI
951 locintrf_Constructor(
952 IN PVOID DeviceExtension,
953 IN PVOID Instance,
954 IN PVOID InterfaceData,
955 IN USHORT Version,
956 IN USHORT Size,
957 IN PINTERFACE Interface
958 );
959
960 NTSTATUS
961 NTAPI
962 PciPmeInterfaceConstructor(
963 IN PVOID DeviceExtension,
964 IN PVOID Instance,
965 IN PVOID InterfaceData,
966 IN USHORT Version,
967 IN USHORT Size,
968 IN PINTERFACE Interface
969 );
970
971 NTSTATUS
972 NTAPI
973 routeintrf_Constructor(
974 IN PVOID DeviceExtension,
975 IN PVOID Instance,
976 IN PVOID InterfaceData,
977 IN USHORT Version,
978 IN USHORT Size,
979 IN PINTERFACE Interface
980 );
981
982 NTSTATUS
983 NTAPI
984 devpresent_Constructor(
985 IN PVOID DeviceExtension,
986 IN PVOID Instance,
987 IN PVOID InterfaceData,
988 IN USHORT Version,
989 IN USHORT Size,
990 IN PINTERFACE Interface
991 );
992
993 //
994 // PCI Enumeration and Resources
995 //
996 NTSTATUS
997 NTAPI
998 PciQueryDeviceRelations(
999 IN PPCI_FDO_EXTENSION DeviceExtension,
1000 IN OUT PDEVICE_RELATIONS *pDeviceRelations
1001 );
1002
1003 //
1004 // Identification Functions
1005 //
1006 PWCHAR
1007 NTAPI
1008 PciGetDeviceDescriptionMessage(
1009 IN UCHAR BaseClass,
1010 IN UCHAR SubClass
1011 );
1012
1013 //
1014 // External Resources
1015 //
1016 extern SINGLE_LIST_ENTRY PciFdoExtensionListHead;
1017 extern KEVENT PciGlobalLock;
1018 extern PPCI_INTERFACE PciInterfaces[];
1019 extern PCI_INTERFACE ArbiterInterfaceBusNumber;
1020 extern PCI_INTERFACE ArbiterInterfaceMemory;
1021 extern PCI_INTERFACE ArbiterInterfaceIo;
1022 extern PCI_INTERFACE BusHandlerInterface;
1023 extern PCI_INTERFACE PciRoutingInterface;
1024 extern PCI_INTERFACE PciCardbusPrivateInterface;
1025 extern PCI_INTERFACE PciLegacyDeviceDetectionInterface;
1026 extern PCI_INTERFACE PciPmeInterface;
1027 extern PCI_INTERFACE PciDevicePresentInterface;
1028 //extern PCI_INTERFACE PciNativeIdeInterface;
1029 extern PCI_INTERFACE PciLocationInterface;
1030 extern PCI_INTERFACE AgpTargetInterface;
1031 extern PCI_INTERFACE TranslatorInterfaceInterrupt;
1032 extern PDRIVER_OBJECT PciDriverObject;
1033 extern PWATCHDOG_TABLE WdTable;
1034 extern PPCI_HACK_ENTRY PciHackTable;
1035
1036 /* EOF */