qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] seabios: acpi: allow qemu to load dsdt as external acpi table.
@ 2010-06-15  3:51 Isaku Yamahata
  2010-06-22  3:02 ` [Qemu-devel] Re: [SeaBIOS] " Kevin O'Connor
  0 siblings, 1 reply; 2+ messages in thread
From: Isaku Yamahata @ 2010-06-15  3:51 UTC (permalink / raw)
  To: seabios; +Cc: qemu-devel

allow qemu to load dsdt as external acpi table.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
---
 src/acpi.c |   27 +++++++++++++++++++++++++--
 1 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/acpi.c b/src/acpi.c
index 0559443..254e43b 100644
--- a/src/acpi.c
+++ b/src/acpi.c
@@ -126,6 +126,11 @@ struct fadt_descriptor_rev1
 } PACKED;
 
 /*
+ * Differentiated System Descrition Table (DSDT)
+ */
+#define DSDT_SIGNATURE 0x54445344 // DSDT
+
+/*
  * MADT values and structures
  */
 
@@ -280,6 +285,11 @@ static inline u32 cpu_to_le32(u32 x)
     return x;
 }
 
+static inline u32 le32_to_cpu(u32 x)
+{
+    return x;
+}
+
 static void
 build_header(struct acpi_table_header *h, u32 sig, int len, u8 rev)
 {
@@ -634,7 +644,8 @@ acpi_bios_init(void)
     } while(0)
 
     // Add tables
-    ACPI_INIT_TABLE(build_fadt(bdf));
+    struct fadt_descriptor_rev1 *fadt = build_fadt(bdf);
+    ACPI_INIT_TABLE(fadt);
     ACPI_INIT_TABLE(build_ssdt());
     ACPI_INIT_TABLE(build_madt());
     ACPI_INIT_TABLE(build_hpet());
@@ -649,7 +660,19 @@ acpi_bios_init(void)
             warn_noalloc();
             continue;
         }
-        ACPI_INIT_TABLE(qemu_cfg_next_acpi_table_load(addr, len));
+        struct acpi_table_header *header =
+            qemu_cfg_next_acpi_table_load(addr, len);
+        if (header->signature == DSDT_SIGNATURE) {
+            if (fadt) {
+                free((void*)le32_to_cpu(fadt->dsdt));
+                fadt->dsdt = cpu_to_le32((u32)addr);
+                fadt->checksum -= checksum(fadt, sizeof(*fadt));
+                header->checksum -= checksum(header, len);
+                dprintf(1, "ACPI DSDT=%p\n", addr);
+            }
+        } else {
+            ACPI_INIT_TABLE(header);
+        }
         if (tbl_idx == MAX_ACPI_TABLES) {
             warn_noalloc();
             break;
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [Qemu-devel] Re: [SeaBIOS] [PATCH] seabios: acpi: allow qemu to load dsdt as external acpi table.
  2010-06-15  3:51 [Qemu-devel] [PATCH] seabios: acpi: allow qemu to load dsdt as external acpi table Isaku Yamahata
@ 2010-06-22  3:02 ` Kevin O'Connor
  0 siblings, 0 replies; 2+ messages in thread
From: Kevin O'Connor @ 2010-06-22  3:02 UTC (permalink / raw)
  To: Isaku Yamahata; +Cc: seabios, qemu-devel

On Tue, Jun 15, 2010 at 12:51:16PM +0900, Isaku Yamahata wrote:
> allow qemu to load dsdt as external acpi table.

I'm okay with the general idea.  However, I don't much like building
and copying the dsdt just to free it later.  It would be preferable if
the code would load in all the qemu provided tables, and then only
build the equivalent seabios table if it isn't already provided by
qemu.

This way, high memory isn't allocated and then later free'd - which
can cause unnecessary high memory reservations.

-Kevin

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2010-06-22  3:08 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-15  3:51 [Qemu-devel] [PATCH] seabios: acpi: allow qemu to load dsdt as external acpi table Isaku Yamahata
2010-06-22  3:02 ` [Qemu-devel] Re: [SeaBIOS] " Kevin O'Connor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).