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 #ifndef _PCIX_PCH_ 10 #define _PCIX_PCH_ 11 12 #include <ntifs.h> 13 #include <wdmguid.h> 14 #include <wchar.h> 15 #include <acpiioct.h> 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> 21 #include <arbiter.h> 22 #include <cmreslist.h> 23 24 // 25 // Tag used in all pool allocations (Pci Bus) 26 // 27 #define PCI_POOL_TAG 'BicP' 28 29 // 30 // Checks if the specified FDO is the FDO for the Root PCI Bus 31 // 32 #define PCI_IS_ROOT_FDO(x) ((x)->BusRootFdoExtension == x) 33 34 // 35 // Assertions to make sure we are dealing with the right kind of extension 36 // 37 #define ASSERT_FDO(x) ASSERT((x)->ExtensionType == PciFdoExtensionType); 38 #define ASSERT_PDO(x) ASSERT((x)->ExtensionType == PciPdoExtensionType); 39 40 // 41 // PCI Hack Entry Name Lengths 42 // 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) 47 48 // 49 // PCI Hack Entry Flags 50 // 51 #define PCI_HACK_HAS_REVISION_INFO 0x01 52 #define PCI_HACK_HAS_SUBSYSTEM_INFO 0x02 53 54 // 55 // PCI Interface Flags 56 // 57 #define PCI_INTERFACE_PDO 0x01 58 #define PCI_INTERFACE_FDO 0x02 59 #define PCI_INTERFACE_ROOT 0x04 60 61 // 62 // PCI Skip Function Flags 63 // 64 #define PCI_SKIP_DEVICE_ENUMERATION 0x01 65 #define PCI_SKIP_RESOURCE_ENUMERATION 0x02 66 67 // 68 // PCI Apply Hack Flags 69 // 70 #define PCI_HACK_FIXUP_BEFORE_CONFIGURATION 0x00 71 #define PCI_HACK_FIXUP_AFTER_CONFIGURATION 0x01 72 #define PCI_HACK_FIXUP_BEFORE_UPDATE 0x03 73 74 // 75 // PCI Debugging Device Support 76 // 77 #define MAX_DEBUGGING_DEVICES_SUPPORTED 0x04 78 79 // 80 // PCI Driver Verifier Failures 81 // 82 #define PCI_VERIFIER_CODES 0x04 83 84 // 85 // PCI ID Buffer ANSI Strings 86 // 87 #define MAX_ANSI_STRINGS 0x08 88 89 // 90 // Device Extension, Interface, Translator and Arbiter Signatures 91 // 92 typedef enum _PCI_SIGNATURE 93 { 94 PciPdoExtensionType = 'icP0', 95 PciFdoExtensionType = 'icP1', 96 PciArb_Io = 'icP2', 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; 111 112 // 113 // Driver-handled PCI Device Types 114 // 115 typedef enum _PCI_DEVICE_TYPES 116 { 117 PciTypeInvalid, 118 PciTypeHostBridge, 119 PciTypePciBridge, 120 PciTypeCardbusBridge, 121 PciTypeDevice 122 } PCI_DEVICE_TYPES; 123 124 // 125 // Device Extension Logic States 126 // 127 typedef enum _PCI_STATE 128 { 129 PciNotStarted, 130 PciStarted, 131 PciDeleted, 132 PciStopped, 133 PciSurpriseRemoved, 134 PciSynchronizedOperation, 135 PciMaxObjectState 136 } PCI_STATE; 137 138 // 139 // IRP Dispatch Logic Style 140 // 141 typedef enum _PCI_DISPATCH_STYLE 142 { 143 IRP_COMPLETE, 144 IRP_DOWNWARD, 145 IRP_UPWARD, 146 IRP_DISPATCH, 147 } PCI_DISPATCH_STYLE; 148 149 // 150 // PCI Hack Entry Information 151 // 152 typedef struct _PCI_HACK_ENTRY 153 { 154 USHORT VendorID; 155 USHORT DeviceID; 156 USHORT SubVendorID; 157 USHORT SubSystemID; 158 ULONGLONG HackFlags; 159 USHORT RevisionID; 160 UCHAR Flags; 161 } PCI_HACK_ENTRY, *PPCI_HACK_ENTRY; 162 163 // 164 // Power State Information for Device Extension 165 // 166 typedef struct _PCI_POWER_STATE 167 { 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]; 173 PIRP WaitWakeIrp; 174 PVOID SavedCancelRoutine; 175 LONG Paging; 176 LONG Hibernate; 177 LONG CrashDump; 178 } PCI_POWER_STATE, *PPCI_POWER_STATE; 179 180 // 181 // Internal PCI Lock Structure 182 // 183 typedef struct _PCI_LOCK 184 { 185 LONG Atom; 186 BOOLEAN OldIrql; 187 } PCI_LOCK, *PPCI_LOCK; 188 189 // 190 // Device Extension for a Bus FDO 191 // 192 typedef struct _PCI_FDO_EXTENSION 193 { 194 SINGLE_LIST_ENTRY List; 195 ULONG ExtensionType; 196 struct _PCI_MJ_DISPATCH_TABLE *IrpDispatchTable; 197 BOOLEAN DeviceState; 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; 211 BOOLEAN BaseBus; 212 BOOLEAN Fake; 213 BOOLEAN ChildDelete; 214 BOOLEAN Scanned; 215 BOOLEAN ArbitersInitialized; 216 BOOLEAN BrokenVideoHackApplied; 217 BOOLEAN Hibernated; 218 PCI_POWER_STATE PowerState; 219 SINGLE_LIST_ENTRY SecondaryExtension; 220 LONG ChildWaitWakeCount; 221 PPCI_COMMON_CONFIG PreservedConfig; 222 PCI_LOCK Lock; 223 struct 224 { 225 BOOLEAN Acquired; 226 BOOLEAN CacheLineSize; 227 BOOLEAN LatencyTimer; 228 BOOLEAN EnablePERR; 229 BOOLEAN EnableSERR; 230 } HotPlugParameters; 231 LONG BusHackFlags; 232 } PCI_FDO_EXTENSION, *PPCI_FDO_EXTENSION; 233 234 typedef struct _PCI_FUNCTION_RESOURCES 235 { 236 IO_RESOURCE_DESCRIPTOR Limit[7]; 237 CM_PARTIAL_RESOURCE_DESCRIPTOR Current[7]; 238 } PCI_FUNCTION_RESOURCES, *PPCI_FUNCTION_RESOURCES; 239 240 typedef union _PCI_HEADER_TYPE_DEPENDENT 241 { 242 struct 243 { 244 UCHAR Spare[4]; 245 } type0; 246 struct 247 { 248 UCHAR PrimaryBus; 249 UCHAR SecondaryBus; 250 UCHAR SubordinateBus; 251 UCHAR SubtractiveDecode:1; 252 UCHAR IsaBitSet:1; 253 UCHAR VgaBitSet:1; 254 UCHAR WeChangedBusNumbers:1; 255 UCHAR IsaBitRequired:1; 256 } type1; 257 struct 258 { 259 UCHAR Spare[4]; 260 } type2; 261 } PCI_HEADER_TYPE_DEPENDENT, *PPCI_HEADER_TYPE_DEPENDENT; 262 263 typedef struct _PCI_PDO_EXTENSION 264 { 265 PVOID Next; 266 ULONG ExtensionType; 267 struct _PCI_MJ_DISPATCH_TABLE *IrpDispatchTable; 268 BOOLEAN DeviceState; 269 BOOLEAN TentativeNextState; 270 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; 278 USHORT VendorId; 279 USHORT DeviceId; 280 USHORT SubsystemVendorId; 281 USHORT SubsystemId; 282 BOOLEAN RevisionId; 283 BOOLEAN ProgIf; 284 BOOLEAN SubClass; 285 BOOLEAN BaseClass; 286 BOOLEAN AdditionalResourceCount; 287 BOOLEAN AdjustedInterruptLine; 288 BOOLEAN InterruptPin; 289 BOOLEAN RawInterruptLine; 290 BOOLEAN CapabilitiesPtr; 291 BOOLEAN SavedLatencyTimer; 292 BOOLEAN SavedCacheLineSize; 293 BOOLEAN HeaderType; 294 BOOLEAN NotPresent; 295 BOOLEAN ReportedMissing; 296 BOOLEAN ExpectedWritebackFailure; 297 BOOLEAN NoTouchPmeEnable; 298 BOOLEAN LegacyDriver; 299 BOOLEAN UpdateHardware; 300 BOOLEAN MovedDevice; 301 BOOLEAN DisablePowerDown; 302 BOOLEAN NeedsHotPlugConfiguration; 303 BOOLEAN IDEInNativeMode; 304 BOOLEAN BIOSAllowsIDESwitchToNativeMode; 305 BOOLEAN IoSpaceUnderNativeIdeControl; 306 BOOLEAN OnDebugPath; 307 BOOLEAN IoSpaceNotRequired; 308 PCI_POWER_STATE PowerState; 309 PCI_HEADER_TYPE_DEPENDENT Dependent; 310 ULONGLONG HackFlags; 311 PCI_FUNCTION_RESOURCES *Resources; 312 PCI_FDO_EXTENSION *BridgeFdoExtension; 313 struct _PCI_PDO_EXTENSION *NextBridge; 314 struct _PCI_PDO_EXTENSION *NextHashEntry; 315 PCI_LOCK Lock; 316 PCI_PMC PowerCapabilities; 317 BOOLEAN TargetAgpCapabilityId; 318 USHORT CommandEnables; 319 USHORT InitialCommand; 320 } PCI_PDO_EXTENSION, *PPCI_PDO_EXTENSION; 321 322 // 323 // IRP Dispatch Function Type 324 // 325 typedef NTSTATUS (NTAPI *PCI_DISPATCH_FUNCTION)( 326 IN PIRP Irp, 327 IN PIO_STACK_LOCATION IoStackLocation, 328 IN PVOID DeviceExtension 329 ); 330 331 // 332 // IRP Dispatch Minor Table 333 // 334 typedef struct _PCI_MN_DISPATCH_TABLE 335 { 336 PCI_DISPATCH_STYLE DispatchStyle; 337 PCI_DISPATCH_FUNCTION DispatchFunction; 338 } PCI_MN_DISPATCH_TABLE, *PPCI_MN_DISPATCH_TABLE; 339 340 // 341 // IRP Dispatch Major Table 342 // 343 typedef struct _PCI_MJ_DISPATCH_TABLE 344 { 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; 354 355 // 356 // Generic PCI Interface Constructor and Initializer 357 // 358 struct _PCI_INTERFACE; 359 typedef NTSTATUS (NTAPI *PCI_INTERFACE_CONSTRUCTOR)( 360 IN PVOID DeviceExtension, 361 IN PVOID Instance, 362 IN PVOID InterfaceData, 363 IN USHORT Version, 364 IN USHORT Size, 365 IN PINTERFACE Interface 366 ); 367 368 typedef NTSTATUS (NTAPI *PCI_INTERFACE_INITIALIZER)( 369 IN PVOID Instance 370 ); 371 372 // 373 // Generic PCI Interface (Interface, Translator, Arbiter) 374 // 375 typedef struct _PCI_INTERFACE 376 { 377 CONST GUID *InterfaceType; 378 USHORT MinSize; 379 USHORT MinVersion; 380 USHORT MaxVersion; 381 USHORT Flags; 382 LONG ReferenceCount; 383 PCI_SIGNATURE Signature; 384 PCI_INTERFACE_CONSTRUCTOR Constructor; 385 PCI_INTERFACE_INITIALIZER Initializer; 386 } PCI_INTERFACE, *PPCI_INTERFACE; 387 388 // 389 // Generic Secondary Extension Instance Header (Interface, Translator, Arbiter) 390 // 391 typedef struct PCI_SECONDARY_EXTENSION 392 { 393 SINGLE_LIST_ENTRY List; 394 PCI_SIGNATURE ExtensionType; 395 PVOID Destructor; 396 } PCI_SECONDARY_EXTENSION, *PPCI_SECONDARY_EXTENSION; 397 398 // 399 // PCI Arbiter Instance 400 // 401 typedef struct PCI_ARBITER_INSTANCE 402 { 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; 409 410 // 411 // PCI Verifier Data 412 // 413 typedef struct _PCI_VERIFIER_DATA 414 { 415 ULONG FailureCode; 416 VF_FAILURE_CLASS FailureClass; 417 ULONG AssertionControl; 418 PCHAR DebuggerMessageText; 419 } PCI_VERIFIER_DATA, *PPCI_VERIFIER_DATA; 420 421 // 422 // PCI ID Buffer Descriptor 423 // 424 typedef struct _PCI_ID_BUFFER 425 { 426 ULONG Count; 427 ANSI_STRING Strings[MAX_ANSI_STRINGS]; 428 ULONG StringSize[MAX_ANSI_STRINGS]; 429 ULONG TotalLength; 430 PCHAR CharBuffer; 431 CHAR BufferData[256]; 432 } PCI_ID_BUFFER, *PPCI_ID_BUFFER; 433 434 // 435 // PCI Configuration Callbacks 436 // 437 struct _PCI_CONFIGURATOR_CONTEXT; 438 439 typedef VOID (NTAPI *PCI_CONFIGURATOR_INITIALIZE)( 440 IN struct _PCI_CONFIGURATOR_CONTEXT* Context 441 ); 442 443 typedef VOID (NTAPI *PCI_CONFIGURATOR_RESTORE_CURRENT)( 444 IN struct _PCI_CONFIGURATOR_CONTEXT* Context 445 ); 446 447 typedef VOID (NTAPI *PCI_CONFIGURATOR_SAVE_LIMITS)( 448 IN struct _PCI_CONFIGURATOR_CONTEXT* Context 449 ); 450 451 typedef VOID (NTAPI *PCI_CONFIGURATOR_SAVE_CURRENT_SETTINGS)( 452 IN struct _PCI_CONFIGURATOR_CONTEXT* Context 453 ); 454 455 typedef VOID (NTAPI *PCI_CONFIGURATOR_CHANGE_RESOURCE_SETTINGS)( 456 IN PPCI_PDO_EXTENSION PdoExtension, 457 IN PPCI_COMMON_HEADER PciData 458 ); 459 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 464 ); 465 466 typedef VOID (NTAPI *PCI_CONFIGURATOR_RESET_DEVICE)( 467 IN PPCI_PDO_EXTENSION PdoExtension, 468 IN PPCI_COMMON_HEADER PciData 469 ); 470 471 // 472 // PCI Configurator 473 // 474 typedef struct _PCI_CONFIGURATOR 475 { 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; 484 485 // 486 // PCI Configurator Context 487 // 488 typedef struct _PCI_CONFIGURATOR_CONTEXT 489 { 490 PPCI_PDO_EXTENSION PdoExtension; 491 PPCI_COMMON_HEADER Current; 492 PPCI_COMMON_HEADER PciData; 493 PPCI_CONFIGURATOR Configurator; 494 USHORT SecondaryStatus; 495 USHORT Status; 496 USHORT Command; 497 } PCI_CONFIGURATOR_CONTEXT, *PPCI_CONFIGURATOR_CONTEXT; 498 499 // 500 // PCI IPI Function 501 // 502 typedef VOID (NTAPI *PCI_IPI_FUNCTION)( 503 IN PVOID Reserved, 504 IN PVOID Context 505 ); 506 507 // 508 // PCI IPI Context 509 // 510 typedef struct _PCI_IPI_CONTEXT 511 { 512 LONG RunCount; 513 ULONG Barrier; 514 PVOID DeviceExtension; 515 PCI_IPI_FUNCTION Function; 516 PVOID Context; 517 } PCI_IPI_CONTEXT, *PPCI_IPI_CONTEXT; 518 519 // 520 // PCI Legacy Device Location Cache 521 // 522 typedef struct _PCI_LEGACY_DEVICE 523 { 524 struct _PCI_LEGACY_DEVICE *Next; 525 PDEVICE_OBJECT DeviceObject; 526 ULONG BusNumber; 527 ULONG SlotNumber; 528 UCHAR InterruptLine; 529 UCHAR InterruptPin; 530 UCHAR BaseClass; 531 UCHAR SubClass; 532 PDEVICE_OBJECT PhysicalDeviceObject; 533 ROUTING_TOKEN RoutingToken; 534 PPCI_PDO_EXTENSION PdoExtension; 535 } PCI_LEGACY_DEVICE, *PPCI_LEGACY_DEVICE; 536 537 // 538 // IRP Dispatch Routines 539 // 540 541 DRIVER_DISPATCH PciDispatchIrp; 542 543 NTSTATUS 544 NTAPI 545 PciDispatchIrp( 546 IN PDEVICE_OBJECT DeviceObject, 547 IN PIRP Irp 548 ); 549 550 NTSTATUS 551 NTAPI 552 PciIrpNotSupported( 553 IN PIRP Irp, 554 IN PIO_STACK_LOCATION IoStackLocation, 555 IN PPCI_FDO_EXTENSION DeviceExtension 556 ); 557 558 NTSTATUS 559 NTAPI 560 PciPassIrpFromFdoToPdo( 561 IN PPCI_FDO_EXTENSION DeviceExtension, 562 IN PIRP Irp 563 ); 564 565 NTSTATUS 566 NTAPI 567 PciCallDownIrpStack( 568 IN PPCI_FDO_EXTENSION DeviceExtension, 569 IN PIRP Irp 570 ); 571 572 NTSTATUS 573 NTAPI 574 PciIrpInvalidDeviceRequest( 575 IN PIRP Irp, 576 IN PIO_STACK_LOCATION IoStackLocation, 577 IN PPCI_FDO_EXTENSION DeviceExtension 578 ); 579 580 // 581 // Power Routines 582 // 583 NTSTATUS 584 NTAPI 585 PciFdoWaitWake( 586 IN PIRP Irp, 587 IN PIO_STACK_LOCATION IoStackLocation, 588 IN PPCI_FDO_EXTENSION DeviceExtension 589 ); 590 591 NTSTATUS 592 NTAPI 593 PciFdoSetPowerState( 594 IN PIRP Irp, 595 IN PIO_STACK_LOCATION IoStackLocation, 596 IN PPCI_FDO_EXTENSION DeviceExtension 597 ); 598 599 NTSTATUS 600 NTAPI 601 PciFdoIrpQueryPower( 602 IN PIRP Irp, 603 IN PIO_STACK_LOCATION IoStackLocation, 604 IN PPCI_FDO_EXTENSION DeviceExtension 605 ); 606 607 NTSTATUS 608 NTAPI 609 PciSetPowerManagedDevicePowerState( 610 IN PPCI_PDO_EXTENSION DeviceExtension, 611 IN DEVICE_POWER_STATE DeviceState, 612 IN BOOLEAN IrpSet 613 ); 614 615 // 616 // Bus FDO Routines 617 // 618 619 DRIVER_ADD_DEVICE PciAddDevice; 620 621 NTSTATUS 622 NTAPI 623 PciAddDevice( 624 IN PDRIVER_OBJECT DriverObject, 625 IN PDEVICE_OBJECT PhysicalDeviceObject 626 ); 627 628 NTSTATUS 629 NTAPI 630 PciFdoIrpStartDevice( 631 IN PIRP Irp, 632 IN PIO_STACK_LOCATION IoStackLocation, 633 IN PPCI_FDO_EXTENSION DeviceExtension 634 ); 635 636 NTSTATUS 637 NTAPI 638 PciFdoIrpQueryRemoveDevice( 639 IN PIRP Irp, 640 IN PIO_STACK_LOCATION IoStackLocation, 641 IN PPCI_FDO_EXTENSION DeviceExtension 642 ); 643 644 NTSTATUS 645 NTAPI 646 PciFdoIrpRemoveDevice( 647 IN PIRP Irp, 648 IN PIO_STACK_LOCATION IoStackLocation, 649 IN PPCI_FDO_EXTENSION DeviceExtension 650 ); 651 652 NTSTATUS 653 NTAPI 654 PciFdoIrpCancelRemoveDevice( 655 IN PIRP Irp, 656 IN PIO_STACK_LOCATION IoStackLocation, 657 IN PPCI_FDO_EXTENSION DeviceExtension 658 ); 659 660 NTSTATUS 661 NTAPI 662 PciFdoIrpStopDevice( 663 IN PIRP Irp, 664 IN PIO_STACK_LOCATION IoStackLocation, 665 IN PPCI_FDO_EXTENSION DeviceExtension 666 ); 667 668 NTSTATUS 669 NTAPI 670 PciFdoIrpQueryStopDevice( 671 IN PIRP Irp, 672 IN PIO_STACK_LOCATION IoStackLocation, 673 IN PPCI_FDO_EXTENSION DeviceExtension 674 ); 675 676 NTSTATUS 677 NTAPI 678 PciFdoIrpCancelStopDevice( 679 IN PIRP Irp, 680 IN PIO_STACK_LOCATION IoStackLocation, 681 IN PPCI_FDO_EXTENSION DeviceExtension 682 ); 683 684 NTSTATUS 685 NTAPI 686 PciFdoIrpQueryDeviceRelations( 687 IN PIRP Irp, 688 IN PIO_STACK_LOCATION IoStackLocation, 689 IN PPCI_FDO_EXTENSION DeviceExtension 690 ); 691 692 NTSTATUS 693 NTAPI 694 PciFdoIrpQueryInterface( 695 IN PIRP Irp, 696 IN PIO_STACK_LOCATION IoStackLocation, 697 IN PPCI_FDO_EXTENSION DeviceExtension 698 ); 699 700 NTSTATUS 701 NTAPI 702 PciFdoIrpQueryCapabilities( 703 IN PIRP Irp, 704 IN PIO_STACK_LOCATION IoStackLocation, 705 IN PPCI_FDO_EXTENSION DeviceExtension 706 ); 707 708 NTSTATUS 709 NTAPI 710 PciFdoIrpDeviceUsageNotification( 711 IN PIRP Irp, 712 IN PIO_STACK_LOCATION IoStackLocation, 713 IN PPCI_FDO_EXTENSION DeviceExtension 714 ); 715 716 NTSTATUS 717 NTAPI 718 PciFdoIrpSurpriseRemoval( 719 IN PIRP Irp, 720 IN PIO_STACK_LOCATION IoStackLocation, 721 IN PPCI_FDO_EXTENSION DeviceExtension 722 ); 723 724 NTSTATUS 725 NTAPI 726 PciFdoIrpQueryLegacyBusInformation( 727 IN PIRP Irp, 728 IN PIO_STACK_LOCATION IoStackLocation, 729 IN PPCI_FDO_EXTENSION DeviceExtension 730 ); 731 732 // 733 // Device PDO Routines 734 // 735 NTSTATUS 736 NTAPI 737 PciPdoCreate( 738 IN PPCI_FDO_EXTENSION DeviceExtension, 739 IN PCI_SLOT_NUMBER Slot, 740 OUT PDEVICE_OBJECT *PdoDeviceObject 741 ); 742 743 NTSTATUS 744 NTAPI 745 PciPdoWaitWake( 746 IN PIRP Irp, 747 IN PIO_STACK_LOCATION IoStackLocation, 748 IN PPCI_PDO_EXTENSION DeviceExtension 749 ); 750 751 NTSTATUS 752 NTAPI 753 PciPdoSetPowerState( 754 IN PIRP Irp, 755 IN PIO_STACK_LOCATION IoStackLocation, 756 IN PPCI_PDO_EXTENSION DeviceExtension 757 ); 758 759 NTSTATUS 760 NTAPI 761 PciPdoIrpQueryPower( 762 IN PIRP Irp, 763 IN PIO_STACK_LOCATION IoStackLocation, 764 IN PPCI_PDO_EXTENSION DeviceExtension 765 ); 766 767 NTSTATUS 768 NTAPI 769 PciPdoIrpStartDevice( 770 IN PIRP Irp, 771 IN PIO_STACK_LOCATION IoStackLocation, 772 IN PPCI_PDO_EXTENSION DeviceExtension 773 ); 774 775 NTSTATUS 776 NTAPI 777 PciPdoIrpQueryRemoveDevice( 778 IN PIRP Irp, 779 IN PIO_STACK_LOCATION IoStackLocation, 780 IN PPCI_PDO_EXTENSION DeviceExtension 781 ); 782 783 NTSTATUS 784 NTAPI 785 PciPdoIrpRemoveDevice( 786 IN PIRP Irp, 787 IN PIO_STACK_LOCATION IoStackLocation, 788 IN PPCI_PDO_EXTENSION DeviceExtension 789 ); 790 791 NTSTATUS 792 NTAPI 793 PciPdoIrpCancelRemoveDevice( 794 IN PIRP Irp, 795 IN PIO_STACK_LOCATION IoStackLocation, 796 IN PPCI_PDO_EXTENSION DeviceExtension 797 ); 798 799 NTSTATUS 800 NTAPI 801 PciPdoIrpStopDevice( 802 IN PIRP Irp, 803 IN PIO_STACK_LOCATION IoStackLocation, 804 IN PPCI_PDO_EXTENSION DeviceExtension 805 ); 806 807 NTSTATUS 808 NTAPI 809 PciPdoIrpQueryStopDevice( 810 IN PIRP Irp, 811 IN PIO_STACK_LOCATION IoStackLocation, 812 IN PPCI_PDO_EXTENSION DeviceExtension 813 ); 814 815 NTSTATUS 816 NTAPI 817 PciPdoIrpCancelStopDevice( 818 IN PIRP Irp, 819 IN PIO_STACK_LOCATION IoStackLocation, 820 IN PPCI_PDO_EXTENSION DeviceExtension 821 ); 822 823 NTSTATUS 824 NTAPI 825 PciPdoIrpQueryDeviceRelations( 826 IN PIRP Irp, 827 IN PIO_STACK_LOCATION IoStackLocation, 828 IN PPCI_PDO_EXTENSION DeviceExtension 829 ); 830 831 NTSTATUS 832 NTAPI 833 PciPdoIrpQueryInterface( 834 IN PIRP Irp, 835 IN PIO_STACK_LOCATION IoStackLocation, 836 IN PPCI_PDO_EXTENSION DeviceExtension 837 ); 838 839 NTSTATUS 840 NTAPI 841 PciPdoIrpQueryCapabilities( 842 IN PIRP Irp, 843 IN PIO_STACK_LOCATION IoStackLocation, 844 IN PPCI_PDO_EXTENSION DeviceExtension 845 ); 846 847 NTSTATUS 848 NTAPI 849 PciPdoIrpQueryResources( 850 IN PIRP Irp, 851 IN PIO_STACK_LOCATION IoStackLocation, 852 IN PPCI_PDO_EXTENSION DeviceExtension 853 ); 854 855 NTSTATUS 856 NTAPI 857 PciPdoIrpQueryResourceRequirements( 858 IN PIRP Irp, 859 IN PIO_STACK_LOCATION IoStackLocation, 860 IN PPCI_PDO_EXTENSION DeviceExtension 861 ); 862 863 NTSTATUS 864 NTAPI 865 PciPdoIrpQueryDeviceText( 866 IN PIRP Irp, 867 IN PIO_STACK_LOCATION IoStackLocation, 868 IN PPCI_PDO_EXTENSION DeviceExtension 869 ); 870 871 NTSTATUS 872 NTAPI 873 PciPdoIrpReadConfig( 874 IN PIRP Irp, 875 IN PIO_STACK_LOCATION IoStackLocation, 876 IN PPCI_PDO_EXTENSION DeviceExtension 877 ); 878 879 NTSTATUS 880 NTAPI 881 PciPdoIrpWriteConfig( 882 IN PIRP Irp, 883 IN PIO_STACK_LOCATION IoStackLocation, 884 IN PPCI_PDO_EXTENSION DeviceExtension 885 ); 886 887 NTSTATUS 888 NTAPI 889 PciPdoIrpQueryId( 890 IN PIRP Irp, 891 IN PIO_STACK_LOCATION IoStackLocation, 892 IN PPCI_PDO_EXTENSION DeviceExtension 893 ); 894 895 NTSTATUS 896 NTAPI 897 PciPdoIrpQueryDeviceState( 898 IN PIRP Irp, 899 IN PIO_STACK_LOCATION IoStackLocation, 900 IN PPCI_PDO_EXTENSION DeviceExtension 901 ); 902 903 NTSTATUS 904 NTAPI 905 PciPdoIrpQueryBusInformation( 906 IN PIRP Irp, 907 IN PIO_STACK_LOCATION IoStackLocation, 908 IN PPCI_PDO_EXTENSION DeviceExtension 909 ); 910 911 NTSTATUS 912 NTAPI 913 PciPdoIrpDeviceUsageNotification( 914 IN PIRP Irp, 915 IN PIO_STACK_LOCATION IoStackLocation, 916 IN PPCI_PDO_EXTENSION DeviceExtension 917 ); 918 919 NTSTATUS 920 NTAPI 921 PciPdoIrpSurpriseRemoval( 922 IN PIRP Irp, 923 IN PIO_STACK_LOCATION IoStackLocation, 924 IN PPCI_PDO_EXTENSION DeviceExtension 925 ); 926 927 NTSTATUS 928 NTAPI 929 PciPdoIrpQueryLegacyBusInformation( 930 IN PIRP Irp, 931 IN PIO_STACK_LOCATION IoStackLocation, 932 IN PPCI_PDO_EXTENSION DeviceExtension 933 ); 934 935 936 // 937 // HAL Callback/Hook Routines 938 // 939 VOID 940 NTAPI 941 PciHookHal( 942 VOID 943 ); 944 945 // 946 // PCI Verifier Routines 947 // 948 VOID 949 NTAPI 950 PciVerifierInit( 951 IN PDRIVER_OBJECT DriverObject 952 ); 953 954 PPCI_VERIFIER_DATA 955 NTAPI 956 PciVerifierRetrieveFailureData( 957 IN ULONG FailureCode 958 ); 959 960 // 961 // Utility Routines 962 // 963 BOOLEAN 964 NTAPI 965 PciStringToUSHORT( 966 IN PWCHAR String, 967 OUT PUSHORT Value 968 ); 969 970 BOOLEAN 971 NTAPI 972 PciIsDatacenter( 973 VOID 974 ); 975 976 NTSTATUS 977 NTAPI 978 PciBuildDefaultExclusionLists( 979 VOID 980 ); 981 982 BOOLEAN 983 NTAPI 984 PciUnicodeStringStrStr( 985 IN PUNICODE_STRING InputString, 986 IN PCUNICODE_STRING EqualString, 987 IN BOOLEAN CaseInSensitive 988 ); 989 990 BOOLEAN 991 NTAPI 992 PciOpenKey( 993 IN PWCHAR KeyName, 994 IN HANDLE RootKey, 995 IN ACCESS_MASK DesiredAccess, 996 OUT PHANDLE KeyHandle, 997 OUT PNTSTATUS KeyStatus 998 ); 999 1000 NTSTATUS 1001 NTAPI 1002 PciGetRegistryValue( 1003 IN PWCHAR ValueName, 1004 IN PWCHAR KeyName, 1005 IN HANDLE RootHandle, 1006 IN ULONG Type, 1007 OUT PVOID *OutputBuffer, 1008 OUT PULONG OutputLength 1009 ); 1010 1011 PPCI_FDO_EXTENSION 1012 NTAPI 1013 PciFindParentPciFdoExtension( 1014 IN PDEVICE_OBJECT DeviceObject, 1015 IN PKEVENT Lock 1016 ); 1017 1018 VOID 1019 NTAPI 1020 PciInsertEntryAtTail( 1021 IN PSINGLE_LIST_ENTRY ListHead, 1022 IN PPCI_FDO_EXTENSION DeviceExtension, 1023 IN PKEVENT Lock 1024 ); 1025 1026 NTSTATUS 1027 NTAPI 1028 PciGetDeviceProperty( 1029 IN PDEVICE_OBJECT DeviceObject, 1030 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, 1031 OUT PVOID *OutputBuffer 1032 ); 1033 1034 NTSTATUS 1035 NTAPI 1036 PciSendIoctl( 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 1043 ); 1044 1045 VOID 1046 NTAPI 1047 PcipLinkSecondaryExtension( 1048 IN PSINGLE_LIST_ENTRY List, 1049 IN PVOID Lock, 1050 IN PPCI_SECONDARY_EXTENSION SecondaryExtension, 1051 IN PCI_SIGNATURE ExtensionType, 1052 IN PVOID Destructor 1053 ); 1054 1055 PPCI_SECONDARY_EXTENSION 1056 NTAPI 1057 PciFindNextSecondaryExtension( 1058 IN PSINGLE_LIST_ENTRY ListHead, 1059 IN PCI_SIGNATURE ExtensionType 1060 ); 1061 1062 ULONGLONG 1063 NTAPI 1064 PciGetHackFlags( 1065 IN USHORT VendorId, 1066 IN USHORT DeviceId, 1067 IN USHORT SubVendorId, 1068 IN USHORT SubSystemId, 1069 IN UCHAR RevisionId 1070 ); 1071 1072 PPCI_PDO_EXTENSION 1073 NTAPI 1074 PciFindPdoByFunction( 1075 IN PPCI_FDO_EXTENSION DeviceExtension, 1076 IN ULONG FunctionNumber, 1077 IN PPCI_COMMON_HEADER PciData 1078 ); 1079 1080 BOOLEAN 1081 NTAPI 1082 PciIsCriticalDeviceClass( 1083 IN UCHAR BaseClass, 1084 IN UCHAR SubClass 1085 ); 1086 1087 BOOLEAN 1088 NTAPI 1089 PciIsDeviceOnDebugPath( 1090 IN PPCI_PDO_EXTENSION DeviceExtension 1091 ); 1092 1093 NTSTATUS 1094 NTAPI 1095 PciGetBiosConfig( 1096 IN PPCI_PDO_EXTENSION DeviceExtension, 1097 OUT PPCI_COMMON_HEADER PciData 1098 ); 1099 1100 NTSTATUS 1101 NTAPI 1102 PciSaveBiosConfig( 1103 IN PPCI_PDO_EXTENSION DeviceExtension, 1104 OUT PPCI_COMMON_HEADER PciData 1105 ); 1106 1107 UCHAR 1108 NTAPI 1109 PciReadDeviceCapability( 1110 IN PPCI_PDO_EXTENSION DeviceExtension, 1111 IN UCHAR Offset, 1112 IN ULONG CapabilityId, 1113 OUT PPCI_CAPABILITIES_HEADER Buffer, 1114 IN ULONG Length 1115 ); 1116 1117 BOOLEAN 1118 NTAPI 1119 PciCanDisableDecodes( 1120 IN PPCI_PDO_EXTENSION DeviceExtension, 1121 IN PPCI_COMMON_HEADER Config, 1122 IN ULONGLONG HackFlags, 1123 IN BOOLEAN ForPowerDown 1124 ); 1125 1126 PCI_DEVICE_TYPES 1127 NTAPI 1128 PciClassifyDeviceType( 1129 IN PPCI_PDO_EXTENSION PdoExtension 1130 ); 1131 1132 KIPI_BROADCAST_WORKER PciExecuteCriticalSystemRoutine; 1133 1134 ULONG_PTR 1135 NTAPI 1136 PciExecuteCriticalSystemRoutine( 1137 IN ULONG_PTR IpiContext 1138 ); 1139 1140 BOOLEAN 1141 NTAPI 1142 PciCreateIoDescriptorFromBarLimit( 1143 PIO_RESOURCE_DESCRIPTOR ResourceDescriptor, 1144 IN PULONG BarArray, 1145 IN BOOLEAN Rom 1146 ); 1147 1148 BOOLEAN 1149 NTAPI 1150 PciIsSlotPresentInParentMethod( 1151 IN PPCI_PDO_EXTENSION PdoExtension, 1152 IN ULONG Method 1153 ); 1154 1155 VOID 1156 NTAPI 1157 PciDecodeEnable( 1158 IN PPCI_PDO_EXTENSION PdoExtension, 1159 IN BOOLEAN Enable, 1160 OUT PUSHORT Command 1161 ); 1162 1163 NTSTATUS 1164 NTAPI 1165 PciQueryBusInformation( 1166 IN PPCI_PDO_EXTENSION PdoExtension, 1167 IN PPNP_BUS_INFORMATION* Buffer 1168 ); 1169 1170 NTSTATUS 1171 NTAPI 1172 PciQueryCapabilities( 1173 IN PPCI_PDO_EXTENSION PdoExtension, 1174 IN OUT PDEVICE_CAPABILITIES DeviceCapability 1175 ); 1176 1177 // 1178 // Configuration Routines 1179 // 1180 NTSTATUS 1181 NTAPI 1182 PciGetConfigHandlers( 1183 IN PPCI_FDO_EXTENSION FdoExtension 1184 ); 1185 1186 VOID 1187 NTAPI 1188 PciReadSlotConfig( 1189 IN PPCI_FDO_EXTENSION DeviceExtension, 1190 IN PCI_SLOT_NUMBER Slot, 1191 IN PVOID Buffer, 1192 IN ULONG Offset, 1193 IN ULONG Length 1194 ); 1195 1196 VOID 1197 NTAPI 1198 PciWriteDeviceConfig( 1199 IN PPCI_PDO_EXTENSION DeviceExtension, 1200 IN PVOID Buffer, 1201 IN ULONG Offset, 1202 IN ULONG Length 1203 ); 1204 1205 VOID 1206 NTAPI 1207 PciReadDeviceConfig( 1208 IN PPCI_PDO_EXTENSION DeviceExtension, 1209 IN PVOID Buffer, 1210 IN ULONG Offset, 1211 IN ULONG Length 1212 ); 1213 1214 UCHAR 1215 NTAPI 1216 PciGetAdjustedInterruptLine( 1217 IN PPCI_PDO_EXTENSION PdoExtension 1218 ); 1219 1220 // 1221 // State Machine Logic Transition Routines 1222 // 1223 VOID 1224 NTAPI 1225 PciInitializeState( 1226 IN PPCI_FDO_EXTENSION DeviceExtension 1227 ); 1228 1229 NTSTATUS 1230 NTAPI 1231 PciBeginStateTransition( 1232 IN PPCI_FDO_EXTENSION DeviceExtension, 1233 IN PCI_STATE NewState 1234 ); 1235 1236 NTSTATUS 1237 NTAPI 1238 PciCancelStateTransition( 1239 IN PPCI_FDO_EXTENSION DeviceExtension, 1240 IN PCI_STATE NewState 1241 ); 1242 1243 VOID 1244 NTAPI 1245 PciCommitStateTransition( 1246 IN PPCI_FDO_EXTENSION DeviceExtension, 1247 IN PCI_STATE NewState 1248 ); 1249 1250 // 1251 // Arbiter Support 1252 // 1253 NTSTATUS 1254 NTAPI 1255 PciInitializeArbiters( 1256 IN PPCI_FDO_EXTENSION FdoExtension 1257 ); 1258 1259 NTSTATUS 1260 NTAPI 1261 PciInitializeArbiterRanges( 1262 IN PPCI_FDO_EXTENSION DeviceExtension, 1263 IN PCM_RESOURCE_LIST Resources 1264 ); 1265 1266 // 1267 // Debug Helpers 1268 // 1269 BOOLEAN 1270 NTAPI 1271 PciDebugIrpDispatchDisplay( 1272 IN PIO_STACK_LOCATION IoStackLocation, 1273 IN PPCI_FDO_EXTENSION DeviceExtension, 1274 IN USHORT MaxMinor 1275 ); 1276 1277 VOID 1278 NTAPI 1279 PciDebugDumpCommonConfig( 1280 IN PPCI_COMMON_HEADER PciData 1281 ); 1282 1283 VOID 1284 NTAPI 1285 PciDebugDumpQueryCapabilities( 1286 IN PDEVICE_CAPABILITIES DeviceCaps 1287 ); 1288 1289 VOID 1290 NTAPI 1291 PciDebugPrintIoResReqList( 1292 IN PIO_RESOURCE_REQUIREMENTS_LIST Requirements 1293 ); 1294 1295 VOID 1296 NTAPI 1297 PciDebugPrintCmResList( 1298 IN PCM_RESOURCE_LIST ResourceList 1299 ); 1300 1301 VOID 1302 NTAPI 1303 PciDebugPrintPartialResource( 1304 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialResource 1305 ); 1306 1307 // 1308 // Interface Support 1309 // 1310 NTSTATUS 1311 NTAPI 1312 PciQueryInterface( 1313 IN PPCI_FDO_EXTENSION DeviceExtension, 1314 IN CONST GUID* InterfaceType, 1315 IN ULONG Size, 1316 IN ULONG Version, 1317 IN PVOID InterfaceData, 1318 IN PINTERFACE Interface, 1319 IN BOOLEAN LastChance 1320 ); 1321 1322 NTSTATUS 1323 NTAPI 1324 PciPmeInterfaceInitializer( 1325 IN PVOID Instance 1326 ); 1327 1328 NTSTATUS 1329 NTAPI 1330 routeintrf_Initializer( 1331 IN PVOID Instance 1332 ); 1333 1334 NTSTATUS 1335 NTAPI 1336 arbusno_Initializer( 1337 IN PVOID Instance 1338 ); 1339 1340 NTSTATUS 1341 NTAPI 1342 agpintrf_Initializer( 1343 IN PVOID Instance 1344 ); 1345 1346 NTSTATUS 1347 NTAPI 1348 tranirq_Initializer( 1349 IN PVOID Instance 1350 ); 1351 1352 NTSTATUS 1353 NTAPI 1354 busintrf_Initializer( 1355 IN PVOID Instance 1356 ); 1357 1358 NTSTATUS 1359 NTAPI 1360 armem_Initializer( 1361 IN PVOID Instance 1362 ); 1363 1364 NTSTATUS 1365 NTAPI 1366 ario_Initializer( 1367 IN PVOID Instance 1368 ); 1369 1370 NTSTATUS 1371 NTAPI 1372 locintrf_Initializer( 1373 IN PVOID Instance 1374 ); 1375 1376 NTSTATUS 1377 NTAPI 1378 pcicbintrf_Initializer( 1379 IN PVOID Instance 1380 ); 1381 1382 NTSTATUS 1383 NTAPI 1384 lddintrf_Initializer( 1385 IN PVOID Instance 1386 ); 1387 1388 NTSTATUS 1389 NTAPI 1390 devpresent_Initializer( 1391 IN PVOID Instance 1392 ); 1393 1394 NTSTATUS 1395 NTAPI 1396 agpintrf_Constructor( 1397 IN PVOID DeviceExtension, 1398 IN PVOID Instance, 1399 IN PVOID InterfaceData, 1400 IN USHORT Version, 1401 IN USHORT Size, 1402 IN PINTERFACE Interface 1403 ); 1404 1405 NTSTATUS 1406 NTAPI 1407 arbusno_Constructor( 1408 IN PVOID DeviceExtension, 1409 IN PVOID Instance, 1410 IN PVOID InterfaceData, 1411 IN USHORT Version, 1412 IN USHORT Size, 1413 IN PINTERFACE Interface 1414 ); 1415 1416 NTSTATUS 1417 NTAPI 1418 tranirq_Constructor( 1419 IN PVOID DeviceExtension, 1420 IN PVOID Instance, 1421 IN PVOID InterfaceData, 1422 IN USHORT Version, 1423 IN USHORT Size, 1424 IN PINTERFACE Interface 1425 ); 1426 1427 NTSTATUS 1428 NTAPI 1429 armem_Constructor( 1430 IN PVOID DeviceExtension, 1431 IN PVOID Instance, 1432 IN PVOID InterfaceData, 1433 IN USHORT Version, 1434 IN USHORT Size, 1435 IN PINTERFACE Interface 1436 ); 1437 1438 NTSTATUS 1439 NTAPI 1440 busintrf_Constructor( 1441 IN PVOID DeviceExtension, 1442 IN PVOID Instance, 1443 IN PVOID InterfaceData, 1444 IN USHORT Version, 1445 IN USHORT Size, 1446 IN PINTERFACE Interface 1447 ); 1448 1449 NTSTATUS 1450 NTAPI 1451 ario_Constructor( 1452 IN PVOID DeviceExtension, 1453 IN PVOID Instance, 1454 IN PVOID InterfaceData, 1455 IN USHORT Version, 1456 IN USHORT Size, 1457 IN PINTERFACE Interface 1458 ); 1459 1460 VOID 1461 NTAPI 1462 ario_ApplyBrokenVideoHack( 1463 IN PPCI_FDO_EXTENSION FdoExtension 1464 ); 1465 1466 NTSTATUS 1467 NTAPI 1468 pcicbintrf_Constructor( 1469 IN PVOID DeviceExtension, 1470 IN PVOID Instance, 1471 IN PVOID InterfaceData, 1472 IN USHORT Version, 1473 IN USHORT Size, 1474 IN PINTERFACE Interface 1475 ); 1476 1477 NTSTATUS 1478 NTAPI 1479 lddintrf_Constructor( 1480 IN PVOID DeviceExtension, 1481 IN PVOID Instance, 1482 IN PVOID InterfaceData, 1483 IN USHORT Version, 1484 IN USHORT Size, 1485 IN PINTERFACE Interface 1486 ); 1487 1488 NTSTATUS 1489 NTAPI 1490 locintrf_Constructor( 1491 IN PVOID DeviceExtension, 1492 IN PVOID Instance, 1493 IN PVOID InterfaceData, 1494 IN USHORT Version, 1495 IN USHORT Size, 1496 IN PINTERFACE Interface 1497 ); 1498 1499 NTSTATUS 1500 NTAPI 1501 PciPmeInterfaceConstructor( 1502 IN PVOID DeviceExtension, 1503 IN PVOID Instance, 1504 IN PVOID InterfaceData, 1505 IN USHORT Version, 1506 IN USHORT Size, 1507 IN PINTERFACE Interface 1508 ); 1509 1510 NTSTATUS 1511 NTAPI 1512 routeintrf_Constructor( 1513 IN PVOID DeviceExtension, 1514 IN PVOID Instance, 1515 IN PVOID InterfaceData, 1516 IN USHORT Version, 1517 IN USHORT Size, 1518 IN PINTERFACE Interface 1519 ); 1520 1521 NTSTATUS 1522 NTAPI 1523 devpresent_Constructor( 1524 IN PVOID DeviceExtension, 1525 IN PVOID Instance, 1526 IN PVOID InterfaceData, 1527 IN USHORT Version, 1528 IN USHORT Size, 1529 IN PINTERFACE Interface 1530 ); 1531 1532 // 1533 // PCI Enumeration and Resources 1534 // 1535 NTSTATUS 1536 NTAPI 1537 PciQueryDeviceRelations( 1538 IN PPCI_FDO_EXTENSION DeviceExtension, 1539 IN OUT PDEVICE_RELATIONS *pDeviceRelations 1540 ); 1541 1542 NTSTATUS 1543 NTAPI 1544 PciQueryResources( 1545 IN PPCI_PDO_EXTENSION PdoExtension, 1546 OUT PCM_RESOURCE_LIST *Buffer 1547 ); 1548 1549 NTSTATUS 1550 NTAPI 1551 PciQueryTargetDeviceRelations( 1552 IN PPCI_PDO_EXTENSION PdoExtension, 1553 IN OUT PDEVICE_RELATIONS *pDeviceRelations 1554 ); 1555 1556 NTSTATUS 1557 NTAPI 1558 PciQueryEjectionRelations( 1559 IN PPCI_PDO_EXTENSION PdoExtension, 1560 IN OUT PDEVICE_RELATIONS *pDeviceRelations 1561 ); 1562 1563 NTSTATUS 1564 NTAPI 1565 PciQueryRequirements( 1566 IN PPCI_PDO_EXTENSION PdoExtension, 1567 IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *RequirementsList 1568 ); 1569 1570 BOOLEAN 1571 NTAPI 1572 PciComputeNewCurrentSettings( 1573 IN PPCI_PDO_EXTENSION PdoExtension, 1574 IN PCM_RESOURCE_LIST ResourceList 1575 ); 1576 1577 NTSTATUS 1578 NTAPI 1579 PciSetResources( 1580 IN PPCI_PDO_EXTENSION PdoExtension, 1581 IN BOOLEAN DoReset, 1582 IN BOOLEAN SomethingSomethingDarkSide 1583 ); 1584 1585 NTSTATUS 1586 NTAPI 1587 PciBuildRequirementsList( 1588 IN PPCI_PDO_EXTENSION PdoExtension, 1589 IN PPCI_COMMON_HEADER PciData, 1590 OUT PIO_RESOURCE_REQUIREMENTS_LIST* Buffer 1591 ); 1592 1593 // 1594 // Identification Functions 1595 // 1596 PWCHAR 1597 NTAPI 1598 PciGetDeviceDescriptionMessage( 1599 IN UCHAR BaseClass, 1600 IN UCHAR SubClass 1601 ); 1602 1603 NTSTATUS 1604 NTAPI 1605 PciQueryDeviceText( 1606 IN PPCI_PDO_EXTENSION PdoExtension, 1607 IN DEVICE_TEXT_TYPE QueryType, 1608 IN ULONG Locale, 1609 OUT PWCHAR *Buffer 1610 ); 1611 1612 NTSTATUS 1613 NTAPI 1614 PciQueryId( 1615 IN PPCI_PDO_EXTENSION DeviceExtension, 1616 IN BUS_QUERY_ID_TYPE QueryType, 1617 OUT PWCHAR *Buffer 1618 ); 1619 1620 // 1621 // CardBUS Support 1622 // 1623 VOID 1624 NTAPI 1625 Cardbus_MassageHeaderForLimitsDetermination( 1626 IN PPCI_CONFIGURATOR_CONTEXT Context 1627 ); 1628 1629 VOID 1630 NTAPI 1631 Cardbus_SaveCurrentSettings( 1632 IN PPCI_CONFIGURATOR_CONTEXT Context 1633 ); 1634 1635 VOID 1636 NTAPI 1637 Cardbus_SaveLimits( 1638 IN PPCI_CONFIGURATOR_CONTEXT Context 1639 ); 1640 1641 VOID 1642 NTAPI 1643 Cardbus_RestoreCurrent( 1644 IN PPCI_CONFIGURATOR_CONTEXT Context 1645 ); 1646 1647 VOID 1648 NTAPI 1649 Cardbus_GetAdditionalResourceDescriptors( 1650 IN PPCI_CONFIGURATOR_CONTEXT Context, 1651 IN PPCI_COMMON_HEADER PciData, 1652 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor 1653 ); 1654 1655 VOID 1656 NTAPI 1657 Cardbus_ResetDevice( 1658 IN PPCI_PDO_EXTENSION PdoExtension, 1659 IN PPCI_COMMON_HEADER PciData 1660 ); 1661 1662 VOID 1663 NTAPI 1664 Cardbus_ChangeResourceSettings( 1665 IN PPCI_PDO_EXTENSION PdoExtension, 1666 IN PPCI_COMMON_HEADER PciData 1667 ); 1668 1669 // 1670 // PCI Device Support 1671 // 1672 VOID 1673 NTAPI 1674 Device_MassageHeaderForLimitsDetermination( 1675 IN PPCI_CONFIGURATOR_CONTEXT Context 1676 ); 1677 1678 VOID 1679 NTAPI 1680 Device_SaveCurrentSettings( 1681 IN PPCI_CONFIGURATOR_CONTEXT Context 1682 ); 1683 1684 VOID 1685 NTAPI 1686 Device_SaveLimits( 1687 IN PPCI_CONFIGURATOR_CONTEXT Context 1688 ); 1689 1690 VOID 1691 NTAPI 1692 Device_RestoreCurrent( 1693 IN PPCI_CONFIGURATOR_CONTEXT Context 1694 ); 1695 1696 VOID 1697 NTAPI 1698 Device_GetAdditionalResourceDescriptors( 1699 IN PPCI_CONFIGURATOR_CONTEXT Context, 1700 IN PPCI_COMMON_HEADER PciData, 1701 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor 1702 ); 1703 1704 VOID 1705 NTAPI 1706 Device_ResetDevice( 1707 IN PPCI_PDO_EXTENSION PdoExtension, 1708 IN PPCI_COMMON_HEADER PciData 1709 ); 1710 1711 VOID 1712 NTAPI 1713 Device_ChangeResourceSettings( 1714 IN PPCI_PDO_EXTENSION PdoExtension, 1715 IN PPCI_COMMON_HEADER PciData 1716 ); 1717 1718 // 1719 // PCI-to-PCI Bridge Device Support 1720 // 1721 VOID 1722 NTAPI 1723 PPBridge_MassageHeaderForLimitsDetermination( 1724 IN PPCI_CONFIGURATOR_CONTEXT Context 1725 ); 1726 1727 VOID 1728 NTAPI 1729 PPBridge_SaveCurrentSettings( 1730 IN PPCI_CONFIGURATOR_CONTEXT Context 1731 ); 1732 1733 VOID 1734 NTAPI 1735 PPBridge_SaveLimits( 1736 IN PPCI_CONFIGURATOR_CONTEXT Context 1737 ); 1738 1739 VOID 1740 NTAPI 1741 PPBridge_RestoreCurrent( 1742 IN PPCI_CONFIGURATOR_CONTEXT Context 1743 ); 1744 1745 VOID 1746 NTAPI 1747 PPBridge_GetAdditionalResourceDescriptors( 1748 IN PPCI_CONFIGURATOR_CONTEXT Context, 1749 IN PPCI_COMMON_HEADER PciData, 1750 IN PIO_RESOURCE_DESCRIPTOR IoDescriptor 1751 ); 1752 1753 VOID 1754 NTAPI 1755 PPBridge_ResetDevice( 1756 IN PPCI_PDO_EXTENSION PdoExtension, 1757 IN PPCI_COMMON_HEADER PciData 1758 ); 1759 1760 VOID 1761 NTAPI 1762 PPBridge_ChangeResourceSettings( 1763 IN PPCI_PDO_EXTENSION PdoExtension, 1764 IN PPCI_COMMON_HEADER PciData 1765 ); 1766 1767 // 1768 // Bus Number Routines 1769 // 1770 BOOLEAN 1771 NTAPI 1772 PciAreBusNumbersConfigured( 1773 IN PPCI_PDO_EXTENSION PdoExtension 1774 ); 1775 1776 // 1777 // Routine Interface 1778 // 1779 NTSTATUS 1780 NTAPI 1781 PciCacheLegacyDeviceRouting( 1782 IN PDEVICE_OBJECT DeviceObject, 1783 IN ULONG BusNumber, 1784 IN ULONG SlotNumber, 1785 IN UCHAR InterruptLine, 1786 IN UCHAR InterruptPin, 1787 IN UCHAR BaseClass, 1788 IN UCHAR SubClass, 1789 IN PDEVICE_OBJECT PhysicalDeviceObject, 1790 IN PPCI_PDO_EXTENSION PdoExtension, 1791 OUT PDEVICE_OBJECT *pFoundDeviceObject 1792 ); 1793 1794 // 1795 // External Resources 1796 // 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; 1820 1821 /* Exported by NTOS, should this go in the NDK? */ 1822 extern NTSYSAPI BOOLEAN InitSafeBootMode; 1823 1824 #endif /* _PCIX_PCH_ */ 1825