ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

pci.h
Go to the documentation of this file.
00001 /*
00002  * PROJECT:         ReactOS PCI Bus Driver
00003  * LICENSE:         BSD - See COPYING.ARM in the top level directory
00004  * FILE:            drivers/bus/pci/pci.h
00005  * PURPOSE:         Main Header File
00006  * PROGRAMMERS:     ReactOS Portable Systems Group
00007  */
00008 
00009 #include <initguid.h>
00010 #include <ntifs.h>
00011 #include <ntagp.h>
00012 #include <wdmguid.h>
00013 #include <wchar.h>
00014 #include <acpiioct.h>
00015 #include <drivers/pci/pci.h>
00016 #include <drivers/acpi/acpi.h>
00017 #include "halfuncs.h"
00018 #include "rtlfuncs.h"
00019 #include "vffuncs.h"
00020 #include "bugcodes.h"
00021 
00022 //
00023 // Tag used in all pool allocations (Pci Bus)
00024 //
00025 #define PCI_POOL_TAG    'BicP'
00026 
00027 //
00028 // Checks if the specified FDO is the FDO for the Root PCI Bus
00029 //
00030 #define PCI_IS_ROOT_FDO(x)                  ((x)->BusRootFdoExtension == x)
00031 
00032 //
00033 // Assertions to make sure we are dealing with the right kind of extension
00034 //
00035 #define ASSERT_FDO(x)                       ASSERT((x)->ExtensionType == PciFdoExtensionType);
00036 #define ASSERT_PDO(x)                       ASSERT((x)->ExtensionType == PciPdoExtensionType);
00037 
00038 //
00039 // PCI Hack Entry Name Lengths
00040 //
00041 #define PCI_HACK_ENTRY_SIZE                 sizeof(L"VVVVdddd") - sizeof(UNICODE_NULL)
00042 #define PCI_HACK_ENTRY_REV_SIZE             sizeof(L"VVVVddddRR") - sizeof(UNICODE_NULL)
00043 #define PCI_HACK_ENTRY_SUBSYS_SIZE          sizeof(L"VVVVddddssssIIII") - sizeof(UNICODE_NULL)
00044 #define PCI_HACK_ENTRY_FULL_SIZE            sizeof(L"VVVVddddssssIIIIRR") - sizeof(UNICODE_NULL)
00045 
00046 //
00047 // PCI Hack Entry Flags
00048 //
00049 #define PCI_HACK_HAS_REVISION_INFO          0x01
00050 #define PCI_HACK_HAS_SUBSYSTEM_INFO         0x02
00051 
00052 //
00053 // PCI Interface Flags
00054 //
00055 #define PCI_INTERFACE_PDO                   0x01
00056 #define PCI_INTERFACE_FDO                   0x02
00057 #define PCI_INTERFACE_ROOT                  0x04
00058 
00059 //
00060 // PCI Skip Function Flags
00061 //
00062 #define PCI_SKIP_DEVICE_ENUMERATION         0x01
00063 #define PCI_SKIP_RESOURCE_ENUMERATION       0x02
00064 
00065 //
00066 // PCI Apply Hack Flags
00067 //
00068 #define PCI_HACK_FIXUP_BEFORE_CONFIGURATION 0x00
00069 #define PCI_HACK_FIXUP_AFTER_CONFIGURATION  0x01
00070 #define PCI_HACK_FIXUP_BEFORE_UPDATE        0x03
00071 
00072 //
00073 // PCI Debugging Device Support
00074 //
00075 #define MAX_DEBUGGING_DEVICES_SUPPORTED     0x04
00076 
00077 //
00078 // PCI Driver Verifier Failures
00079 //
00080 #define PCI_VERIFIER_CODES                  0x04
00081 
00082 //
00083 // PCI ID Buffer ANSI Strings
00084 //
00085 #define MAX_ANSI_STRINGS                    0x08
00086 
00087 //
00088 // Device Extension, Interface, Translator and Arbiter Signatures
00089 //
00090 typedef enum _PCI_SIGNATURE
00091 {
00092     PciPdoExtensionType = 'icP0',
00093     PciFdoExtensionType = 'icP1',
00094     PciArb_Io = 'icP2',
00095     PciArb_Memory = 'icP3',
00096     PciArb_Interrupt = 'icP4',
00097     PciArb_BusNumber = 'icP5',
00098     PciTrans_Interrupt = 'icP6',
00099     PciInterface_BusHandler = 'icP7',
00100     PciInterface_IntRouteHandler = 'icP8',
00101     PciInterface_PciCb = 'icP9',
00102     PciInterface_LegacyDeviceDetection = 'icP:',
00103     PciInterface_PmeHandler = 'icP;',
00104     PciInterface_DevicePresent = 'icP<',
00105     PciInterface_NativeIde = 'icP=',
00106     PciInterface_AgpTarget = 'icP>',
00107     PciInterface_Location  = 'icP?'
00108 } PCI_SIGNATURE, *PPCI_SIGNATURE;
00109 
00110 //
00111 // Driver-handled PCI Device Types
00112 //
00113 typedef enum _PCI_DEVICE_TYPES
00114 {
00115     PciTypeInvalid,
00116     PciTypeHostBridge,
00117     PciTypePciBridge,
00118     PciTypeCardbusBridge,
00119     PciTypeDevice
00120 } PCI_DEVICE_TYPES;
00121 
00122 //
00123 // Device Extension Logic States
00124 //
00125 typedef enum _PCI_STATE
00126 {
00127     PciNotStarted,
00128     PciStarted,
00129     PciDeleted,
00130     PciStopped,
00131     PciSurpriseRemoved,
00132     PciSynchronizedOperation,
00133     PciMaxObjectState
00134 } PCI_STATE;
00135 
00136 //
00137 // IRP Dispatch Logic Style
00138 //
00139 typedef enum _PCI_DISPATCH_STYLE
00140 {
00141     IRP_COMPLETE,
00142     IRP_DOWNWARD,
00143     IRP_UPWARD,
00144     IRP_DISPATCH,
00145 } PCI_DISPATCH_STYLE;
00146 
00147 //
00148 // PCI Hack Entry Information
00149 //
00150 typedef struct _PCI_HACK_ENTRY
00151 {
00152     USHORT VendorID;
00153     USHORT DeviceID;
00154     USHORT SubVendorID;
00155     USHORT SubSystemID;
00156     ULONGLONG HackFlags;
00157     USHORT RevisionID;
00158     UCHAR Flags;
00159 } PCI_HACK_ENTRY, *PPCI_HACK_ENTRY;
00160 
00161 //
00162 // Power State Information for Device Extension
00163 //
00164 typedef struct _PCI_POWER_STATE
00165 {
00166     SYSTEM_POWER_STATE CurrentSystemState;
00167     DEVICE_POWER_STATE CurrentDeviceState;
00168     SYSTEM_POWER_STATE SystemWakeLevel;
00169     DEVICE_POWER_STATE DeviceWakeLevel;
00170     DEVICE_POWER_STATE SystemStateMapping[7];
00171     PIRP WaitWakeIrp;
00172     PVOID SavedCancelRoutine;
00173     LONG Paging;
00174     LONG Hibernate;
00175     LONG CrashDump;
00176 } PCI_POWER_STATE, *PPCI_POWER_STATE;
00177 
00178 //
00179 // Internal PCI Lock Structure
00180 //
00181 typedef struct _PCI_LOCK
00182 {
00183     LONG Atom;
00184     BOOLEAN OldIrql;
00185 } PCI_LOCK, *PPCI_LOCK;
00186 
00187 //
00188 // Device Extension for a Bus FDO
00189 //
00190 typedef struct _PCI_FDO_EXTENSION
00191 {
00192     SINGLE_LIST_ENTRY List;
00193     ULONG ExtensionType;
00194     struct _PCI_MJ_DISPATCH_TABLE *IrpDispatchTable;
00195     BOOLEAN DeviceState;
00196     BOOLEAN TentativeNextState;
00197     KEVENT SecondaryExtLock;
00198     PDEVICE_OBJECT PhysicalDeviceObject;
00199     PDEVICE_OBJECT FunctionalDeviceObject;
00200     PDEVICE_OBJECT AttachedDeviceObject;
00201     KEVENT ChildListLock;
00202     struct _PCI_PDO_EXTENSION *ChildPdoList;
00203     struct _PCI_FDO_EXTENSION *BusRootFdoExtension;
00204     struct _PCI_FDO_EXTENSION *ParentFdoExtension;
00205     struct _PCI_PDO_EXTENSION *ChildBridgePdoList;
00206     PPCI_BUS_INTERFACE_STANDARD PciBusInterface;
00207     BOOLEAN MaxSubordinateBus;
00208     BUS_HANDLER *BusHandler;
00209     BOOLEAN BaseBus;
00210     BOOLEAN Fake;
00211     BOOLEAN ChildDelete;
00212     BOOLEAN Scanned;
00213     BOOLEAN ArbitersInitialized;
00214     BOOLEAN BrokenVideoHackApplied;
00215     BOOLEAN Hibernated;
00216     PCI_POWER_STATE PowerState;
00217     SINGLE_LIST_ENTRY SecondaryExtension;
00218     LONG ChildWaitWakeCount;
00219     PPCI_COMMON_CONFIG PreservedConfig;
00220     PCI_LOCK Lock;
00221     struct
00222     {
00223         BOOLEAN Acquired;
00224         BOOLEAN CacheLineSize;
00225         BOOLEAN LatencyTimer;
00226         BOOLEAN EnablePERR;
00227         BOOLEAN EnableSERR;
00228     } HotPlugParameters;
00229     LONG BusHackFlags;
00230 } PCI_FDO_EXTENSION, *PPCI_FDO_EXTENSION;
00231 
00232 typedef struct _PCI_FUNCTION_RESOURCES
00233 {
00234     IO_RESOURCE_DESCRIPTOR Limit[7];
00235     CM_PARTIAL_RESOURCE_DESCRIPTOR Current[7];
00236 } PCI_FUNCTION_RESOURCES, *PPCI_FUNCTION_RESOURCES;
00237 
00238 typedef union _PCI_HEADER_TYPE_DEPENDENT
00239 {
00240     struct
00241     {
00242         UCHAR Spare[4];
00243     } type0;
00244     struct
00245     {
00246         UCHAR PrimaryBus;
00247         UCHAR SecondaryBus;
00248         UCHAR SubordinateBus;
00249         UCHAR SubtractiveDecode:1;
00250         UCHAR IsaBitSet:1;
00251         UCHAR VgaBitSet:1;
00252         UCHAR WeChangedBusNumbers:1;
00253         UCHAR IsaBitRequired:1;
00254     } type1;
00255     struct
00256     {
00257         UCHAR Spare[4];
00258     } type2;
00259 } PCI_HEADER_TYPE_DEPENDENT, *PPCI_HEADER_TYPE_DEPENDENT;
00260 
00261 typedef struct _PCI_PDO_EXTENSION
00262 {
00263     PVOID Next;
00264     ULONG ExtensionType;
00265     struct _PCI_MJ_DISPATCH_TABLE *IrpDispatchTable;
00266     BOOLEAN DeviceState;
00267     BOOLEAN TentativeNextState;
00268 
00269     KEVENT SecondaryExtLock;
00270     PCI_SLOT_NUMBER Slot;
00271     PDEVICE_OBJECT PhysicalDeviceObject;
00272     PPCI_FDO_EXTENSION ParentFdoExtension;
00273     SINGLE_LIST_ENTRY SecondaryExtension;
00274     LONG BusInterfaceReferenceCount;
00275     LONG AgpInterfaceReferenceCount;
00276     USHORT VendorId;
00277     USHORT DeviceId;
00278     USHORT SubsystemVendorId;
00279     USHORT SubsystemId;
00280     BOOLEAN RevisionId;
00281     BOOLEAN ProgIf;
00282     BOOLEAN SubClass;
00283     BOOLEAN BaseClass;
00284     BOOLEAN AdditionalResourceCount;
00285     BOOLEAN AdjustedInterruptLine;
00286     BOOLEAN InterruptPin;
00287     BOOLEAN RawInterruptLine;
00288     BOOLEAN CapabilitiesPtr;
00289     BOOLEAN SavedLatencyTimer;
00290     BOOLEAN SavedCacheLineSize;
00291     BOOLEAN HeaderType;
00292     BOOLEAN NotPresent;
00293     BOOLEAN ReportedMissing;
00294     BOOLEAN ExpectedWritebackFailure;
00295     BOOLEAN NoTouchPmeEnable;
00296     BOOLEAN LegacyDriver;
00297     BOOLEAN UpdateHardware;
00298     BOOLEAN MovedDevice;
00299     BOOLEAN DisablePowerDown;
00300     BOOLEAN NeedsHotPlugConfiguration;
00301     BOOLEAN IDEInNativeMode;
00302     BOOLEAN BIOSAllowsIDESwitchToNativeMode;
00303     BOOLEAN IoSpaceUnderNativeIdeControl;
00304     BOOLEAN OnDebugPath;
00305     BOOLEAN IoSpaceNotRequired;
00306     PCI_POWER_STATE PowerState;
00307     PCI_HEADER_TYPE_DEPENDENT Dependent;
00308     ULONGLONG HackFlags;
00309     PCI_FUNCTION_RESOURCES *Resources;
00310     PCI_FDO_EXTENSION *BridgeFdoExtension;
00311     struct _PCI_PDO_EXTENSION *NextBridge;
00312     struct _PCI_PDO_EXTENSION *NextHashEntry;
00313     PCI_LOCK Lock;
00314     PCI_PMC PowerCapabilities;
00315     BOOLEAN TargetAgpCapabilityId;
00316     USHORT CommandEnables;
00317     USHORT InitialCommand;
00318 } PCI_PDO_EXTENSION, *PPCI_PDO_EXTENSION;
00319 
00320 //
00321 // IRP Dispatch Function Type
00322 //
00323 typedef NTSTATUS (NTAPI *PCI_DISPATCH_FUNCTION)(
00324     IN PIRP Irp,
00325     IN PIO_STACK_LOCATION IoStackLocation,
00326     IN PVOID DeviceExtension
00327 );
00328 
00329 //
00330 // IRP Dispatch Minor Table
00331 //
00332 typedef struct _PCI_MN_DISPATCH_TABLE
00333 {
00334     PCI_DISPATCH_STYLE DispatchStyle;
00335     PCI_DISPATCH_FUNCTION DispatchFunction;
00336 } PCI_MN_DISPATCH_TABLE, *PPCI_MN_DISPATCH_TABLE;
00337 
00338 //
00339 // IRP Dispatch Major Table
00340 //
00341 typedef struct _PCI_MJ_DISPATCH_TABLE
00342 {
00343     ULONG PnpIrpMaximumMinorFunction;
00344     PPCI_MN_DISPATCH_TABLE PnpIrpDispatchTable;
00345     ULONG PowerIrpMaximumMinorFunction;
00346     PPCI_MN_DISPATCH_TABLE PowerIrpDispatchTable;
00347     PCI_DISPATCH_STYLE SystemControlIrpDispatchStyle;
00348     PCI_DISPATCH_FUNCTION SystemControlIrpDispatchFunction;
00349     PCI_DISPATCH_STYLE OtherIrpDispatchStyle;
00350     PCI_DISPATCH_FUNCTION OtherIrpDispatchFunction;
00351 } PCI_MJ_DISPATCH_TABLE, *PPCI_MJ_DISPATCH_TABLE;
00352 
00353 //
00354 // Generic PCI Interface Constructor and Initializer
00355 //
00356 struct _PCI_INTERFACE;
00357 typedef NTSTATUS (NTAPI *PCI_INTERFACE_CONSTRUCTOR)(
00358     IN PVOID DeviceExtension,
00359     IN PVOID Instance,
00360     IN PVOID InterfaceData,
00361     IN USHORT Version,
00362     IN USHORT Size,
00363     IN PINTERFACE Interface
00364 );
00365 
00366 typedef NTSTATUS (NTAPI *PCI_INTERFACE_INITIALIZER)(
00367     IN PVOID Instance
00368 );
00369 
00370 //
00371 // Generic PCI Interface (Interface, Translator, Arbiter)
00372 //
00373 typedef struct _PCI_INTERFACE
00374 {
00375     CONST GUID *InterfaceType;
00376     USHORT MinSize;
00377     USHORT MinVersion;
00378     USHORT MaxVersion;
00379     USHORT Flags;
00380     LONG ReferenceCount;
00381     PCI_SIGNATURE Signature;
00382     PCI_INTERFACE_CONSTRUCTOR Constructor;
00383     PCI_INTERFACE_INITIALIZER Initializer;
00384 } PCI_INTERFACE, *PPCI_INTERFACE;
00385 
00386 //
00387 // Generic Secondary Extension Instance Header (Interface, Translator, Arbiter)
00388 //
00389 typedef struct PCI_SECONDARY_EXTENSION
00390 {
00391     SINGLE_LIST_ENTRY List;
00392     PCI_SIGNATURE ExtensionType;
00393     PVOID Destructor;
00394 } PCI_SECONDARY_EXTENSION, *PPCI_SECONDARY_EXTENSION;
00395 
00396 //
00397 // PCI Arbiter Instance
00398 //
00399 typedef struct PCI_ARBITER_INSTANCE
00400 {
00401     PCI_SECONDARY_EXTENSION Header;
00402     PPCI_INTERFACE Interface;
00403     PPCI_FDO_EXTENSION BusFdoExtension;
00404     WCHAR InstanceName[24];
00405     //ARBITER_INSTANCE CommonInstance; FIXME: Need Arbiter Headers
00406 } PCI_ARBITER_INSTANCE, *PPCI_ARBITER_INSTANCE;
00407 
00408 //
00409 // PCI Verifier Data
00410 //
00411 typedef struct _PCI_VERIFIER_DATA
00412 {
00413     ULONG FailureCode;
00414     VF_FAILURE_CLASS FailureClass;
00415     ULONG AssertionControl;
00416     PCHAR DebuggerMessageText;
00417 } PCI_VERIFIER_DATA, *PPCI_VERIFIER_DATA;
00418 
00419 //
00420 // PCI ID Buffer Descriptor
00421 //
00422 typedef struct _PCI_ID_BUFFER
00423 {
00424     ULONG Count;
00425     ANSI_STRING Strings[MAX_ANSI_STRINGS];
00426     ULONG StringSize[MAX_ANSI_STRINGS];
00427     ULONG TotalLength;
00428     PCHAR CharBuffer;
00429     CHAR BufferData[256];
00430 } PCI_ID_BUFFER, *PPCI_ID_BUFFER;
00431 
00432 //
00433 // PCI Configuration Callbacks
00434 //
00435 struct _PCI_CONFIGURATOR_CONTEXT;
00436 
00437 typedef VOID (NTAPI *PCI_CONFIGURATOR_INITIALIZE)(
00438     IN struct _PCI_CONFIGURATOR_CONTEXT* Context
00439 );
00440 
00441 typedef VOID (NTAPI *PCI_CONFIGURATOR_RESTORE_CURRENT)(
00442     IN struct _PCI_CONFIGURATOR_CONTEXT* Context
00443 );
00444 
00445 typedef VOID (NTAPI *PCI_CONFIGURATOR_SAVE_LIMITS)(
00446     IN struct _PCI_CONFIGURATOR_CONTEXT* Context
00447 );
00448 
00449 typedef VOID (NTAPI *PCI_CONFIGURATOR_SAVE_CURRENT_SETTINGS)(
00450     IN struct _PCI_CONFIGURATOR_CONTEXT* Context
00451 );
00452 
00453 typedef VOID (NTAPI *PCI_CONFIGURATOR_CHANGE_RESOURCE_SETTINGS)(
00454     IN PPCI_PDO_EXTENSION PdoExtension,
00455     IN PPCI_COMMON_HEADER PciData
00456 );
00457 
00458 typedef VOID (NTAPI *PCI_CONFIGURATOR_GET_ADDITIONAL_RESOURCE_DESCRIPTORS)(
00459     IN struct _PCI_CONFIGURATOR_CONTEXT* Context,
00460     IN PPCI_COMMON_HEADER PciData,
00461     IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
00462 );
00463 
00464 typedef VOID (NTAPI *PCI_CONFIGURATOR_RESET_DEVICE)(
00465     IN PPCI_PDO_EXTENSION PdoExtension,
00466     IN PPCI_COMMON_HEADER PciData
00467 );
00468 
00469 //
00470 // PCI Configurator
00471 //
00472 typedef struct _PCI_CONFIGURATOR
00473 {
00474     PCI_CONFIGURATOR_INITIALIZE Initialize;
00475     PCI_CONFIGURATOR_RESTORE_CURRENT RestoreCurrent;
00476     PCI_CONFIGURATOR_SAVE_LIMITS SaveLimits;
00477     PCI_CONFIGURATOR_SAVE_CURRENT_SETTINGS SaveCurrentSettings;
00478     PCI_CONFIGURATOR_CHANGE_RESOURCE_SETTINGS ChangeResourceSettings;
00479     PCI_CONFIGURATOR_GET_ADDITIONAL_RESOURCE_DESCRIPTORS GetAdditionalResourceDescriptors;
00480     PCI_CONFIGURATOR_RESET_DEVICE ResetDevice;
00481 } PCI_CONFIGURATOR, *PPCI_CONFIGURATOR;
00482 
00483 //
00484 // PCI Configurator Context
00485 //
00486 typedef struct _PCI_CONFIGURATOR_CONTEXT
00487 {
00488     PPCI_PDO_EXTENSION PdoExtension;
00489     PPCI_COMMON_HEADER Current;
00490     PPCI_COMMON_HEADER PciData;
00491     PPCI_CONFIGURATOR Configurator;
00492     USHORT SecondaryStatus;
00493     USHORT Status;
00494     USHORT Command;
00495 } PCI_CONFIGURATOR_CONTEXT, *PPCI_CONFIGURATOR_CONTEXT;
00496 
00497 //
00498 // PCI IPI Function
00499 //
00500 typedef VOID (NTAPI *PCI_IPI_FUNCTION)(
00501     IN PVOID Reserved,
00502     IN PVOID Context
00503 );
00504 
00505 //
00506 // PCI IPI Context
00507 //
00508 typedef struct _PCI_IPI_CONTEXT
00509 {
00510     LONG RunCount;
00511     ULONG Barrier;
00512     PVOID DeviceExtension;
00513     PCI_IPI_FUNCTION Function;
00514     PVOID Context;
00515 } PCI_IPI_CONTEXT, *PPCI_IPI_CONTEXT;
00516 
00517 //
00518 // PCI Legacy Device Location Cache
00519 //
00520 typedef struct _PCI_LEGACY_DEVICE
00521 {
00522     struct _PCI_LEGACY_DEVICE *Next;
00523     PDEVICE_OBJECT DeviceObject;
00524     ULONG BusNumber;
00525     ULONG SlotNumber;
00526     UCHAR InterruptLine;
00527     UCHAR InterruptPin;
00528     UCHAR BaseClass;
00529     UCHAR SubClass;
00530     PDEVICE_OBJECT PhysicalDeviceObject;
00531     ROUTING_TOKEN RoutingToken;
00532     PPCI_PDO_EXTENSION PdoExtension;
00533 } PCI_LEGACY_DEVICE, *PPCI_LEGACY_DEVICE;
00534 
00535 //
00536 // IRP Dispatch Routines
00537 //
00538 NTSTATUS
00539 NTAPI
00540 PciDispatchIrp(
00541     IN PDEVICE_OBJECT DeviceObject,
00542     IN PIRP Irp
00543 );
00544 
00545 NTSTATUS
00546 NTAPI
00547 PciIrpNotSupported(
00548     IN PIRP Irp,
00549     IN PIO_STACK_LOCATION IoStackLocation,
00550     IN PPCI_FDO_EXTENSION DeviceExtension
00551 );
00552 
00553 NTSTATUS
00554 NTAPI
00555 PciPassIrpFromFdoToPdo(
00556     IN PPCI_FDO_EXTENSION DeviceExtension,
00557     IN PIRP Irp
00558 );
00559 
00560 NTSTATUS
00561 NTAPI
00562 PciCallDownIrpStack(
00563     IN PPCI_FDO_EXTENSION DeviceExtension,
00564     IN PIRP Irp
00565 );
00566 
00567 NTSTATUS
00568 NTAPI
00569 PciIrpInvalidDeviceRequest(
00570     IN PIRP Irp,
00571     IN PIO_STACK_LOCATION IoStackLocation,
00572     IN PPCI_FDO_EXTENSION DeviceExtension
00573 );
00574 
00575 //
00576 // Power Routines
00577 //
00578 NTSTATUS
00579 NTAPI
00580 PciFdoWaitWake(
00581     IN PIRP Irp,
00582     IN PIO_STACK_LOCATION IoStackLocation,
00583     IN PPCI_FDO_EXTENSION DeviceExtension
00584 );
00585 
00586 NTSTATUS
00587 NTAPI
00588 PciFdoSetPowerState(
00589     IN PIRP Irp,
00590     IN PIO_STACK_LOCATION IoStackLocation,
00591     IN PPCI_FDO_EXTENSION DeviceExtension
00592 );
00593 
00594 NTSTATUS
00595 NTAPI
00596 PciFdoIrpQueryPower(
00597     IN PIRP Irp,
00598     IN PIO_STACK_LOCATION IoStackLocation,
00599     IN PPCI_FDO_EXTENSION DeviceExtension
00600 );
00601 
00602 NTSTATUS
00603 NTAPI
00604 PciSetPowerManagedDevicePowerState(
00605     IN PPCI_PDO_EXTENSION DeviceExtension,
00606     IN DEVICE_POWER_STATE DeviceState,
00607     IN BOOLEAN IrpSet
00608 );
00609 
00610 //
00611 // Bus FDO Routines
00612 //
00613 NTSTATUS
00614 NTAPI
00615 PciAddDevice(
00616     IN PDRIVER_OBJECT DriverObject,
00617     IN PDEVICE_OBJECT PhysicalDeviceObject
00618 );
00619 
00620 NTSTATUS
00621 NTAPI
00622 PciFdoIrpStartDevice(
00623     IN PIRP Irp,
00624     IN PIO_STACK_LOCATION IoStackLocation,
00625     IN PPCI_FDO_EXTENSION DeviceExtension
00626 );
00627 
00628 NTSTATUS
00629 NTAPI
00630 PciFdoIrpQueryRemoveDevice(
00631     IN PIRP Irp,
00632     IN PIO_STACK_LOCATION IoStackLocation,
00633     IN PPCI_FDO_EXTENSION DeviceExtension
00634 );
00635 
00636 NTSTATUS
00637 NTAPI
00638 PciFdoIrpRemoveDevice(
00639     IN PIRP Irp,
00640     IN PIO_STACK_LOCATION IoStackLocation,
00641     IN PPCI_FDO_EXTENSION DeviceExtension
00642 );
00643 
00644 NTSTATUS
00645 NTAPI
00646 PciFdoIrpCancelRemoveDevice(
00647     IN PIRP Irp,
00648     IN PIO_STACK_LOCATION IoStackLocation,
00649     IN PPCI_FDO_EXTENSION DeviceExtension
00650 );
00651 
00652 NTSTATUS
00653 NTAPI
00654 PciFdoIrpStopDevice(
00655     IN PIRP Irp,
00656     IN PIO_STACK_LOCATION IoStackLocation,
00657     IN PPCI_FDO_EXTENSION DeviceExtension
00658 );
00659 
00660 NTSTATUS
00661 NTAPI
00662 PciFdoIrpQueryStopDevice(
00663     IN PIRP Irp,
00664     IN PIO_STACK_LOCATION IoStackLocation,
00665     IN PPCI_FDO_EXTENSION DeviceExtension
00666 );
00667 
00668 NTSTATUS
00669 NTAPI
00670 PciFdoIrpCancelStopDevice(
00671     IN PIRP Irp,
00672     IN PIO_STACK_LOCATION IoStackLocation,
00673     IN PPCI_FDO_EXTENSION DeviceExtension
00674 );
00675 
00676 NTSTATUS
00677 NTAPI
00678 PciFdoIrpQueryDeviceRelations(
00679     IN PIRP Irp,
00680     IN PIO_STACK_LOCATION IoStackLocation,
00681     IN PPCI_FDO_EXTENSION DeviceExtension
00682 );
00683 
00684 NTSTATUS
00685 NTAPI
00686 PciFdoIrpQueryInterface(
00687     IN PIRP Irp,
00688     IN PIO_STACK_LOCATION IoStackLocation,
00689     IN PPCI_FDO_EXTENSION DeviceExtension
00690 );
00691 
00692 NTSTATUS
00693 NTAPI
00694 PciFdoIrpQueryCapabilities(
00695     IN PIRP Irp,
00696     IN PIO_STACK_LOCATION IoStackLocation,
00697     IN PPCI_FDO_EXTENSION DeviceExtension
00698 );
00699 
00700 NTSTATUS
00701 NTAPI
00702 PciFdoIrpDeviceUsageNotification(
00703     IN PIRP Irp,
00704     IN PIO_STACK_LOCATION IoStackLocation,
00705     IN PPCI_FDO_EXTENSION DeviceExtension
00706 );
00707 
00708 NTSTATUS
00709 NTAPI
00710 PciFdoIrpSurpriseRemoval(
00711     IN PIRP Irp,
00712     IN PIO_STACK_LOCATION IoStackLocation,
00713     IN PPCI_FDO_EXTENSION DeviceExtension
00714 );
00715 
00716 NTSTATUS
00717 NTAPI
00718 PciFdoIrpQueryLegacyBusInformation(
00719     IN PIRP Irp,
00720     IN PIO_STACK_LOCATION IoStackLocation,
00721     IN PPCI_FDO_EXTENSION DeviceExtension
00722 );
00723 
00724 //
00725 // Device PDO Routines
00726 //
00727 NTSTATUS
00728 NTAPI
00729 PciPdoCreate(
00730     IN PPCI_FDO_EXTENSION DeviceExtension,
00731     IN PCI_SLOT_NUMBER Slot,
00732     OUT PDEVICE_OBJECT *PdoDeviceObject
00733 );
00734 
00735 NTSTATUS
00736 NTAPI
00737 PciPdoWaitWake(
00738     IN PIRP Irp,
00739     IN PIO_STACK_LOCATION IoStackLocation,
00740     IN PPCI_PDO_EXTENSION DeviceExtension
00741 );
00742 
00743 NTSTATUS
00744 NTAPI
00745 PciPdoSetPowerState(
00746     IN PIRP Irp,
00747     IN PIO_STACK_LOCATION IoStackLocation,
00748     IN PPCI_PDO_EXTENSION DeviceExtension
00749 );
00750 
00751 NTSTATUS
00752 NTAPI
00753 PciPdoIrpQueryPower(
00754     IN PIRP Irp,
00755     IN PIO_STACK_LOCATION IoStackLocation,
00756     IN PPCI_PDO_EXTENSION DeviceExtension
00757 );
00758 
00759 NTSTATUS
00760 NTAPI
00761 PciPdoIrpStartDevice(
00762     IN PIRP Irp,
00763     IN PIO_STACK_LOCATION IoStackLocation,
00764     IN PPCI_PDO_EXTENSION DeviceExtension
00765 );
00766 
00767 NTSTATUS
00768 NTAPI
00769 PciPdoIrpQueryRemoveDevice(
00770     IN PIRP Irp,
00771     IN PIO_STACK_LOCATION IoStackLocation,
00772     IN PPCI_PDO_EXTENSION DeviceExtension
00773 );
00774 
00775 NTSTATUS
00776 NTAPI
00777 PciPdoIrpRemoveDevice(
00778     IN PIRP Irp,
00779     IN PIO_STACK_LOCATION IoStackLocation,
00780     IN PPCI_PDO_EXTENSION DeviceExtension
00781 );
00782 
00783 NTSTATUS
00784 NTAPI
00785 PciPdoIrpCancelRemoveDevice(
00786     IN PIRP Irp,
00787     IN PIO_STACK_LOCATION IoStackLocation,
00788     IN PPCI_PDO_EXTENSION DeviceExtension
00789 );
00790 
00791 NTSTATUS
00792 NTAPI
00793 PciPdoIrpStopDevice(
00794     IN PIRP Irp,
00795     IN PIO_STACK_LOCATION IoStackLocation,
00796     IN PPCI_PDO_EXTENSION DeviceExtension
00797 );
00798 
00799 NTSTATUS
00800 NTAPI
00801 PciPdoIrpQueryStopDevice(
00802     IN PIRP Irp,
00803     IN PIO_STACK_LOCATION IoStackLocation,
00804     IN PPCI_PDO_EXTENSION DeviceExtension
00805 );
00806 
00807 NTSTATUS
00808 NTAPI
00809 PciPdoIrpCancelStopDevice(
00810     IN PIRP Irp,
00811     IN PIO_STACK_LOCATION IoStackLocation,
00812     IN PPCI_PDO_EXTENSION DeviceExtension
00813 );
00814 
00815 NTSTATUS
00816 NTAPI
00817 PciPdoIrpQueryDeviceRelations(
00818     IN PIRP Irp,
00819     IN PIO_STACK_LOCATION IoStackLocation,
00820     IN PPCI_PDO_EXTENSION DeviceExtension
00821 );
00822 
00823 NTSTATUS
00824 NTAPI
00825 PciPdoIrpQueryInterface(
00826     IN PIRP Irp,
00827     IN PIO_STACK_LOCATION IoStackLocation,
00828     IN PPCI_PDO_EXTENSION DeviceExtension
00829 );
00830 
00831 NTSTATUS
00832 NTAPI
00833 PciPdoIrpQueryCapabilities(
00834     IN PIRP Irp,
00835     IN PIO_STACK_LOCATION IoStackLocation,
00836     IN PPCI_PDO_EXTENSION DeviceExtension
00837 );
00838 
00839 NTSTATUS
00840 NTAPI
00841 PciPdoIrpQueryResources(
00842     IN PIRP Irp,
00843     IN PIO_STACK_LOCATION IoStackLocation,
00844     IN PPCI_PDO_EXTENSION DeviceExtension
00845 );
00846 
00847 NTSTATUS
00848 NTAPI
00849 PciPdoIrpQueryResourceRequirements(
00850     IN PIRP Irp,
00851     IN PIO_STACK_LOCATION IoStackLocation,
00852     IN PPCI_PDO_EXTENSION DeviceExtension
00853 );
00854 
00855 NTSTATUS
00856 NTAPI
00857 PciPdoIrpQueryDeviceText(
00858     IN PIRP Irp,
00859     IN PIO_STACK_LOCATION IoStackLocation,
00860     IN PPCI_PDO_EXTENSION DeviceExtension
00861 );
00862 
00863 NTSTATUS
00864 NTAPI
00865 PciPdoIrpReadConfig(
00866     IN PIRP Irp,
00867     IN PIO_STACK_LOCATION IoStackLocation,
00868     IN PPCI_PDO_EXTENSION DeviceExtension
00869 );
00870 
00871 NTSTATUS
00872 NTAPI
00873 PciPdoIrpWriteConfig(
00874     IN PIRP Irp,
00875     IN PIO_STACK_LOCATION IoStackLocation,
00876     IN PPCI_PDO_EXTENSION DeviceExtension
00877 );
00878 
00879 NTSTATUS
00880 NTAPI
00881 PciPdoIrpQueryId(
00882     IN PIRP Irp,
00883     IN PIO_STACK_LOCATION IoStackLocation,
00884     IN PPCI_PDO_EXTENSION DeviceExtension
00885 );
00886 
00887 NTSTATUS
00888 NTAPI
00889 PciPdoIrpQueryDeviceState(
00890     IN PIRP Irp,
00891     IN PIO_STACK_LOCATION IoStackLocation,
00892     IN PPCI_PDO_EXTENSION DeviceExtension
00893 );
00894 
00895 NTSTATUS
00896 NTAPI
00897 PciPdoIrpQueryBusInformation(
00898     IN PIRP Irp,
00899     IN PIO_STACK_LOCATION IoStackLocation,
00900     IN PPCI_PDO_EXTENSION DeviceExtension
00901 );
00902 
00903 NTSTATUS
00904 NTAPI
00905 PciPdoIrpDeviceUsageNotification(
00906     IN PIRP Irp,
00907     IN PIO_STACK_LOCATION IoStackLocation,
00908     IN PPCI_PDO_EXTENSION DeviceExtension
00909 );
00910 
00911 NTSTATUS
00912 NTAPI
00913 PciPdoIrpSurpriseRemoval(
00914     IN PIRP Irp,
00915     IN PIO_STACK_LOCATION IoStackLocation,
00916     IN PPCI_PDO_EXTENSION DeviceExtension
00917 );
00918 
00919 NTSTATUS
00920 NTAPI
00921 PciPdoIrpQueryLegacyBusInformation(
00922     IN PIRP Irp,
00923     IN PIO_STACK_LOCATION IoStackLocation,
00924     IN PPCI_PDO_EXTENSION DeviceExtension
00925 );
00926 
00927 
00928 //
00929 // HAL Callback/Hook Routines
00930 //
00931 VOID
00932 NTAPI
00933 PciHookHal(
00934     VOID
00935 );
00936 
00937 //
00938 // PCI Verifier Routines
00939 //
00940 VOID
00941 NTAPI
00942 PciVerifierInit(
00943     IN PDRIVER_OBJECT DriverObject
00944 );
00945 
00946 PPCI_VERIFIER_DATA
00947 NTAPI
00948 PciVerifierRetrieveFailureData(
00949     IN ULONG FailureCode
00950 );
00951 
00952 //
00953 // Utility Routines
00954 //
00955 BOOLEAN
00956 NTAPI
00957 PciStringToUSHORT(
00958     IN PWCHAR String,
00959     OUT PUSHORT Value
00960 );
00961 
00962 BOOLEAN
00963 NTAPI
00964 PciIsDatacenter(
00965     VOID
00966 );
00967 
00968 NTSTATUS
00969 NTAPI
00970 PciBuildDefaultExclusionLists(
00971     VOID
00972 );
00973 
00974 BOOLEAN
00975 NTAPI
00976 PciUnicodeStringStrStr(
00977     IN PUNICODE_STRING InputString,
00978     IN PCUNICODE_STRING EqualString,
00979     IN BOOLEAN CaseInSensitive
00980 );
00981 
00982 BOOLEAN
00983 NTAPI
00984 PciOpenKey(
00985     IN PWCHAR KeyName,
00986     IN HANDLE RootKey,
00987     IN ACCESS_MASK DesiredAccess,
00988     OUT PHANDLE KeyHandle,
00989     OUT PNTSTATUS KeyStatus
00990 );
00991 
00992 NTSTATUS
00993 NTAPI
00994 PciGetRegistryValue(
00995     IN PWCHAR ValueName,
00996     IN PWCHAR KeyName,
00997     IN HANDLE RootHandle,
00998     IN ULONG Type,
00999     OUT PVOID *OutputBuffer,
01000     OUT PULONG OutputLength
01001 );
01002 
01003 PPCI_FDO_EXTENSION
01004 NTAPI
01005 PciFindParentPciFdoExtension(
01006     IN PDEVICE_OBJECT DeviceObject,
01007     IN PKEVENT Lock
01008 );
01009 
01010 VOID
01011 NTAPI
01012 PciInsertEntryAtTail(
01013     IN PSINGLE_LIST_ENTRY ListHead,
01014     IN PPCI_FDO_EXTENSION DeviceExtension,
01015     IN PKEVENT Lock
01016 );
01017 
01018 NTSTATUS
01019 NTAPI
01020 PciGetDeviceProperty(
01021     IN PDEVICE_OBJECT DeviceObject,
01022     IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
01023     OUT PVOID *OutputBuffer
01024 );
01025 
01026 NTSTATUS
01027 NTAPI
01028 PciSendIoctl(
01029     IN PDEVICE_OBJECT DeviceObject,
01030     IN ULONG IoControlCode,
01031     IN PVOID InputBuffer,
01032     IN ULONG InputBufferLength,
01033     IN PVOID OutputBuffer,
01034     IN ULONG OutputBufferLength
01035 );
01036 
01037 VOID
01038 NTAPI
01039 PcipLinkSecondaryExtension(
01040     IN PSINGLE_LIST_ENTRY List,
01041     IN PVOID Lock,
01042     IN PPCI_SECONDARY_EXTENSION SecondaryExtension,
01043     IN PCI_SIGNATURE ExtensionType,
01044     IN PVOID Destructor
01045 );
01046 
01047 PPCI_SECONDARY_EXTENSION
01048 NTAPI
01049 PciFindNextSecondaryExtension(
01050     IN PSINGLE_LIST_ENTRY ListHead,
01051     IN PCI_SIGNATURE ExtensionType
01052 );
01053 
01054 ULONGLONG
01055 NTAPI
01056 PciGetHackFlags(
01057     IN USHORT VendorId,
01058     IN USHORT DeviceId,
01059     IN USHORT SubVendorId,
01060     IN USHORT SubSystemId,
01061     IN UCHAR RevisionId
01062 );
01063 
01064 PPCI_PDO_EXTENSION
01065 NTAPI
01066 PciFindPdoByFunction(
01067     IN PPCI_FDO_EXTENSION DeviceExtension,
01068     IN ULONG FunctionNumber,
01069     IN PPCI_COMMON_HEADER PciData
01070 );
01071 
01072 BOOLEAN
01073 NTAPI
01074 PciIsCriticalDeviceClass(
01075     IN UCHAR BaseClass,
01076     IN UCHAR SubClass
01077 );
01078 
01079 BOOLEAN
01080 NTAPI
01081 PciIsDeviceOnDebugPath(
01082     IN PPCI_PDO_EXTENSION DeviceExtension
01083 );
01084 
01085 NTSTATUS
01086 NTAPI
01087 PciGetBiosConfig(
01088     IN PPCI_PDO_EXTENSION DeviceExtension,
01089     OUT PPCI_COMMON_HEADER PciData
01090 );
01091 
01092 NTSTATUS
01093 NTAPI
01094 PciSaveBiosConfig(
01095     IN PPCI_PDO_EXTENSION DeviceExtension,
01096     OUT PPCI_COMMON_HEADER PciData
01097 );
01098 
01099 UCHAR
01100 NTAPI
01101 PciReadDeviceCapability(
01102     IN PPCI_PDO_EXTENSION DeviceExtension,
01103     IN UCHAR Offset,
01104     IN ULONG CapabilityId,
01105     OUT PPCI_CAPABILITIES_HEADER Buffer,
01106     IN ULONG Length
01107 );
01108 
01109 BOOLEAN
01110 NTAPI
01111 PciCanDisableDecodes(
01112     IN PPCI_PDO_EXTENSION DeviceExtension,
01113     IN PPCI_COMMON_HEADER Config,
01114     IN ULONGLONG HackFlags,
01115     IN BOOLEAN ForPowerDown
01116 );
01117 
01118 PCI_DEVICE_TYPES
01119 NTAPI
01120 PciClassifyDeviceType(
01121     IN PPCI_PDO_EXTENSION PdoExtension
01122 );
01123 
01124 ULONG_PTR
01125 NTAPI
01126 PciExecuteCriticalSystemRoutine(
01127     IN ULONG_PTR IpiContext
01128 );
01129 
01130 BOOLEAN
01131 NTAPI
01132 PciCreateIoDescriptorFromBarLimit(
01133     PIO_RESOURCE_DESCRIPTOR ResourceDescriptor,
01134     IN PULONG BarArray,
01135     IN BOOLEAN Rom
01136 );
01137 
01138 BOOLEAN
01139 NTAPI
01140 PciIsSlotPresentInParentMethod(
01141     IN PPCI_PDO_EXTENSION PdoExtension,
01142     IN ULONG Method
01143 );
01144 
01145 VOID
01146 NTAPI
01147 PciDecodeEnable(
01148     IN PPCI_PDO_EXTENSION PdoExtension,
01149     IN BOOLEAN Enable,
01150     OUT PUSHORT Command
01151 );
01152 
01153 NTSTATUS
01154 NTAPI
01155 PciQueryBusInformation(
01156     IN PPCI_PDO_EXTENSION PdoExtension,
01157     IN PPNP_BUS_INFORMATION* Buffer
01158 );
01159 
01160 NTSTATUS
01161 NTAPI
01162 PciQueryCapabilities(
01163     IN PPCI_PDO_EXTENSION PdoExtension,
01164     IN OUT PDEVICE_CAPABILITIES DeviceCapability
01165 );
01166 
01167 PCM_PARTIAL_RESOURCE_DESCRIPTOR
01168 NTAPI
01169 PciNextPartialDescriptor(
01170     PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor
01171 );
01172 
01173 //
01174 // Configuration Routines
01175 //
01176 NTSTATUS
01177 NTAPI
01178 PciGetConfigHandlers(
01179     IN PPCI_FDO_EXTENSION FdoExtension
01180 );
01181 
01182 VOID
01183 NTAPI
01184 PciReadSlotConfig(
01185     IN PPCI_FDO_EXTENSION DeviceExtension,
01186     IN PCI_SLOT_NUMBER Slot,
01187     IN PVOID Buffer,
01188     IN ULONG Offset,
01189     IN ULONG Length
01190 );
01191 
01192 VOID
01193 NTAPI
01194 PciWriteDeviceConfig(
01195     IN PPCI_PDO_EXTENSION DeviceExtension,
01196     IN PVOID Buffer,
01197     IN ULONG Offset,
01198     IN ULONG Length
01199 );
01200 
01201 VOID
01202 NTAPI
01203 PciReadDeviceConfig(
01204     IN PPCI_PDO_EXTENSION DeviceExtension,
01205     IN PVOID Buffer,
01206     IN ULONG Offset,
01207     IN ULONG Length
01208 );
01209 
01210 UCHAR
01211 NTAPI
01212 PciGetAdjustedInterruptLine(
01213     IN PPCI_PDO_EXTENSION PdoExtension
01214 );
01215 
01216 //
01217 // State Machine Logic Transition Routines
01218 //
01219 VOID
01220 NTAPI
01221 PciInitializeState(
01222     IN PPCI_FDO_EXTENSION DeviceExtension
01223 );
01224 
01225 NTSTATUS
01226 NTAPI
01227 PciBeginStateTransition(
01228     IN PPCI_FDO_EXTENSION DeviceExtension,
01229     IN PCI_STATE NewState
01230 );
01231 
01232 NTSTATUS
01233 NTAPI
01234 PciCancelStateTransition(
01235     IN PPCI_FDO_EXTENSION DeviceExtension,
01236     IN PCI_STATE NewState
01237 );
01238 
01239 VOID
01240 NTAPI
01241 PciCommitStateTransition(
01242     IN PPCI_FDO_EXTENSION DeviceExtension,
01243     IN PCI_STATE NewState
01244 );
01245 
01246 //
01247 // Arbiter Support
01248 //
01249 NTSTATUS
01250 NTAPI
01251 PciInitializeArbiters(
01252     IN PPCI_FDO_EXTENSION FdoExtension
01253 );
01254 
01255 NTSTATUS
01256 NTAPI
01257 PciInitializeArbiterRanges(
01258     IN PPCI_FDO_EXTENSION DeviceExtension,
01259     IN PCM_RESOURCE_LIST Resources
01260 );
01261 
01262 //
01263 // Debug Helpers
01264 //
01265 BOOLEAN
01266 NTAPI
01267 PciDebugIrpDispatchDisplay(
01268     IN PIO_STACK_LOCATION IoStackLocation,
01269     IN PPCI_FDO_EXTENSION DeviceExtension,
01270     IN USHORT MaxMinor
01271 );
01272 
01273 VOID
01274 NTAPI
01275 PciDebugDumpCommonConfig(
01276     IN PPCI_COMMON_HEADER PciData
01277 );
01278 
01279 VOID
01280 NTAPI
01281 PciDebugDumpQueryCapabilities(
01282     IN PDEVICE_CAPABILITIES DeviceCaps
01283 );
01284 
01285 VOID
01286 NTAPI
01287 PciDebugPrintIoResReqList(
01288     IN PIO_RESOURCE_REQUIREMENTS_LIST Requirements
01289 );
01290 
01291 VOID
01292 NTAPI
01293 PciDebugPrintCmResList(
01294     IN PCM_RESOURCE_LIST ResourceList
01295 );
01296 
01297 VOID
01298 NTAPI
01299 PciDebugPrintPartialResource(
01300     IN PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialResource
01301 );
01302 
01303 //
01304 // Interface Support
01305 //
01306 NTSTATUS
01307 NTAPI
01308 PciQueryInterface(
01309     IN PPCI_FDO_EXTENSION DeviceExtension,
01310     IN CONST GUID* InterfaceType,
01311     IN ULONG Size,
01312     IN ULONG Version,
01313     IN PVOID InterfaceData,
01314     IN PINTERFACE Interface,
01315     IN BOOLEAN LastChance
01316 );
01317 
01318 NTSTATUS
01319 NTAPI
01320 PciPmeInterfaceInitializer(
01321     IN PVOID Instance
01322 );
01323 
01324 NTSTATUS
01325 NTAPI
01326 routeintrf_Initializer(
01327     IN PVOID Instance
01328 );
01329 
01330 NTSTATUS
01331 NTAPI
01332 arbusno_Initializer(
01333     IN PVOID Instance
01334 );
01335 
01336 NTSTATUS
01337 NTAPI
01338 agpintrf_Initializer(
01339     IN PVOID Instance
01340 );
01341 
01342 NTSTATUS
01343 NTAPI
01344 tranirq_Initializer(
01345     IN PVOID Instance
01346 );
01347 
01348 NTSTATUS
01349 NTAPI
01350 busintrf_Initializer(
01351     IN PVOID Instance
01352 );
01353 
01354 NTSTATUS
01355 NTAPI
01356 armem_Initializer(
01357     IN PVOID Instance
01358 );
01359 
01360 NTSTATUS
01361 NTAPI
01362 ario_Initializer(
01363     IN PVOID Instance
01364 );
01365 
01366 NTSTATUS
01367 NTAPI
01368 locintrf_Initializer(
01369     IN PVOID Instance
01370 );
01371 
01372 NTSTATUS
01373 NTAPI
01374 pcicbintrf_Initializer(
01375     IN PVOID Instance
01376 );
01377 
01378 NTSTATUS
01379 NTAPI
01380 lddintrf_Initializer(
01381     IN PVOID Instance
01382 );
01383 
01384 NTSTATUS
01385 NTAPI
01386 devpresent_Initializer(
01387     IN PVOID Instance
01388 );
01389 
01390 NTSTATUS
01391 NTAPI
01392 agpintrf_Constructor(
01393     IN PVOID DeviceExtension,
01394     IN PVOID Instance,
01395     IN PVOID InterfaceData,
01396     IN USHORT Version,
01397     IN USHORT Size,
01398     IN PINTERFACE Interface
01399 );
01400 
01401 NTSTATUS
01402 NTAPI
01403 arbusno_Constructor(
01404     IN PVOID DeviceExtension,
01405     IN PVOID Instance,
01406     IN PVOID InterfaceData,
01407     IN USHORT Version,
01408     IN USHORT Size,
01409     IN PINTERFACE Interface
01410 );
01411 
01412 NTSTATUS
01413 NTAPI
01414 tranirq_Constructor(
01415     IN PVOID DeviceExtension,
01416     IN PVOID Instance,
01417     IN PVOID InterfaceData,
01418     IN USHORT Version,
01419     IN USHORT Size,
01420     IN PINTERFACE Interface
01421 );
01422 
01423 NTSTATUS
01424 NTAPI
01425 armem_Constructor(
01426     IN PVOID DeviceExtension,
01427     IN PVOID Instance,
01428     IN PVOID InterfaceData,
01429     IN USHORT Version,
01430     IN USHORT Size,
01431     IN PINTERFACE Interface
01432 );
01433 
01434 NTSTATUS
01435 NTAPI
01436 busintrf_Constructor(
01437     IN PVOID DeviceExtension,
01438     IN PVOID Instance,
01439     IN PVOID InterfaceData,
01440     IN USHORT Version,
01441     IN USHORT Size,
01442     IN PINTERFACE Interface
01443 );
01444 
01445 NTSTATUS
01446 NTAPI
01447 ario_Constructor(
01448     IN PVOID DeviceExtension,
01449     IN PVOID Instance,
01450     IN PVOID InterfaceData,
01451     IN USHORT Version,
01452     IN USHORT Size,
01453     IN PINTERFACE Interface
01454 );
01455 
01456 VOID
01457 NTAPI
01458 ario_ApplyBrokenVideoHack(
01459     IN PPCI_FDO_EXTENSION FdoExtension
01460 );
01461 
01462 NTSTATUS
01463 NTAPI
01464 pcicbintrf_Constructor(
01465     IN PVOID DeviceExtension,
01466     IN PVOID Instance,
01467     IN PVOID InterfaceData,
01468     IN USHORT Version,
01469     IN USHORT Size,
01470     IN PINTERFACE Interface
01471 );
01472 
01473 NTSTATUS
01474 NTAPI
01475 lddintrf_Constructor(
01476     IN PVOID DeviceExtension,
01477     IN PVOID Instance,
01478     IN PVOID InterfaceData,
01479     IN USHORT Version,
01480     IN USHORT Size,
01481     IN PINTERFACE Interface
01482 );
01483 
01484 NTSTATUS
01485 NTAPI
01486 locintrf_Constructor(
01487     IN PVOID DeviceExtension,
01488     IN PVOID Instance,
01489     IN PVOID InterfaceData,
01490     IN USHORT Version,
01491     IN USHORT Size,
01492     IN PINTERFACE Interface
01493 );
01494 
01495 NTSTATUS
01496 NTAPI
01497 PciPmeInterfaceConstructor(
01498     IN PVOID DeviceExtension,
01499     IN PVOID Instance,
01500     IN PVOID InterfaceData,
01501     IN USHORT Version,
01502     IN USHORT Size,
01503     IN PINTERFACE Interface
01504 );
01505 
01506 NTSTATUS
01507 NTAPI
01508 routeintrf_Constructor(
01509     IN PVOID DeviceExtension,
01510     IN PVOID Instance,
01511     IN PVOID InterfaceData,
01512     IN USHORT Version,
01513     IN USHORT Size,
01514     IN PINTERFACE Interface
01515 );
01516 
01517 NTSTATUS
01518 NTAPI
01519 devpresent_Constructor(
01520     IN PVOID DeviceExtension,
01521     IN PVOID Instance,
01522     IN PVOID InterfaceData,
01523     IN USHORT Version,
01524     IN USHORT Size,
01525     IN PINTERFACE Interface
01526 );
01527 
01528 //
01529 // PCI Enumeration and Resources
01530 //
01531 NTSTATUS
01532 NTAPI
01533 PciQueryDeviceRelations(
01534     IN PPCI_FDO_EXTENSION DeviceExtension,
01535     IN OUT PDEVICE_RELATIONS *pDeviceRelations
01536 );
01537 
01538 NTSTATUS
01539 NTAPI
01540 PciQueryResources(
01541     IN PPCI_PDO_EXTENSION PdoExtension,
01542     OUT PCM_RESOURCE_LIST *Buffer
01543 );
01544 
01545 NTSTATUS
01546 NTAPI
01547 PciQueryTargetDeviceRelations(
01548     IN PPCI_PDO_EXTENSION PdoExtension,
01549     IN OUT PDEVICE_RELATIONS *pDeviceRelations
01550 );
01551 
01552 NTSTATUS
01553 NTAPI
01554 PciQueryEjectionRelations(
01555     IN PPCI_PDO_EXTENSION PdoExtension,
01556     IN OUT PDEVICE_RELATIONS *pDeviceRelations
01557 );
01558 
01559 NTSTATUS
01560 NTAPI
01561 PciQueryRequirements(
01562     IN PPCI_PDO_EXTENSION PdoExtension,
01563     IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *RequirementsList
01564 );
01565 
01566 BOOLEAN
01567 NTAPI
01568 PciComputeNewCurrentSettings(
01569     IN PPCI_PDO_EXTENSION PdoExtension,
01570     IN PCM_RESOURCE_LIST ResourceList
01571 );
01572 
01573 NTSTATUS
01574 NTAPI
01575 PciSetResources(
01576     IN PPCI_PDO_EXTENSION PdoExtension,
01577     IN BOOLEAN DoReset,
01578     IN BOOLEAN SomethingSomethingDarkSide
01579 );
01580 
01581 NTSTATUS
01582 NTAPI
01583 PciBuildRequirementsList(
01584     IN PPCI_PDO_EXTENSION PdoExtension,
01585     IN PPCI_COMMON_HEADER PciData,
01586     OUT PIO_RESOURCE_REQUIREMENTS_LIST* Buffer
01587 );
01588 
01589 //
01590 // Identification Functions
01591 //
01592 PWCHAR
01593 NTAPI
01594 PciGetDeviceDescriptionMessage(
01595     IN UCHAR BaseClass,
01596     IN UCHAR SubClass
01597 );
01598 
01599 NTSTATUS
01600 NTAPI
01601 PciQueryDeviceText(
01602     IN PPCI_PDO_EXTENSION PdoExtension,
01603     IN DEVICE_TEXT_TYPE QueryType,
01604     IN ULONG Locale,
01605     OUT PWCHAR *Buffer
01606 );
01607 
01608 NTSTATUS
01609 NTAPI
01610 PciQueryId(
01611     IN PPCI_PDO_EXTENSION DeviceExtension,
01612     IN BUS_QUERY_ID_TYPE QueryType,
01613     OUT PWCHAR *Buffer
01614 );
01615 
01616 //
01617 // CardBUS Support
01618 //
01619 VOID
01620 NTAPI
01621 Cardbus_MassageHeaderForLimitsDetermination(
01622     IN PPCI_CONFIGURATOR_CONTEXT Context
01623 );
01624 
01625 VOID
01626 NTAPI
01627 Cardbus_SaveCurrentSettings(
01628     IN PPCI_CONFIGURATOR_CONTEXT Context
01629 );
01630 
01631 VOID
01632 NTAPI
01633 Cardbus_SaveLimits(
01634     IN PPCI_CONFIGURATOR_CONTEXT Context
01635 );
01636 
01637 VOID
01638 NTAPI
01639 Cardbus_RestoreCurrent(
01640     IN PPCI_CONFIGURATOR_CONTEXT Context
01641 );
01642 
01643 VOID
01644 NTAPI
01645 Cardbus_GetAdditionalResourceDescriptors(
01646     IN PPCI_CONFIGURATOR_CONTEXT Context,
01647     IN PPCI_COMMON_HEADER PciData,
01648     IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
01649 );
01650 
01651 VOID
01652 NTAPI
01653 Cardbus_ResetDevice(
01654     IN PPCI_PDO_EXTENSION PdoExtension,
01655     IN PPCI_COMMON_HEADER PciData
01656 );
01657 
01658 VOID
01659 NTAPI
01660 Cardbus_ChangeResourceSettings(
01661     IN PPCI_PDO_EXTENSION PdoExtension,
01662     IN PPCI_COMMON_HEADER PciData
01663 );
01664 
01665 //
01666 // PCI Device Support
01667 //
01668 VOID
01669 NTAPI
01670 Device_MassageHeaderForLimitsDetermination(
01671     IN PPCI_CONFIGURATOR_CONTEXT Context
01672 );
01673 
01674 VOID
01675 NTAPI
01676 Device_SaveCurrentSettings(
01677     IN PPCI_CONFIGURATOR_CONTEXT Context
01678 );
01679 
01680 VOID
01681 NTAPI
01682 Device_SaveLimits(
01683     IN PPCI_CONFIGURATOR_CONTEXT Context
01684 );
01685 
01686 VOID
01687 NTAPI
01688 Device_RestoreCurrent(
01689     IN PPCI_CONFIGURATOR_CONTEXT Context
01690 );
01691 
01692 VOID
01693 NTAPI
01694 Device_GetAdditionalResourceDescriptors(
01695     IN PPCI_CONFIGURATOR_CONTEXT Context,
01696     IN PPCI_COMMON_HEADER PciData,
01697     IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
01698 );
01699 
01700 VOID
01701 NTAPI
01702 Device_ResetDevice(
01703     IN PPCI_PDO_EXTENSION PdoExtension,
01704     IN PPCI_COMMON_HEADER PciData
01705 );
01706 
01707 VOID
01708 NTAPI
01709 Device_ChangeResourceSettings(
01710     IN PPCI_PDO_EXTENSION PdoExtension,
01711     IN PPCI_COMMON_HEADER PciData
01712 );
01713 
01714 //
01715 // PCI-to-PCI Bridge Device Support
01716 //
01717 VOID
01718 NTAPI
01719 PPBridge_MassageHeaderForLimitsDetermination(
01720     IN PPCI_CONFIGURATOR_CONTEXT Context
01721 );
01722 
01723 VOID
01724 NTAPI
01725 PPBridge_SaveCurrentSettings(
01726     IN PPCI_CONFIGURATOR_CONTEXT Context
01727 );
01728 
01729 VOID
01730 NTAPI
01731 PPBridge_SaveLimits(
01732     IN PPCI_CONFIGURATOR_CONTEXT Context
01733 );
01734 
01735 VOID
01736 NTAPI
01737 PPBridge_RestoreCurrent(
01738     IN PPCI_CONFIGURATOR_CONTEXT Context
01739 );
01740 
01741 VOID
01742 NTAPI
01743 PPBridge_GetAdditionalResourceDescriptors(
01744     IN PPCI_CONFIGURATOR_CONTEXT Context,
01745     IN PPCI_COMMON_HEADER PciData,
01746     IN PIO_RESOURCE_DESCRIPTOR IoDescriptor
01747 );
01748 
01749 VOID
01750 NTAPI
01751 PPBridge_ResetDevice(
01752     IN PPCI_PDO_EXTENSION PdoExtension,
01753     IN PPCI_COMMON_HEADER PciData
01754 );
01755 
01756 VOID
01757 NTAPI
01758 PPBridge_ChangeResourceSettings(
01759     IN PPCI_PDO_EXTENSION PdoExtension,
01760     IN PPCI_COMMON_HEADER PciData
01761 );
01762 
01763 //
01764 // Bus Number Routines
01765 //
01766 BOOLEAN
01767 NTAPI
01768 PciAreBusNumbersConfigured(
01769     IN PPCI_PDO_EXTENSION PdoExtension
01770 );
01771 
01772 //
01773 // Routine Interface
01774 //
01775 NTSTATUS
01776 NTAPI
01777 PciCacheLegacyDeviceRouting(
01778     IN PDEVICE_OBJECT DeviceObject,
01779     IN ULONG BusNumber,
01780     IN ULONG SlotNumber,
01781     IN UCHAR InterruptLine, 
01782     IN UCHAR InterruptPin, 
01783     IN UCHAR BaseClass, 
01784     IN UCHAR SubClass, 
01785     IN PDEVICE_OBJECT PhysicalDeviceObject,
01786     IN PPCI_PDO_EXTENSION PdoExtension,
01787     OUT PDEVICE_OBJECT *pFoundDeviceObject
01788 );
01789 
01790 //
01791 // External Resources
01792 //
01793 extern SINGLE_LIST_ENTRY PciFdoExtensionListHead;
01794 extern KEVENT PciGlobalLock;
01795 extern PPCI_INTERFACE PciInterfaces[];
01796 extern PCI_INTERFACE ArbiterInterfaceBusNumber;
01797 extern PCI_INTERFACE ArbiterInterfaceMemory;
01798 extern PCI_INTERFACE ArbiterInterfaceIo;
01799 extern PCI_INTERFACE BusHandlerInterface;
01800 extern PCI_INTERFACE PciRoutingInterface;
01801 extern PCI_INTERFACE PciCardbusPrivateInterface;
01802 extern PCI_INTERFACE PciLegacyDeviceDetectionInterface;
01803 extern PCI_INTERFACE PciPmeInterface;
01804 extern PCI_INTERFACE PciDevicePresentInterface;
01805 //extern PCI_INTERFACE PciNativeIdeInterface;
01806 extern PCI_INTERFACE PciLocationInterface;
01807 extern PCI_INTERFACE AgpTargetInterface;
01808 extern PCI_INTERFACE TranslatorInterfaceInterrupt;
01809 extern PDRIVER_OBJECT PciDriverObject;
01810 extern PWATCHDOG_TABLE WdTable;
01811 extern PPCI_HACK_ENTRY PciHackTable;
01812 extern BOOLEAN PciAssignBusNumbers;
01813 extern BOOLEAN PciEnableNativeModeATA;
01814 extern PPCI_IRQ_ROUTING_TABLE PciIrqRoutingTable;
01815 extern BOOLEAN PciRunningDatacenter;
01816 
01817 /* Exported by NTOS, should this go in the NDK? */
01818 extern NTSYSAPI BOOLEAN InitSafeBootMode;
01819 
01820 /* EOF */

Generated on Sat May 26 2012 04:26:03 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.