Fix for code to handle IRP dispatching when unrecognized IRP (Thanks you sir_richard)
[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 // Device Extension, Interface, Translator and Arbiter Signatures
61 //
62 typedef enum _PCI_SIGNATURE
63 {
64 PciPdoExtensionType = 'icP0',
65 PciFdoExtensionType = 'icP1',
66 PciArb_Io = 'icP2',
67 PciArb_Memory = 'icP3',
68 PciArb_Interrupt = 'icP4',
69 PciArb_BusNumber = 'icP5',
70 PciTrans_Interrupt = 'icP6',
71 PciInterface_BusHandler = 'icP7',
72 PciInterface_IntRouteHandler = 'icP8',
73 PciInterface_PciCb = 'icP9',
74 PciInterface_LegacyDeviceDetection = 'icP:',
75 PciInterface_PmeHandler = 'icP;',
76 PciInterface_DevicePresent = 'icP<',
77 PciInterface_NativeIde = 'icP=',
78 PciInterface_AgpTarget = 'icP>',
79 PciInterface_Location = 'icP?'
80 } PCI_SIGNATURE, *PPCI_SIGNATURE;
81
82 //
83 // Device Extension Logic States
84 //
85 typedef enum _PCI_STATE
86 {
87 PciNotStarted,
88 PciStarted,
89 PciDeleted,
90 PciStopped,
91 PciSurpriseRemoved,
92 PciSynchronizedOperation,
93 PciMaxObjectState
94 } PCI_STATE;
95
96 //
97 // IRP Dispatch Logic Style
98 //
99 typedef enum _PCI_DISPATCH_STYLE
100 {
101 IRP_COMPLETE,
102 IRP_DOWNWARD,
103 IRP_UPWARD,
104 IRP_DISPATCH,
105 } PCI_DISPATCH_STYLE;
106
107 //
108 // PCI Hack Entry Information
109 //
110 typedef struct _PCI_HACK_ENTRY
111 {
112 USHORT VendorID;
113 USHORT DeviceID;
114 USHORT SubVendorID;
115 USHORT SubSystemID;
116 ULONGLONG HackFlags;
117 USHORT RevisionID;
118 UCHAR Flags;
119 } PCI_HACK_ENTRY, *PPCI_HACK_ENTRY;
120
121 //
122 // Power State Information for Device Extension
123 //
124 typedef struct _PCI_POWER_STATE
125 {
126 SYSTEM_POWER_STATE CurrentSystemState;
127 DEVICE_POWER_STATE CurrentDeviceState;
128 SYSTEM_POWER_STATE SystemWakeLevel;
129 DEVICE_POWER_STATE DeviceWakeLevel;
130 DEVICE_POWER_STATE SystemStateMapping[7];
131 PIRP WaitWakeIrp;
132 PVOID SavedCancelRoutine;
133 LONG Paging;
134 LONG Hibernate;
135 LONG CrashDump;
136 } PCI_POWER_STATE, *PPCI_POWER_STATE;
137
138 //
139 // Internal PCI Lock Structure
140 //
141 typedef struct _PCI_LOCK
142 {
143 LONG Atom;
144 BOOLEAN OldIrql;
145 } PCI_LOCK, *PPCI_LOCK;
146
147 //
148 // Device Extension for a Bus FDO
149 //
150 typedef struct _PCI_FDO_EXTENSION
151 {
152 SINGLE_LIST_ENTRY List;
153 ULONG ExtensionType;
154 struct _PCI_MJ_DISPATCH_TABLE *IrpDispatchTable;
155 BOOLEAN DeviceState;
156 BOOLEAN TentativeNextState;
157 KEVENT SecondaryExtLock;
158 PDEVICE_OBJECT PhysicalDeviceObject;
159 PDEVICE_OBJECT FunctionalDeviceObject;
160 PDEVICE_OBJECT AttachedDeviceObject;
161 KEVENT ChildListLock;
162 struct _PCI_PDO_EXTENSION *ChildPdoList;
163 struct _PCI_FDO_EXTENSION *BusRootFdoExtension;
164 struct _PCI_FDO_EXTENSION *ParentFdoExtension;
165 struct _PCI_PDO_EXTENSION *ChildBridgePdoList;
166 PPCI_BUS_INTERFACE_STANDARD PciBusInterface;
167 BOOLEAN MaxSubordinateBus;
168 BUS_HANDLER *BusHandler;
169 BOOLEAN BaseBus;
170 BOOLEAN Fake;
171 BOOLEAN ChildDelete;
172 BOOLEAN Scanned;
173 BOOLEAN ArbitersInitialized;
174 BOOLEAN BrokenVideoHackApplied;
175 BOOLEAN Hibernated;
176 PCI_POWER_STATE PowerState;
177 SINGLE_LIST_ENTRY SecondaryExtension;
178 LONG ChildWaitWakeCount;
179 PPCI_COMMON_CONFIG PreservedConfig;
180 PCI_LOCK Lock;
181 struct
182 {
183 BOOLEAN Acquired;
184 BOOLEAN CacheLineSize;
185 BOOLEAN LatencyTimer;
186 BOOLEAN EnablePERR;
187 BOOLEAN EnableSERR;
188 } HotPlugParameters;
189 LONG BusHackFlags;
190 } PCI_FDO_EXTENSION, *PPCI_FDO_EXTENSION;
191
192 //
193 // IRP Dispatch Function Type
194 //
195 typedef NTSTATUS (NTAPI *PCI_DISPATCH_FUNCTION)(
196 IN PIRP Irp,
197 IN PIO_STACK_LOCATION IoStackLocation,
198 IN PPCI_FDO_EXTENSION DeviceExtension
199 );
200
201 //
202 // IRP Dispatch Minor Table
203 //
204 typedef struct _PCI_MN_DISPATCH_TABLE
205 {
206 PCI_DISPATCH_STYLE DispatchStyle;
207 PCI_DISPATCH_FUNCTION DispatchFunction;
208 } PCI_MN_DISPATCH_TABLE, *PPCI_MN_DISPATCH_TABLE;
209
210 //
211 // IRP Dispatch Major Table
212 //
213 typedef struct _PCI_MJ_DISPATCH_TABLE
214 {
215 ULONG PnpIrpMaximumMinorFunction;
216 PPCI_MN_DISPATCH_TABLE PnpIrpDispatchTable;
217 ULONG PowerIrpMaximumMinorFunction;
218 PPCI_MN_DISPATCH_TABLE PowerIrpDispatchTable;
219 PCI_DISPATCH_STYLE SystemControlIrpDispatchStyle;
220 PCI_DISPATCH_FUNCTION SystemControlIrpDispatchFunction;
221 PCI_DISPATCH_STYLE OtherIrpDispatchStyle;
222 PCI_DISPATCH_FUNCTION OtherIrpDispatchFunction;
223 } PCI_MJ_DISPATCH_TABLE, *PPCI_MJ_DISPATCH_TABLE;
224
225 //
226 // Generic PCI Interface Constructor and Initializer
227 //
228 struct _PCI_INTERFACE;
229 typedef NTSTATUS (NTAPI *PCI_INTERFACE_CONSTRUCTOR)(
230 IN PVOID DeviceExtension,
231 IN PVOID Instance,
232 IN PVOID InterfaceData,
233 IN USHORT Version,
234 IN USHORT Size,
235 IN PINTERFACE Interface
236 );
237
238 typedef NTSTATUS (NTAPI *PCI_INTERFACE_INITIALIZER)(
239 IN PVOID Instance
240 );
241
242 //
243 // Generic PCI Interface (Interface, Translator, Arbiter)
244 //
245 typedef struct _PCI_INTERFACE
246 {
247 CONST GUID *InterfaceType;
248 USHORT MinSize;
249 USHORT MinVersion;
250 USHORT MaxVersion;
251 USHORT Flags;
252 LONG ReferenceCount;
253 PCI_SIGNATURE Signature;
254 PCI_INTERFACE_CONSTRUCTOR Constructor;
255 PCI_INTERFACE_INITIALIZER Initializer;
256 } PCI_INTERFACE, *PPCI_INTERFACE;
257
258 //
259 // Generic Secondary Extension Instance Header (Interface, Translator, Arbiter)
260 //
261 typedef struct PCI_SECONDARY_EXTENSION
262 {
263 SINGLE_LIST_ENTRY List;
264 PCI_SIGNATURE ExtensionType;
265 PVOID Destructor;
266 } PCI_SECONDARY_EXTENSION, *PPCI_SECONDARY_EXTENSION;
267
268 //
269 // PCI Arbiter Instance
270 //
271 typedef struct PCI_ARBITER_INSTANCE
272 {
273 PCI_SECONDARY_EXTENSION Header;
274 PPCI_INTERFACE Interface;
275 PPCI_FDO_EXTENSION BusFdoExtension;
276 WCHAR InstanceName[24];
277 //ARBITER_INSTANCE CommonInstance; FIXME: Need Arbiter Headers
278 } PCI_ARBITER_INSTANCE, *PPCI_ARBITER_INSTANCE;
279
280 //
281 // IRP Dispatch Routines
282 //
283 NTSTATUS
284 NTAPI
285 PciDispatchIrp(
286 IN PDEVICE_OBJECT DeviceObject,
287 IN PIRP Irp
288 );
289
290 NTSTATUS
291 NTAPI
292 PciIrpNotSupported(
293 IN PIRP Irp,
294 IN PIO_STACK_LOCATION IoStackLocation,
295 IN PPCI_FDO_EXTENSION DeviceExtension
296 );
297
298 NTSTATUS
299 NTAPI
300 PciPassIrpFromFdoToPdo(
301 IN PPCI_FDO_EXTENSION DeviceExtension,
302 IN PIRP Irp
303 );
304
305 NTSTATUS
306 NTAPI
307 PciCallDownIrpStack(
308 IN PPCI_FDO_EXTENSION DeviceExtension,
309 IN PIRP Irp
310 );
311
312
313 //
314 // Power Routines
315 //
316 NTSTATUS
317 NTAPI
318 PciFdoWaitWake(
319 IN PIRP Irp,
320 IN PIO_STACK_LOCATION IoStackLocation,
321 IN PPCI_FDO_EXTENSION DeviceExtension
322 );
323
324 NTSTATUS
325 NTAPI
326 PciFdoSetPowerState(
327 IN PIRP Irp,
328 IN PIO_STACK_LOCATION IoStackLocation,
329 IN PPCI_FDO_EXTENSION DeviceExtension
330 );
331
332 NTSTATUS
333 NTAPI
334 PciFdoIrpQueryPower(
335 IN PIRP Irp,
336 IN PIO_STACK_LOCATION IoStackLocation,
337 IN PPCI_FDO_EXTENSION DeviceExtension
338 );
339
340 //
341 // Bus FDO Routines
342 //
343 NTSTATUS
344 NTAPI
345 PciAddDevice(
346 IN PDRIVER_OBJECT DriverObject,
347 IN PDEVICE_OBJECT PhysicalDeviceObject
348 );
349
350 NTSTATUS
351 NTAPI
352 PciFdoIrpStartDevice(
353 IN PIRP Irp,
354 IN PIO_STACK_LOCATION IoStackLocation,
355 IN PPCI_FDO_EXTENSION DeviceExtension
356 );
357
358 NTSTATUS
359 NTAPI
360 PciFdoIrpQueryRemoveDevice(
361 IN PIRP Irp,
362 IN PIO_STACK_LOCATION IoStackLocation,
363 IN PPCI_FDO_EXTENSION DeviceExtension
364 );
365
366 NTSTATUS
367 NTAPI
368 PciFdoIrpRemoveDevice(
369 IN PIRP Irp,
370 IN PIO_STACK_LOCATION IoStackLocation,
371 IN PPCI_FDO_EXTENSION DeviceExtension
372 );
373
374 NTSTATUS
375 NTAPI
376 PciFdoIrpCancelRemoveDevice(
377 IN PIRP Irp,
378 IN PIO_STACK_LOCATION IoStackLocation,
379 IN PPCI_FDO_EXTENSION DeviceExtension
380 );
381
382 NTSTATUS
383 NTAPI
384 PciFdoIrpStopDevice(
385 IN PIRP Irp,
386 IN PIO_STACK_LOCATION IoStackLocation,
387 IN PPCI_FDO_EXTENSION DeviceExtension
388 );
389
390 NTSTATUS
391 NTAPI
392 PciFdoIrpQueryStopDevice(
393 IN PIRP Irp,
394 IN PIO_STACK_LOCATION IoStackLocation,
395 IN PPCI_FDO_EXTENSION DeviceExtension
396 );
397
398 NTSTATUS
399 NTAPI
400 PciFdoIrpCancelStopDevice(
401 IN PIRP Irp,
402 IN PIO_STACK_LOCATION IoStackLocation,
403 IN PPCI_FDO_EXTENSION DeviceExtension
404 );
405
406 NTSTATUS
407 NTAPI
408 PciFdoIrpQueryDeviceRelations(
409 IN PIRP Irp,
410 IN PIO_STACK_LOCATION IoStackLocation,
411 IN PPCI_FDO_EXTENSION DeviceExtension
412 );
413
414 NTSTATUS
415 NTAPI
416 PciFdoIrpQueryInterface(
417 IN PIRP Irp,
418 IN PIO_STACK_LOCATION IoStackLocation,
419 IN PPCI_FDO_EXTENSION DeviceExtension
420 );
421
422 NTSTATUS
423 NTAPI
424 PciFdoIrpQueryCapabilities(
425 IN PIRP Irp,
426 IN PIO_STACK_LOCATION IoStackLocation,
427 IN PPCI_FDO_EXTENSION DeviceExtension
428 );
429
430 NTSTATUS
431 NTAPI
432 PciFdoIrpDeviceUsageNotification(
433 IN PIRP Irp,
434 IN PIO_STACK_LOCATION IoStackLocation,
435 IN PPCI_FDO_EXTENSION DeviceExtension
436 );
437
438 NTSTATUS
439 NTAPI
440 PciFdoIrpSurpriseRemoval(
441 IN PIRP Irp,
442 IN PIO_STACK_LOCATION IoStackLocation,
443 IN PPCI_FDO_EXTENSION DeviceExtension
444 );
445
446 NTSTATUS
447 NTAPI
448 PciFdoIrpQueryLegacyBusInformation(
449 IN PIRP Irp,
450 IN PIO_STACK_LOCATION IoStackLocation,
451 IN PPCI_FDO_EXTENSION DeviceExtension
452 );
453
454 //
455 // HAL Callback/Hook Routines
456 //
457 VOID
458 NTAPI
459 PciHookHal(
460 VOID
461 );
462
463 //
464 // PCI Verifier Routines
465 //
466 VOID
467 NTAPI
468 PciVerifierInit(
469 IN PDRIVER_OBJECT DriverObject
470 );
471
472 //
473 // Utility Routines
474 //
475 BOOLEAN
476 NTAPI
477 PciStringToUSHORT(
478 IN PWCHAR String,
479 OUT PUSHORT Value
480 );
481
482 BOOLEAN
483 NTAPI
484 PciIsDatacenter(
485 VOID
486 );
487
488 NTSTATUS
489 NTAPI
490 PciBuildDefaultExclusionLists(
491 VOID
492 );
493
494 BOOLEAN
495 NTAPI
496 PciUnicodeStringStrStr(
497 IN PUNICODE_STRING InputString,
498 IN PCUNICODE_STRING EqualString,
499 IN BOOLEAN CaseInSensitive
500 );
501
502 BOOLEAN
503 NTAPI
504 PciOpenKey(
505 IN PWCHAR KeyName,
506 IN HANDLE RootKey,
507 IN ACCESS_MASK DesiredAccess,
508 OUT PHANDLE KeyHandle,
509 OUT PNTSTATUS KeyStatus
510 );
511
512 NTSTATUS
513 NTAPI
514 PciGetRegistryValue(
515 IN PWCHAR ValueName,
516 IN PWCHAR KeyName,
517 IN HANDLE RootHandle,
518 IN ULONG Type,
519 OUT PVOID *OutputBuffer,
520 OUT PULONG OutputLength
521 );
522
523 PPCI_FDO_EXTENSION
524 NTAPI
525 PciFindParentPciFdoExtension(
526 IN PDEVICE_OBJECT DeviceObject,
527 IN PKEVENT Lock
528 );
529
530 VOID
531 NTAPI
532 PciInsertEntryAtTail(
533 IN PSINGLE_LIST_ENTRY ListHead,
534 IN PPCI_FDO_EXTENSION DeviceExtension,
535 IN PKEVENT Lock
536 );
537
538 NTSTATUS
539 NTAPI
540 PciGetDeviceProperty(
541 IN PDEVICE_OBJECT DeviceObject,
542 IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
543 OUT PVOID *OutputBuffer
544 );
545
546 NTSTATUS
547 NTAPI
548 PciSendIoctl(
549 IN PDEVICE_OBJECT DeviceObject,
550 IN ULONG IoControlCode,
551 IN PVOID InputBuffer,
552 IN ULONG InputBufferLength,
553 IN PVOID OutputBuffer,
554 IN ULONG OutputBufferLength
555 );
556
557 VOID
558 NTAPI
559 PcipLinkSecondaryExtension(
560 IN PSINGLE_LIST_ENTRY List,
561 IN PVOID Lock,
562 IN PPCI_SECONDARY_EXTENSION SecondaryExtension,
563 IN PCI_SIGNATURE ExtensionType,
564 IN PVOID Destructor
565 );
566
567 //
568 // Configuration Routines
569 //
570 NTSTATUS
571 NTAPI
572 PciGetConfigHandlers(
573 IN PPCI_FDO_EXTENSION FdoExtension
574 );
575
576 //
577 // State Machine Logic Transition Routines
578 //
579 VOID
580 NTAPI
581 PciInitializeState(
582 IN PPCI_FDO_EXTENSION DeviceExtension
583 );
584
585 //
586 // Arbiter Support
587 //
588 NTSTATUS
589 NTAPI
590 PciInitializeArbiters(
591 IN PPCI_FDO_EXTENSION FdoExtension
592 );
593
594 //
595 // Debug Helpers
596 //
597 BOOLEAN
598 NTAPI
599 PciDebugIrpDispatchDisplay(
600 IN PIO_STACK_LOCATION IoStackLocation,
601 IN PPCI_FDO_EXTENSION DeviceExtension,
602 IN USHORT MaxMinor
603 );
604
605 //
606 // Interface Support
607 //
608 NTSTATUS
609 NTAPI
610 PciQueryInterface(
611 IN PPCI_FDO_EXTENSION DeviceExtension,
612 IN CONST GUID* InterfaceType,
613 IN ULONG Size,
614 IN ULONG Version,
615 IN PVOID InterfaceData,
616 IN PINTERFACE Interface,
617 IN BOOLEAN LastChance
618 );
619
620 NTSTATUS
621 NTAPI
622 PciPmeInterfaceInitializer(
623 IN PVOID Instance
624 );
625
626 NTSTATUS
627 NTAPI
628 routeintrf_Initializer(
629 IN PVOID Instance
630 );
631
632 NTSTATUS
633 NTAPI
634 arbusno_Initializer(
635 IN PVOID Instance
636 );
637
638 NTSTATUS
639 NTAPI
640 agpintrf_Initializer(
641 IN PVOID Instance
642 );
643
644 NTSTATUS
645 NTAPI
646 tranirq_Initializer(
647 IN PVOID Instance
648 );
649
650 NTSTATUS
651 NTAPI
652 busintrf_Initializer(
653 IN PVOID Instance
654 );
655
656 NTSTATUS
657 NTAPI
658 armem_Initializer(
659 IN PVOID Instance
660 );
661
662 NTSTATUS
663 NTAPI
664 ario_Initializer(
665 IN PVOID Instance
666 );
667
668 NTSTATUS
669 NTAPI
670 locintrf_Initializer(
671 IN PVOID Instance
672 );
673
674 NTSTATUS
675 NTAPI
676 pcicbintrf_Initializer(
677 IN PVOID Instance
678 );
679
680 NTSTATUS
681 NTAPI
682 lddintrf_Initializer(
683 IN PVOID Instance
684 );
685
686 NTSTATUS
687 NTAPI
688 devpresent_Initializer(
689 IN PVOID Instance
690 );
691
692 NTSTATUS
693 NTAPI
694 agpintrf_Constructor(
695 IN PVOID DeviceExtension,
696 IN PVOID Instance,
697 IN PVOID InterfaceData,
698 IN USHORT Version,
699 IN USHORT Size,
700 IN PINTERFACE Interface
701 );
702
703 NTSTATUS
704 NTAPI
705 arbusno_Constructor(
706 IN PVOID DeviceExtension,
707 IN PVOID Instance,
708 IN PVOID InterfaceData,
709 IN USHORT Version,
710 IN USHORT Size,
711 IN PINTERFACE Interface
712 );
713
714 NTSTATUS
715 NTAPI
716 tranirq_Constructor(
717 IN PVOID DeviceExtension,
718 IN PVOID Instance,
719 IN PVOID InterfaceData,
720 IN USHORT Version,
721 IN USHORT Size,
722 IN PINTERFACE Interface
723 );
724
725 NTSTATUS
726 NTAPI
727 armem_Constructor(
728 IN PVOID DeviceExtension,
729 IN PVOID Instance,
730 IN PVOID InterfaceData,
731 IN USHORT Version,
732 IN USHORT Size,
733 IN PINTERFACE Interface
734 );
735
736 NTSTATUS
737 NTAPI
738 busintrf_Constructor(
739 IN PVOID DeviceExtension,
740 IN PVOID Instance,
741 IN PVOID InterfaceData,
742 IN USHORT Version,
743 IN USHORT Size,
744 IN PINTERFACE Interface
745 );
746
747 NTSTATUS
748 NTAPI
749 ario_Constructor(
750 IN PVOID DeviceExtension,
751 IN PVOID Instance,
752 IN PVOID InterfaceData,
753 IN USHORT Version,
754 IN USHORT Size,
755 IN PINTERFACE Interface
756 );
757
758 NTSTATUS
759 NTAPI
760 pcicbintrf_Constructor(
761 IN PVOID DeviceExtension,
762 IN PVOID Instance,
763 IN PVOID InterfaceData,
764 IN USHORT Version,
765 IN USHORT Size,
766 IN PINTERFACE Interface
767 );
768
769 NTSTATUS
770 NTAPI
771 lddintrf_Constructor(
772 IN PVOID DeviceExtension,
773 IN PVOID Instance,
774 IN PVOID InterfaceData,
775 IN USHORT Version,
776 IN USHORT Size,
777 IN PINTERFACE Interface
778 );
779
780 NTSTATUS
781 NTAPI
782 locintrf_Constructor(
783 IN PVOID DeviceExtension,
784 IN PVOID Instance,
785 IN PVOID InterfaceData,
786 IN USHORT Version,
787 IN USHORT Size,
788 IN PINTERFACE Interface
789 );
790
791 NTSTATUS
792 NTAPI
793 PciPmeInterfaceConstructor(
794 IN PVOID DeviceExtension,
795 IN PVOID Instance,
796 IN PVOID InterfaceData,
797 IN USHORT Version,
798 IN USHORT Size,
799 IN PINTERFACE Interface
800 );
801
802 NTSTATUS
803 NTAPI
804 routeintrf_Constructor(
805 IN PVOID DeviceExtension,
806 IN PVOID Instance,
807 IN PVOID InterfaceData,
808 IN USHORT Version,
809 IN USHORT Size,
810 IN PINTERFACE Interface
811 );
812
813 NTSTATUS
814 NTAPI
815 devpresent_Constructor(
816 IN PVOID DeviceExtension,
817 IN PVOID Instance,
818 IN PVOID InterfaceData,
819 IN USHORT Version,
820 IN USHORT Size,
821 IN PINTERFACE Interface
822 );
823
824 //
825 // External Resources
826 //
827 extern SINGLE_LIST_ENTRY PciFdoExtensionListHead;
828 extern KEVENT PciGlobalLock;
829 extern PPCI_INTERFACE PciInterfaces[];
830 extern PCI_INTERFACE ArbiterInterfaceBusNumber;
831 extern PCI_INTERFACE ArbiterInterfaceMemory;
832 extern PCI_INTERFACE ArbiterInterfaceIo;
833 extern PCI_INTERFACE BusHandlerInterface;
834 extern PCI_INTERFACE PciRoutingInterface;
835 extern PCI_INTERFACE PciCardbusPrivateInterface;
836 extern PCI_INTERFACE PciLegacyDeviceDetectionInterface;
837 extern PCI_INTERFACE PciPmeInterface;
838 extern PCI_INTERFACE PciDevicePresentInterface;
839 //extern PCI_INTERFACE PciNativeIdeInterface;
840 extern PCI_INTERFACE PciLocationInterface;
841 extern PCI_INTERFACE AgpTargetInterface;
842 extern PCI_INTERFACE TranslatorInterfaceInterrupt;
843
844 /* EOF */