Fix for code to handle IRP dispatching when unrecognized IRP (Thanks you sir_richard)
authorevb <evb@svn.reactos.org>
Fri, 16 Jul 2010 00:39:54 +0000 (00:39 +0000)
committerevb <evb@svn.reactos.org>
Fri, 16 Jul 2010 00:39:54 +0000 (00:39 +0000)
Add FDO IRP_MN_QUERY_INTERFACE support (it calls PciQueryInterface)
Add all PCI interface descriptor: PciLocationInterface (GUID_PNP_LOCATION_INTERFACE), PciPmeInterface (GUID_PCI_PME_INTERFACE), PciCardbusPrivateInterface (GUID_PCI_CARDBUS_INTERFACE_PRIVATE), PciLegacyDeviceDetectionInterface (GUID_LEGACY_DEVICE_DETECTION_STANDARD), AgpTargetInterface (GUID_AGP_TARGET_BUS_INTERFACE_STANDARD), PciRoutingInterface (GUID_INT_ROUTE_INTERFACE_STANDARD), BusHandlerInterface (GUID_BUS_INTERFACE_STANDARD) and stub initializer and constructor.
Add missing devhere.c interface file
Add all PCI arbiter descritptor: ArbiterInterfaceBusNumber, ArbiterInterfaceMemory, ArbiterInterfaceIo. Write constructor stub but not handled ArbitersInitialized == TRUE
Also add last-resort PCI interface: TranslatorInterfaceInterrupt (GUID_TRANSLATOR_INTERFACE_STANDARD) and part implement tranirq_Constructor
Add PciQueryInterface to find correct FDO/PDO/ROOT interface for a request and call interface constructor
Fix interface signatures, fix interface constructor type and PCI_INTERFACE, add interface flags (Thanks sir_richard)
Fix Aribtriter code (Thanks sir_richard)
Now another 1200 codes added, soon time for enumeration code!

svn path=/trunk/; revision=48074

17 files changed:
reactos/drivers/bus/pcix/arb/ar_busno.c
reactos/drivers/bus/pcix/arb/ar_memio.c
reactos/drivers/bus/pcix/arb/arb_comn.c
reactos/drivers/bus/pcix/arb/tr_irq.c
reactos/drivers/bus/pcix/dispatch.c
reactos/drivers/bus/pcix/fdo.c
reactos/drivers/bus/pcix/intrface/agpintrf.c
reactos/drivers/bus/pcix/intrface/busintrf.c
reactos/drivers/bus/pcix/intrface/cardbus.c
reactos/drivers/bus/pcix/intrface/devhere.c [new file with mode: 0644]
reactos/drivers/bus/pcix/intrface/intrface.c
reactos/drivers/bus/pcix/intrface/lddintrf.c
reactos/drivers/bus/pcix/intrface/locintrf.c
reactos/drivers/bus/pcix/intrface/pmeintf.c
reactos/drivers/bus/pcix/intrface/routintf.c
reactos/drivers/bus/pcix/pci.h
reactos/drivers/bus/pcix/pcix.rbuild

index 5086357..dba5250 100644 (file)
 
 /* GLOBALS ********************************************************************/
 
 
 /* GLOBALS ********************************************************************/
 
+PCI_INTERFACE ArbiterInterfaceBusNumber =
+{
+    &GUID_ARBITER_INTERFACE_STANDARD,
+    sizeof(ARBITER_INTERFACE),
+    0,
+    0,
+    PCI_INTERFACE_FDO,
+    0,
+    PciArb_BusNumber,
+    arbusno_Constructor,
+    arbusno_Initializer
+};
+
 /* FUNCTIONS ******************************************************************/
 
 /* FUNCTIONS ******************************************************************/
 
+NTSTATUS
+NTAPI
+arbusno_Initializer(IN PVOID Instance)
+{
+    /* Not yet implemented */
+    UNIMPLEMENTED;
+    //while (TRUE);
+    return STATUS_SUCCESS;
+}
+
+NTSTATUS
+NTAPI
+arbusno_Constructor(IN PVOID DeviceExtension,
+                    IN PVOID PciInterface,
+                    IN PVOID InterfaceData,
+                    IN USHORT Version,
+                    IN USHORT Size,
+                    IN PINTERFACE Interface)
+{
+    PPCI_FDO_EXTENSION FdoExtension = (PPCI_FDO_EXTENSION)DeviceExtension;
+    NTSTATUS Status;
+    PAGED_CODE();
+
+    /* Make sure it's the expected interface */
+    if ((ULONG)InterfaceData != CmResourceTypeBusNumber)
+    {
+        /* Arbiter support must have been initialized first */
+        if (FdoExtension->ArbitersInitialized)
+        {
+            /* Not yet implemented */
+            UNIMPLEMENTED;
+            while (TRUE);
+        }
+        else
+        {
+            /* No arbiters for this FDO */
+            Status = STATUS_NOT_SUPPORTED;
+        }
+    }
+    else
+    {
+        /* Not the right interface */
+        Status = STATUS_INVALID_PARAMETER_5;
+    }
+
+    /* Return the status */
+    return Status;
+}
+
 /* EOF */
 /* EOF */
index 47d6e07..8b54453 100644 (file)
 
 /* GLOBALS ********************************************************************/
 
 
 /* GLOBALS ********************************************************************/
 
+PCI_INTERFACE ArbiterInterfaceMemory =
+{
+    &GUID_ARBITER_INTERFACE_STANDARD,
+    sizeof(ARBITER_INTERFACE),
+    0,
+    0,
+    PCI_INTERFACE_FDO,
+    0,
+    PciArb_Memory,
+    armem_Constructor,
+    armem_Initializer
+};
+
+PCI_INTERFACE ArbiterInterfaceIo =
+{
+    &GUID_ARBITER_INTERFACE_STANDARD,
+    sizeof(ARBITER_INTERFACE),
+    0,
+    0,
+    PCI_INTERFACE_FDO,
+    0,
+    PciArb_Io,
+    ario_Constructor,
+    ario_Initializer
+};
+
 /* FUNCTIONS ******************************************************************/
 
 /* FUNCTIONS ******************************************************************/
 
