diff mbox series

acpi: refactor method_test_BMD to a common function

Message ID 20200515180312.898709-1-alex.hung@canonical.com
State Accepted
Headers show
Series acpi: refactor method_test_BMD to a common function | expand

Commit Message

Alex Hung May 15, 2020, 6:03 p.m. UTC
New function "fwts_method_test_BMD_return" also checks status flags and
capability flags in the returned package.

Signed-off-by: Alex Hung <alex.hung@canonical.com>
---
 src/acpi/devices/battery/battery.c      | 23 +------------------
 src/acpi/method/method.c                | 25 +--------------------
 src/lib/include/fwts_acpi_object_eval.h |  1 +
 src/lib/src/fwts_acpi_object_eval.c     | 30 +++++++++++++++++++++++++
 4 files changed, 33 insertions(+), 46 deletions(-)

Comments

Ivan Hu May 22, 2020, 3:08 a.m. UTC | #1
On 5/16/20 2:03 AM, Alex Hung wrote:
> New function "fwts_method_test_BMD_return" also checks status flags and
> capability flags in the returned package.
> 
> Signed-off-by: Alex Hung <alex.hung@canonical.com>
> ---
>  src/acpi/devices/battery/battery.c      | 23 +------------------
>  src/acpi/method/method.c                | 25 +--------------------
>  src/lib/include/fwts_acpi_object_eval.h |  1 +
>  src/lib/src/fwts_acpi_object_eval.c     | 30 +++++++++++++++++++++++++
>  4 files changed, 33 insertions(+), 46 deletions(-)
> 
> diff --git a/src/acpi/devices/battery/battery.c b/src/acpi/devices/battery/battery.c
> index 72d8e377..400f485b 100644
> --- a/src/acpi/devices/battery/battery.c
> +++ b/src/acpi/devices/battery/battery.c
> @@ -653,31 +653,10 @@ static int method_test_BCT(fwts_framework *fw)
>  		"_BCT", arg, 1, fwts_method_test_integer_return, NULL);
>  }
>  
> -static void method_test_BMD_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_PACKAGE) != FWTS_OK)
> -		return;
> -
> -	if (fwts_method_package_count_equal(fw, name, "_BMD", obj, 5) != FWTS_OK)
> -		return;
> -
> -	if (fwts_method_package_elements_all_type(fw, name, "_BMD", obj, ACPI_TYPE_INTEGER) != FWTS_OK)
> -		return;
> -
> -	fwts_method_passed_sane(fw, name, "package");
> -}
> -
>  static int method_test_BMD(fwts_framework *fw)
>  {
>  	return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device,
> -		"_BMD", NULL, 0, method_test_BMD_return, NULL);
> +		"_BMD", NULL, 0, fwts_method_test_BMD_return, NULL);
>  }
>  
>  static int method_test_BMC(fwts_framework *fw)
> diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
> index 76ce8a81..7ab72ba7 100644
> --- a/src/acpi/method/method.c
> +++ b/src/acpi/method/method.c
> @@ -4218,33 +4218,10 @@ static int method_test_BTM(fwts_framework *fw)
>  	return FWTS_OK;
>  }
>  
> -static void method_test_BMD_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_PACKAGE) != FWTS_OK)
> -		return;
> -
> -	if (fwts_method_package_count_equal(fw, name, "_BMD", obj, 5) != FWTS_OK)
> -		return;
> -
> -	if (fwts_method_package_elements_all_type(fw, name, "_BMD", obj, ACPI_TYPE_INTEGER) != FWTS_OK)
> -		return;
> -
> -	fwts_acpi_object_dump(fw, obj);
> -
> -	fwts_method_passed_sane(fw, name, "package");
> -}
> -
>  static int method_test_BMD(fwts_framework *fw)
>  {
>  	return method_evaluate_method(fw, METHOD_MOBILE,
> -		"_BMD", NULL, 0, method_test_BMD_return, NULL);
> +		"_BMD", NULL, 0, fwts_method_test_BMD_return, NULL);
>  }
>  
>  static int method_test_BMC(fwts_framework *fw)
> diff --git a/src/lib/include/fwts_acpi_object_eval.h b/src/lib/include/fwts_acpi_object_eval.h
> index 080a0d65..b13b5239 100644
> --- a/src/lib/include/fwts_acpi_object_eval.h
> +++ b/src/lib/include/fwts_acpi_object_eval.h
> @@ -156,6 +156,7 @@ int fwts_method_test_SUN(fwts_framework *fw, ACPI_HANDLE *device);
>  int fwts_method_test_STR(fwts_framework *fw, ACPI_HANDLE *device);
>  int fwts_method_test_UID(fwts_framework *fw, ACPI_HANDLE *device);
>  
> +void fwts_method_test_BMD_return(fwts_framework *fw, char *name,ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);
>  void fwts_method_valid_CID_Type(fwts_framework *fw, char *name, ACPI_OBJECT *obj);
>  void fwts_method_test_CID_return(fwts_framework *fw, char *name,ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);
>  void fwts_method_test_HID_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);
> diff --git a/src/lib/src/fwts_acpi_object_eval.c b/src/lib/src/fwts_acpi_object_eval.c
> index 42b97d26..12165b53 100644
> --- a/src/lib/src/fwts_acpi_object_eval.c
> +++ b/src/lib/src/fwts_acpi_object_eval.c
> @@ -2255,4 +2255,34 @@ int fwts_method_test_UID(fwts_framework *fw, ACPI_HANDLE *device)
>  		"_UID", NULL, 0, fwts_method_test_UID_return, NULL);
>  }
>  
> +void fwts_method_test_BMD_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_PACKAGE) != FWTS_OK)
> +		return;
> +
> +	if (fwts_method_package_count_equal(fw, name, "_BMD", obj, 5) != FWTS_OK)
> +		return;
> +
> +	if (fwts_method_package_elements_all_type(fw, name, "_BMD", obj, ACPI_TYPE_INTEGER) != FWTS_OK)
> +		return;
> +
> +	fwts_acpi_reserved_bits_check(fw, "_BMD", "Status Flags",
> +		obj->Package.Elements[0].Integer.Value, sizeof(uint32_t), 5, 31, &failed);
> +
> +	fwts_acpi_reserved_bits_check(fw, "_BMD", "Capability Flags",
> +		obj->Package.Elements[1].Integer.Value, sizeof(uint32_t), 5, 31, &failed);
> +
> +	if (!failed)
> +		fwts_method_passed_sane(fw, name, "package");
> +}
> +
>  #endif
> 
Acked-by: Ivan Hu <ivan.hu@canonical.com>
Colin Ian King May 26, 2020, 3:48 p.m. UTC | #2
On 15/05/2020 19:03, Alex Hung wrote:
> New function "fwts_method_test_BMD_return" also checks status flags and
> capability flags in the returned package.
> 
> Signed-off-by: Alex Hung <alex.hung@canonical.com>
> ---
>  src/acpi/devices/battery/battery.c      | 23 +------------------
>  src/acpi/method/method.c                | 25 +--------------------
>  src/lib/include/fwts_acpi_object_eval.h |  1 +
>  src/lib/src/fwts_acpi_object_eval.c     | 30 +++++++++++++++++++++++++
>  4 files changed, 33 insertions(+), 46 deletions(-)
> 
> diff --git a/src/acpi/devices/battery/battery.c b/src/acpi/devices/battery/battery.c
> index 72d8e377..400f485b 100644
> --- a/src/acpi/devices/battery/battery.c
> +++ b/src/acpi/devices/battery/battery.c
> @@ -653,31 +653,10 @@ static int method_test_BCT(fwts_framework *fw)
>  		"_BCT", arg, 1, fwts_method_test_integer_return, NULL);
>  }
>  
> -static void method_test_BMD_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_PACKAGE) != FWTS_OK)
> -		return;
> -
> -	if (fwts_method_package_count_equal(fw, name, "_BMD", obj, 5) != FWTS_OK)
> -		return;
> -
> -	if (fwts_method_package_elements_all_type(fw, name, "_BMD", obj, ACPI_TYPE_INTEGER) != FWTS_OK)
> -		return;
> -
> -	fwts_method_passed_sane(fw, name, "package");
> -}
> -
>  static int method_test_BMD(fwts_framework *fw)
>  {
>  	return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device,
> -		"_BMD", NULL, 0, method_test_BMD_return, NULL);
> +		"_BMD", NULL, 0, fwts_method_test_BMD_return, NULL);
>  }
>  
>  static int method_test_BMC(fwts_framework *fw)
> diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
> index 76ce8a81..7ab72ba7 100644
> --- a/src/acpi/method/method.c
> +++ b/src/acpi/method/method.c
> @@ -4218,33 +4218,10 @@ static int method_test_BTM(fwts_framework *fw)
>  	return FWTS_OK;
>  }
>  
> -static void method_test_BMD_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_PACKAGE) != FWTS_OK)
> -		return;
> -
> -	if (fwts_method_package_count_equal(fw, name, "_BMD", obj, 5) != FWTS_OK)
> -		return;
> -
> -	if (fwts_method_package_elements_all_type(fw, name, "_BMD", obj, ACPI_TYPE_INTEGER) != FWTS_OK)
> -		return;
> -
> -	fwts_acpi_object_dump(fw, obj);
> -
> -	fwts_method_passed_sane(fw, name, "package");
> -}
> -
>  static int method_test_BMD(fwts_framework *fw)
>  {
>  	return method_evaluate_method(fw, METHOD_MOBILE,
> -		"_BMD", NULL, 0, method_test_BMD_return, NULL);
> +		"_BMD", NULL, 0, fwts_method_test_BMD_return, NULL);
>  }
>  
>  static int method_test_BMC(fwts_framework *fw)
> diff --git a/src/lib/include/fwts_acpi_object_eval.h b/src/lib/include/fwts_acpi_object_eval.h
> index 080a0d65..b13b5239 100644
> --- a/src/lib/include/fwts_acpi_object_eval.h
> +++ b/src/lib/include/fwts_acpi_object_eval.h
> @@ -156,6 +156,7 @@ int fwts_method_test_SUN(fwts_framework *fw, ACPI_HANDLE *device);
>  int fwts_method_test_STR(fwts_framework *fw, ACPI_HANDLE *device);
>  int fwts_method_test_UID(fwts_framework *fw, ACPI_HANDLE *device);
>  
> +void fwts_method_test_BMD_return(fwts_framework *fw, char *name,ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);
>  void fwts_method_valid_CID_Type(fwts_framework *fw, char *name, ACPI_OBJECT *obj);
>  void fwts_method_test_CID_return(fwts_framework *fw, char *name,ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);
>  void fwts_method_test_HID_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);
> diff --git a/src/lib/src/fwts_acpi_object_eval.c b/src/lib/src/fwts_acpi_object_eval.c
> index 42b97d26..12165b53 100644
> --- a/src/lib/src/fwts_acpi_object_eval.c
> +++ b/src/lib/src/fwts_acpi_object_eval.c
> @@ -2255,4 +2255,34 @@ int fwts_method_test_UID(fwts_framework *fw, ACPI_HANDLE *device)
>  		"_UID", NULL, 0, fwts_method_test_UID_return, NULL);
>  }
>  
> +void fwts_method_test_BMD_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_PACKAGE) != FWTS_OK)
> +		return;
> +
> +	if (fwts_method_package_count_equal(fw, name, "_BMD", obj, 5) != FWTS_OK)
> +		return;
> +
> +	if (fwts_method_package_elements_all_type(fw, name, "_BMD", obj, ACPI_TYPE_INTEGER) != FWTS_OK)
> +		return;
> +
> +	fwts_acpi_reserved_bits_check(fw, "_BMD", "Status Flags",
> +		obj->Package.Elements[0].Integer.Value, sizeof(uint32_t), 5, 31, &failed);
> +
> +	fwts_acpi_reserved_bits_check(fw, "_BMD", "Capability Flags",
> +		obj->Package.Elements[1].Integer.Value, sizeof(uint32_t), 5, 31, &failed);
> +
> +	if (!failed)
> +		fwts_method_passed_sane(fw, name, "package");
> +}
> +
>  #endif
> 
Acked-by: Colin Ian King <colin.king@canonical.com>
diff mbox series

