diff mbox

acpi: acpidump: update SMM Communication fields on UEFI table

Message ID 1435652891-95851-1-git-send-email-ivan.hu@canonical.com
State Accepted
Headers show

Commit Message

Ivan Hu June 30, 2015, 8:28 a.m. UTC
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@canonical.com>
---
 src/acpi/acpidump/acpidump.c | 28 +++++++++++++++++++++++-----
 src/lib/include/fwts_acpi.h  |  7 +++++++
 2 files changed, 30 insertions(+), 5 deletions(-)

Comments

Alex Hung July 2, 2015, 2:26 a.m. UTC | #1
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@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.

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;
>
Ivan Hu July 2, 2015, 4:08 a.m. UTC | #2
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@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;
>>
>
Alex Hung July 2, 2015, 4:55 a.m. UTC | #3
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@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[] = {
>  		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;
> 

Acked-byL: Alex Hung <alex.hung@canonical.com>
Alex Hung July 2, 2015, 5:05 a.m. UTC | #4
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@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[] = {
>  		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;
> 


Acked-by: Alex Hung <alex.hung@canonical.com>
Colin Ian King July 6, 2015, 10:10 a.m. UTC | #5
On 02/07/15 05:55, 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@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[] = {
>>  		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;
>>
> 
> Acked-byL: Alex Hung <alex.hung@canonical.com>
> 
Acked-by: Colin Ian King <colin.king@canonical.com>
diff mbox

Patch

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[] = {
 		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;