+NTSTATUS
+NTAPI
+ario_Initializer(IN PVOID Instance)
+{
+    /* Not yet implemented */
+    UNIMPLEMENTED;
+    //while (TRUE);
+    return STATUS_SUCCESS;
+}
+
+NTSTATUS
+NTAPI
+ario_Constructor(IN PVOID DeviceExtension,
+                 IN PVOID PciInterface,
+                 IN PVOID InterfaceData,
+                 IN USHORT Version,
+                 IN USHORT Size,
+                 IN PINTERFACE Interface)
+{
+    PPCI_FDO_EXTENSION FdoExtension = (PPCI_FDO_EXTENSION)DeviceExtension;
+    NTSTATUS Status;
+    PAGED_CODE();
+
+    /* Make sure it's the expected interface */
+    if ((ULONG)InterfaceData != CmResourceTypePort)
+    {
+        /* Arbiter support must have been initialized first */
+        if (FdoExtension->ArbitersInitialized)
+        {
+            /* Not yet implemented */
+            UNIMPLEMENTED;
+            while (TRUE);
+        }
+        else
+        {
+            /* No arbiters for this FDO */
+            Status = STATUS_NOT_SUPPORTED;
+        }
+    }
+    else
+    {
+        /* Not the right interface */
+        Status = STATUS_INVALID_PARAMETER_5;
+    }
+
+    /* Return the status */
+    return Status;
+}
+
+NTSTATUS
+NTAPI
+armem_Initializer(IN PVOID Instance)
+{
+    /* Not yet implemented */
+    UNIMPLEMENTED;
+    //while (TRUE);
+    return STATUS_SUCCESS;
+}
+
+NTSTATUS
+NTAPI
+armem_Constructor(IN PVOID DeviceExtension,
+                  IN PVOID PciInterface,
+                  IN PVOID InterfaceData,
+                  IN USHORT Version,
+                  IN USHORT Size,
+                  IN PINTERFACE Interface)
+{
+    PPCI_FDO_EXTENSION FdoExtension = (PPCI_FDO_EXTENSION)DeviceExtension;
+    NTSTATUS Status;
+    PAGED_CODE();
+
+    /* Make sure it's the expected interface */
+    if ((ULONG)InterfaceData != CmResourceTypeMemory)
+    {
+        /* Arbiter support must have been initialized first */
+        if (FdoExtension->ArbitersInitialized)
+        {
+            /* Not yet implemented */
+            UNIMPLEMENTED;
+            while (TRUE);
+        }
+        else
+        {
+            /* No arbiters for this FDO */
+            Status = STATUS_NOT_SUPPORTED;
+        }
+    }
+    else
+    {
+        /* Not the right interface */
+        Status = STATUS_INVALID_PARAMETER_5;
+    }
+
+    /* Return the status */
+    return Status;
+}
+
 /* EOF */
 /* EOF */
index 4f89c95..b66fb54 100644 (file)
@@ -44,7 +44,7 @@ PciInitializeArbiters(IN PPCI_FDO_EXTENSION FdoExtension)
     ASSERT_FDO(FdoExtension);
 
     /* Loop all the arbiters */
     ASSERT_FDO(FdoExtension);
 
     /* Loop all the arbiters */
-    for (ArbiterType = PciArb_Io; ArbiterType <= PciArb_Memory; ArbiterType++)
+    for (ArbiterType = PciArb_Io; ArbiterType <= PciArb_BusNumber; ArbiterType++)
     {
         /* Check if this is the extension for the Root PCI Bus */
         if (!PCI_IS_ROOT_FDO(FdoExtension))
     {
         /* Check if this is the extension for the Root PCI Bus */
         if (!PCI_IS_ROOT_FDO(FdoExtension))
@@ -113,7 +113,7 @@ PciInitializeArbiters(IN PPCI_FDO_EXTENSION FdoExtension)
         /* This arbiter is now initialized, move to the next one */
         DPRINT1("PCI - FDO ext 0x%08x %S arbiter initialized (context 0x%08x).\n",
                 FdoExtension,
         /* This arbiter is now initialized, move to the next one */
         DPRINT1("PCI - FDO ext 0x%08x %S arbiter initialized (context 0x%08x).\n",
                 FdoExtension,
-                "ARBITER HEADER MISSING", //ArbiterInterface->CommonInstance.Name,
+                L"ARBITER HEADER MISSING", //ArbiterInterface->CommonInstance.Name,
                 ArbiterInterface);
         Status = STATUS_SUCCESS;
     }
                 ArbiterInterface);
         Status = STATUS_SUCCESS;
     }
index 7d27173..c19bf4d 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * PROJECT:         ReactOS PCI Bus Driver
  * LICENSE:         BSD - See COPYING.ARM in the top level directory
 /*
  * PROJECT:         ReactOS PCI Bus Driver
  * LICENSE:         BSD - See COPYING.ARM in the top level directory
- * FILE:            drivers/bus/pci/arb/tr_irq.c
- * PURPOSE:         IRQ Resource Translation
+ * FILE:            drivers/bus/pci/intrface/tr_irq.c
+ * PURPOSE:         IRQ Translator Interface
  * PROGRAMMERS:     ReactOS Portable Systems Group
  */
 
  * PROGRAMMERS:     ReactOS Portable Systems Group
  */
 
 
 /* GLOBALS ********************************************************************/
 
 
 /* GLOBALS ********************************************************************/
 
+PCI_INTERFACE TranslatorInterfaceInterrupt =
+{
+    &GUID_TRANSLATOR_INTERFACE_STANDARD,
+    sizeof(TRANSLATOR_INTERFACE),
+    0,
+    0,
+    PCI_INTERFACE_FDO,
+    0,
+    PciTrans_Interrupt,
+    tranirq_Constructor,
+    tranirq_Initializer
+};
+
 /* FUNCTIONS ******************************************************************/
 
 /* FUNCTIONS ******************************************************************/
 