Patch

diff --git a/src/acpi/devices/battery/battery.c b/src/acpi/devices/battery/battery.c
index 72d8e377..400f485b 100644
--- a/src/acpi/devices/battery/battery.c
+++ b/src/acpi/devices/battery/battery.c
@@ -653,31 +653,10 @@  static int method_test_BCT(fwts_framework *fw)
 		"_BCT", arg, 1, fwts_method_test_integer_return, NULL);
 }
 
-static void method_test_BMD_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_PACKAGE) != FWTS_OK)
-		return;
-
-	if (fwts_method_package_count_equal(fw, name, "_BMD", obj, 5) != FWTS_OK)
-		return;
-
-	if (fwts_method_package_elements_all_type(fw, name, "_BMD", obj, ACPI_TYPE_INTEGER) != FWTS_OK)
-		return;
-
-	fwts_method_passed_sane(fw, name, "package");
-}
-
 static int method_test_BMD(fwts_framework *fw)
 {
 	return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device,
-		"_BMD", NULL, 0, method_test_BMD_return, NULL);
+		"_BMD", NULL, 0, fwts_method_test_BMD_return, NULL);
 }
 
 static int method_test_BMC(fwts_framework *fw)
diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
index 76ce8a81..7ab72ba7 100644
--- a/src/acpi/method/method.c
+++ b/src/acpi/method/method.c
@@ -4218,33 +4218,10 @@  static int method_test_BTM(fwts_framework *fw)
 	return FWTS_OK;
 }
 
