Author: cgutman Date: Wed Jun 9 23:02:34 2010 New Revision: 47729
URL: http://svn.reactos.org/svn/reactos?rev=47729&view=rev Log: [ACPI] - Create a resource list for the PCI root bus (even though it doesn't use any resources according to ACPI) and fill it with a bus number resource descriptor - Fixes PCI device detection with ACPI enabled
Modified: trunk/reactos/drivers/bus/acpi/buspdo.c
Modified: trunk/reactos/drivers/bus/acpi/buspdo.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/bus/acpi/buspdo.c?r... ============================================================================== --- trunk/reactos/drivers/bus/acpi/buspdo.c [iso-8859-1] (original) +++ trunk/reactos/drivers/bus/acpi/buspdo.c [iso-8859-1] Wed Jun 9 23:02:34 2010 @@ -644,6 +644,37 @@ ACPI_RESOURCE* resource; ULONG ResourceListSize; ULONG i; + ULONGLONG BusNumber; + + /* A bus number resource is not included in the list of current resources + * for the root PCI bus so we manually query one here and if we find it + * we create a resource list and add a bus number descriptor to it */ + AcpiStatus = acpi_evaluate_integer(DeviceData->AcpiHandle, "_BBN", NULL, &BusNumber); + if (AcpiStatus == AE_OK) + { + DPRINT1("Found PCI root hub: %d\n", BusNumber); + + ResourceListSize = sizeof(CM_RESOURCE_LIST); + ResourceList = (PCM_RESOURCE_LIST)ExAllocatePool(PagedPool, ResourceListSize); + if (!ResourceList) + return STATUS_INSUFFICIENT_RESOURCES; + + ResourceList->Count = 1; + ResourceList->List[0].InterfaceType = Internal; + ResourceList->List[0].BusNumber = 0; + ResourceList->List[0].PartialResourceList.Version = 1; + ResourceList->List[0].PartialResourceList.Revision = 1; + ResourceList->List[0].PartialResourceList.Count = 1; + ResourceDescriptor = ResourceList->List[0].PartialResourceList.PartialDescriptors; + + ResourceDescriptor->Type = CmResourceTypeBusNumber; + ResourceDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; + ResourceDescriptor->u.BusNumber.Start = BusNumber; + ResourceDescriptor->u.BusNumber.Length = 1; + + Irp->IoStatus.Information = (ULONG_PTR)ResourceList; + return STATUS_SUCCESS; + }
/* Get current resources */ Buffer.Length = 0;