ACK: [PATCH] fwts_acpi: acpidump: update TCPA table and acpidump accordingly
ivanhu
ivan.hu at canonical.com
Mon Jun 29 06:55:08 UTC 2015
On 2015年06月26日 12:24, Alex Hung wrote:
> 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 fr
Acked-by: Ivan Hu<ivan.hu at canonical.com>
More information about the fwts-devel
mailing list