|
@@ -152,15 +152,59 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int acpi_processor_ppc_has_changed(struct acpi_processor *pr)
|
|
|
+#define ACPI_PROCESSOR_NOTIFY_PERFORMANCE 0x80
|
|
|
+/*
|
|
|
+ * acpi_processor_ppc_ost: Notify firmware the _PPC evaluation status
|
|
|
+ * @handle: ACPI processor handle
|
|
|
+ * @status: the status code of _PPC evaluation
|
|
|
+ * 0: success. OSPM is now using the performance state specificed.
|
|
|
+ * 1: failure. OSPM has not changed the number of P-states in use
|
|
|
+ */
|
|
|
+static void acpi_processor_ppc_ost(acpi_handle handle, int status)
|
|
|
+{
|
|
|
+ union acpi_object params[2] = {
|
|
|
+ {.type = ACPI_TYPE_INTEGER,},
|
|
|
+ {.type = ACPI_TYPE_INTEGER,},
|
|
|
+ };
|
|
|
+ struct acpi_object_list arg_list = {2, params};
|
|
|
+ acpi_handle temp;
|
|
|
+
|
|
|
+ params[0].integer.value = ACPI_PROCESSOR_NOTIFY_PERFORMANCE;
|
|
|
+ params[1].integer.value = status;
|
|
|
+
|
|
|
+ /* when there is no _OST , skip it */
|
|
|
+ if (ACPI_FAILURE(acpi_get_handle(handle, "_OST", &temp)))
|
|
|
+ return;
|
|
|
+
|
|
|
+ acpi_evaluate_object(handle, "_OST", &arg_list, NULL);
|
|
|
+ return;
|
|
|
+}
|
|
|
+
|
|
|
+int acpi_processor_ppc_has_changed(struct acpi_processor *pr, int event_flag)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
- if (ignore_ppc)
|
|
|
+ if (ignore_ppc) {
|
|
|
+ /*
|
|
|
+ * Only when it is notification event, the _OST object
|
|
|
+ * will be evaluated. Otherwise it is skipped.
|
|
|
+ */
|
|
|
+ if (event_flag)
|
|
|
+ acpi_processor_ppc_ost(pr->handle, 1);
|
|
|
return 0;
|
|
|
+ }
|
|
|
|
|
|
ret = acpi_processor_get_platform_limit(pr);
|
|
|
-
|
|
|
+ /*
|
|
|
+ * Only when it is notification event, the _OST object
|
|
|
+ * will be evaluated. Otherwise it is skipped.
|
|
|
+ */
|
|
|
+ if (event_flag) {
|
|
|
+ if (ret < 0)
|
|
|
+ acpi_processor_ppc_ost(pr->handle, 1);
|
|
|
+ else
|
|
|
+ acpi_processor_ppc_ost(pr->handle, 0);
|
|
|
+ }
|
|
|
if (ret < 0)
|
|
|
return (ret);
|
|
|
else
|