<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p><br>
</p>
<br>
<div class="moz-cite-prefix">On 02/23/2018 03:43 AM, Alex Hung
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:1519328633-19598-1-git-send-email-alex.hung@canonical.com">
<pre wrap="">Linux kernel allows _WAK to return an integer, as in acpica/acpredef.h.
The reason seems to be that so many system BIOS returns an integer
instead of a package defined in ACPI spec, and it becomes a strange
standard already. Since operating system allows the integer, it should
be appropriate for fwts to relax it as well.
Signed-off-by: Alex Hung <a class="moz-txt-link-rfc2396E" href="mailto:alex.hung@canonical.com"><alex.hung@canonical.com></a>
---
src/acpi/method/method.c | 28 ++++++++++++++++++++--------
1 file changed, 20 insertions(+), 8 deletions(-)
diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
index 0df3526..48736af 100644
--- a/src/acpi/method/method.c
+++ b/src/acpi/method/method.c
@@ -5554,17 +5554,29 @@ static void method_test_WAK_return(
void *private)
{
FWTS_UNUSED(private);
+ FWTS_UNUSED(buf);
- if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK)
- return;
-
- if (fwts_method_package_count_equal(fw, name, "_WAK", obj, 2) != FWTS_OK)
- return;
+ switch (obj->Type) {
+ case ACPI_TYPE_PACKAGE:
+ if (fwts_method_package_count_equal(fw, name, "_WAK", obj, 2) != FWTS_OK)
+ return;
- if (fwts_method_package_elements_all_type(fw, name, "_WAK", obj, ACPI_TYPE_INTEGER) != FWTS_OK)
- return;
+ if (fwts_method_package_elements_all_type(fw, name, "_WAK", obj, ACPI_TYPE_INTEGER) != FWTS_OK)
+ return;
- fwts_method_passed_sane(fw, name, "package");
+ fwts_method_passed_sane(fw, name, "package");
+ break;
+ case ACPI_TYPE_INTEGER:
+ fwts_warning(fw, "In ACPI spec, _WAK shall return a package "
+ "containing two integers; however, Linux "
+ "also accepts an integer for legacy reasons.");
+ fwts_method_passed_sane(fw, name, "integer");
+ break;
+ default:
+ fwts_failed(fw, LOG_LEVEL_CRITICAL, "MethodReturnBadType",
+ "%s did not return a package or an integer.", name);
+ break;
+ }
}
static int method_test_WAK(fwts_framework *fw)</pre>
</blockquote>
<br>
<blockquote type="cite"
cite="mid:1519328633-19598-1-git-send-email-alex.hung@canonical.com">
<pre wrap="">
</pre>
</blockquote>
Acked-by: Ivan Hu <a class="moz-txt-link-rfc2396E"
href="mailto:ivan.hu@canonical.com"><ivan.hu@canonical.com></a>
<br>
</body>
</html>