[PATCH 2/2] acpi: nfit: skip SPA Range Structure Index for four GUIDs
Alex Hung
alex.hung at canonical.com
Mon Aug 29 09:06:19 UTC 2016
According to ACPI spec, SPA Range Structure Index can not
be zero with some exceptions: Virtual CD Region and Virtual
Disk Region (both volatile and and persistent).
Signed-off-by: Alex Hung <alex.hung at canonical.com>
---
src/acpi/nfit/nfit.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/acpi/nfit/nfit.c b/src/acpi/nfit/nfit.c
index ae115b5..b0fca20 100644
--- a/src/acpi/nfit/nfit.c
+++ b/src/acpi/nfit/nfit.c
@@ -29,6 +29,17 @@
#include <string.h>
#include <ctype.h>
+static const uint8_t guid_virtual_device[4][16] = {
+ // Virtual Disk Region - Volatile
+ { 0x5a, 0x53, 0xab, 0x77, 0xfc, 0x45, 0x4b, 0x62, 0x55, 0x60, 0xf7, 0xb2, 0x81, 0xd1, 0xf9, 0x6e },
+ // Virtual CD Region - Volatile
+ { 0x30, 0xbd, 0x5a, 0x3d, 0x75, 0x41, 0xce, 0x87, 0x6d, 0x64, 0xd2, 0xad, 0xe5, 0x23, 0xc4, 0xbb },
+ // Virtual Disk Region - Persistent
+ { 0xc9, 0x02, 0xea, 0x5c, 0x07, 0x4d, 0xd3, 0x69, 0x26, 0x9f, 0x44, 0x96, 0xfb, 0xe0, 0x96, 0xf9 },
+ // Virtual CD Region - Persistent
+ { 0x88, 0x81, 0x01, 0x08, 0xcd, 0x42, 0x48, 0xbb, 0x10, 0x0f, 0x53, 0x87, 0xd5, 0x3d, 0xed, 0x3d },
+};
+
static fwts_acpi_table_info *table;
static int nfit_init(fwts_framework *fw)
@@ -87,6 +98,8 @@ static int nfit_test1(fwts_framework *fw)
if (entry->type == FWTS_ACPI_NFIT_TYPE_SYSTEM_ADDRESS) {
fwts_acpi_table_nfit_system_memory *nfit_struct = (fwts_acpi_table_nfit_system_memory *) entry;
char guid_str[37];
+ bool guid_skip = false;
+ size_t i;
fwts_guid_buf_to_str(nfit_struct->range_guid, guid_str, sizeof(guid_str));
@@ -99,7 +112,16 @@ static int nfit_test1(fwts_framework *fw)
fwts_log_info_verbatim(fw, " System Physical Address Range Length: 0x%16.16" PRIx64, nfit_struct->length);
fwts_log_info_verbatim(fw, " Address Range Memory Mapping Attribute: 0x%16.16" PRIx64, nfit_struct->memory_mapping);
- if (nfit_struct->range_index == 0) {
+ /* SPA Range Structure Index can be 0 for Virtual CD Region and
+ Virtual Disk Region (both volatile and persistent) */
+ for (i = 0; i < 4; i++) {
+ if (fwts_guid_match(nfit_struct->range_guid, guid_virtual_device[i], 16)) {
+ guid_skip = true;
+ break;
+ }
+ }
+
+ if (guid_skip == false && nfit_struct->range_index == 0) {
passed = false;
fwts_failed(fw, LOG_LEVEL_HIGH,
"NFITBadRangeIndexZero",
--
2.7.4
More information about the fwts-devel
mailing list