[PATCH 2/2] acpi/method: check integer returns with bit definitions
Alex Hung
alex.hung at canonical.com
Wed May 6 21:46:35 UTC 2020
Signed-off-by: Alex Hung <alex.hung at canonical.com>
---
src/acpi/method/method.c | 119 ++++++---------------------------------
1 file changed, 16 insertions(+), 103 deletions(-)
diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
index b6e9d86d..81e01fbb 100644
--- a/src/acpi/method/method.c
+++ b/src/acpi/method/method.c
@@ -1230,36 +1230,11 @@ static int method_test_STA(fwts_framework *fw)
/*
* Section 6.5 Other Objects and Controls
*/
-static void method_test_BBN_return(
- fwts_framework *fw,
- char *name,
- ACPI_BUFFER *buf,
- ACPI_OBJECT *obj,
- void *private)
-{
- bool failed = false;
- FWTS_UNUSED(private);
-
- if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK)
- return;
-
- if ((obj->Integer.Value & 0xffffff00)) {
- fwts_failed(fw, LOG_LEVEL_MEDIUM,
- "Method_BBNIllegalReserved",
- "%s returned value 0x%8.8" PRIx64 " and some of the "
- "reserved bits are set when they should be zero.",
- name, (uint64_t)obj->Integer.Value);
- failed = true;
- }
-
- if (!failed)
- fwts_method_passed_sane(fw, name, "integer");
-}
-
static int method_test_BBN(fwts_framework *fw)
{
+ uint64_t mask = ~0xff;
return method_evaluate_method(fw, METHOD_OPTIONAL, "_BBN",
- NULL, 0, method_test_BBN_return, NULL);
+ NULL, 0, fwts_method_test_integer_reserved_bits_return, &mask);
}
static int method_test_BDN(fwts_framework *fw)
@@ -1326,33 +1301,11 @@ static int method_test_INI(fwts_framework *fw)
"_INI", NULL, 0, fwts_method_test_NULL_return, NULL);
}
-static void method_test_SEG_return(
- fwts_framework *fw,
- char *name,
- ACPI_BUFFER *buf,
- ACPI_OBJECT *obj,
- void *private)
-{
- FWTS_UNUSED(private);
-
- if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK)
- return;
-
- if ((obj->Integer.Value & 0xffff0000)) {
- fwts_failed(fw, LOG_LEVEL_MEDIUM,
- "Method_SEGIllegalReserved",
- "%s returned value 0x%8.8" PRIx64 " and some of the "
- "upper 16 reserved bits are set when they "
- "should in fact be zero.",
- name, (uint64_t)obj->Integer.Value);
- } else
- fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value);
-}
-
static int method_test_SEG(fwts_framework *fw)
{
+ uint64_t mask = ~0xffff;
return method_evaluate_method(fw, METHOD_OPTIONAL, "_SEG",
- NULL, 0, method_test_SEG_return, "_SEG");
+ NULL, 0, fwts_method_test_integer_reserved_bits_return, &mask);
}
static void method_test_GLK_return(
@@ -3345,33 +3298,11 @@ static int method_test_UPP(fwts_framework *fw)
/*
* Section 9.18 Wake Alarm Device
*/
-static void method_test_GCP_return(
- fwts_framework *fw,
- char *name,
- ACPI_BUFFER *buf,
- ACPI_OBJECT *obj,
- void *private)
-{
- FWTS_UNUSED(private);
-
- if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK)
- return;
-
- if (obj->Integer.Value & ~0x1ff)
- fwts_failed(fw, LOG_LEVEL_MEDIUM,
- "Method_GCPReturn",
- "%s returned %" PRId64 ", should be between 0 and 0x1ff, "
- "one or more of the reserved bits 9..31 seem "
- "to be set.",
- name, (uint64_t)obj->Integer.Value);
- else
- fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value);
-}
-
static int method_test_GCP(fwts_framework *fw)
{
+ uint64_t mask = ~0x1ff;
return method_evaluate_method(fw, METHOD_OPTIONAL,
- "_GCP", NULL, 0, method_test_GCP_return, "_GCP");
+ "_GCP", NULL, 0, fwts_method_test_integer_reserved_bits_return, &mask);
}
static void method_test_GRT_return(
@@ -3430,38 +3361,16 @@ static int method_test_SRT(fwts_framework *fw)
"_SRT", &arg0, 1, fwts_method_test_integer_return, NULL);
}
-static void method_test_GWS_return(
- fwts_framework *fw,
- char *name,
- ACPI_BUFFER *buf,
- ACPI_OBJECT *obj,
- void *private)
-{
- FWTS_UNUSED(private);
-
- if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK)
- return;
-
- if (obj->Integer.Value & ~0x3)
- fwts_failed(fw, LOG_LEVEL_MEDIUM,
- "Method_GWSReturn",
- "%s returned %" PRIu64 ", should be between 0 and 3, "
- "one or more of the reserved bits 2..31 seem "
- "to be set.",
- name, (uint64_t)obj->Integer.Value);
- else
- fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value);
-}
-
static int method_test_GWS(fwts_framework *fw)
{
+ uint64_t mask = ~0x3;
ACPI_OBJECT arg[1];
arg[0].Type = ACPI_TYPE_INTEGER;
arg[0].Integer.Value = 1; /* DC timer */
return method_evaluate_method(fw, METHOD_OPTIONAL,
- "_GWS", arg, 1, method_test_GWS_return, "_GWS");
+ "_GWS", arg, 1, fwts_method_test_integer_reserved_bits_return, &mask);
}
static void method_test_CWS_return(
@@ -5563,8 +5472,9 @@ static int method_test_ROM(fwts_framework *fw)
static int method_test_GPD(fwts_framework *fw)
{
+ uint64_t mask = ~0x3;
return method_evaluate_method(fw, METHOD_OPTIONAL,
- "_GPD", NULL, 0, fwts_method_test_integer_return, NULL);
+ "_GPD", NULL, 0, fwts_method_test_integer_reserved_bits_return, &mask);
}
static int method_test_SPD(fwts_framework *fw)
@@ -5585,8 +5495,9 @@ static int method_test_SPD(fwts_framework *fw)
static int method_test_VPO(fwts_framework *fw)
{
+ uint64_t mask = ~0xf;
return method_evaluate_method(fw, METHOD_OPTIONAL,
- "_VPO", NULL, 0, fwts_method_test_integer_return, NULL);
+ "_VPO", NULL, 0, fwts_method_test_integer_reserved_bits_return, &mask);
}
static int method_test_ADR(fwts_framework *fw)
@@ -5825,14 +5736,16 @@ static int method_test_DDC(fwts_framework *fw)
static int method_test_DCS(fwts_framework *fw)
{
+ uint64_t mask = ~0x1f;
return method_evaluate_method(fw, METHOD_OPTIONAL,
- "_DCS", NULL, 0, fwts_method_test_integer_return, NULL);
+ "_DCS", NULL, 0, fwts_method_test_integer_reserved_bits_return, &mask);
}
static int method_test_DGS(fwts_framework *fw)
{
+ uint64_t mask = ~0x1;
return method_evaluate_method(fw, METHOD_OPTIONAL,
- "_DGS", NULL, 0, fwts_method_test_integer_return, NULL);
+ "_DGS", NULL, 0, fwts_method_test_integer_reserved_bits_return, &mask);
}
static int method_test_DSS(fwts_framework *fw)
--
2.25.1
More information about the fwts-devel
mailing list