[PATCH] acpi: acpidump: update SMM Communication fields on UEFI table

ivanhu ivan.hu at canonical.com
Thu Jul 2 04:08:06 UTC 2015



On 2015年07月02日 10:26, Alex Hung wrote:
> On 06/30/2015 04:28 PM, Ivan Hu wrote:
>> The first use of UEFI ACPI table format is the SMM Communication ACPI Table.
>> Defined in UEFI spec Appendix O. Checking the SMM Communication ACPI GUID and
>> dumping relative fields.
>>
>> Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
>> ---
>>   src/acpi/acpidump/acpidump.c | 28 +++++++++++++++++++++++-----
>>   src/lib/include/fwts_acpi.h  |  7 +++++++
>>   2 files changed, 30 insertions(+), 5 deletions(-)
>>
>> diff --git a/src/acpi/acpidump/acpidump.c b/src/acpi/acpidump/acpidump.c
>> index 683a50f..c55956c 100644
>> --- a/src/acpi/acpidump/acpidump.c
>> +++ b/src/acpi/acpidump/acpidump.c
>> @@ -1587,17 +1587,35 @@ static void acpidump_slic(fwts_framework *fw, const fwts_acpi_table_info *table)
>>    */
>>   static void acpidump_uefi(fwts_framework *fw, const fwts_acpi_table_info *table)
>>   {
>> +
>> +	/*
>> +	 * GUID for SMM Communication ACPI Table
>> +	 * {0xc68ed8e2, 0x9dc6, 0x4cbd, 0x9d, 0x94, 0xdb, 0x65, 0xac, 0xc5, 0xc3, 0x32}
>> +	*/
>> +	static const uint8_t guid_smm[16] = { 0xe2, 0xd8, 0x8e, 0xc6, 0xc6, 0x9d, 0xbd, 0x4c,
>> +						0x9d, 0x94, 0xdb, 0x65, 0xac, 0xc5, 0xc3, 0x32 };
>> +
>>   	fwts_acpi_table_uefi *uefi = (fwts_acpi_table_uefi *)table->data;
>>   
>> -	static const fwts_acpidump_field uefi_fields[] = {
>> +	static const fwts_acpidump_field boot_fields[] = {
> Is "boot_fields" a copy-and-pasted error? uefi_fields seems more
> reasonable here.
 From the spec2.5  Appdendix O. Table 271. It called the UEFI table 
structure as Boot table for which are not  SMM Communication ACPI table.
Modify as boot_fields just would like to distinguish between SMM 
Communication ACPI fields and the others.
> Everything else looks good.
>
>>   		FIELD_GUID("UUID", 	fwts_acpi_table_uefi, uuid),
>> +		FIELD_UINT("DataOffset", fwts_acpi_table_uefi, dataoffset),
>>   		FIELD_END
>>   	};
>>   
>> -	__acpi_dump_table_fields(fw, table->data, uefi_fields, 0);
>> -	fwts_log_nl(fw);
>> -	acpi_dump_raw_data(fw, uefi->data, table->length - sizeof(fwts_acpi_table_uefi),
>> -		sizeof(fwts_acpi_table_uefi));
>> +	static const fwts_acpidump_field smmcomm_fields[] = {
>> +		FIELD_UINT("SW SMI Number", 	fwts_acpi_table_uefi_smmcomm, sw_smi_number),
>> +		FIELD_UINT("Buffer Prt Address", fwts_acpi_table_uefi_smmcomm, buf_ptr_addr),
>> +		FIELD_END
>> +	};
>> +	__acpi_dump_table_fields(fw, table->data, boot_fields, 0);
>> +
>> +	if (memcmp(uefi->uuid, guid_smm, 16) != 0) {
>> +		fwts_log_nl(fw);
>> +		acpi_dump_raw_data(fw, uefi->data, table->length - sizeof(fwts_acpi_table_uefi),
>> +				sizeof(fwts_acpi_table_uefi));
>> +	} else
>> +		__acpi_dump_table_fields(fw, table->data, smmcomm_fields, 0);
>>   }
>>   
>>   /*
>> diff --git a/src/lib/include/fwts_acpi.h b/src/lib/include/fwts_acpi.h
>> index e27c68c..55db8e1 100644
>> --- a/src/lib/include/fwts_acpi.h
>> +++ b/src/lib/include/fwts_acpi.h
>> @@ -696,9 +696,16 @@ typedef struct {
>>   typedef struct {
>>   	fwts_acpi_table_header header;
>>   	uint8_t		uuid[16];
>> +	uint16_t	dataoffset;
>>   	uint8_t		data[0];
>>   } __attribute__ ((packed)) fwts_acpi_table_uefi;
>>   
>> +typedef struct {
>> +	fwts_acpi_table_uefi boot;
>> +	uint32_t	sw_smi_number;
>> +	uint64_t	buf_ptr_addr;
>> +} __attribute__ ((packed)) fwts_acpi_table_uefi_smmcomm;
>> +
>>   /* 5.2.22 Boot Graphics Resource Table (BGRT) ACPI 5.0 Spec */
>>   typedef struct {
>>   	fwts_acpi_table_header header;
>>
>




More information about the fwts-devel mailing list