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