From f7a16a268d17a4cf635badb434665dc3de4248ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Mon, 11 Feb 2008 16:49:05 +0000 Subject: [PATCH] Bus number can also be stored in resource list header svn path=/trunk/; revision=32297 --- reactos/drivers/bus/pci/fdo.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/reactos/drivers/bus/pci/fdo.c b/reactos/drivers/bus/pci/fdo.c index e92a2943d05..bb86808aa30 100644 --- a/reactos/drivers/bus/pci/fdo.c +++ b/reactos/drivers/bus/pci/fdo.c @@ -356,7 +356,6 @@ FdoStartDevice( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { - static BOOLEAN FoundBuggyAllocatedResourcesList = FALSE; PFDO_DEVICE_EXTENSION DeviceExtension; PCM_RESOURCE_LIST AllocatedResources; PCM_PARTIAL_RESOURCE_DESCRIPTOR ResourceDescriptor; @@ -384,6 +383,9 @@ FdoStartDevice( ASSERT(DeviceExtension->State == dsStopped); + /* By default, use the bus number in the resource list header */ + DeviceExtension->BusNumber = AllocatedResources->List[0].BusNumber; + for (i = 0; i < AllocatedResources->List[0].PartialResourceList.Count; i++) { ResourceDescriptor = &AllocatedResources->List[0].PartialResourceList.PartialDescriptors[i]; @@ -393,6 +395,8 @@ FdoStartDevice( { if (FoundBusNumber || ResourceDescriptor->u.BusNumber.Length != 1) return STATUS_INVALID_PARAMETER; + /* Use this one instead */ + ASSERT(AllocatedResources->List[0].BusNumber == ResourceDescriptor->u.BusNumber.Start); DeviceExtension->BusNumber = ResourceDescriptor->u.BusNumber.Start; DPRINT("Found bus number resource: %lu\n", DeviceExtension->BusNumber); FoundBusNumber = TRUE; @@ -402,22 +406,7 @@ FdoStartDevice( DPRINT("Unknown resource descriptor type 0x%x\n", ResourceDescriptor->Type); } } - /* HACK due to a bug in ACPI driver, which doesn't report the bus number */ - if (!FoundBuggyAllocatedResourcesList && !FoundBusNumber) - { - FoundBuggyAllocatedResourcesList = TRUE; - DPRINT1("No bus number resource found (bug in acpi.sys?), assuming bus number #0\n"); - DeviceExtension->BusNumber = 0; - goto next; - } - /* END HACK */ - if (!FoundBusNumber) - { - DPRINT("Some required resources were not found in allocated resources list\n"); - return STATUS_INSUFFICIENT_RESOURCES; - } -next: InitializeListHead(&DeviceExtension->DeviceListHead); KeInitializeSpinLock(&DeviceExtension->DeviceListLock); DeviceExtension->DeviceListCount = 0;