[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v3 09/11] hw/arm/virt-acpi-build: Generate RSDT
From: |
Shannon Zhao |
Subject: |
[Qemu-devel] [RFC PATCH v3 09/11] hw/arm/virt-acpi-build: Generate RSDT table |
Date: |
Tue, 17 Feb 2015 10:08:47 +0800 |
RDST points to other tables FADT, MADT, GTDT.
Signed-off-by: Shannon Zhao <address@hidden>
---
hw/arm/virt-acpi-build.c | 31 ++++++++++++++++++++++++++++++-
1 files changed, 30 insertions(+), 1 deletions(-)
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index bee2e7f..245770a 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -176,6 +176,31 @@ static void acpi_dsdt_add_virtio(Aml *scope, const hwaddr
*mmio_addrs,
}
}
+/* RSDT */
+static void
+build_rsdt(GArray *table_data, GArray *linker, GArray *table_offsets)
+{
+ AcpiRsdtDescriptorRev1 *rsdt;
+ size_t rsdt_len;
+ int i;
+
+ rsdt_len = sizeof(*rsdt) + sizeof(uint32_t) * table_offsets->len;
+ rsdt = acpi_data_push(table_data, rsdt_len);
+ memcpy(rsdt->table_offset_entry, table_offsets->data,
+ sizeof(uint32_t) * table_offsets->len);
+ for (i = 0; i < table_offsets->len; ++i) {
+ /* rsdt->table_offset_entry to be filled by Guest linker */
+ bios_linker_loader_add_pointer(linker,
+ ACPI_BUILD_TABLE_FILE,
+ ACPI_BUILD_TABLE_FILE,
+ table_data,
&rsdt->table_offset_entry[i],
+ sizeof(uint32_t));
+ }
+ build_header(linker, table_data, (void *)rsdt, "RSDT",
+ ACPI_BUILD_APPNAME6, ACPI_BUILD_APPNAME4,
+ rsdt_len, 1);
+}
+
/* GTDT */
static void
build_gtdt(GArray *table_data, GArray *linker, VirtGuestInfo *guest_info)
@@ -311,7 +336,7 @@ static
void virt_acpi_build(VirtGuestInfo *guest_info, AcpiBuildTables *tables)
{
GArray *table_offsets;
- unsigned dsdt;
+ unsigned dsdt, rsdt;
VirtAcpiCpuInfo cpuinfo;
GArray *tables_blob = tables->table_data->buf;
@@ -347,6 +372,10 @@ void virt_acpi_build(VirtGuestInfo *guest_info,
AcpiBuildTables *tables)
acpi_add_table(table_offsets, tables_blob);
build_gtdt(tables_blob, tables->linker, guest_info);
+ /* RSDT is pointed to by RSDP */
+ rsdt = tables_blob->len;
+ build_rsdt(tables_blob, tables->linker, table_offsets);
+
/* Cleanup memory that's no longer used. */
g_array_free(table_offsets, true);
}
--
1.7.1
- [Qemu-devel] [RFC PATCH v3 00/11] Generate ACPI v5.1 tables and expose it to guest over fw_cfg on ARM, Shannon Zhao, 2015/02/16
- [Qemu-devel] [RFC PATCH v3 04/11] hw/acpi/aml-build: Add aml_memory32_fixed() and aml_interrupt(), Shannon Zhao, 2015/02/16
- [Qemu-devel] [RFC PATCH v3 08/11] hw/arm/virt-acpi-build: Generate GTDT table, Shannon Zhao, 2015/02/16
- [Qemu-devel] [RFC PATCH v3 03/11] hw/arm/virt-acpi-build: Basic framework for building ACPI tables on ARM, Shannon Zhao, 2015/02/16
- [Qemu-devel] [RFC PATCH v3 09/11] hw/arm/virt-acpi-build: Generate RSDT table,
Shannon Zhao <=
- [Qemu-devel] [RFC PATCH v3 06/11] hw/arm/virt-acpi-build: Generate FADT table and update ACPI headers, Shannon Zhao, 2015/02/16
- [Qemu-devel] [RFC PATCH v3 01/11] hw/i386: Move ACPI header definitions in an arch-independent location, Shannon Zhao, 2015/02/16
- [Qemu-devel] [RFC PATCH v3 02/11] hw/i386/acpi-build: move generic acpi building helpers into dedictated file, Shannon Zhao, 2015/02/16
- [Qemu-devel] [RFC PATCH v3 07/11] hw/arm/virt-acpi-build: Generate MADT table, Shannon Zhao, 2015/02/16
- [Qemu-devel] [RFC PATCH v3 05/11] hw/arm/virt-acpi-build: Generation of DSDT table for virt devices, Shannon Zhao, 2015/02/16
- [Qemu-devel] [RFC PATCH v3 10/11] hw/arm/virt-acpi-build: Generate RSDP table, Shannon Zhao, 2015/02/16
- [Qemu-devel] [RFC PATCH v3 11/11] hw/arm/virt: Enable dynamic generation of ACPI v5.1 tables, Shannon Zhao, 2015/02/16