[PATCH] acpi: method: format _TSS states into a table
Keng-Yu Lin
kengyu at canonical.com
Wed Jan 23 07:02:20 UTC 2013
On Tue, Jan 8, 2013 at 7:18 PM, Colin King <colin.king at canonical.com> wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> The output from _TSS is a bit messy, so re-work this to output
> all the valid states into a table which is more compact and easier
> to read.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> src/acpi/method/method.c | 57 +++++++++++++++++++++++++++++++++++-------------
> 1 file changed, 42 insertions(+), 15 deletions(-)
>
> diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
> index f22447e..231b5fb 100644
> --- a/src/acpi/method/method.c
> +++ b/src/acpi/method/method.c
> @@ -2706,6 +2706,8 @@ static void method_test_TSS_return(
> {
> uint32_t i;
> bool failed = false;
> + bool *tss_elements_ok;
> + bool an_element_ok = false;
>
> FWTS_UNUSED(private);
>
> @@ -2722,11 +2724,18 @@ static void method_test_TSS_return(
> return;
> }
>
> + tss_elements_ok = calloc(obj->Package.Count, sizeof(bool));
> + if (tss_elements_ok == NULL) {
> + fwts_log_error(fw, "Cannot allocate an array. Test aborted.");
> + return;
> + }
> +
> /* Could be one or more packages */
> for (i = 0; i < obj->Package.Count; i++) {
> ACPI_OBJECT *pkg;
> uint32_t j;
> - bool elements_ok = true;
> +
> + tss_elements_ok[i] = true;
>
> if (obj->Package.Elements[i].Type != ACPI_TYPE_PACKAGE) {
> fwts_failed(fw, LOG_LEVEL_MEDIUM,
> @@ -2734,6 +2743,7 @@ static void method_test_TSS_return(
> "_TSS package element %" PRIu32
> " was not a package.", i);
> fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
> + tss_elements_ok[i] = false;
> failed = true;
> continue; /* Skip processing sub-package */
> }
> @@ -2750,6 +2760,7 @@ static void method_test_TSS_return(
> "got %" PRIu32" elements instead.",
> i, pkg->Package.Count);
> fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
> + tss_elements_ok[i] = false;
> failed = true;
> continue; /* Skip processing sub-package */
> }
> @@ -2762,14 +2773,17 @@ static void method_test_TSS_return(
> " element %" PRIu32 " is not "
> "an integer.", i, j);
> fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
> - elements_ok = false;
> + tss_elements_ok[i] = false;
> }
> }
> - if (!elements_ok) {
> + if (!tss_elements_ok[i]) {
> failed = true;
> continue;
> }
>
> + /* At least one element is OK, so remember that */
> + an_element_ok = true;
> +
> /* Element 0 must be 1..100 */
> if ((pkg->Package.Elements[0].Integer.Value < 1) ||
> (pkg->Package.Elements[0].Integer.Value > 100)) {
> @@ -2784,23 +2798,36 @@ static void method_test_TSS_return(
> failed = true;
> }
> /* Skip checking elements 1..4 */
> + }
> +
> + /* Summary info */
> + if (an_element_ok) {
> + fwts_log_info_verbatum(fw, "%s values:", name);
> + fwts_log_info_verbatum(fw, "T-State CPU Power Latency Control Status");
> + fwts_log_info_verbatum(fw, " Freq (mW) (usecs)");
> + for (i = 0; i < obj->Package.Count; i++) {
> + if (tss_elements_ok[i]) {
> + ACPI_OBJECT *pkg = &obj->Package.Elements[i];
>
> - fwts_log_info(fw, "TSS [%" PRIu32 "]:", i);
> - fwts_log_info_verbatum(fw, " CPU frequency: %" PRIu64 "%%",
> - pkg->Package.Elements[0].Integer.Value);
> - fwts_log_info_verbatum(fw, " Power : %" PRIu64 " (mW)",
> - pkg->Package.Elements[1].Integer.Value);
> - fwts_log_info_verbatum(fw, " Latency : %" PRIu64 " microseconds",
> - pkg->Package.Elements[2].Integer.Value);
> - fwts_log_info_verbatum(fw, " Control : 0x%" PRIx64,
> - pkg->Package.Elements[3].Integer.Value);
> - fwts_log_info_verbatum(fw, " Status : 0x%" PRIx64,
> - pkg->Package.Elements[4].Integer.Value);
> + fwts_log_info_verbatum(fw,
> + " %3d %3" PRIu64 "%% %7" PRIu64 " %7" PRIu64
> + " %2.2" PRIx64 " %2.2" PRIx64, i,
> + pkg->Package.Elements[0].Integer.Value,
> + pkg->Package.Elements[1].Integer.Value,
> + pkg->Package.Elements[2].Integer.Value,
> + pkg->Package.Elements[3].Integer.Value,
> + pkg->Package.Elements[4].Integer.Value);
> + } else {
> + fwts_log_info_verbatum(fw,
> + " %3d ---- ----- ----- -- -- (invalid)", i);
> + }
> + }
> }
> + free(tss_elements_ok);
>
> if (!failed)
> fwts_passed(fw,
> - "_TSD correctly returned sane looking package.");
> + "_TSS correctly returned sane looking package.");
> }
>
> static int method_test_TSS(fwts_framework *fw)
> --
> 1.8.0
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>
More information about the fwts-devel
mailing list