[PATCH] acpi: acpidump: fix ACPI FPDT dump

Keng-Yu Lin kengyu at canonical.com
Mon Jan 14 06:25:13 UTC 2013


On Tue, Jan 1, 2013 at 8:53 AM, Colin King <colin.king at canonical.com> wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Fix the output of the ACPI FPDT dump.  This now prints the
> performance record types correctly as well as binary dumps the
> reserved fields that are not described in the ACPI specification.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>  src/acpi/acpidump/acpidump.c | 54 ++++++++++++++++++++++++++++++++------------
>  1 file changed, 39 insertions(+), 15 deletions(-)
>
> diff --git a/src/acpi/acpidump/acpidump.c b/src/acpi/acpidump/acpidump.c
> index 88dbc10..5f3e25e 100644
> --- a/src/acpi/acpidump/acpidump.c
> +++ b/src/acpi/acpidump/acpidump.c
> @@ -1550,6 +1550,7 @@ static void acpidump_fpdt(fwts_framework *fw, fwts_acpi_table_info *table)
>         uint8_t *data = (uint8_t *)table->data;
>         uint8_t *ptr  = data;
>         size_t length = table->length;
> +       const size_t fpdt_hdr_len = sizeof(fwts_acpi_table_fpdt_header);
>
>         static fwts_acpidump_field fpdt_header_fields[] = {
>                 FIELD_UINT("Type",              fwts_acpi_table_fpdt_header, type),
> @@ -1558,17 +1559,19 @@ static void acpidump_fpdt(fwts_framework *fw, fwts_acpi_table_info *table)
>                 FIELD_END
>         };
>
> +       static fwts_acpidump_field fpdt_basic_boot_perf_ptr_fields[] = {
> +               FIELD_UINT("Reserved",          fwts_acpi_table_fpdt_basic_boot_perf_ptr, reserved),
> +               FIELD_UINT("FBPT Pointer",      fwts_acpi_table_fpdt_basic_boot_perf_ptr, fbpt_addr),
> +               FIELD_END
> +       };
> +
>         static fwts_acpidump_field fpdt_s3_perf_ptr_fields[] = {
>                 FIELD_UINT("Reserved",          fwts_acpi_table_fpdt_s3_perf_ptr, reserved),
>                 FIELD_UINT("S3PT Pointer",      fwts_acpi_table_fpdt_s3_perf_ptr, s3pt_addr),
>                 FIELD_END
>         };
>
> -       static fwts_acpidump_field fpdt_basic_boot_perf_ptr_fields[] = {
> -               FIELD_UINT("Reserved",          fwts_acpi_table_fpdt_basic_boot_perf_ptr, reserved),
> -               FIELD_UINT("FBPT Pointer",      fwts_acpi_table_fpdt_basic_boot_perf_ptr, fbpt_addr),
> -               FIELD_END
> -       };
> +       ptr += sizeof(fwts_acpi_table_header);
>
>         /*
>          *  Currently we just dump out the various pointer records.  A more complete
> @@ -1578,24 +1581,45 @@ static void acpidump_fpdt(fwts_framework *fw, fwts_acpi_table_info *table)
>         while (ptr < data + length) {
>                 fwts_acpi_table_fpdt_header *fpdt = (fwts_acpi_table_fpdt_header*)ptr;
>
> -               __acpi_dump_table_fields(fw, ptr, fpdt_header_fields, ptr - data);
> +               fwts_log_nl(fw);
> +
>                 switch (fpdt->type) {
> -               case 0:
> -                       fwts_log_info_verbatum(fw, "S3 resume performance record pointer:");
> -                       __acpi_dump_table_fields(fw, ptr, fpdt_s3_perf_ptr_fields, ptr - data);
> +               case 0x0000:
> +                       fwts_log_info_verbatum(fw, "Basic Boot Performance Data Record pointer:");
> +                       __acpi_dump_table_fields(fw, ptr, fpdt_header_fields, ptr - data);
> +                       __acpi_dump_table_fields(fw, ptr, fpdt_basic_boot_perf_ptr_fields, ptr - data);
>                         break;
> -               case 1:
> -                       fwts_log_info_verbatum(fw, "S3 suspend performance record pointer:");
> +               case 0x0001:
> +                       fwts_log_info_verbatum(fw, "S3 Performance Table pointer:");
> +                       __acpi_dump_table_fields(fw, ptr, fpdt_header_fields, ptr - data);
>                         __acpi_dump_table_fields(fw, ptr, fpdt_s3_perf_ptr_fields, ptr - data);
>                         break;
> -               case 2:
> -                       fwts_log_info_verbatum(fw, "Boot performance record pointer:");
> -                       __acpi_dump_table_fields(fw, ptr, fpdt_basic_boot_perf_ptr_fields, ptr - data);
> +               case 0x0002 ... 0x0fff:
> +                       fwts_log_info_verbatum(fw, "Reserved for ACPI specification useage:");
> +                       __acpi_dump_table_fields(fw, ptr, fpdt_header_fields, ptr - data);
> +                       acpi_dump_raw_data(fw, ptr + fpdt_hdr_len, fpdt->length - fpdt_hdr_len, ptr + fpdt_hdr_len - data);
> +                       break;
> +               case 0x1000 ... 0x1fff:
> +                       fwts_log_info_verbatum(fw, "Reserved for Platform Vendor useage:");
> +                       __acpi_dump_table_fields(fw, ptr, fpdt_header_fields, ptr - data);
> +                       acpi_dump_raw_data(fw, ptr + fpdt_hdr_len, fpdt->length - fpdt_hdr_len, ptr + fpdt_hdr_len - data);
> +                       break;
> +               case 0x2000 ... 0x2fff:
> +                       fwts_log_info_verbatum(fw, "Reserved for Hardware Vendor useage:");
> +                       __acpi_dump_table_fields(fw, ptr, fpdt_header_fields, ptr - data);
> +                       acpi_dump_raw_data(fw, ptr + fpdt_hdr_len, fpdt->length - fpdt_hdr_len, ptr + fpdt_hdr_len - data);
> +                       break;
> +               case 0x3000 ... 0x3fff:
> +                       fwts_log_info_verbatum(fw, "Reserved for BIOS Vendor useage:");
> +                       __acpi_dump_table_fields(fw, ptr, fpdt_header_fields, ptr - data);
> +                       acpi_dump_raw_data(fw, ptr + fpdt_hdr_len, fpdt->length - fpdt_hdr_len, ptr + fpdt_hdr_len - data);
>                         break;
>                 default:
> +                       fwts_log_info_verbatum(fw, "Reserved for future useage:");
> +                       __acpi_dump_table_fields(fw, ptr, fpdt_header_fields, ptr - data);
> +                       acpi_dump_raw_data(fw, ptr + fpdt_hdr_len, fpdt->length - fpdt_hdr_len, ptr + fpdt_hdr_len - data);
>                         break;
>                 }
> -
>                 ptr += fpdt->length;
>         }
>  }
> --
> 1.8.0
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>



More information about the fwts-devel mailing list