Commit 2eb06097 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

Merge branch 'acpi-ost'

* acpi-ost:
  ACPI: Drop acpi_evaluate_hotplug_ost() and ACPI_HOTPLUG_OST
  ACPI: use device name LNXSYBUS.xx for ACPI \_SB and \_TZ objects
  ACPI / processor: use acpi_evaluate_ost() to replace open-coded version
  ACPI / PAD / xen: use acpi_evaluate_ost() to replace open-coded version
  ACPI / PAD: use acpi_evaluate_ost() to replace open-coded version
  ACPI: rename acpi_evaluate_hotplug_ost() to acpi_evaluate_ost()
parents 75c44edd 700b8422
...@@ -408,28 +408,14 @@ static int acpi_pad_pur(acpi_handle handle) ...@@ -408,28 +408,14 @@ static int acpi_pad_pur(acpi_handle handle)
return num; return num;
} }
/* Notify firmware how many CPUs are idle */
static void acpi_pad_ost(acpi_handle handle, int stat,
uint32_t idle_cpus)
{
union acpi_object params[3] = {
{.type = ACPI_TYPE_INTEGER,},
{.type = ACPI_TYPE_INTEGER,},
{.type = ACPI_TYPE_BUFFER,},
};
struct acpi_object_list arg_list = {3, params};
params[0].integer.value = ACPI_PROCESSOR_AGGREGATOR_NOTIFY;
params[1].integer.value = stat;
params[2].buffer.length = 4;
params[2].buffer.pointer = (void *)&idle_cpus;
acpi_evaluate_object(handle, "_OST", &arg_list, NULL);
}
static void acpi_pad_handle_notify(acpi_handle handle) static void acpi_pad_handle_notify(acpi_handle handle)
{ {
int num_cpus; int num_cpus;
uint32_t idle_cpus; uint32_t idle_cpus;
struct acpi_buffer param = {
.length = 4,
.pointer = (void *)&idle_cpus,
};
mutex_lock(&isolated_cpus_lock); mutex_lock(&isolated_cpus_lock);
num_cpus = acpi_pad_pur(handle); num_cpus = acpi_pad_pur(handle);
...@@ -439,7 +425,7 @@ static void acpi_pad_handle_notify(acpi_handle handle) ...@@ -439,7 +425,7 @@ static void acpi_pad_handle_notify(acpi_handle handle)
} }
acpi_pad_idle_cpus(num_cpus); acpi_pad_idle_cpus(num_cpus);
idle_cpus = acpi_pad_idle_cpus_num(); idle_cpus = acpi_pad_idle_cpus_num();
acpi_pad_ost(handle, 0, idle_cpus); acpi_evaluate_ost(handle, ACPI_PROCESSOR_AGGREGATOR_NOTIFY, 0, &param);
mutex_unlock(&isolated_cpus_lock); mutex_unlock(&isolated_cpus_lock);
} }
......
...@@ -311,9 +311,7 @@ static void acpi_bus_osc_support(void) ...@@ -311,9 +311,7 @@ static void acpi_bus_osc_support(void)
capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_PPC_OST_SUPPORT; capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_PPC_OST_SUPPORT;
#endif #endif
#ifdef ACPI_HOTPLUG_OST
capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_HOTPLUG_OST_SUPPORT; capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_HOTPLUG_OST_SUPPORT;
#endif
if (!ghes_disable) if (!ghes_disable)
capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_APEI_SUPPORT; capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_APEI_SUPPORT;
...@@ -410,7 +408,7 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data) ...@@ -410,7 +408,7 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
return; return;
err: err:
acpi_evaluate_hotplug_ost(handle, type, ost_code, NULL); acpi_evaluate_ost(handle, type, ost_code, NULL);
} }
/* -------------------------------------------------------------------------- /* --------------------------------------------------------------------------
......
...@@ -156,17 +156,9 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr) ...@@ -156,17 +156,9 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
*/ */
static void acpi_processor_ppc_ost(acpi_handle handle, int status) static void acpi_processor_ppc_ost(acpi_handle handle, int status)
{ {
union acpi_object params[2] = { if (acpi_has_method(handle, "_OST"))
{.type = ACPI_TYPE_INTEGER,}, acpi_evaluate_ost(handle, ACPI_PROCESSOR_NOTIFY_PERFORMANCE,
{.type = ACPI_TYPE_INTEGER,}, status, NULL);
};
struct acpi_object_list arg_list = {2, params};
if (acpi_has_method(handle, "_OST")) {
params[0].integer.value = ACPI_PROCESSOR_NOTIFY_PERFORMANCE;
params[1].integer.value = status;
acpi_evaluate_object(handle, "_OST", &arg_list, NULL);
}
} }
int acpi_processor_ppc_has_changed(struct acpi_processor *pr, int event_flag) int acpi_processor_ppc_has_changed(struct acpi_processor *pr, int event_flag)
......
...@@ -474,7 +474,7 @@ static int acpi_generic_hotplug_event(struct acpi_device *adev, u32 type) ...@@ -474,7 +474,7 @@ static int acpi_generic_hotplug_event(struct acpi_device *adev, u32 type)
dev_info(&adev->dev, "Eject disabled\n"); dev_info(&adev->dev, "Eject disabled\n");
return -EPERM; return -EPERM;
} }
acpi_evaluate_hotplug_ost(adev->handle, ACPI_NOTIFY_EJECT_REQUEST, acpi_evaluate_ost(adev->handle, ACPI_NOTIFY_EJECT_REQUEST,
ACPI_OST_SC_EJECT_IN_PROGRESS, NULL); ACPI_OST_SC_EJECT_IN_PROGRESS, NULL);
return acpi_scan_hot_remove(adev); return acpi_scan_hot_remove(adev);
} }
...@@ -524,7 +524,7 @@ void acpi_device_hotplug(struct acpi_device *adev, u32 src) ...@@ -524,7 +524,7 @@ void acpi_device_hotplug(struct acpi_device *adev, u32 src)
ost_code = ACPI_OST_SC_SUCCESS; ost_code = ACPI_OST_SC_SUCCESS;
err_out: err_out:
acpi_evaluate_hotplug_ost(adev->handle, src, ost_code, NULL); acpi_evaluate_ost(adev->handle, src, ost_code, NULL);
out: out:
acpi_bus_put_acpi_device(adev); acpi_bus_put_acpi_device(adev);
...@@ -583,7 +583,7 @@ acpi_eject_store(struct device *d, struct device_attribute *attr, ...@@ -583,7 +583,7 @@ acpi_eject_store(struct device *d, struct device_attribute *attr,
return count; return count;
put_device(&acpi_device->dev); put_device(&acpi_device->dev);
acpi_evaluate_hotplug_ost(acpi_device->handle, ACPI_OST_EC_OSPM_EJECT, acpi_evaluate_ost(acpi_device->handle, ACPI_OST_EC_OSPM_EJECT,
ACPI_OST_SC_NON_SPECIFIC_FAILURE, NULL); ACPI_OST_SC_NON_SPECIFIC_FAILURE, NULL);
return status == AE_NO_MEMORY ? -ENOMEM : -EAGAIN; return status == AE_NO_MEMORY ? -ENOMEM : -EAGAIN;
} }
...@@ -1757,6 +1757,20 @@ static bool acpi_ibm_smbus_match(acpi_handle handle) ...@@ -1757,6 +1757,20 @@ static bool acpi_ibm_smbus_match(acpi_handle handle)
return false; return false;
} }
static bool acpi_object_is_system_bus(acpi_handle handle)
{
acpi_handle tmp;
if (ACPI_SUCCESS(acpi_get_handle(NULL, "\\_SB", &tmp)) &&
tmp == handle)
return true;
if (ACPI_SUCCESS(acpi_get_handle(NULL, "\\_TZ", &tmp)) &&
tmp == handle)
return true;
return false;
}
static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp, static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp,
int device_type) int device_type)
{ {
...@@ -1808,8 +1822,10 @@ static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp, ...@@ -1808,8 +1822,10 @@ static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp,
acpi_add_id(pnp, ACPI_DOCK_HID); acpi_add_id(pnp, ACPI_DOCK_HID);
else if (acpi_ibm_smbus_match(handle)) else if (acpi_ibm_smbus_match(handle))
acpi_add_id(pnp, ACPI_SMBUS_IBM_HID); acpi_add_id(pnp, ACPI_SMBUS_IBM_HID);
else if (list_empty(&pnp->ids) && handle == ACPI_ROOT_OBJECT) { else if (list_empty(&pnp->ids) &&
acpi_add_id(pnp, ACPI_BUS_HID); /* \_SB, LNXSYBUS */ acpi_object_is_system_bus(handle)) {
/* \_SB, \_TZ, LNXSYBUS */
acpi_add_id(pnp, ACPI_BUS_HID);
strcpy(pnp->device_name, ACPI_BUS_DEVICE_NAME); strcpy(pnp->device_name, ACPI_BUS_DEVICE_NAME);
strcpy(pnp->device_class, ACPI_BUS_CLASS); strcpy(pnp->device_class, ACPI_BUS_CLASS);
} }
......
...@@ -422,7 +422,7 @@ acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld ...@@ -422,7 +422,7 @@ acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld
EXPORT_SYMBOL(acpi_get_physical_device_location); EXPORT_SYMBOL(acpi_get_physical_device_location);
/** /**
* acpi_evaluate_hotplug_ost: Evaluate _OST for hotplug operations * acpi_evaluate_ost: Evaluate _OST for hotplug operations
* @handle: ACPI device handle * @handle: ACPI device handle
* @source_event: source event code * @source_event: source event code
* @status_code: status code * @status_code: status code
...@@ -433,17 +433,15 @@ EXPORT_SYMBOL(acpi_get_physical_device_location); ...@@ -433,17 +433,15 @@ EXPORT_SYMBOL(acpi_get_physical_device_location);
* When the platform does not support _OST, this function has no effect. * When the platform does not support _OST, this function has no effect.
*/ */
acpi_status acpi_status
acpi_evaluate_hotplug_ost(acpi_handle handle, u32 source_event, acpi_evaluate_ost(acpi_handle handle, u32 source_event, u32 status_code,
u32 status_code, struct acpi_buffer *status_buf) struct acpi_buffer *status_buf)
{ {
#ifdef ACPI_HOTPLUG_OST
union acpi_object params[3] = { union acpi_object params[3] = {
{.type = ACPI_TYPE_INTEGER,}, {.type = ACPI_TYPE_INTEGER,},
{.type = ACPI_TYPE_INTEGER,}, {.type = ACPI_TYPE_INTEGER,},
{.type = ACPI_TYPE_BUFFER,} {.type = ACPI_TYPE_BUFFER,}
}; };
struct acpi_object_list arg_list = {3, params}; struct acpi_object_list arg_list = {3, params};
acpi_status status;
params[0].integer.value = source_event; params[0].integer.value = source_event;
params[1].integer.value = status_code; params[1].integer.value = status_code;
...@@ -455,13 +453,9 @@ acpi_evaluate_hotplug_ost(acpi_handle handle, u32 source_event, ...@@ -455,13 +453,9 @@ acpi_evaluate_hotplug_ost(acpi_handle handle, u32 source_event,
params[2].buffer.length = 0; params[2].buffer.length = 0;
} }
status = acpi_evaluate_object(handle, "_OST", &arg_list, NULL); return acpi_evaluate_object(handle, "_OST", &arg_list, NULL);
return status;
#else
return AE_OK;
#endif
} }
EXPORT_SYMBOL(acpi_evaluate_hotplug_ost); EXPORT_SYMBOL(acpi_evaluate_ost);
/** /**
* acpi_handle_printk: Print message with ACPI prefix and object path * acpi_handle_printk: Print message with ACPI prefix and object path
......
...@@ -313,7 +313,7 @@ static void acpi_processor_hotplug_notify(acpi_handle handle, ...@@ -313,7 +313,7 @@ static void acpi_processor_hotplug_notify(acpi_handle handle,
goto out; goto out;
} }
(void) acpi_evaluate_hotplug_ost(handle, event, ost_code, NULL); (void) acpi_evaluate_ost(handle, event, ost_code, NULL);
out: out:
acpi_scan_lock_release(); acpi_scan_lock_release();
......
...@@ -285,7 +285,7 @@ static void acpi_memory_device_notify(acpi_handle handle, u32 event, void *data) ...@@ -285,7 +285,7 @@ static void acpi_memory_device_notify(acpi_handle handle, u32 event, void *data)
return; return;
} }
(void) acpi_evaluate_hotplug_ost(handle, event, ost_code, NULL); (void) acpi_evaluate_ost(handle, event, ost_code, NULL);
return; return;
} }
......
...@@ -77,27 +77,14 @@ static int acpi_pad_pur(acpi_handle handle) ...@@ -77,27 +77,14 @@ static int acpi_pad_pur(acpi_handle handle)
return num; return num;
} }
/* Notify firmware how many CPUs are idle */
static void acpi_pad_ost(acpi_handle handle, int stat,
uint32_t idle_nums)
{
union acpi_object params[3] = {
{.type = ACPI_TYPE_INTEGER,},
{.type = ACPI_TYPE_INTEGER,},
{.type = ACPI_TYPE_BUFFER,},
};
struct acpi_object_list arg_list = {3, params};
params[0].integer.value = ACPI_PROCESSOR_AGGREGATOR_NOTIFY;
params[1].integer.value = stat;
params[2].buffer.length = 4;
params[2].buffer.pointer = (void *)&idle_nums;
acpi_evaluate_object(handle, "_OST", &arg_list, NULL);
}
static void acpi_pad_handle_notify(acpi_handle handle) static void acpi_pad_handle_notify(acpi_handle handle)
{ {
int idle_nums; int idle_nums;
struct acpi_buffer param = {
.length = 4,
.pointer = (void *)&idle_nums,
};
mutex_lock(&xen_cpu_lock); mutex_lock(&xen_cpu_lock);
idle_nums = acpi_pad_pur(handle); idle_nums = acpi_pad_pur(handle);
...@@ -109,7 +96,8 @@ static void acpi_pad_handle_notify(acpi_handle handle) ...@@ -109,7 +96,8 @@ static void acpi_pad_handle_notify(acpi_handle handle)
idle_nums = xen_acpi_pad_idle_cpus(idle_nums) idle_nums = xen_acpi_pad_idle_cpus(idle_nums)
?: xen_acpi_pad_idle_cpus_num(); ?: xen_acpi_pad_idle_cpus_num();
if (idle_nums >= 0) if (idle_nums >= 0)
acpi_pad_ost(handle, 0, idle_nums); acpi_evaluate_ost(handle, ACPI_PROCESSOR_AGGREGATOR_NOTIFY,
0, &param);
mutex_unlock(&xen_cpu_lock); mutex_unlock(&xen_cpu_lock);
} }
......
...@@ -49,8 +49,8 @@ acpi_evaluate_reference(acpi_handle handle, ...@@ -49,8 +49,8 @@ acpi_evaluate_reference(acpi_handle handle,
struct acpi_object_list *arguments, struct acpi_object_list *arguments,
struct acpi_handle_list *list); struct acpi_handle_list *list);
acpi_status acpi_status
acpi_evaluate_hotplug_ost(acpi_handle handle, u32 source_event, acpi_evaluate_ost(acpi_handle handle, u32 source_event, u32 status_code,
u32 status_code, struct acpi_buffer *status_buf); struct acpi_buffer *status_buf);
acpi_status acpi_status
acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld); acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment