[PATCH] lib: replace FWTS_ACPI_FADT_PREFERRED_PM_PROFILE with function

Colin King colin.king at canonical.com
Thu Nov 26 11:03:30 UTC 2020


From: Colin Ian King <colin.king at canonical.com>

Replace the macro FWTS_ACPI_FADT_PREFERRED_PM_PROFILE with a function
that performs full range checking.

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 src/acpi/fadt/fadt.c        |  2 +-
 src/lib/include/fwts_acpi.h |  4 +---
 src/lib/src/fwts_acpi.c     | 30 +++++++++++++++++++-----------
 src/sbbr/fadt/fadt.c        |  2 +-
 4 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/src/acpi/fadt/fadt.c b/src/acpi/fadt/fadt.c
index ab5a3b2b..97905983 100644
--- a/src/acpi/fadt/fadt.c
+++ b/src/acpi/fadt/fadt.c
@@ -425,7 +425,7 @@ static void acpi_table_check_fadt_pm_profile(fwts_framework *fw)
 {
 	fwts_log_info(fw, "FADT Preferred PM Profile: %hhu (%s)",
 		fadt->preferred_pm_profile,
-		FWTS_ACPI_FADT_PREFERRED_PM_PROFILE(fadt->preferred_pm_profile));
+		fwts_acpi_fadt_preferred_pm_profile(fadt->preferred_pm_profile));
 
 	if (fadt->preferred_pm_profile <= 8)
 		fwts_passed(fw, "FADT has a valid preferred PM profile.");
diff --git a/src/lib/include/fwts_acpi.h b/src/lib/include/fwts_acpi.h
index efa988f2..e8332984 100644
--- a/src/lib/include/fwts_acpi.h
+++ b/src/lib/include/fwts_acpi.h
@@ -105,10 +105,8 @@
 #include "fwts_framework.h"
 #include "fwts_log.h"
 
-extern const char *fwts_acpi_fadt_preferred_pm_profile[];
+const char *fwts_acpi_fadt_preferred_pm_profile(const int profile);
 
-#define FWTS_ACPI_FADT_PREFERRED_PM_PROFILE(x)		\
-	((x) > 8) ? "Reserved" : fwts_acpi_fadt_preferred_pm_profile[x]
 #define FWTS_ACPI_FADT_FLAGS_HW_REDUCED_ACPI (1<<20)
 
 /*
diff --git a/src/lib/src/fwts_acpi.c b/src/lib/src/fwts_acpi.c
index 55ac50bc..45347e0c 100644
--- a/src/lib/src/fwts_acpi.c
+++ b/src/lib/src/fwts_acpi.c
@@ -30,17 +30,25 @@
 
 #if defined(FWTS_HAS_ACPI)
 
-const char *fwts_acpi_fadt_preferred_pm_profile[] = {
-	"Unspecified",
-	"Desktop",
-	"Mobile",
-	"Workstation",
-	"Enterprise Server",
-	"SOHO Server",
-	"Appliance PC",
-	"Performance Server",
-	"Tablet",
-};
+const char *fwts_acpi_fadt_preferred_pm_profile(const int profile)
+{
+	static const char *pm_profiles[] = {
+		"Unspecified",
+		"Desktop",
+		"Mobile",
+		"Workstation",
+		"Enterprise Server",
+		"SOHO Server",
+		"Appliance PC",
+		"Performance Server",
+		"Tablet"
+	};
+
+	if ((profile < 0) || profile >= (int)(FWTS_ARRAY_SIZE(pm_profiles)))
+		return "Reserved";
+
+	return pm_profiles[profile];
+}
 
 /*
  *  fwts_acpi_table_get_header()
diff --git a/src/sbbr/fadt/fadt.c b/src/sbbr/fadt/fadt.c
index 35ba5d15..82044b47 100644
--- a/src/sbbr/fadt/fadt.c
+++ b/src/sbbr/fadt/fadt.c
@@ -378,7 +378,7 @@ static int fadt_sbbr_profile_test3(fwts_framework *fw)
 
 	fwts_log_info(fw, "FADT Preferred PM Profile: %hhu (%s)",
 		fadt->preferred_pm_profile,
-		FWTS_ACPI_FADT_PREFERRED_PM_PROFILE(fadt->preferred_pm_profile));
+		fwts_acpi_fadt_preferred_pm_profile(fadt->preferred_pm_profile));
 
 	if ((fadt->preferred_pm_profile == SBBR_ENT_SERVER)  ||
 	(fadt->preferred_pm_profile == SBBR_SOHO_SERVER) ||
-- 
2.29.2




More information about the fwts-devel mailing list