From: Igor Mammedov <imammedo@redhat.com>
To: Samuel Ortiz <sameo@linux.intel.com>
Cc: Laurent Vivier <lvivier@redhat.com>,
Peter Maydell <peter.maydell@linaro.org>,
Thomas Huth <thuth@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>,
Ben Warren <ben@skyportsystems.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
qemu-devel@nongnu.org, Shannon Zhao <shannon.zhaosl@gmail.com>,
qemu-arm@nongnu.org,
Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-arm] [PATCH v3 5/8] hw: arm: Convert the RSDP build to the buid_append_foo() API
Date: Tue, 4 Dec 2018 14:41:45 +0100 [thread overview]
Message-ID: <20181204144145.4828d30f@redhat.com> (raw)
In-Reply-To: <20181130130032.11835-6-sameo@linux.intel.com>
On Fri, 30 Nov 2018 14:00:29 +0100
Samuel Ortiz <sameo@linux.intel.com> wrote:
> Instead of filling a mapped and packed C structure field in random order
> and being careful about endianness and sizes, build_rsdp() now uses
> build_append_int_noprefix() to compose RSDP table.
>
> This makes reviewing and maintaining code easier as this is almost
> matching 1:1 the ACPI spec itself.
>
> Reviewed-by: Andrew Jones <drjones@redhat.com>
> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> hw/arm/virt-acpi-build.c | 42 ++++++++++++++++++++++------------------
> 1 file changed, 23 insertions(+), 19 deletions(-)
>
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index ce8bfa5a37..4a6b53fbfc 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -368,35 +368,39 @@ static void acpi_dsdt_add_power_button(Aml *scope)
>
> /* RSDP */
> static void
> -build_rsdp(GArray *rsdp_table, BIOSLinker *linker, AcpiRsdpData *rsdp_data)
> +build_rsdp(GArray *tbl, BIOSLinker *linker, AcpiRsdpData *rsdp_data)
> {
> - AcpiRsdpDescriptor *rsdp = acpi_data_push(rsdp_table, sizeof *rsdp);
> - unsigned xsdt_pa_size = sizeof(rsdp->xsdt_physical_address);
> - unsigned xsdt_pa_offset =
> - (char *)&rsdp->xsdt_physical_address - rsdp_table->data;
> + int tbl_off = tbl->len; /* Table offset in the RSDP file */
>
> - bios_linker_loader_alloc(linker, ACPI_BUILD_RSDP_FILE, rsdp_table, 16,
> + bios_linker_loader_alloc(linker, ACPI_BUILD_RSDP_FILE, tbl, 16,
> true /* fseg memory */);
>
> - memcpy(&rsdp->signature, "RSD PTR ", sizeof(rsdp->signature));
> - memcpy(rsdp->oem_id, rsdp_data->oem_id, sizeof(rsdp->oem_id));
> - rsdp->length = cpu_to_le32(sizeof(*rsdp));
> - rsdp->revision = rsdp_data->revision;
> + g_array_append_vals(tbl, "RSD PTR ", 8); /* Signature */
> + build_append_int_noprefix(tbl, 0, 1); /* Checksum */
> + g_array_append_vals(tbl, rsdp_data->oem_id, 6); /* OEMID */
> + build_append_int_noprefix(tbl, rsdp_data->revision, 1); /* Revision */
> + build_append_int_noprefix(tbl, 0, 4); /* RsdtAddress */
> + build_append_int_noprefix(tbl, 36, 4); /* Length */
>
> - /* Address to be filled by Guest linker */
> - bios_linker_loader_add_pointer(linker,
> - ACPI_BUILD_RSDP_FILE, xsdt_pa_offset, xsdt_pa_size,
> - ACPI_BUILD_TABLE_FILE, *rsdp_data->xsdt_tbl_offset);
> + /* XSDT address to be filled by guest linker */
> + build_append_int_noprefix(tbl, 0, 8); /* XsdtAddress */
> + bios_linker_loader_add_pointer(linker, ACPI_BUILD_RSDP_FILE,
> + tbl_off + 24, 8,
> + ACPI_BUILD_TABLE_FILE,
> + *rsdp_data->xsdt_tbl_offset);
>
> - /* Checksum to be filled by Guest linker */
> + build_append_int_noprefix(tbl, 0, 1); /* Extended Checksum */
> + build_append_int_noprefix(tbl, 0, 3); /* Reserved */
> +
> + /* Checksum to be filled by guest linker */
> bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE,
> - (char *)rsdp - rsdp_table->data, 20 /* ACPI rev 1.0 RSDP size */,
> - (char *)&rsdp->checksum - rsdp_table->data);
> + tbl_off, 20, /* ACPI rev 1.0 RSDP size */
> + 8);
>
> /* Extended checksum to be filled by Guest linker */
> bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE,
> - (char *)rsdp - rsdp_table->data, 36 /* ACPI rev 2.0 RSDP size */,
> - (char *)&rsdp->extended_checksum - rsdp_table->data);
> + tbl_off, 36, /* ACPI rev 2.0 RSDP size */
> + 32);
> }
>
> static void
WARNING: multiple messages have this Message-ID (diff)
From: Igor Mammedov <imammedo@redhat.com>
To: Samuel Ortiz <sameo@linux.intel.com>
Cc: qemu-devel@nongnu.org, Peter Maydell <peter.maydell@linaro.org>,
Laurent Vivier <lvivier@redhat.com>,
Thomas Huth <thuth@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Richard Henderson <rth@twiddle.net>,
qemu-arm@nongnu.org, Ben Warren <ben@skyportsystems.com>,
Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Shannon Zhao <shannon.zhaosl@gmail.com>
Subject: Re: [Qemu-devel] [PATCH v3 5/8] hw: arm: Convert the RSDP build to the buid_append_foo() API
Date: Tue, 4 Dec 2018 14:41:45 +0100 [thread overview]
Message-ID: <20181204144145.4828d30f@redhat.com> (raw)
In-Reply-To: <20181130130032.11835-6-sameo@linux.intel.com>
On Fri, 30 Nov 2018 14:00:29 +0100
Samuel Ortiz <sameo@linux.intel.com> wrote:
> Instead of filling a mapped and packed C structure field in random order
> and being careful about endianness and sizes, build_rsdp() now uses
> build_append_int_noprefix() to compose RSDP table.
>
> This makes reviewing and maintaining code easier as this is almost
> matching 1:1 the ACPI spec itself.
>
> Reviewed-by: Andrew Jones <drjones@redhat.com>
> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> hw/arm/virt-acpi-build.c | 42 ++++++++++++++++++++++------------------
> 1 file changed, 23 insertions(+), 19 deletions(-)
>
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index ce8bfa5a37..4a6b53fbfc 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -368,35 +368,39 @@ static void acpi_dsdt_add_power_button(Aml *scope)
>
> /* RSDP */
> static void
> -build_rsdp(GArray *rsdp_table, BIOSLinker *linker, AcpiRsdpData *rsdp_data)
> +build_rsdp(GArray *tbl, BIOSLinker *linker, AcpiRsdpData *rsdp_data)
> {
> - AcpiRsdpDescriptor *rsdp = acpi_data_push(rsdp_table, sizeof *rsdp);
> - unsigned xsdt_pa_size = sizeof(rsdp->xsdt_physical_address);
> - unsigned xsdt_pa_offset =
> - (char *)&rsdp->xsdt_physical_address - rsdp_table->data;
> + int tbl_off = tbl->len; /* Table offset in the RSDP file */
>
> - bios_linker_loader_alloc(linker, ACPI_BUILD_RSDP_FILE, rsdp_table, 16,
> + bios_linker_loader_alloc(linker, ACPI_BUILD_RSDP_FILE, tbl, 16,
> true /* fseg memory */);
>
> - memcpy(&rsdp->signature, "RSD PTR ", sizeof(rsdp->signature));
> - memcpy(rsdp->oem_id, rsdp_data->oem_id, sizeof(rsdp->oem_id));
> - rsdp->length = cpu_to_le32(sizeof(*rsdp));
> - rsdp->revision = rsdp_data->revision;
> + g_array_append_vals(tbl, "RSD PTR ", 8); /* Signature */
> + build_append_int_noprefix(tbl, 0, 1); /* Checksum */
> + g_array_append_vals(tbl, rsdp_data->oem_id, 6); /* OEMID */
> + build_append_int_noprefix(tbl, rsdp_data->revision, 1); /* Revision */
> + build_append_int_noprefix(tbl, 0, 4); /* RsdtAddress */
> + build_append_int_noprefix(tbl, 36, 4); /* Length */
>
> - /* Address to be filled by Guest linker */
> - bios_linker_loader_add_pointer(linker,
> - ACPI_BUILD_RSDP_FILE, xsdt_pa_offset, xsdt_pa_size,
> - ACPI_BUILD_TABLE_FILE, *rsdp_data->xsdt_tbl_offset);
> + /* XSDT address to be filled by guest linker */
> + build_append_int_noprefix(tbl, 0, 8); /* XsdtAddress */
> + bios_linker_loader_add_pointer(linker, ACPI_BUILD_RSDP_FILE,
> + tbl_off + 24, 8,
> + ACPI_BUILD_TABLE_FILE,
> + *rsdp_data->xsdt_tbl_offset);
>
> - /* Checksum to be filled by Guest linker */
> + build_append_int_noprefix(tbl, 0, 1); /* Extended Checksum */
> + build_append_int_noprefix(tbl, 0, 3); /* Reserved */
> +
> + /* Checksum to be filled by guest linker */
> bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE,
> - (char *)rsdp - rsdp_table->data, 20 /* ACPI rev 1.0 RSDP size */,
> - (char *)&rsdp->checksum - rsdp_table->data);
> + tbl_off, 20, /* ACPI rev 1.0 RSDP size */
> + 8);
>
> /* Extended checksum to be filled by Guest linker */
> bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE,
> - (char *)rsdp - rsdp_table->data, 36 /* ACPI rev 2.0 RSDP size */,
> - (char *)&rsdp->extended_checksum - rsdp_table->data);
> + tbl_off, 36, /* ACPI rev 2.0 RSDP size */
> + 32);
> }
>
> static void
next prev parent reply other threads:[~2018-12-04 13:42 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-30 13:00 [Qemu-arm] [PATCH v3 0/8] hw: acpi: RSDP fixes and refactoring Samuel Ortiz
2018-11-30 13:00 ` [Qemu-devel] " Samuel Ortiz
2018-11-30 13:00 ` [Qemu-devel] [PATCH v3 1/8] hw: acpi: The RSDP build API can return void Samuel Ortiz
2018-11-30 13:00 ` Samuel Ortiz
2018-11-30 13:00 ` [Qemu-devel] [PATCH v3 2/8] hw: arm: acpi: Fix incorrect checksums in RSDP Samuel Ortiz
2018-11-30 13:00 ` Samuel Ortiz
2018-11-30 13:00 ` [Qemu-devel] [PATCH v3 3/8] hw: i386: Use correct RSDT length for checksum Samuel Ortiz
2018-11-30 13:00 ` Samuel Ortiz
2018-11-30 13:00 ` [Qemu-devel] [PATCH v3 4/8] hw: arm: Carry RSDP specific data through AcpiRsdpData Samuel Ortiz
2018-11-30 13:00 ` Samuel Ortiz
2018-12-04 14:49 ` [Qemu-arm] " Andrew Jones
2018-12-04 14:49 ` Andrew Jones
2018-11-30 13:00 ` [Qemu-arm] [PATCH v3 5/8] hw: arm: Convert the RSDP build to the buid_append_foo() API Samuel Ortiz
2018-11-30 13:00 ` [Qemu-devel] " Samuel Ortiz
2018-12-04 13:41 ` Igor Mammedov [this message]
2018-12-04 13:41 ` Igor Mammedov
2018-11-30 13:00 ` [Qemu-devel] [PATCH v3 6/8] hw: arm: Support both legacy and current RSDP build Samuel Ortiz
2018-11-30 13:00 ` Samuel Ortiz
2018-12-04 13:47 ` [Qemu-arm] " Igor Mammedov
2018-12-04 13:47 ` [Qemu-devel] " Igor Mammedov
2018-12-04 14:53 ` [Qemu-arm] " Andrew Jones
2018-12-04 14:53 ` Andrew Jones
2018-11-30 13:00 ` [Qemu-devel] [PATCH v3 7/8] hw: acpi: Export and share the ARM " Samuel Ortiz
2018-11-30 13:00 ` Samuel Ortiz
2018-12-04 14:01 ` Igor Mammedov
2018-12-04 14:01 ` Igor Mammedov
2018-11-30 13:00 ` [Qemu-arm] [PATCH v3 8/8] hw: acpi: Remove AcpiRsdpDescriptor and fix tests Samuel Ortiz
2018-11-30 13:00 ` [Qemu-devel] " Samuel Ortiz
2018-12-04 14:06 ` [Qemu-arm] " Igor Mammedov
2018-12-04 14:06 ` [Qemu-devel] " Igor Mammedov
2018-12-04 15:10 ` [Qemu-arm] " Andrew Jones
2018-12-04 15:10 ` Andrew Jones
2018-12-04 16:43 ` [Qemu-arm] " Igor Mammedov
2018-12-04 16:43 ` Igor Mammedov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181204144145.4828d30f@redhat.com \
--to=imammedo@redhat.com \
--cc=ben@skyportsystems.com \
--cc=ehabkost@redhat.com \
--cc=lvivier@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=sameo@linux.intel.com \
--cc=shannon.zhaosl@gmail.com \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.