+NTSTATUS
+NTAPI
+tranirq_Initializer(IN PVOID Instance)
+{
+    /* PnP Interfaces don't get Initialized */
+    ASSERTMSG(FALSE, "PCI tranirq_Initializer, unexpected call.");
+    return STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS
+NTAPI
+tranirq_Constructor(IN PVOID DeviceExtension,
+                    IN PVOID Instance,
+                    IN PVOID InterfaceData,
+                    IN USHORT Version,
+                    IN USHORT Size,
+                    IN PINTERFACE Interface)
+{
+    PPCI_FDO_EXTENSION FdoExtension = (PPCI_FDO_EXTENSION)DeviceExtension;
+    ULONG BaseBus, ParentBus;
+    INTERFACE_TYPE ParentInterface;
+    ASSERT_FDO(FdoExtension);
+
+    /* Make sure it's the right resource type */
+    if ((ULONG)InterfaceData != CmResourceTypeInterrupt)
+    {
+        /* Fail this invalid request */
+        DPRINT1("PCI - IRQ trans constructor doesn't like %x in InterfaceSpecificData\n",
+                InterfaceData);
+        return STATUS_INVALID_PARAMETER_3;
+    }
+
+    /* Get the bus, and use this as the interface-specific data */
+    BaseBus = FdoExtension->BaseBus;
+    InterfaceData = (PVOID)BaseBus;
+
+    /* Check if this is the root bus */
+    if (PCI_IS_ROOT_FDO(FdoExtension))
+    {
+        /* It is, so there is no parent, and it's connected on the system bus */
+        ParentBus = 0;
+        ParentInterface = Internal;
+        DPRINT1("      Is root FDO\n");
+    }
+    else
+    {
+        /* It's not, so we have to get the root bus' bus number instead */
+        #if 0 // when have PDO commit
+        ParentBus = FdoExtension->PhysicalDeviceObject->DeviceExtension->ParentFdoExtension->BaseBus;
+        ParentInterface = PCIBus;
+        DPRINT1("      Is bridge FDO, parent bus %x, secondary bus %x\n",
+                ParentBus, BaseBus);
+        #endif
+    }
+
+    /* Now call the legacy HAL interface to get the correct translator */
+    return HalGetInterruptTranslator(ParentInterface,
+                                     ParentBus,
+                                     PCIBus,
+                                     sizeof(TRANSLATOR_INTERFACE),
+                                     0,
+                                     (PTRANSLATOR_INTERFACE)Interface,
+                                     (PULONG)&InterfaceData);
+}
+
 /* EOF */
 /* EOF */
index c30322d..0298ea2 100644 (file)
@@ -102,8 +102,8 @@ PciDispatchIrp(IN PDEVICE_OBJECT DeviceObject,
     NTSTATUS Status;
     PPCI_MN_DISPATCH_TABLE TableArray = NULL, Table;
     USHORT MaxMinor;
     NTSTATUS Status;
     PPCI_MN_DISPATCH_TABLE TableArray = NULL, Table;
     USHORT MaxMinor;
-    PCI_DISPATCH_STYLE DispatchStyle;
-    PCI_DISPATCH_FUNCTION DispatchFunction;
+    PCI_DISPATCH_STYLE DispatchStyle = 0;
+    PCI_DISPATCH_FUNCTION DispatchFunction = NULL;
     DPRINT1("PCI: Dispatch IRP\n");
 
     /* Get the extension and I/O stack location for this IRP */
     DPRINT1("PCI: Dispatch IRP\n");
 
     /* Get the extension and I/O stack location for this IRP */
@@ -146,7 +146,7 @@ PciDispatchIrp(IN PDEVICE_OBJECT DeviceObject,
                 /* WMI IRPs */
                 DispatchFunction = IrpDispatchTable->SystemControlIrpDispatchFunction;
                 DispatchStyle = IrpDispatchTable->SystemControlIrpDispatchStyle;
                 /* WMI IRPs */
                 DispatchFunction = IrpDispatchTable->SystemControlIrpDispatchFunction;
                 DispatchStyle = IrpDispatchTable->SystemControlIrpDispatchStyle;
-                MaxMinor = -1;
+                MaxMinor = 0xFFFF;
                 break;
 
             default:
                 break;
 
             default:
@@ -154,12 +154,12 @@ PciDispatchIrp(IN PDEVICE_OBJECT DeviceObject,
                 /* Unrecognized IRPs */
                 DispatchFunction = IrpDispatchTable->OtherIrpDispatchFunction;
                 DispatchStyle = IrpDispatchTable->OtherIrpDispatchStyle;
                 /* Unrecognized IRPs */
                 DispatchFunction = IrpDispatchTable->OtherIrpDispatchFunction;
                 DispatchStyle = IrpDispatchTable->OtherIrpDispatchStyle;
-                MaxMinor = -1;
+                MaxMinor = 0xFFFF;
                 break;
         }
 
         /* Only deal with recognized IRPs */
                 break;
         }
 
         /* Only deal with recognized IRPs */
-        if (MaxMinor != -1)
+        if (MaxMinor != 0xFFFF)
         {
             /* Make sure the function is recognized */
             if (IoStackLocation->MinorFunction > MaxMinor)
         {
             /* Make sure the function is recognized */
             if (IoStackLocation->MinorFunction > MaxMinor)
@@ -260,7 +260,7 @@ PciIrpNotSupported(IN PIRP Irp,
 {
     /* Not supported */
     DPRINT1("WARNING: PCI received unsupported IRP!\n");
 {
     /* Not supported */
     DPRINT1("WARNING: PCI received unsupported IRP!\n");
-    DbgBreakPoint();
+    //DbgBreakPoint();
     return STATUS_NOT_SUPPORTED;
 }
 
     return STATUS_NOT_SUPPORTED;
 }
 
index d7c5115..08d61ad 100644 (file)
@@ -164,9 +164,73 @@ PciFdoIrpQueryInterface(IN PIRP Irp,
                         IN PIO_STACK_LOCATION IoStackLocation,
                         IN PPCI_FDO_EXTENSION DeviceExtension)
 {
                         IN PIO_STACK_LOCATION IoStackLocation,
                         IN PPCI_FDO_EXTENSION DeviceExtension)
 {
-    UNIMPLEMENTED;
-    while (TRUE);
-    return STATUS_NOT_SUPPORTED;
+    NTSTATUS Status;
+    PAGED_CODE();
+    ASSERT(DeviceExtension->ExtensionType == PciFdoExtensionType);
+
+    /* Deleted extensions don't respond to IRPs */
+    if (DeviceExtension->DeviceState == PciDeleted)
+    {
+        /* Hand it bacO try to deal with it */
+        return PciPassIrpFromFdoToPdo(DeviceExtension, Irp);
+    }
+
+    /* Query our driver for this interface */
+    Status = PciQueryInterface(DeviceExtension,
+                               IoStackLocation->Parameters.QueryInterface.
+                               InterfaceType,
+                               IoStackLocation->Parameters.QueryInterface.
+                               Size,
+                               IoStackLocation->Parameters.QueryInterface.
+                               Version,
+                               IoStackLocation->Parameters.QueryInterface.
+                               InterfaceSpecificData,
+                               IoStackLocation->Parameters.QueryInterface.
+                               Interface,
+                               FALSE);
+    if (NT_SUCCESS(Status))
+    {
+        /* We found it, let the PDO handle it */
+        Irp->IoStatus.Status = Status;
+        return PciPassIrpFromFdoToPdo(DeviceExtension, Irp);
+    }
+    else if (Status == STATUS_NOT_SUPPORTED)
+    {
+        /* Otherwise, we can't handle it, let someone else down the stack try */
+        Status = PciCallDownIrpStack(DeviceExtension, Irp);
+        if (Status == STATUS_NOT_SUPPORTED)
+        {
+            /* They can't either, try a last-resort interface lookup */
+            Status = PciQueryInterface(DeviceExtension,
+                                       IoStackLocation->Parameters.QueryInterface.
+                                       InterfaceType,
+                                       IoStackLocation->Parameters.QueryInterface.
+                                       Size,
+                                       IoStackLocation->Parameters.QueryInterface.
+                                       Version,
+                                       IoStackLocation->Parameters.QueryInterface.
+                                       InterfaceSpecificData,
+                                       IoStackLocation->Parameters.QueryInterface.
+                                       Interface,
+                                       TRUE);
+        }
+    }
+
+    /* Has anyone claimed this interface yet? */
+    if (Status == STATUS_NOT_SUPPORTED)
+    {
+        /* No, return the original IRP status */
+        Status = Irp->IoStatus.Status;
+    }
+    else
+    {
+        /* Yes, set the new IRP status */
+        Irp->IoStatus.Status = Status;
+    }
+
+    /* Complete this IRP */
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    return Status;
 }
 
 NTSTATUS
 }
 
 NTSTATUS
index 351ae57..41bd824 100644 (file)
 
 /* GLOBALS ********************************************************************/
 
 
 /* GLOBALS ********************************************************************/
 
+PCI_INTERFACE AgpTargetInterface =
+{
+    &GUID_AGP_TARGET_BUS_INTERFACE_STANDARD,
+    sizeof(AGP_BUS_INTERFACE_STANDARD),
+    AGP_BUS_INTERFACE_V1,
+    AGP_BUS_INTERFACE_V1,
+    PCI_INTERFACE_PDO,
+    0,
+    PciInterface_AgpTarget,
+    agpintrf_Constructor,
+    agpintrf_Initializer
+};
+
 /* FUNCTIONS ******************************************************************/
 
 /* FUNCTIONS ******************************************************************/
 
+NTSTATUS
+NTAPI
+agpintrf_Initializer(IN PVOID Instance)
+{
+    /* PnP Interfaces don't get Initialized */
+    ASSERTMSG(FALSE, "PCI agpintrf_Initializer, unexpected call.");
+    return STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS
+NTAPI
+agpintrf_Constructor(IN PVOID DeviceExtension,
+                     IN PVOID Instance,
+                     IN PVOID InterfaceData,
+                     IN USHORT Version,
+                     IN USHORT Size,
+                     IN PINTERFACE Interface)
+{
+#if 0 // when have PDO commit
+    PPCI_PDO_EXTENSION PdoExtension = (PPCI_PDO_EXTENSION)DeviceExtension;
+
+    /* Only AGP bridges are supported (which are PCI-to-PCI Bridge Devices) */
+    if ((PdoExtension->BaseClass != PCI_CLASS_BRIDGE_DEV) ||
+        (PdoExtension->SubClass != PCI_SUBCLASS_BR_PCI_TO_PCI))
+    {
+        /* Fail any other PDO */
+        return STATUS_NOT_SUPPORTED;
+    }
+#endif
+
+    /* Not yet implemented */
+    UNIMPLEMENTED;
+    while (TRUE);
+}
+
 /* EOF */
 /* EOF */
index 468d9ed..08681cb 100644 (file)
 
 /* GLOBALS ********************************************************************/
 
 
 /* GLOBALS ********************************************************************/
 
+PCI_INTERFACE BusHandlerInterface =
+{
+    &GUID_BUS_INTERFACE_STANDARD,
+    sizeof(BUS_INTERFACE_STANDARD),
+    1,
+    1,
+    PCI_INTERFACE_PDO,
+    0,
+    PciInterface_BusHandler,
+    busintrf_Constructor,
+    busintrf_Initializer
+};
+
 /* FUNCTIONS ******************************************************************/
 
 /* FUNCTIONS ******************************************************************/
 
+NTSTATUS
+NTAPI
+busintrf_Initializer(IN PVOID Instance)
+{
+    /* PnP Interfaces don't get Initialized */
+    ASSERTMSG(FALSE, "PCI busintrf_Initializer, unexpected call.");
+    return STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS
+NTAPI
+busintrf_Constructor(IN PVOID DeviceExtension,
+                     IN PVOID Instance,
+                     IN PVOID InterfaceData,
+                     IN USHORT Version,
+                     IN USHORT Size,
+                     IN PINTERFACE Interface)
+{
+    /* Not yet implemented */
+    UNIMPLEMENTED;
+    while (TRUE);
+}
+
 /* EOF */
 /* EOF */
index a36f2d8..7f1e78b 100644 (file)
 
 /* GLOBALS ********************************************************************/
 
 
 /* GLOBALS ********************************************************************/
 
+PCI_INTERFACE PciCardbusPrivateInterface =
+{
+    &GUID_PCI_CARDBUS_INTERFACE_PRIVATE,
+    sizeof(PCI_CARDBUS_INTERFACE_PRIVATE),
+    PCI_CB_INTRF_VERSION,
+    PCI_CB_INTRF_VERSION,
+    PCI_INTERFACE_PDO,
+    0,
+    PciInterface_PciCb,
+    pcicbintrf_Constructor,
+    pcicbintrf_Initializer
+};
+
 /* FUNCTIONS ******************************************************************/
 
 /* FUNCTIONS ******************************************************************/
 
+NTSTATUS
+NTAPI
+pcicbintrf_Initializer(IN PVOID Instance)
+{
+    /* PnP Interfaces don't get Initialized */
+    ASSERTMSG(FALSE, "PCI pcicbintrf_Initializer, unexpected call.");
+    return STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS
+NTAPI
+pcicbintrf_Constructor(IN PVOID DeviceExtension,
+                       IN PVOID Instance,
+                       IN PVOID InterfaceData,
+                       IN USHORT Version,
+                       IN USHORT Size,
+                       IN PINTERFACE Interface)
+{
+    /* Not yet implemented */
+    UNIMPLEMENTED;
+    while (TRUE);
+}
+
 /* EOF */
 /* EOF */
diff --git a/reactos/drivers/bus/pcix/intrface/devhere.c b/reactos/drivers/bus/pcix/intrface/devhere.c
new file mode 100644 (file)
index 0000000..919ff30
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * PROJECT:         ReactOS PCI Bus Driver
+ * LICENSE:         BSD - See COPYING.ARM in the top level directory
+ * FILE:            drivers/bus/pci/intrface/devhere.c
+ * PURPOSE:         Device Presence Interface
+ * PROGRAMMERS:     ReactOS Portable Systems Group
+ */
+
+/* INCLUDES *******************************************************************/
+
+#include <pci.h>
+#define NDEBUG
+#include <debug.h>
+
+/* GLOBALS ********************************************************************/
+
+PCI_INTERFACE PciDevicePresentInterface =
+{
+    &GUID_PCI_DEVICE_PRESENT_INTERFACE,
+    sizeof(PCI_DEVICE_PRESENT_INTERFACE),
+    PCI_DEVICE_PRESENT_INTERFACE_VERSION,
+    PCI_DEVICE_PRESENT_INTERFACE_VERSION,
+    PCI_INTERFACE_PDO,
+    0,
+    PciInterface_DevicePresent,
+    devpresent_Constructor,
+    devpresent_Initializer
+};
+
+/* FUNCTIONS ******************************************************************/
+
+NTSTATUS
+NTAPI
+devpresent_Initializer(IN PVOID Instance)
+{
+    /* PnP Interfaces don't get Initialized */
+    ASSERTMSG(FALSE, "PCI devpresent_Initializer, unexpected call.");
+    return STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS
+NTAPI
+devpresent_Constructor(IN PVOID DeviceExtension,
+                       IN PVOID Instance,
+                       IN PVOID InterfaceData,
+                       IN USHORT Version,
+                       IN USHORT Size,
+                       IN PINTERFACE Interface)
+{
+    PAGED_CODE();
+
+    /* Not yet implemented */
+    UNIMPLEMENTED;
+    while (TRUE);
+}
+
+/* EOF */
index 2b75f8d..c378937 100644 (file)
 
 PPCI_INTERFACE PciInterfaces[] =
 {
 
 PPCI_INTERFACE PciInterfaces[] =
 {
+    &ArbiterInterfaceBusNumber,
+    &ArbiterInterfaceMemory,
+    &ArbiterInterfaceIo,
+    &BusHandlerInterface,
+    &PciRoutingInterface,
+    &PciCardbusPrivateInterface,
+    &PciLegacyDeviceDetectionInterface,
+    &PciPmeInterface,
+    &PciDevicePresentInterface,
+//  &PciNativeIdeInterface,
+    &PciLocationInterface,
+    &AgpTargetInterface,
+    NULL
+};
+
+PPCI_INTERFACE PciInterfacesLastResort[] =
+{
+    &TranslatorInterfaceInterrupt,
     NULL
 };
 
 /* FUNCTIONS ******************************************************************/
 
     NULL
 };
 
 /* FUNCTIONS ******************************************************************/
 
+NTSTATUS
+NTAPI
+PciQueryInterface(IN PPCI_FDO_EXTENSION DeviceExtension,
+                  IN CONST GUID* InterfaceType,
+                  IN ULONG Size,
+                  IN ULONG Version,
+                  IN PVOID InterfaceData,
+                  IN PINTERFACE Interface,
+                  IN BOOLEAN LastChance)
+{
+    UNICODE_STRING GuidString;
+    NTSTATUS Status;
+    PPCI_INTERFACE *InterfaceList;
+    PPCI_INTERFACE PciInterface;
+    RtlStringFromGUID(InterfaceType, &GuidString);
+    DPRINT1("PCI - PciQueryInterface TYPE = %wZ\n", &GuidString);
+    RtlFreeUnicodeString(&GuidString);
+    DPRINT1("      Size = %d, Version = %d, InterfaceData = %x, LastChance = %s\n",
+            Size,
+            Version,
+            InterfaceData,
+            LastChance ? "TRUE" : "FALSE");
+
+    /* Loop all the available interfaces */
+    for (InterfaceList = LastChance ? PciInterfacesLastResort : PciInterfaces;
+         *InterfaceList;
+         InterfaceList++)
+    {
+        /* Get the current interface */
+        PciInterface = *InterfaceList;
+
+        /* For debugging, construct the GUID string */
+        RtlStringFromGUID(PciInterface->InterfaceType, &GuidString);
+
+        /* Check if this is an FDO or PDO */
+        if (DeviceExtension->ExtensionType == PciFdoExtensionType)
+        {
+            /* Check if the interface is for FDOs */
+            if (!(PciInterface->Flags & PCI_INTERFACE_FDO))
+            {
+                /* This interface is not for FDOs, skip it */
+                DPRINT1("PCI - PciQueryInterface: guid = %wZ only for FDOs\n",
+                        &GuidString);
+                RtlFreeUnicodeString(&GuidString);
+                continue;
+            }
+
+            /* Check if the interface is for root FDO only */
+            if ((PciInterface->Flags & PCI_INTERFACE_ROOT) &&
+                (!PCI_IS_ROOT_FDO(DeviceExtension)))
+            {
+                /* This FDO isn't the root, skip the interface */
+                DPRINT1("PCI - PciQueryInterface: guid = %wZ only for ROOT\n",
+                        &GuidString);
+                RtlFreeUnicodeString(&GuidString);
+                continue;
+            }
+        }
+        else
+        {
+            /* This is a PDO, check if the interface is for PDOs too */
+            if (!(PciInterface->Flags & PCI_INTERFACE_PDO))
+            {
+                /* It isn't, skip it */
+                DPRINT1("PCI - PciQueryInterface: guid = %wZ only for PDOs\n",
+                        &GuidString);
+                RtlFreeUnicodeString(&GuidString);
+                continue;
+            }
+        }
+
+        /* Print the GUID for debugging, and then free the string */
+        DPRINT1("PCI - PciQueryInterface looking at guid = %wZ\n", &GuidString);
+        RtlFreeUnicodeString(&GuidString);
+
+        /* Check if the GUID, version, and size all match */
+        if ((IsEqualGUIDAligned(PciInterface->InterfaceType, InterfaceType)) &&
+            (Version >= PciInterface->MinVersion) &&
+            (Version <= PciInterface->MaxVersion) &&
+            (Size >= PciInterface->MinSize))
+        {
+            /* Call the interface's constructor */
+            Status = PciInterface->Constructor(DeviceExtension,
+                                               PciInterface,
+                                               InterfaceData,
+                                               Version,
+                                               Size,
+                                               Interface);
+            if (!NT_SUCCESS(Status))
+            {
+                /* This interface was not initialized correctly, skip it */
+                DPRINT1("PCI - PciQueryInterface - Contructor %08lx = %08lx\n",
+                        PciInterface->Constructor, Status);
+                continue;
+            }
+
+            /* Reference the interface and return success, all is good */
+            Interface->InterfaceReference(Interface->Context);
+            DPRINT1("PCI - PciQueryInterface returning SUCCESS\n");
+            return Status;
+        }
+    }
+
+    /* An interface of this type, and for this device, could not be found */
+    DPRINT1("PCI - PciQueryInterface FAILED TO FIND INTERFACE\n");
+    return STATUS_NOT_SUPPORTED;
+}
+
 /* EOF */
 /* EOF */
index 4322455..6665427 100644 (file)
 
 /* GLOBALS ********************************************************************/
 
 
 /* GLOBALS ********************************************************************/
 
+PCI_INTERFACE PciLegacyDeviceDetectionInterface =
+{
+    &GUID_LEGACY_DEVICE_DETECTION_STANDARD,
+    sizeof(LEGACY_DEVICE_DETECTION_INTERFACE),
+    0,
+    0,
+    PCI_INTERFACE_FDO,
+    0,
+    PciInterface_LegacyDeviceDetection,
+    lddintrf_Constructor,
+    lddintrf_Initializer
+};
+
 /* FUNCTIONS ******************************************************************/
 
 /* FUNCTIONS ******************************************************************/
 
+NTSTATUS
+NTAPI
+lddintrf_Initializer(IN PVOID Instance)
+{
+    /* PnP Interfaces don't get Initialized */
+    ASSERTMSG(FALSE, "PCI lddintrf_Initializer, unexpected call.");
+    return STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS
+NTAPI
+lddintrf_Constructor(IN PVOID DeviceExtension,
+                     IN PVOID Instance,
+                     IN PVOID InterfaceData,
+                     IN USHORT Version,
+                     IN USHORT Size,
+                     IN PINTERFACE Interface)
+{
+    /* Not yet implemented */
+    UNIMPLEMENTED;
+    while (TRUE);
+}
+
 /* EOF */
 /* EOF */
index a633d98..f2ca179 100644 (file)
 
 /* GLOBALS ********************************************************************/
 
 
 /* GLOBALS ********************************************************************/
 
+PCI_INTERFACE PciLocationInterface =
+{
+    &GUID_PNP_LOCATION_INTERFACE,
+    sizeof(PNP_LOCATION_INTERFACE),
+    PNP_LOCATION_INTERFACE_VERSION,
+    PNP_LOCATION_INTERFACE_VERSION,
+    PCI_INTERFACE_FDO | PCI_INTERFACE_ROOT | PCI_INTERFACE_PDO,
+    0,
+    PciInterface_Location,
+    locintrf_Constructor,
+    locintrf_Initializer
+};
+
 /* FUNCTIONS ******************************************************************/
 
 /* FUNCTIONS ******************************************************************/
 
+NTSTATUS
+NTAPI
+locintrf_Initializer(IN PVOID Instance)
+{
+    /* PnP Interfaces don't get Initialized */
+    ASSERTMSG(FALSE, "PCI locintrf_Initializer, unexpected call.");
+    return STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS
+NTAPI
+locintrf_Constructor(IN PVOID DeviceExtension,
+                     IN PVOID Instance,
+                     IN PVOID InterfaceData,
+                     IN USHORT Version,
+                     IN USHORT Size,
+                     IN PINTERFACE Interface)
+{
+    /* Not yet implemented */
+    UNIMPLEMENTED;
+    while (TRUE);
+}
+
 /* EOF */
 /* EOF */
index ecb3b6e..5b59e9a 100644 (file)
 
 /* GLOBALS ********************************************************************/
 
 
 /* GLOBALS ********************************************************************/
 
+PCI_INTERFACE PciPmeInterface =
+{
+    &GUID_PCI_PME_INTERFACE,
+    sizeof(PCI_PME_INTERFACE),
+    PCI_PME_INTRF_STANDARD_VER,
+    PCI_PME_INTRF_STANDARD_VER,
+    PCI_INTERFACE_FDO | PCI_INTERFACE_ROOT,
+    0,
+    PciInterface_PmeHandler,
+    PciPmeInterfaceConstructor,
+    PciPmeInterfaceInitializer
+};
+
 /* FUNCTIONS ******************************************************************/
 
 /* FUNCTIONS ******************************************************************/
 
+NTSTATUS
+NTAPI
+PciPmeInterfaceInitializer(IN PVOID Instance)
+{
+    /* PnP Interfaces don't get Initialized */
+    ASSERTMSG(FALSE, "PCI PciPmeInterfaceInitializer, unexpected call.");
+    return STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS
+NTAPI
+PciPmeInterfaceConstructor(IN PVOID DeviceExtension,
+                           IN PVOID Instance,
+                           IN PVOID InterfaceData,
+                           IN USHORT Version,
+                           IN USHORT Size,
+                           IN PINTERFACE Interface)
+{
+    /* Only version 1 is supported */
+    if (Version != PCI_PME_INTRF_STANDARD_VER) return STATUS_NOINTERFACE;
+
+    /* Not yet implemented */
+    UNIMPLEMENTED;
+    while (TRUE);
+}
+
 /* EOF */
 /* EOF */
index 6332953..e910b7c 100644 (file)
 
 /* GLOBALS ********************************************************************/
 
 
 /* GLOBALS ********************************************************************/
 
+PCI_INTERFACE PciRoutingInterface =
+{
+    &GUID_INT_ROUTE_INTERFACE_STANDARD,
+    sizeof(INT_ROUTE_INTERFACE_STANDARD),
+    PCI_INT_ROUTE_INTRF_STANDARD_VER,
+    PCI_INT_ROUTE_INTRF_STANDARD_VER,
+    PCI_INTERFACE_FDO,
+    0,
+    PciInterface_IntRouteHandler,
+    routeintrf_Constructor,
+    routeintrf_Initializer
+};
+
 /* FUNCTIONS ******************************************************************/
 
 /* FUNCTIONS ******************************************************************/
 
+NTSTATUS
+NTAPI
+routeintrf_Initializer(IN PVOID Instance)
+{
+    /* PnP Interfaces don't get Initialized */
+    ASSERTMSG(FALSE, "PCI routeintrf_Initializer, unexpected call.");
+    return STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS
+NTAPI
+routeintrf_Constructor(IN PVOID DeviceExtension,
+                       IN PVOID Instance,
+                       IN PVOID InterfaceData,
+                       IN USHORT Version,
+                       IN USHORT Size,
+                       IN PINTERFACE Interface)
+{
+    /* Only version 1 is supported */
+    if (Version != PCI_INT_ROUTE_INTRF_STANDARD_VER) return STATUS_NOINTERFACE;
+
+    /* Not yet implemented */
+    UNIMPLEMENTED;
+    while (TRUE);
+}
+
 /* EOF */
 /* EOF */
index 5065d81..3ceaadb 100644 (file)
 #define PCI_HACK_HAS_REVISION_INFO          0x01
 #define PCI_HACK_HAS_SUBSYSTEM_INFO         0x02
 
 #define PCI_HACK_HAS_REVISION_INFO          0x01
 #define PCI_HACK_HAS_SUBSYSTEM_INFO         0x02
 
+//
+// PCI Interface Flags
+//
+#define PCI_INTERFACE_PDO                   0x01
+#define PCI_INTERFACE_FDO                   0x02
+#define PCI_INTERFACE_ROOT                  0x04
+
 //
 // Device Extension, Interface, Translator and Arbiter Signatures
 //
 typedef enum _PCI_SIGNATURE
 {
 //
 // Device Extension, Interface, Translator and Arbiter Signatures
 //
 typedef enum _PCI_SIGNATURE
 {
-    PciPdoExtensionType = '0Pci',
-    PciFdoExtensionType = '1Pci',
-    PciArb_Io = '2Pci',
-    PciArb_Memory = '3Pci',
-    PciArb_Interrupt = '4Pci',
-    PciArb_BusNumber = '5Pci',
-    PciTrans_Interrupt = '6Pci',
-    PciInterface_BusHandler = '7Pci',
-    PciInterface_IntRouteHandler = '8Pci',
-    PciInterface_PciCb = '9Pci',
-    PciInterface_LegacyDeviceDetection = ':Pci',
-    PciInterface_PmeHandler = ';Pci',
-    PciInterface_DevicePresent = '<Pci',
-    PciInterface_NativeIde = '=Pci',
-    PciInterface_AgpTarget = '>Pci',
-    PciInterface_Location  = '?Pci'
+    PciPdoExtensionType = 'icP0',
+    PciFdoExtensionType = 'icP1',
+    PciArb_Io = 'icP2',
+    PciArb_Memory = 'icP3',
+    PciArb_Interrupt = 'icP4',
+    PciArb_BusNumber = 'icP5',
+    PciTrans_Interrupt = 'icP6',
+    PciInterface_BusHandler = 'icP7',
+    PciInterface_IntRouteHandler = 'icP8',
+    PciInterface_PciCb = 'icP9',
+    PciInterface_LegacyDeviceDetection = 'icP:',
+    PciInterface_PmeHandler = 'icP;',
+    PciInterface_DevicePresent = 'icP<',
+    PciInterface_NativeIde = 'icP=',
+    PciInterface_AgpTarget = 'icP>',
+    PciInterface_Location  = 'icP?'
 } PCI_SIGNATURE, *PPCI_SIGNATURE;
 
 //
 } PCI_SIGNATURE, *PPCI_SIGNATURE;
 
 //
@@ -220,7 +227,7 @@ typedef struct _PCI_MJ_DISPATCH_TABLE
 //
 struct _PCI_INTERFACE;
 typedef NTSTATUS (NTAPI *PCI_INTERFACE_CONSTRUCTOR)(
 //
 struct _PCI_INTERFACE;
 typedef NTSTATUS (NTAPI *PCI_INTERFACE_CONSTRUCTOR)(
-    IN PPCI_FDO_EXTENSION DeviceExtension,
+    IN PVOID DeviceExtension,
     IN PVOID Instance,
     IN PVOID InterfaceData,
     IN USHORT Version,
     IN PVOID Instance,
     IN PVOID InterfaceData,
     IN USHORT Version,
@@ -237,7 +244,7 @@ typedef NTSTATUS (NTAPI *PCI_INTERFACE_INITIALIZER)(
 //
 typedef struct _PCI_INTERFACE
 {
 //
 typedef struct _PCI_INTERFACE
 {
-    LPGUID InterfaceType;
+    CONST GUID *InterfaceType;
     USHORT MinSize;
     USHORT MinVersion;
     USHORT MaxVersion;
     USHORT MinSize;
     USHORT MinVersion;
     USHORT MaxVersion;
@@ -288,6 +295,21 @@ PciIrpNotSupported(
     IN PPCI_FDO_EXTENSION DeviceExtension
 );
 
     IN PPCI_FDO_EXTENSION DeviceExtension
 );
 
+NTSTATUS
+NTAPI
+PciPassIrpFromFdoToPdo(
+    IN PPCI_FDO_EXTENSION DeviceExtension,
+    IN PIRP Irp
+);
+
+NTSTATUS
+NTAPI
+PciCallDownIrpStack(
+    IN PPCI_FDO_EXTENSION DeviceExtension,
+    IN PIRP Irp
+);
+
+
 //
 // Power Routines
 //
 //
 // Power Routines
 //
@@ -580,11 +602,243 @@ PciDebugIrpDispatchDisplay(
     IN USHORT MaxMinor
 );
 
     IN USHORT MaxMinor
 );
 
+//
+// Interface Support
+//
+NTSTATUS
+NTAPI
+PciQueryInterface(
+    IN PPCI_FDO_EXTENSION DeviceExtension,
+    IN CONST GUID* InterfaceType,
+    IN ULONG Size,
+    IN ULONG Version,
+    IN PVOID InterfaceData,
+    IN PINTERFACE Interface,
+    IN BOOLEAN LastChance
+);
+
+NTSTATUS
+NTAPI
+PciPmeInterfaceInitializer(
+    IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+routeintrf_Initializer(
+    IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+arbusno_Initializer(
+    IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+agpintrf_Initializer(
+    IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+tranirq_Initializer(
+    IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+busintrf_Initializer(
+    IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+armem_Initializer(
+    IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+ario_Initializer(
+    IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+locintrf_Initializer(
+    IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+pcicbintrf_Initializer(
+    IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+lddintrf_Initializer(
+    IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+devpresent_Initializer(
+    IN PVOID Instance
+);
+
+NTSTATUS
+NTAPI
+agpintrf_Constructor(
+    IN PVOID DeviceExtension,
+    IN PVOID Instance,
+    IN PVOID InterfaceData,
+    IN USHORT Version,
+    IN USHORT Size,
+    IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+arbusno_Constructor(
+    IN PVOID DeviceExtension,
+    IN PVOID Instance,
+    IN PVOID InterfaceData,
+    IN USHORT Version,
+    IN USHORT Size,
+    IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+tranirq_Constructor(
+    IN PVOID DeviceExtension,
+    IN PVOID Instance,
+    IN PVOID InterfaceData,
+    IN USHORT Version,
+    IN USHORT Size,
+    IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+armem_Constructor(
+    IN PVOID DeviceExtension,
+    IN PVOID Instance,
+    IN PVOID InterfaceData,
+    IN USHORT Version,
+    IN USHORT Size,
+    IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+busintrf_Constructor(
+    IN PVOID DeviceExtension,
+    IN PVOID Instance,
+    IN PVOID InterfaceData,
+    IN USHORT Version,
+    IN USHORT Size,
+    IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+ario_Constructor(
+    IN PVOID DeviceExtension,
+    IN PVOID Instance,
+    IN PVOID InterfaceData,
+    IN USHORT Version,
+    IN USHORT Size,
+    IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+pcicbintrf_Constructor(
+    IN PVOID DeviceExtension,
+    IN PVOID Instance,
+    IN PVOID InterfaceData,
+    IN USHORT Version,
+    IN USHORT Size,
+    IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+lddintrf_Constructor(
+    IN PVOID DeviceExtension,
+    IN PVOID Instance,
+    IN PVOID InterfaceData,
+    IN USHORT Version,
+    IN USHORT Size,
+    IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+locintrf_Constructor(
+    IN PVOID DeviceExtension,
+    IN PVOID Instance,
+    IN PVOID InterfaceData,
+    IN USHORT Version,
+    IN USHORT Size,
+    IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+PciPmeInterfaceConstructor(
+    IN PVOID DeviceExtension,
+    IN PVOID Instance,
+    IN PVOID InterfaceData,
+    IN USHORT Version,
+    IN USHORT Size,
+    IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+routeintrf_Constructor(
+    IN PVOID DeviceExtension,
+    IN PVOID Instance,
+    IN PVOID InterfaceData,
+    IN USHORT Version,
+    IN USHORT Size,
+    IN PINTERFACE Interface
+);
+
+NTSTATUS
+NTAPI
+devpresent_Constructor(
+    IN PVOID DeviceExtension,
+    IN PVOID Instance,
+    IN PVOID InterfaceData,
+    IN USHORT Version,
+    IN USHORT Size,
+    IN PINTERFACE Interface
+);
+
 //
 // External Resources
 //
 extern SINGLE_LIST_ENTRY PciFdoExtensionListHead;
 extern KEVENT PciGlobalLock;
 extern PPCI_INTERFACE PciInterfaces[];
 //
 // External Resources
 //
 extern SINGLE_LIST_ENTRY PciFdoExtensionListHead;
 extern KEVENT PciGlobalLock;
 extern PPCI_INTERFACE PciInterfaces[];
+extern PCI_INTERFACE ArbiterInterfaceBusNumber;
+extern PCI_INTERFACE ArbiterInterfaceMemory;
+extern PCI_INTERFACE ArbiterInterfaceIo;
+extern PCI_INTERFACE BusHandlerInterface;
+extern PCI_INTERFACE PciRoutingInterface;
+extern PCI_INTERFACE PciCardbusPrivateInterface;
+extern PCI_INTERFACE PciLegacyDeviceDetectionInterface;
+extern PCI_INTERFACE PciPmeInterface;
+extern PCI_INTERFACE PciDevicePresentInterface;
+//extern PCI_INTERFACE PciNativeIdeInterface;
+extern PCI_INTERFACE PciLocationInterface;
+extern PCI_INTERFACE AgpTargetInterface;
+extern PCI_INTERFACE TranslatorInterfaceInterrupt;
 
 /* EOF */
 
 /* EOF */
index 434eae8..0ceaf14 100644 (file)
@@ -16,6 +16,7 @@
         <file>agpintrf.c</file>
         <file>busintrf.c</file>
         <file>cardbus.c</file>
         <file>agpintrf.c</file>
         <file>busintrf.c</file>
         <file>cardbus.c</file>
+        <file>devhere.c</file>
         <file>ideintrf.c</file>
         <file>intrface.c</file>
         <file>lddintrf.c</file>
         <file>ideintrf.c</file>
         <file>intrface.c</file>
         <file>lddintrf.c</file>