[PATCH 2/3] acpi: method: add _GPE test

Alex Hung alex.hung at canonical.com
Tue Sep 15 09:25:32 UTC 2015


Signed-off-by: Alex Hung <alex.hung at canonical.com>
---
 src/acpi/method/method.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 56 insertions(+), 2 deletions(-)

diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
index b3df7e5..8172336 100644
--- a/src/acpi/method/method.c
+++ b/src/acpi/method/method.c
@@ -109,7 +109,7 @@
  * _GL   5.7.1		n/a
  * _GLK  6.5.7		Y
  * _GPD  B.4.4		Y
- * _GPE  5.3.1, 12.11	N
+ * _GPE  12.11		Y
  * _GRT  9.18.3		Y
  * _GSB  6.2.6		Y
  * _GTF  9.8.1.1	Y
@@ -5779,6 +5779,58 @@ static int method_test_TZP(fwts_framework *fw)
 		"_TZP", NULL, 0, method_test_polling_return, "_TZP");
 }
 
+static void method_test_GPE_return(
+	fwts_framework *fw,
+	char *name,
+	ACPI_BUFFER *buf,
+	ACPI_OBJECT *obj,
+	void *private)
+{
+	FWTS_UNUSED(private);
+	FWTS_UNUSED(buf);
+	bool failed = false;
+
+	switch (obj->Type) {
+	case ACPI_TYPE_INTEGER:
+		if (obj->Integer.Value <= 255)
+			fwts_passed(fw, "%s returned an integer 0x%8.8" PRIx64,
+				name, (uint64_t)obj->Integer.Value);
+		else
+			fwts_failed(fw, LOG_LEVEL_HIGH,
+				"MethodGPEInvalidInteger",
+				"%s returned an invalid integer 0x%8.8" PRIx64,
+				name, (uint64_t)obj->Integer.Value);
+		break;
+	case ACPI_TYPE_PACKAGE:
+		if (obj->Package.Elements[0].Type != ACPI_TYPE_LOCAL_REFERENCE) {
+			failed = true;
+			fwts_failed(fw, LOG_LEVEL_HIGH, "Method_GPEBadSubPackageReturnType",
+			"%s sub-package element 0 is not a reference.",	name);
+		}
+
+		if (obj->Package.Elements[1].Type != ACPI_TYPE_INTEGER) {
+			failed = true;
+			fwts_failed(fw, LOG_LEVEL_HIGH, "Method_GPEBadSubPackageReturnType",
+			"%s sub-package element 1 is not an integer.", name);
+		}
+
+		if (!failed)
+			method_passed_sane(fw, name, "package");
+
+		break;
+	default:
+		fwts_failed(fw, LOG_LEVEL_HIGH, "Method_GPEBadSubReturnType",
+			"%s did not return an integer or a package.", name);
+		break;
+	}
+}
+
+static int method_test_GPE(fwts_framework *fw)
+{
+	return method_evaluate_method(fw, METHOD_OPTIONAL,
+		"_GPE", NULL, 0, method_test_GPE_return, "_GPE");
+}
+
 /*
  * Section 16 Waking and Sleeping
  */
@@ -6323,7 +6375,6 @@ static fwts_framework_minor_test method_tests[] = {
 	{ method_name_check, "Test Method Names." },
 
 	/* Section 5.3 */
-	/* { method_test_GPE, "Test _GPE (General Purpose Events)." }, */
 	/* { method_test_PR , "Test _PR  (Processor)." }, */
 
 	/* Section 5.6 ACPI Event Programming Model */
@@ -6587,6 +6638,9 @@ static fwts_framework_minor_test method_tests[] = {
 	{ method_test_TZM, "Test _TZM (Thermal Zone member)." },
 	{ method_test_TZP, "Test _TZP (Thermal Zone Polling)." },
 
+	/* Section 12 Embedded Controller Interface */
+	{ method_test_GPE, "Test _GPE (General Purpose Events)." },
+
 	/* Section 16 Waking and Sleeping */
 
 	{ method_test_PTS, "Test _PTS (Prepare to Sleep)." },
-- 
1.9.1




More information about the fwts-devel mailing list