From: Keith Busch <[email protected]>

The HMAT table header has different field lengths than the existing
parsing uses. Add the HMAT type to the parsing rules so it may be
generically parsed.

Signed-off-by: Keith Busch <[email protected]>
Signed-off-by: Dan Williams <[email protected]>
---
 drivers/acpi/tables.c |    9 +++++++++
 include/linux/acpi.h  |    1 +
 2 files changed, 10 insertions(+)

diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c
index e9643b4267c7..bc1addf715dc 100644
--- a/drivers/acpi/tables.c
+++ b/drivers/acpi/tables.c
@@ -51,6 +51,7 @@ static int acpi_apic_instance __initdata;
 
 enum acpi_subtable_type {
        ACPI_SUBTABLE_COMMON,
+       ACPI_SUBTABLE_HMAT,
 };
 
 struct acpi_subtable_entry {
@@ -232,6 +233,8 @@ acpi_get_entry_type(struct acpi_subtable_entry *entry)
        switch (entry->type) {
        case ACPI_SUBTABLE_COMMON:
                return entry->hdr->common.type;
+       case ACPI_SUBTABLE_HMAT:
+               return entry->hdr->hmat.type;
        }
        return 0;
 }
@@ -242,6 +245,8 @@ acpi_get_entry_length(struct acpi_subtable_entry *entry)
        switch (entry->type) {
        case ACPI_SUBTABLE_COMMON:
                return entry->hdr->common.length;
+       case ACPI_SUBTABLE_HMAT:
+               return entry->hdr->hmat.length;
        }
        return 0;
 }
@@ -252,6 +257,8 @@ acpi_get_subtable_header_length(struct acpi_subtable_entry 
*entry)
        switch (entry->type) {
        case ACPI_SUBTABLE_COMMON:
                return sizeof(entry->hdr->common);
+       case ACPI_SUBTABLE_HMAT:
+               return sizeof(entry->hdr->hmat);
        }
        return 0;
 }
@@ -259,6 +266,8 @@ acpi_get_subtable_header_length(struct acpi_subtable_entry 
*entry)
 static enum acpi_subtable_type __init
 acpi_get_subtable_type(char *id)
 {
+       if (strncmp(id, ACPI_SIG_HMAT, 4) == 0)
+               return ACPI_SUBTABLE_HMAT;
        return ACPI_SUBTABLE_COMMON;
 }
 
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 18805a967c70..4373f5ba0f95 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -143,6 +143,7 @@ enum acpi_address_range_id {
 /* Table Handlers */
 union acpi_subtable_headers {
        struct acpi_subtable_header common;
+       struct acpi_hmat_structure hmat;
 };
 
 typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *table);

Reply via email to