Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / reactos / hal / halx86 / legacy / halpnpdd.c
diff --git a/reactos/hal/halx86/legacy/halpnpdd.c b/reactos/hal/halx86/legacy/halpnpdd.c
deleted file mode 100644 (file)
index 084ae86..0000000
+++ /dev/null
@@ -1,942 +0,0 @@
-/*
- * PROJECT:         ReactOS HAL
- * LICENSE:         BSD - See COPYING.ARM in the top level directory
- * FILE:            hal/halx86/legacy/halpnpdd.c
- * PURPOSE:         HAL Plug and Play Device Driver
- * PROGRAMMERS:     ReactOS Portable Systems Group
- */
-
-/* INCLUDES *******************************************************************/
-
-#include <hal.h>
-#define NDEBUG
-#include <debug.h>
-
-typedef enum _EXTENSION_TYPE
-{
-    PdoExtensionType = 0xC0,
-    FdoExtensionType
-} EXTENSION_TYPE;
-
-typedef enum _PDO_TYPE
-{
-    AcpiPdo = 0x80,
-    WdPdo
-} PDO_TYPE;
-
-typedef struct _FDO_EXTENSION
-{
-    EXTENSION_TYPE ExtensionType;
-    struct _PDO_EXTENSION* ChildPdoList;
-    PDEVICE_OBJECT PhysicalDeviceObject;
-    PDEVICE_OBJECT FunctionalDeviceObject;
-    PDEVICE_OBJECT AttachedDeviceObject;
-} FDO_EXTENSION, *PFDO_EXTENSION;
-
-typedef struct _PDO_EXTENSION
-{
-    EXTENSION_TYPE ExtensionType;
-    struct _PDO_EXTENSION* Next;
-    PDEVICE_OBJECT PhysicalDeviceObject;
-    PFDO_EXTENSION ParentFdoExtension;
-    PDO_TYPE PdoType;
-    PDESCRIPTION_HEADER WdTable;
-    LONG InterfaceReferenceCount;
-} PDO_EXTENSION, *PPDO_EXTENSION;
-
-/* GLOBALS ********************************************************************/
-
-PDRIVER_OBJECT HalpDriverObject;
-
-/* PRIVATE FUNCTIONS **********************************************************/
-
-VOID
-NTAPI
-HalpReportDetectedDevices(IN PDRIVER_OBJECT DriverObject,
-                          IN PVOID Context,
-                          IN ULONG Count)
-{
-    PFDO_EXTENSION FdoExtension = Context;
-    PPDO_EXTENSION PdoExtension;
-    PDEVICE_OBJECT PdoDeviceObject;
-    NTSTATUS Status;
-
-    /* Create the PDO */
-    Status = IoCreateDevice(DriverObject,
-                            sizeof(PDO_EXTENSION),
-                            NULL,
-                            FILE_DEVICE_BUS_EXTENDER,
-                            FILE_AUTOGENERATED_DEVICE_NAME,
-                            FALSE,
-                            &PdoDeviceObject);
-    if (!NT_SUCCESS(Status))
-    {
-        /* Fail */
-        DPRINT1("HAL: Could not create ACPI device object status=0x%08x\n", Status);
-        return;
-    }
-
-    /* Setup the PDO device extension */
-    PdoExtension = PdoDeviceObject->DeviceExtension;
-    PdoExtension->ExtensionType = PdoExtensionType;
-    PdoExtension->PhysicalDeviceObject = PdoDeviceObject;
-    PdoExtension->ParentFdoExtension = FdoExtension;
-    PdoExtension->PdoType = AcpiPdo;
-
-    /* Add the PDO to the head of the list */
-    PdoExtension->Next = FdoExtension->ChildPdoList;
-    FdoExtension->ChildPdoList = PdoExtension;
-
-    /* Initialization is finished */
-    PdoDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
-
-    /* Invalidate device relations since we added a new device */
-    IoSynchronousInvalidateDeviceRelations(FdoExtension->PhysicalDeviceObject, BusRelations);
-}
-
-NTSTATUS
-NTAPI
-HalpAddDevice(IN PDRIVER_OBJECT DriverObject,
-              IN PDEVICE_OBJECT TargetDevice)
-{
-    NTSTATUS Status;
-    PFDO_EXTENSION FdoExtension;
-    PDEVICE_OBJECT DeviceObject, AttachedDevice;
-//    PDESCRIPTION_HEADER Wdrt;
-
-    DPRINT("HAL: PnP Driver ADD!\n");
-
-    /* Create the FDO */
-    Status = IoCreateDevice(DriverObject,
-                            sizeof(FDO_EXTENSION),
-                            NULL,
-                            FILE_DEVICE_BUS_EXTENDER,
-                            0,
-                            FALSE,
-                            &DeviceObject);
-    if (!NT_SUCCESS(Status))
-    {
-        /* Should not happen */
-        DbgBreakPoint();
-        return Status;
-    }
-
-    /* Setup the FDO extension */
-    FdoExtension = DeviceObject->DeviceExtension;
-    FdoExtension->ExtensionType = FdoExtensionType;
-    FdoExtension->PhysicalDeviceObject = TargetDevice;
-    FdoExtension->FunctionalDeviceObject = DeviceObject;
-    FdoExtension->ChildPdoList = NULL;
-
-    /* FDO is done initializing */
-    DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
-
-    /* Attach to the physical device object (the bus) */
-    AttachedDevice = IoAttachDeviceToDeviceStack(DeviceObject, TargetDevice);
-    if (!AttachedDevice)
-    {
-        /* Failed, undo everything */
-        IoDeleteDevice(DeviceObject);
-        return STATUS_NO_SUCH_DEVICE;
-    }
-
-    /* Save the attachment */
-    FdoExtension->AttachedDeviceObject = AttachedDevice;
-
-    /* Register for reinitialization to report devices later */
-    IoRegisterBootDriverReinitialization(DriverObject,
-                                         HalpReportDetectedDevices,
-                                         FdoExtension);
-
-    /* Return status */
-    DPRINT("Device added %lx\n", Status);
-    return Status;
-}
-
-NTSTATUS
-NTAPI
-HalpQueryInterface(IN PDEVICE_OBJECT DeviceObject,
-                   IN CONST GUID* InterfaceType,
-                   IN USHORT Version,
-                   IN PVOID InterfaceSpecificData,
-                   IN ULONG InterfaceBufferSize,
-                   IN PINTERFACE Interface,
-                   OUT PULONG Length)
-{
-    UNIMPLEMENTED;
-    return STATUS_NOT_SUPPORTED;
-}
-
-NTSTATUS
-NTAPI
-HalpQueryDeviceRelations(IN PDEVICE_OBJECT DeviceObject,
-                         IN DEVICE_RELATION_TYPE RelationType,
-                         OUT PDEVICE_RELATIONS* DeviceRelations)
-{
-    EXTENSION_TYPE ExtensionType;
-    PPDO_EXTENSION PdoExtension;
-    PFDO_EXTENSION FdoExtension;
-    PDEVICE_RELATIONS PdoRelations, FdoRelations;
-    PDEVICE_OBJECT* ObjectEntry;
-    ULONG i = 0, PdoCount = 0;
-
-    /* Get FDO device extension and PDO count */
-    FdoExtension = DeviceObject->DeviceExtension;
-    ExtensionType = FdoExtension->ExtensionType;
-
-    /* What do they want? */
-    if (RelationType == BusRelations)
-    {
-        /* This better be an FDO */
-        if (ExtensionType == FdoExtensionType)
-        {
-            /* Count how many PDOs we have */
-            PdoExtension = FdoExtension->ChildPdoList;
-            while (PdoExtension)
-            {
-                /* Next one */
-                PdoExtension = PdoExtension->Next;
-                PdoCount++;
-            }
-
-            /* Add the PDOs that already exist in the device relations */
-            if (*DeviceRelations)
-            {
-                PdoCount += (*DeviceRelations)->Count;
-            }
-
-            /* Allocate our structure */
-            FdoRelations = ExAllocatePoolWithTag(PagedPool,
-                                                 FIELD_OFFSET(DEVICE_RELATIONS,
-                                                              Objects) +
-                                                 sizeof(PDEVICE_OBJECT) * PdoCount,
-                                                 TAG_HAL);
-            if (!FdoRelations) return STATUS_INSUFFICIENT_RESOURCES;
-
-            /* Save our count */
-            FdoRelations->Count = PdoCount;
-
-            /* Query existing relations */
-            ObjectEntry = FdoRelations->Objects;
-            if (*DeviceRelations)
-            {
-                /* Check if there were any */
-                if ((*DeviceRelations)->Count)
-                {
-                    /* Loop them all */
-                    do
-                    {
-                        /* Copy into our structure */
-                        *ObjectEntry++ = (*DeviceRelations)->Objects[i];
-                    }
-                    while (++i < (*DeviceRelations)->Count);
-                }
-
-                /* Free existing structure */
-                ExFreePool(*DeviceRelations);
-            }
-
-            /* Now check if we have a PDO list */
-            PdoExtension = FdoExtension->ChildPdoList;
-            if (PdoExtension)
-            {
-                /* Loop the PDOs */
-                do
-                {
-                    /* Save our own PDO and reference it */
-                    *ObjectEntry++ = PdoExtension->PhysicalDeviceObject;
-                    ObReferenceObject(PdoExtension->PhysicalDeviceObject);
-
-                    /* Go to our next PDO */
-                    PdoExtension = PdoExtension->Next;
-                }
-                while (PdoExtension);
-            }
-
-            /* Return the new structure */
-            *DeviceRelations = FdoRelations;
-            return STATUS_SUCCESS;
-        }
-    }
-    else
-    {
-        /* The only other thing we support is a target relation for the PDO */
-        if ((RelationType == TargetDeviceRelation) &&
-            (ExtensionType == PdoExtensionType))
-        {
-            /* Only one entry */
-            PdoRelations = ExAllocatePoolWithTag(PagedPool,
-                                                 sizeof(DEVICE_RELATIONS),
-                                                 TAG_HAL);
-            if (!PdoRelations) return STATUS_INSUFFICIENT_RESOURCES;
-
-            /* Fill it out and reference us */
-            PdoRelations->Count = 1;
-            PdoRelations->Objects[0] = DeviceObject;
-            ObReferenceObject(DeviceObject);
-
-            /* Return it */
-            *DeviceRelations = PdoRelations;
-            return STATUS_SUCCESS;
-        }
-    }
-
-    /* We don't support anything else */
-    return STATUS_NOT_SUPPORTED;
-}
-
-NTSTATUS
-NTAPI
-HalpQueryCapabilities(IN PDEVICE_OBJECT DeviceObject,
-                      OUT PDEVICE_CAPABILITIES Capabilities)
-{
-    //PPDO_EXTENSION PdoExtension;
-    NTSTATUS Status;
-    PAGED_CODE();
-
-    /* Get the extension and check for valid version */
-    //PdoExtension = DeviceObject->DeviceExtension;
-    ASSERT(Capabilities->Version == 1);
-    if (Capabilities->Version == 1)
-    {
-        /* Can't lock or eject us */
-        Capabilities->LockSupported = FALSE;
-        Capabilities->EjectSupported = FALSE;
-
-        /* Can't remove or dock us */
-        Capabilities->Removable = FALSE;
-        Capabilities->DockDevice = FALSE;
-
-        /* Can't access us raw */
-        Capabilities->RawDeviceOK = FALSE;
-
-        /* We have a unique ID, and don't bother the user */
-        Capabilities->UniqueID = TRUE;
-        Capabilities->SilentInstall = TRUE;
-
-        /* Fill out the adress */
-        Capabilities->Address = InterfaceTypeUndefined;
-        Capabilities->UINumber = InterfaceTypeUndefined;
-
-        /* Fill out latencies */
-        Capabilities->D1Latency = 0;
-        Capabilities->D2Latency = 0;
-        Capabilities->D3Latency = 0;
-
-        /* Fill out supported device states */
-        Capabilities->DeviceState[PowerSystemWorking] = PowerDeviceD0;
-        Capabilities->DeviceState[PowerSystemHibernate] = PowerDeviceD3;
-        Capabilities->DeviceState[PowerSystemShutdown] = PowerDeviceD3;
-        Capabilities->DeviceState[PowerSystemSleeping3] = PowerDeviceD3;
-
-        /* Done */
-        Status = STATUS_SUCCESS;
-    }
-    else
-    {
-        /* Fail */
-        Status = STATUS_NOT_SUPPORTED;
-    }
-
-    /* Return status */
-    return Status;
-}
-
-NTSTATUS
-NTAPI
-HalpQueryResources(IN PDEVICE_OBJECT DeviceObject,
-                   OUT PCM_RESOURCE_LIST *Resources)
-{
-    PPDO_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
-    NTSTATUS Status;
-    PCM_RESOURCE_LIST ResourceList;
-//    PIO_RESOURCE_REQUIREMENTS_LIST RequirementsList;
-//    PIO_RESOURCE_DESCRIPTOR Descriptor;
-//    PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDesc;
-//    ULONG i;
-    PAGED_CODE();
-
-    /* Only the ACPI PDO has requirements */
-    if (DeviceExtension->PdoType == AcpiPdo)
-    {
-#if 0
-        /* Query ACPI requirements */
-        Status = HalpQueryAcpiResourceRequirements(&RequirementsList);
-        if (!NT_SUCCESS(Status)) return Status;
-
-        ASSERT(RequirementsList->AlternativeLists == 1);
-#endif
-
-        /* Allocate the resourcel ist */
-        ResourceList = ExAllocatePoolWithTag(PagedPool,
-                                             sizeof(CM_RESOURCE_LIST),
-                                             TAG_HAL);
-        if (!ResourceList )
-        {
-            /* Fail, no memory */
-            Status = STATUS_INSUFFICIENT_RESOURCES;
-//            ExFreePoolWithTag(RequirementsList, TAG_HAL);
-            return Status;
-        }
-
-        /* Initialize it */
-        RtlZeroMemory(ResourceList, sizeof(CM_RESOURCE_LIST));
-        ResourceList->Count = 1;
-
-        /* Setup the list fields */
-        ResourceList->List[0].BusNumber = 0;
-        ResourceList->List[0].InterfaceType = PCIBus;
-        ResourceList->List[0].PartialResourceList.Version = 1;
-        ResourceList->List[0].PartialResourceList.Revision = 1;
-        ResourceList->List[0].PartialResourceList.Count = 0;
-
-        /* Setup the first descriptor */
-        //PartialDesc = ResourceList->List[0].PartialResourceList.PartialDescriptors;
-
-        /* Find the requirement descriptor for the SCI */
-#if 0
-        for (i = 0; i < RequirementsList->List[0].Count; i++)
-        {
-            /* Get this descriptor */
-            Descriptor = &RequirementsList->List[0].Descriptors[i];
-            if (Descriptor->Type == CmResourceTypeInterrupt)
-            {
-                /* Copy requirements descriptor into resource descriptor */
-                PartialDesc->Type = CmResourceTypeInterrupt;
-                PartialDesc->ShareDisposition = Descriptor->ShareDisposition;
-                PartialDesc->Flags = Descriptor->Flags;
-                ASSERT(Descriptor->u.Interrupt.MinimumVector ==
-                       Descriptor->u.Interrupt.MaximumVector);
-                PartialDesc->u.Interrupt.Vector = Descriptor->u.Interrupt.MinimumVector;
-                PartialDesc->u.Interrupt.Level = Descriptor->u.Interrupt.MinimumVector;
-                PartialDesc->u.Interrupt.Affinity = 0xFFFFFFFF;
-
-                ResourceList->List[0].PartialResourceList.Count++;
-
-                break;
-            }
-        }
-#endif
-
-        /* Return resources and success */
-        *Resources = ResourceList;
-
-//        ExFreePoolWithTag(RequirementsList, TAG_HAL);
-
-        return STATUS_SUCCESS;
-    }
-    else if (DeviceExtension->PdoType == WdPdo)
-    {
-        /* Watchdog doesn't */
-        return STATUS_NOT_SUPPORTED;
-    }
-    else
-    {
-        /* This shouldn't happen */
-        return STATUS_UNSUCCESSFUL;
-    }
-}
-
-NTSTATUS
-NTAPI
-HalpQueryResourceRequirements(IN PDEVICE_OBJECT DeviceObject,
-                              OUT PIO_RESOURCE_REQUIREMENTS_LIST *Requirements)
-{
-    PPDO_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
-    PAGED_CODE();
-
-    /* Only the ACPI PDO has requirements */
-    if (DeviceExtension->PdoType == AcpiPdo)
-    {
-        /* Query ACPI requirements */
-//        return HalpQueryAcpiResourceRequirements(Requirements);
-        return STATUS_SUCCESS;
-    }
-    else if (DeviceExtension->PdoType == WdPdo)
-    {
-        /* Watchdog doesn't */
-        return STATUS_NOT_SUPPORTED;
-    }
-    else
-    {
-        /* This shouldn't happen */
-        return STATUS_UNSUCCESSFUL;
-    }
-}
-
-NTSTATUS
-NTAPI
-HalpQueryIdPdo(IN PDEVICE_OBJECT DeviceObject,
-               IN BUS_QUERY_ID_TYPE IdType,
-               OUT PUSHORT *BusQueryId)
-{
-    PPDO_EXTENSION PdoExtension;
-    PDO_TYPE PdoType;
-    PWCHAR CurrentId;
-    WCHAR Id[100];
-    NTSTATUS Status;
-    ULONG Length = 0;
-    PWCHAR Buffer;
-
-    /* Get the PDO type */
-    PdoExtension = DeviceObject->DeviceExtension;
-    PdoType = PdoExtension->PdoType;
-
-    /* What kind of ID is being requested? */
-    DPRINT("ID: %d\n", IdType);
-    switch (IdType)
-    {
-        case BusQueryDeviceID:
-        case BusQueryHardwareIDs:
-
-            /* What kind of PDO is this? */
-            if (PdoType == AcpiPdo)
-            {
-                /* ACPI ID */
-                CurrentId = L"PCI_HAL\\PNP0A03";
-                RtlCopyMemory(Id, CurrentId, (wcslen(CurrentId) * sizeof(WCHAR)) + sizeof(UNICODE_NULL));
-                Length += (wcslen(CurrentId) * sizeof(WCHAR)) + sizeof(UNICODE_NULL);
-
-                CurrentId = L"*PNP0A03";
-                RtlCopyMemory(&Id[wcslen(Id) + 1], CurrentId, (wcslen(CurrentId) * sizeof(WCHAR)) + sizeof(UNICODE_NULL));
-                Length += (wcslen(CurrentId) * sizeof(WCHAR)) + sizeof(UNICODE_NULL);
-            }
-#if 0
-            else if (PdoType == WdPdo)
-            {
-                /* WatchDog ID */
-                CurrentId = L"ACPI_HAL\\PNP0C18";
-                RtlCopyMemory(Id, CurrentId, (wcslen(CurrentId) * sizeof(WCHAR)) + sizeof(UNICODE_NULL));
-                Length += (wcslen(CurrentId) * sizeof(WCHAR)) + sizeof(UNICODE_NULL);
-
-                CurrentId = L"*PNP0C18";
-                RtlCopyMemory(&Id[wcslen(Id) + 1], CurrentId, (wcslen(CurrentId) * sizeof(WCHAR)) + sizeof(UNICODE_NULL));
-                Length += (wcslen(CurrentId) * sizeof(WCHAR)) + sizeof(UNICODE_NULL);
-            }
-#endif
-            else
-            {
-                /* Unknown */
-                return STATUS_NOT_SUPPORTED;
-            }
-            break;
-
-        case BusQueryInstanceID:
-
-            /* Instance ID */
-            CurrentId = L"0";
-            RtlCopyMemory(Id, CurrentId, (wcslen(CurrentId) * sizeof(WCHAR)) + sizeof(UNICODE_NULL));
-            Length += (wcslen(CurrentId) * sizeof(WCHAR)) + sizeof(UNICODE_NULL);
-            break;
-
-        case BusQueryCompatibleIDs:
-        default:
-
-            /* We don't support anything else */
-            return STATUS_NOT_SUPPORTED;
-    }
-
-    /* Allocate the buffer */
-    Buffer = ExAllocatePoolWithTag(PagedPool,
-                                   Length + sizeof(UNICODE_NULL),
-                                   TAG_HAL);
-    if (Buffer)
-    {
-        /* Copy the string and null-terminate it */
-        RtlCopyMemory(Buffer, Id, Length);
-        Buffer[Length / sizeof(WCHAR)] = UNICODE_NULL;
-
-        /* Return string */
-        *BusQueryId = Buffer;
-        Status = STATUS_SUCCESS;
-        DPRINT("Returning: %S\n", *BusQueryId);
-    }
-    else
-    {
-        /* Fail */
-        Status = STATUS_INSUFFICIENT_RESOURCES;
-    }
-
-    /* Return status */
-    return Status;
-}
-
-NTSTATUS
-NTAPI
-HalpQueryIdFdo(IN PDEVICE_OBJECT DeviceObject,
-               IN BUS_QUERY_ID_TYPE IdType,
-               OUT PUSHORT *BusQueryId)
-{
-    NTSTATUS Status;
-    ULONG Length;
-    PWCHAR Id;
-    PWCHAR Buffer;
-
-    /* What kind of ID is being requested? */
-    DPRINT("ID: %d\n", IdType);
-    switch (IdType)
-    {
-        case BusQueryDeviceID:
-            /* HACK */
-            Id = L"Root\\PCI_HAL";
-            break;
-
-        case BusQueryHardwareIDs:
-
-            /* This is our hardware ID */
-            Id = HalHardwareIdString;
-            break;
-
-        case BusQueryInstanceID:
-
-            /* And our instance ID */
-            Id = L"0";
-            break;
-
-        default:
-
-            /* We don't support anything else */
-            return STATUS_NOT_SUPPORTED;
-    }
-
-    /* Calculate the length */
-    Length = (wcslen(Id) * sizeof(WCHAR)) + sizeof(UNICODE_NULL);
-
-    /* Allocate the buffer */
-    Buffer = ExAllocatePoolWithTag(PagedPool,
-                                   Length + sizeof(UNICODE_NULL),
-                                   TAG_HAL);
-    if (Buffer)
-    {
-        /* Copy the string and null-terminate it */
-        RtlCopyMemory(Buffer, Id, Length);
-        Buffer[Length / sizeof(WCHAR)] = UNICODE_NULL;
-
-        /* Return string */
-        *BusQueryId = Buffer;
-        Status = STATUS_SUCCESS;
-        DPRINT("Returning: %S\n", *BusQueryId);
-    }
-    else
-    {
-        /* Fail */
-        Status = STATUS_INSUFFICIENT_RESOURCES;
-    }
-
-    /* Return status */
-    return Status;
-}
-
-NTSTATUS
-NTAPI
-HalpDispatchPnp(IN PDEVICE_OBJECT DeviceObject,
-                IN PIRP Irp)
-{
-    PIO_STACK_LOCATION IoStackLocation;
-    //PPDO_EXTENSION PdoExtension;
-    PFDO_EXTENSION FdoExtension;
-    NTSTATUS Status;
-    UCHAR Minor;
-
-    /* Get the device extension and stack location */
-    FdoExtension = DeviceObject->DeviceExtension;
-    IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
-    Minor = IoStackLocation->MinorFunction;
-
-    /* FDO? */
-    if (FdoExtension->ExtensionType == FdoExtensionType)
-    {
-        /* Query the IRP type */
-        switch (Minor)
-        {
-            case IRP_MN_QUERY_DEVICE_RELATIONS:
-
-                /* Call the worker */
-                DPRINT("Querying device relations for FDO\n");
-                Status = HalpQueryDeviceRelations(DeviceObject,
-                                                  IoStackLocation->Parameters.QueryDeviceRelations.Type,
-                                                  (PVOID)&Irp->IoStatus.Information);
-                break;
-
-            case IRP_MN_QUERY_INTERFACE:
-
-                /* Call the worker */
-                DPRINT("Querying interface for FDO\n");
-                Status = HalpQueryInterface(DeviceObject,
-                                            IoStackLocation->Parameters.QueryInterface.InterfaceType,
-                                            IoStackLocation->Parameters.QueryInterface.Size,
-                                            IoStackLocation->Parameters.QueryInterface.InterfaceSpecificData,
-                                            IoStackLocation->Parameters.QueryInterface.Version,
-                                            IoStackLocation->Parameters.QueryInterface.Interface,
-                                            (PVOID)&Irp->IoStatus.Information);
-                break;
-
-            case IRP_MN_QUERY_ID:
-
-                /* Call the worker */
-                DPRINT("Querying ID for FDO\n");
-                Status = HalpQueryIdFdo(DeviceObject,
-                                        IoStackLocation->Parameters.QueryId.IdType,
-                                        (PVOID)&Irp->IoStatus.Information);
-                break;
-
-            case IRP_MN_QUERY_CAPABILITIES:
-
-                /* Call the worker */
-                DPRINT("Querying the capabilities for the FDO\n");
-                Status = HalpQueryCapabilities(DeviceObject,
-                                               IoStackLocation->Parameters.DeviceCapabilities.Capabilities);
-                break;
-
-            default:
-
-                DPRINT("Other IRP: %lx\n", Minor);
-                Status = Irp->IoStatus.Status;
-                break;
-        }
-
-        /* Nowhere for the IRP to go since we also own the PDO */
-        Irp->IoStatus.Status = Status;
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
-        return Status;
-    }
-    else
-    {
-        /* This is a PDO instead */
-        ASSERT(FdoExtension->ExtensionType == PdoExtensionType);
-        //PdoExtension = (PPDO_EXTENSION)FdoExtension;
-
-        /* Query the IRP type */
-        Status = STATUS_SUCCESS;
-        switch (Minor)
-        {
-            case IRP_MN_START_DEVICE:
-
-                /* We only care about a PCI PDO */
-                DPRINT("Start device received\n");
-                /* Complete the IRP normally */
-                break;
-
-            case IRP_MN_REMOVE_DEVICE:
-
-                /* Check if this is a PCI device */
-                DPRINT("Remove device received\n");
-
-                /* We're done */
-                Status = STATUS_SUCCESS;
-                break;
-
-            case IRP_MN_SURPRISE_REMOVAL:
-
-                /* Inherit whatever status we had */
-                DPRINT("Surprise removal IRP\n");
-                Status = Irp->IoStatus.Status;
-                break;
-
-            case IRP_MN_QUERY_DEVICE_RELATIONS:
-
-                /* Query the device relations */
-                DPRINT("Querying PDO relations\n");
-                Status = HalpQueryDeviceRelations(DeviceObject,
-                                                  IoStackLocation->Parameters.QueryDeviceRelations.Type,
-                                                  (PVOID)&Irp->IoStatus.Information);
-                break;
-
-            case IRP_MN_QUERY_INTERFACE:
-
-                /* Call the worker */
-                DPRINT("Querying interface for PDO\n");
-                Status = HalpQueryInterface(DeviceObject,
-                                            IoStackLocation->Parameters.QueryInterface.InterfaceType,
-                                            IoStackLocation->Parameters.QueryInterface.Size,
-                                            IoStackLocation->Parameters.QueryInterface.InterfaceSpecificData,
-                                            IoStackLocation->Parameters.QueryInterface.Version,
-                                            IoStackLocation->Parameters.QueryInterface.Interface,
-                                            (PVOID)&Irp->IoStatus.Information);
-                break;
-
-            case IRP_MN_QUERY_CAPABILITIES:
-
-                /* Call the worker */
-                DPRINT("Querying the capabilities for the PDO\n");
-                Status = HalpQueryCapabilities(DeviceObject,
-                                               IoStackLocation->Parameters.DeviceCapabilities.Capabilities);
-                break;
-
-            case IRP_MN_QUERY_RESOURCES:
-
-                /* Call the worker */
-                DPRINT("Querying the resources for the PDO\n");
-                Status = HalpQueryResources(DeviceObject, (PVOID)&Irp->IoStatus.Information);
-                break;
-
-            case IRP_MN_QUERY_RESOURCE_REQUIREMENTS:
-
-                /* Call the worker */
-                DPRINT("Querying the resource requirements for the PDO\n");
-                Status = HalpQueryResourceRequirements(DeviceObject,
-                                                       (PVOID)&Irp->IoStatus.Information);
-                break;
-
-            case IRP_MN_QUERY_ID:
-
-                /* Call the worker */
-                DPRINT("Query the ID for the PDO\n");
-                Status = HalpQueryIdPdo(DeviceObject,
-                                        IoStackLocation->Parameters.QueryId.IdType,
-                                        (PVOID)&Irp->IoStatus.Information);
-                break;
-
-            case IRP_MN_QUERY_DEVICE_TEXT:
-
-                /* Inherit whatever status we had */
-                DPRINT("Query text for the PDO\n");
-                Status = Irp->IoStatus.Status;
-                break;
-
-            case IRP_MN_FILTER_RESOURCE_REQUIREMENTS:
-
-                /* Inherit whatever status we had */
-                DPRINT("Filter resource requirements for the PDO\n");
-                Status = Irp->IoStatus.Status;
-                break;
-
-            case IRP_MN_QUERY_PNP_DEVICE_STATE:
-
-                /* Inherit whatever status we had */
-                DPRINT("Query device state for the PDO\n");
-                Status = Irp->IoStatus.Status;
-                break;
-
-            case IRP_MN_QUERY_BUS_INFORMATION:
-
-                /* Inherit whatever status we had */
-                DPRINT("Query bus information for the PDO\n");
-                Status = Irp->IoStatus.Status;
-                break;
-
-            default:
-
-                /* We don't handle anything else, so inherit the old state */
-                DPRINT1("Illegal IRP: %lx\n", Minor);
-                Status = Irp->IoStatus.Status;
-                break;
-        }
-
-        /* If it's not supported, inherit the old status */
-        if (Status == STATUS_NOT_SUPPORTED) Status = Irp->IoStatus.Status;
-
-        /* Complete the IRP */
-        DPRINT("IRP completed with status: %lx\n", Status);
-        Irp->IoStatus.Status = Status;
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
-        return Status;
-    }
-}
-
-NTSTATUS
-NTAPI
-HalpDispatchWmi(IN PDEVICE_OBJECT DeviceObject,
-                IN PIRP Irp)
-{
-    UNIMPLEMENTED_DBGBREAK("HAL: PnP Driver WMI!\n");
-    return STATUS_SUCCESS;
-}
-
-NTSTATUS
-NTAPI
-HalpDispatchPower(IN PDEVICE_OBJECT DeviceObject,
-                  IN PIRP Irp)
-{
-    PFDO_EXTENSION FdoExtension;
-
-    DPRINT1("HAL: PnP Driver Power!\n");
-    FdoExtension = DeviceObject->DeviceExtension;
-    if (FdoExtension->ExtensionType == FdoExtensionType)
-    {
-        PoStartNextPowerIrp(Irp);
-        IoSkipCurrentIrpStackLocation(Irp);
-        return PoCallDriver(FdoExtension->AttachedDeviceObject, Irp);
-    }
-    else
-    {
-        PoStartNextPowerIrp(Irp);
-        Irp->IoStatus.Status = STATUS_SUCCESS;
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
-        return STATUS_SUCCESS;
-    }
-}
-
-NTSTATUS
-NTAPI
-HalpDriverEntry(IN PDRIVER_OBJECT DriverObject,
-                IN PUNICODE_STRING RegistryPath)
-{
-    NTSTATUS Status;
-    PDEVICE_OBJECT TargetDevice = NULL;
-
-    DPRINT("HAL: PnP Driver ENTRY!\n");
-
-    /* This is us */
-    HalpDriverObject = DriverObject;
-
-    /* Set up add device */
-    DriverObject->DriverExtension->AddDevice = HalpAddDevice;
-
-    /* Set up the callouts */
-    DriverObject->MajorFunction[IRP_MJ_PNP] = HalpDispatchPnp;
-    DriverObject->MajorFunction[IRP_MJ_POWER] = HalpDispatchPower;
-    DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = HalpDispatchWmi;
-
-    /* Create the PDO */
-    Status = IoCreateDevice(DriverObject,
-                            0,
-                            NULL,
-                            FILE_DEVICE_CONTROLLER,
-                            0,
-                            FALSE,
-                            &TargetDevice);
-    if (!NT_SUCCESS(Status))
-        return Status;
-
-    TargetDevice->Flags &= ~DO_DEVICE_INITIALIZING;
-
-    /* Set up the device stack */
-    Status = HalpAddDevice(DriverObject, TargetDevice);
-    if (!NT_SUCCESS(Status))
-    {
-        IoDeleteDevice(TargetDevice);
-        return Status;
-    }
-
-    /* Tell the PnP manager about us */
-    Status = IoReportDetectedDevice(DriverObject,
-                                    InterfaceTypeUndefined,
-                                    -1,
-                                    -1,
-                                    NULL,
-                                    NULL,
-                                    FALSE,
-                                    &TargetDevice);
-
-    /* Return to kernel */
-    return Status;
-}
-
-NTSTATUS
-NTAPI
-HaliInitPnpDriver(VOID)
-{
-    NTSTATUS Status;
-    UNICODE_STRING DriverString;
-    PAGED_CODE();
-
-    /* Create the driver */
-    RtlInitUnicodeString(&DriverString, L"\\Driver\\PCI_HAL");
-    Status = IoCreateDriver(&DriverString, HalpDriverEntry);
-
-    /* Return status */
-    return Status;
-}
-
-/* EOF */