-static void method_test_BMD_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_PACKAGE) != FWTS_OK)
-		return;
-
-	if (fwts_method_package_count_equal(fw, name, "_BMD", obj, 5) != FWTS_OK)
-		return;
-
-	if (fwts_method_package_elements_all_type(fw, name, "_BMD", obj, ACPI_TYPE_INTEGER) != FWTS_OK)
-		return;
-
-	fwts_acpi_object_dump(fw, obj);
-
-	fwts_method_passed_sane(fw, name, "package");
-}
-
 static int method_test_BMD(fwts_framework *fw)
 {
 	return method_evaluate_method(fw, METHOD_MOBILE,
-		"_BMD", NULL, 0, method_test_BMD_return, NULL);
+		"_BMD", NULL, 0, fwts_method_test_BMD_return, NULL);
 }
 
 static int method_test_BMC(fwts_framework *fw)
diff --git a/src/lib/include/fwts_acpi_object_eval.h b/src/lib/include/fwts_acpi_object_eval.h
index 080a0d65..b13b5239 100644
--- a/src/lib/include/fwts_acpi_object_eval.h
+++ b/src/lib/include/fwts_acpi_object_eval.h
@@ -156,6 +156,7 @@  int fwts_method_test_SUN(fwts_framework *fw, ACPI_HANDLE *device);
 int fwts_method_test_STR(fwts_framework *fw, ACPI_HANDLE *device);
 int fwts_method_test_UID(fwts_framework *fw, ACPI_HANDLE *device);
 
