Author: mmlr Date: 2011-05-08 03:15:39 +0200 (Sun, 08 May 2011) New Revision: 41372 Changeset: https://dev.haiku-os.org/changeset/41372 Modified: haiku/trunk/headers/os/drivers/ACPI.h haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_module.c haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h Log: Basically revert r41365. Remove the get_pci_info() function of ACPI again as it turns out to be flaky, is a little bit of a hack anyway and performs unnecessary operations. The functionality is now handled kernel side which optimizes those problems away. Modified: haiku/trunk/headers/os/drivers/ACPI.h =================================================================== --- haiku/trunk/headers/os/drivers/ACPI.h 2011-05-08 01:07:39 UTC (rev 41371) +++ haiku/trunk/headers/os/drivers/ACPI.h 2011-05-08 01:15:39 UTC (rev 41372) @@ -136,14 +136,6 @@ }; -typedef struct acpi_pci_info { - uint16 segment; - uint16 bus; - uint16 device; - uint16 function; -} acpi_pci_info; - - /* * acpi_status should return ACPI specific error codes, not BeOS ones. */ @@ -257,10 +249,6 @@ size_t size); status_t (*enter_sleep_state)(uint8 state); status_t (*reboot)(void); - - /* PCI specific info */ - status_t (*get_pci_info)(acpi_handle pciRootBridge, acpi_handle device, - acpi_pci_info *info); }; Modified: haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c =================================================================== --- haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c 2011-05-08 01:07:39 UTC (rev 41371) +++ haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c 2011-05-08 01:15:39 UTC (rev 41372) @@ -705,48 +705,6 @@ } -status_t -get_pci_info(acpi_handle pciRootBridge, acpi_handle device, acpi_pci_info *info) -{ - ACPI_STATUS status; - ACPI_HANDLE childNode; - uint64 deviceAddress = 0; - uint64 segment = 0; - uint64 busNumber = 0; - - // We reset the structure to 0 here. Any failed evaluation means default - // values, so we don't have to do anything in the error case. - memset(info, 0, sizeof(acpi_pci_info)); - - status = AcpiUtEvaluateNumericObject(METHOD_NAME__ADR, device, - &deviceAddress); - if (status == AE_OK) { - info->device = (uint8)(deviceAddress >> 16); - info->function = (uint8)deviceAddress; - } - - status = AcpiUtEvaluateNumericObject(METHOD_NAME__SEG, pciRootBridge, - &segment); - if (status == AE_OK) - info->segment = (uint8)segment; - - status = AcpiUtEvaluateNumericObject(METHOD_NAME__BBN, pciRootBridge, - &busNumber); - if (status == AE_OK) - info->bus = (uint8)busNumber; - - // since AcpiHwDerivePciId assumes getting a child object of the device - // it iterates one step less than we need - get any child node to work - // around that - status = AcpiGetNextObject(ACPI_TYPE_METHOD, device, NULL, &childNode); - if (status != AE_OK) - return B_ERROR; - - status = AcpiHwDerivePciId((ACPI_PCI_ID*)info, pciRootBridge, childNode); - return status == AE_OK ? B_OK : B_ERROR; -} - - struct acpi_module_info gACPIModule = { { B_ACPI_MODULE_NAME, @@ -785,6 +743,5 @@ get_possible_resources, prepare_sleep_state, enter_sleep_state, - reboot, - get_pci_info + reboot }; Modified: haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_module.c =================================================================== --- haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_module.c 2011-05-08 01:07:39 UTC (rev 41371) +++ haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_module.c 2011-05-08 01:15:39 UTC (rev 41372) @@ -218,8 +218,7 @@ get_possible_resources, prepare_sleep_state, enter_sleep_state, - reboot, - get_pci_info + reboot }; Modified: haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h =================================================================== --- haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h 2011-05-08 01:07:39 UTC (rev 41371) +++ haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h 2011-05-08 01:15:39 UTC (rev 41372) @@ -132,10 +132,6 @@ size_t size); status_t (*enter_sleep_state)(uint8 state); status_t (*reboot)(void); - - /* PCI specific info */ - status_t (*get_pci_info)(acpi_handle pciRootBridge, acpi_handle device, - acpi_pci_info *info); } acpi_root_info; @@ -210,9 +206,6 @@ status_t reboot(void); -status_t get_pci_info(acpi_handle pciRootBridge, acpi_handle device, - acpi_pci_info *info); - __END_DECLS