[PATCH] fwts_acpi: acpidump: update TCPA table and acpidump accordingly
Alex Hung
alex.hung at canonical.com
Fri Jun 26 04:24:59 UTC 2015
The update is according to TCG ACPI Specification
Family 1.2 and 2.0
Revision 00.36
June 26, 2014
Signed-off-by: Alex Hung <alex.hung at canonical.com>
---
src/acpi/acpidump/acpidump.c | 47 +++++++++++++++++++++++++++++++++++++-------
src/lib/include/fwts_acpi.h | 28 +++++++++++++++++++++++---
2 files changed, 65 insertions(+), 10 deletions(-)
diff --git a/src/acpi/acpidump/acpidump.c b/src/acpi/acpidump/acpidump.c
index c439b80..1269db8 100644
--- a/src/acpi/acpidump/acpidump.c
+++ b/src/acpi/acpidump/acpidump.c
@@ -1146,14 +1146,47 @@ static void acpidump_srat(fwts_framework *fw, const fwts_acpi_table_info *table)
static void acpidump_tcpa(fwts_framework *fw, const fwts_acpi_table_info *table)
{
- static const fwts_acpidump_field fields[] = {
- FIELD_UINT("Reserved", fwts_acpi_table_tcpa, reserved),
- FIELD_UINT("Log Zone Length", fwts_acpi_table_tcpa, log_zone_length),
- FIELD_UINT("Log Zone Address", fwts_acpi_table_tcpa, log_zone_addr),
- FIELD_END
- };
+ fwts_acpi_table_tcpa *tcpa = (fwts_acpi_table_tcpa*)table->data;
+
+ switch (tcpa->platform_class) {
+ case 0: {
+ static const fwts_acpidump_field fields[] = {
+ FIELD_UINT("Platform Class", fwts_acpi_table_tcpa, platform_class),
+ FIELD_UINT("Log Zone Length", fwts_acpi_table_tcpa, client.log_zone_length),
+ FIELD_UINT("Log Zone Address", fwts_acpi_table_tcpa, client.log_zone_addr),
+ FIELD_END
+ };
+
+ acpi_dump_table_fields(fw, table->data, fields, 0, table->length);
+ }
+ break;
+ case 1: {
+ static const fwts_acpidump_field fields[] = {
+ FIELD_UINT("Platform Class", fwts_acpi_table_tcpa, platform_class),
+ FIELD_UINT("Reserved", fwts_acpi_table_tcpa, server.reserved),
+ FIELD_UINT("Log Zone Length", fwts_acpi_table_tcpa, server.log_zone_length),
+ FIELD_UINT("Log Zone Address", fwts_acpi_table_tcpa, server.log_zone_addr),
+ FIELD_UINT("Specification Revision", fwts_acpi_table_tcpa, server.spec_revision),
+ FIELD_UINT("Device Flag", fwts_acpi_table_tcpa, server.device_flag),
+ FIELD_UINT("Interrupt Flag", fwts_acpi_table_tcpa, server.interrupt_flag),
+ FIELD_UINT("GPE", fwts_acpi_table_tcpa, server.gpe),
+ FIELD_UINT("Reserved", fwts_acpi_table_tcpa, server.reserved2),
+ FIELD_UINT("Global System Interrupt", fwts_acpi_table_tcpa, server.global_sys_interrupt),
+ FIELD_GAS ("Base Address", fwts_acpi_table_tcpa, server.base_addr),
+ FIELD_UINT("Reserved", fwts_acpi_table_tcpa, server.reserved3),
+ FIELD_GAS ("Configuration Address", fwts_acpi_table_tcpa, server.config_addr),
+ FIELD_UINT("PCI Segment Group", fwts_acpi_table_tcpa, server.pci_seg_number),
+ FIELD_UINT("PCI Bus Number", fwts_acpi_table_tcpa, server.pci_bus_number),
+ FIELD_UINT("PCI Device Number", fwts_acpi_table_tcpa, server.pci_dev_number),
+ FIELD_UINT("PCI Function Number", fwts_acpi_table_tcpa, server.pci_func_number),
+ FIELD_END
+ };
+ acpi_dump_table_fields(fw, table->data, fields, 0, table->length);
+
+ }
+ break;
+ }
- acpi_dump_table_fields(fw, table->data, fields, 0, table->length);
}
/*
diff --git a/src/lib/include/fwts_acpi.h b/src/lib/include/fwts_acpi.h
index 63138b9..15aabaf 100644
--- a/src/lib/include/fwts_acpi.h
+++ b/src/lib/include/fwts_acpi.h
@@ -508,9 +508,31 @@ typedef struct {
and also http://www.cl.cam.ac.uk/~rja14/tcpa-faq.html */
typedef struct {
fwts_acpi_table_header header;
- uint16_t reserved;
- uint32_t log_zone_length;
- uint64_t log_zone_addr;
+ uint16_t platform_class;
+ union {
+ struct client_hdr {
+ uint32_t log_zone_length;
+ uint64_t log_zone_addr;
+ } __attribute__ ((packed)) client;
+ struct server_hdr {
+ uint16_t reserved;
+ uint64_t log_zone_length;
+ uint64_t log_zone_addr;
+ uint16_t spec_revision;
+ uint8_t device_flag;
+ uint8_t interrupt_flag;
+ uint8_t gpe;
+ uint8_t reserved2[3];
+ uint32_t global_sys_interrupt;
+ fwts_acpi_gas base_addr;
+ uint32_t reserved3;
+ fwts_acpi_gas config_addr;
+ uint8_t pci_seg_number;
+ uint8_t pci_bus_number;
+ uint8_t pci_dev_number;
+ uint8_t pci_func_number;
+ } __attribute__ ((packed)) server;
+ };
} __attribute__ ((packed)) fwts_acpi_table_tcpa;
/* Following ASF definitions from
--
1.9.1
More information about the fwts-devel
mailing list