Message ID | 1435292699-8579-1-git-send-email-alex.hung@canonical.com |
---|---|
State | Accepted |
Headers | show |
On 26/06/15 05: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@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 > The fwts-tests need to be updated for this too. If you can send that too sometime, that would be useful :-) Acked-by: Colin Ian King <colin.king@canonical.com>
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@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@canonical.com>
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
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@canonical.com> --- src/acpi/acpidump/acpidump.c | 47 +++++++++++++++++++++++++++++++++++++------- src/lib/include/fwts_acpi.h | 28 +++++++++++++++++++++++--- 2 files changed, 65 insertions(+), 10 deletions(-)