/* GLOBALS ********************************************************************/
+PCI_INTERFACE ArbiterInterfaceBusNumber =
+{
+ &GUID_ARBITER_INTERFACE_STANDARD,
+ sizeof(ARBITER_INTERFACE),
+ 0,
+ 0,
+ PCI_INTERFACE_FDO,
+ 0,
+ PciArb_BusNumber,
+ arbusno_Constructor,
+ arbusno_Initializer
+};
+
/* 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 */
/* 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 ******************************************************************/
+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 */
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))
/* 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;
}
/*
* 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
*/
/* GLOBALS ********************************************************************/
+PCI_INTERFACE TranslatorInterfaceInterrupt =
+{
+ &GUID_TRANSLATOR_INTERFACE_STANDARD,
+ sizeof(TRANSLATOR_INTERFACE),
+ 0,
+ 0,
+ PCI_INTERFACE_FDO,
+ 0,
+ PciTrans_Interrupt,
+ tranirq_Constructor,
+ tranirq_Initializer
+};
+
/* 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 */
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 */
/* WMI IRPs */
DispatchFunction = IrpDispatchTable->SystemControlIrpDispatchFunction;
DispatchStyle = IrpDispatchTable->SystemControlIrpDispatchStyle;
- MaxMinor = -1;
+ MaxMinor = 0xFFFF;
break;
default:
/* Unrecognized IRPs */
DispatchFunction = IrpDispatchTable->OtherIrpDispatchFunction;
DispatchStyle = IrpDispatchTable->OtherIrpDispatchStyle;
- MaxMinor = -1;
+ MaxMinor = 0xFFFF;
break;
}
/* Only deal with recognized IRPs */
- if (MaxMinor != -1)
+ if (MaxMinor != 0xFFFF)
{
/* Make sure the function is recognized */
if (IoStackLocation->MinorFunction > MaxMinor)
{
/* Not supported */
DPRINT1("WARNING: PCI received unsupported IRP!\n");
- DbgBreakPoint();
+ //DbgBreakPoint();
return STATUS_NOT_SUPPORTED;
}
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
/* 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 ******************************************************************/
+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 */
/* 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 ******************************************************************/
+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 */
/* 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 ******************************************************************/
+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 */
--- /dev/null
+/*
+ * 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 */
PPCI_INTERFACE PciInterfaces[] =
{
+ &ArbiterInterfaceBusNumber,
+ &ArbiterInterfaceMemory,
+ &ArbiterInterfaceIo,
+ &BusHandlerInterface,
+ &PciRoutingInterface,
+ &PciCardbusPrivateInterface,
+ &PciLegacyDeviceDetectionInterface,
+ &PciPmeInterface,
+ &PciDevicePresentInterface,
+// &PciNativeIdeInterface,
+ &PciLocationInterface,
+ &AgpTargetInterface,
+ NULL
+};
+
+PPCI_INTERFACE PciInterfacesLastResort[] =
+{
+ &TranslatorInterfaceInterrupt,
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 */
/* 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 ******************************************************************/
+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 */
/* 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 ******************************************************************/
+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 */
/* 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 ******************************************************************/
+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 */
/* 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 ******************************************************************/
+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 */
#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
{
- 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;
//
//
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,
//
typedef struct _PCI_INTERFACE
{
- LPGUID InterfaceType;
+ CONST GUID *InterfaceType;
USHORT MinSize;
USHORT MinVersion;
USHORT MaxVersion;
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
//
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[];
+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 */
<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>