acpi: Add HMAT to generic parsing tables
The Heterogeneous Memory Attribute Table (HMAT) header has different field lengths than the existing parsing uses. Add the HMAT type to the parsing rules so it may be generically parsed. Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Tested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Keith Busch <keith.busch@intel.com> Tested-by: Brice Goglin <Brice.Goglin@inria.fr> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
60574d1e05
commit
3bc0e8eb17
@@ -51,6 +51,7 @@ static int acpi_apic_instance __initdata;
|
|||||||
|
|
||||||
enum acpi_subtable_type {
|
enum acpi_subtable_type {
|
||||||
ACPI_SUBTABLE_COMMON,
|
ACPI_SUBTABLE_COMMON,
|
||||||
|
ACPI_SUBTABLE_HMAT,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct acpi_subtable_entry {
|
struct acpi_subtable_entry {
|
||||||
@@ -232,6 +233,8 @@ acpi_get_entry_type(struct acpi_subtable_entry *entry)
|
|||||||
switch (entry->type) {
|
switch (entry->type) {
|
||||||
case ACPI_SUBTABLE_COMMON:
|
case ACPI_SUBTABLE_COMMON:
|
||||||
return entry->hdr->common.type;
|
return entry->hdr->common.type;
|
||||||
|
case ACPI_SUBTABLE_HMAT:
|
||||||
|
return entry->hdr->hmat.type;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -242,6 +245,8 @@ acpi_get_entry_length(struct acpi_subtable_entry *entry)
|
|||||||
switch (entry->type) {
|
switch (entry->type) {
|
||||||
case ACPI_SUBTABLE_COMMON:
|
case ACPI_SUBTABLE_COMMON:
|
||||||
return entry->hdr->common.length;
|
return entry->hdr->common.length;
|
||||||
|
case ACPI_SUBTABLE_HMAT:
|
||||||
|
return entry->hdr->hmat.length;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -252,6 +257,8 @@ acpi_get_subtable_header_length(struct acpi_subtable_entry *entry)
|
|||||||
switch (entry->type) {
|
switch (entry->type) {
|
||||||
case ACPI_SUBTABLE_COMMON:
|
case ACPI_SUBTABLE_COMMON:
|
||||||
return sizeof(entry->hdr->common);
|
return sizeof(entry->hdr->common);
|
||||||
|
case ACPI_SUBTABLE_HMAT:
|
||||||
|
return sizeof(entry->hdr->hmat);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -259,6 +266,8 @@ acpi_get_subtable_header_length(struct acpi_subtable_entry *entry)
|
|||||||
static enum acpi_subtable_type __init
|
static enum acpi_subtable_type __init
|
||||||
acpi_get_subtable_type(char *id)
|
acpi_get_subtable_type(char *id)
|
||||||
{
|
{
|
||||||
|
if (strncmp(id, ACPI_SIG_HMAT, 4) == 0)
|
||||||
|
return ACPI_SUBTABLE_HMAT;
|
||||||
return ACPI_SUBTABLE_COMMON;
|
return ACPI_SUBTABLE_COMMON;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ enum acpi_address_range_id {
|
|||||||
/* Table Handlers */
|
/* Table Handlers */
|
||||||
union acpi_subtable_headers {
|
union acpi_subtable_headers {
|
||||||
struct acpi_subtable_header common;
|
struct acpi_subtable_header common;
|
||||||
|
struct acpi_hmat_structure hmat;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *table);
|
typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *table);
|
||||||
|
|||||||
Reference in New Issue
Block a user