All of lore.kernel.org
 help / color / mirror / Atom feed
From: Samuel Ortiz <sameo@linux.intel.com>
To: qemu-devel@nongnu.org
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>,
	Shannon Zhao <shannon.zhaosl@gmail.com>,
	qemu-arm@nongnu.org, Igor Mammedov <imammedo@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Richard Henderson <rth@twiddle.net>
Subject: [Qemu-devel] [PATCH v2 5/8] hw: arm: Convert the RSDP build to the buid_append_foo() API
Date: Thu, 29 Nov 2018 14:24:25 +0100	[thread overview]
Message-ID: <20181129132428.333-6-sameo@linux.intel.com> (raw)
In-Reply-To: <20181129132428.333-1-sameo@linux.intel.com>

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 for an easier to review and maintain code that is almost
matching 1:1 the ACPI spec itself.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
---
 hw/arm/virt-acpi-build.c | 42 +++++++++++++++++++++-------------------
 1 file changed, 22 insertions(+), 20 deletions(-)

diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index ce8bfa5a37..4782aea4fe 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -368,35 +368,37 @@ 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;
-
-    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,
+                                   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);
+                                    0, 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);
+                                    0, 36, /* ACPI rev 2.0 RSDP size */
+                                    32);
 }
 
 static void
-- 
2.19.2


  parent reply	other threads:[~2018-11-29 13:30 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-29 13:24 [Qemu-devel] [PATCH v2 0/8] hw: acpi: RSDP fixes and refactoring Samuel Ortiz
2018-11-29 13:24 ` [Qemu-devel] [PATCH v2 1/8] hw: acpi: The RSDP build API can return void Samuel Ortiz
2018-11-29 14:02   ` [Qemu-arm] " Andrew Jones
2018-11-29 13:24 ` [Qemu-devel] [PATCH v2 2/8] hw: arm: acpi: Fix incorrect checksums in RSDP Samuel Ortiz
2018-11-29 14:02   ` Andrew Jones
2018-11-29 13:24 ` [Qemu-devel] [PATCH v2 3/8] hw: i386: Use correct RSDT length for checksum Samuel Ortiz
2018-11-29 13:24 ` [Qemu-arm] [PATCH v2 4/8] hw: arm: Carry RSDP specific data through AcpiRsdpData Samuel Ortiz
2018-11-29 14:09   ` [Qemu-arm] [Qemu-devel] " Andrew Jones
2018-11-29 14:26     ` Samuel Ortiz
2018-11-30  7:26       ` [Qemu-arm] " Igor Mammedov
2018-11-30 14:34         ` Andrew Jones
2018-11-30  7:27   ` Igor Mammedov
2018-11-29 13:24 ` Samuel Ortiz [this message]
2018-11-29 14:28   ` [Qemu-arm] [Qemu-devel] [PATCH v2 5/8] hw: arm: Convert the RSDP build to the buid_append_foo() API Andrew Jones
2018-11-30  9:25   ` Igor Mammedov
2018-11-29 13:24 ` [Qemu-arm] [PATCH v2 6/8] hw: arm: Support both legacy and current RSDP build Samuel Ortiz
2018-11-29 14:42   ` [Qemu-devel] " Andrew Jones
2018-11-29 14:59     ` [Qemu-arm] " Samuel Ortiz
2018-11-29 15:09       ` Andrew Jones
2018-11-29 17:48         ` [Qemu-arm] " Samuel Ortiz
2018-11-30  9:57       ` Igor Mammedov
2018-11-30  9:38   ` [Qemu-arm] " Igor Mammedov
2018-11-29 13:24 ` [Qemu-devel] [PATCH v2 7/8] hw: acpi: Export and share the ARM " Samuel Ortiz
2018-11-29 14:51   ` [Qemu-arm] " Andrew Jones
2018-11-30 10:03   ` Igor Mammedov
2018-11-29 13:24 ` [Qemu-devel] [PATCH v2 8/8] hw: acpi: Remove AcpiRsdpDescriptor and fix tests Samuel Ortiz
2018-11-29 15:07   ` Andrew Jones
2018-11-30  9:35     ` [Qemu-arm] " Samuel Ortiz
2018-11-30 10:26   ` Igor Mammedov
2018-11-30 10:29 ` [Qemu-arm] [Qemu-devel] [PATCH v2 0/8] hw: acpi: RSDP fixes and refactoring 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=20181129132428.333-6-sameo@linux.intel.com \
    --to=sameo@linux.intel.com \
    --cc=ben@skyportsystems.com \
    --cc=ehabkost@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=lvivier@redhat.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=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.