Patchwork acpi: method: format _TSS states into a table

login
register
mail settings
Submitter Colin King
Date Jan. 8, 2013, 11 a.m.
Message ID <1357642837-8832-1-git-send-email-colin.king@canonical.com>
Download mbox | patch
Permalink /patch/210338/
State Rejected
Headers show

Comments

Colin King - Jan. 8, 2013, 11 a.m.
From: Colin Ian King <colin.king@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@canonical.com>
---
 src/acpi/method/method.c | 53 ++++++++++++++++++++++++++++++++++--------------
 1 file changed, 38 insertions(+), 15 deletions(-)
Colin King - Jan. 8, 2013, 11:01 a.m.
NACK, Wrong patch, please ignore.

On 08/01/13 11:00, Colin King wrote:
> From: Colin Ian King <colin.king@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@canonical.com>
> ---
>   src/acpi/method/method.c | 53 ++++++++++++++++++++++++++++++++++--------------
>   1 file changed, 38 insertions(+), 15 deletions(-)
>
> diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
> index f22447e..91e812f 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,32 @@ 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);
> +			}
> +		}
>   	}
>
>   	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)
>

Patch

diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
index f22447e..91e812f 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,32 @@  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);
+			}
+		}
 	}
 
 	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)