[PATCH 1/2] lib: acpi_acpi_tables: Add tables based on ACPI name and not file name.

Colin King colin.king at canonical.com
Thu Jul 19 05:49:07 UTC 2012


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

When loading ACPI tables from raw files using the -t option load the
table name from the table signature rather than using the filename.
We need to ensure we cater for the RSD PTR and also normal ACPI table
signatures correctly too.

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 src/lib/src/fwts_acpi_tables.c |   23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/src/lib/src/fwts_acpi_tables.c b/src/lib/src/fwts_acpi_tables.c
index bd47e99..4db5844 100644
--- a/src/lib/src/fwts_acpi_tables.c
+++ b/src/lib/src/fwts_acpi_tables.c
@@ -484,14 +484,29 @@ static int fwts_acpi_load_tables_from_file(fwts_framework *fw)
 			if ((fd = open(path, O_RDONLY)) >= 0) {
 				uint8_t *table;
 				size_t length;
-				char name[PATH_MAX];
 
-				strcpy(name, dir_entries[i]->d_name);
-				name[strlen(name)-4] = '\0';
-				if ((table = fwts_acpi_load_table_from_file(fd, &length)) != NULL)
+				if ((table = fwts_acpi_load_table_from_file(fd, &length)) != NULL) {
+					char name[9];	/* "RSD PTR " or standard ACPI 4 letter name */
+
+					fwts_acpi_table_rsdp *rsdp  = (fwts_acpi_table_rsdp *)table;
+
+					/* Could be RSDP or a standard ACPI table, so check */
+
+					if (!strncmp(rsdp->signature, "RSD PTR ", 8)) {
+						/* In fwts, RSD PTR is tagged as the RSDP */
+						strcpy(name, "RSDP");
+					} else {
+						/* Assume it is a standard ACPI table */
+						fwts_acpi_table_header *hdr = (fwts_acpi_table_header *)table;
+
+						strncpy(name, hdr->signature, 4);
+						name[4] = '\0';
+					}
+
 					fwts_acpi_add_table(name, table,
 						(uint64_t)fwts_fake_physical_addr(length), length,
 						FWTS_ACPI_TABLE_FROM_FILE);
+				}
 				close(fd);
 			} else
 				fwts_log_error(fw, "Cannot load ACPI table from file '%s'\n", path);
-- 
1.7.10.4




More information about the fwts-devel mailing list