+void fwts_method_test_BMD_return(fwts_framework *fw, char *name,ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);
 void fwts_method_valid_CID_Type(fwts_framework *fw, char *name, ACPI_OBJECT *obj);
 void fwts_method_test_CID_return(fwts_framework *fw, char *name,ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);
 void fwts_method_test_HID_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);
diff --git a/src/lib/src/fwts_acpi_object_eval.c b/src/lib/src/fwts_acpi_object_eval.c
index 42b97d26..12165b53 100644
--- a/src/lib/src/fwts_acpi_object_eval.c
+++ b/src/lib/src/fwts_acpi_object_eval.c
@@ -2255,4 +2255,34 @@  int fwts_method_test_UID(fwts_framework *fw, ACPI_HANDLE *device)
 		"_UID", NULL, 0, fwts_method_test_UID_return, NULL);
 }
 
+void fwts_method_test_BMD_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_PACKAGE) != FWTS_OK)
+		return;
+
+	if (fwts_method_package_count_equal(fw, name, "_BMD", obj, 5) != FWTS_OK)
+		return;
+
+	if (fwts_method_package_elements_all_type(fw, name, "_BMD", obj, ACPI_TYPE_INTEGER) != FWTS_OK)
+		return;
+
+	fwts_acpi_reserved_bits_check(fw, "_BMD", "Status Flags",
+		obj->Package.Elements[0].Integer.Value, sizeof(uint32_t), 5, 31, &failed);
+
+	fwts_acpi_reserved_bits_check(fw, "_BMD", "Capability Flags",
+		obj->Package.Elements[1].Integer.Value, sizeof(uint32_t), 5, 31, &failed);
+
+	if (!failed)
+		fwts_method_passed_sane(fw, name, "package");
+}
+
 #endif