qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: minyard@acm.org
To: qemu-devel@nongnu.org
Cc: Corey Minyard <cminyard@mvista.com>,
	openipmi-developer@lists.sourceforge.net,
	Corey Minyard <cminyard@mvsita.com>
Subject: [Qemu-devel] [PATCH 17/20] pc: Postpone adding ACPI and SMBIOS to fw_cfg
Date: Wed, 29 May 2013 17:08:13 -0500	[thread overview]
Message-ID: <1369865296-19584-18-git-send-email-minyard@acm.org> (raw)
In-Reply-To: <1369865296-19584-1-git-send-email-minyard@acm.org>

From: Corey Minyard <cminyard@mvista.com>

Postpone the addition of the ACPI and SMBIOS tables until after
device initialization.  This allows devices to add entries to these
tables.

Signed-off-by: Corey Minyard <cminyard@mvsita.com>
---
 hw/i386/pc.c |   38 ++++++++++++++++++++++++++++++--------
 1 file changed, 30 insertions(+), 8 deletions(-)

diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 197d218..d3143a4 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -598,8 +598,6 @@ static unsigned int pc_apic_id_limit(unsigned int max_cpus)
 static void *bochs_bios_init(void)
 {
     void *fw_cfg;
-    uint8_t *smbios_table;
-    size_t smbios_len;
     uint64_t *numa_fw_cfg;
     int i, j;
     unsigned int apic_id_limit = pc_apic_id_limit(max_cpus);
@@ -622,14 +620,8 @@ static void *bochs_bios_init(void)
     fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)apic_id_limit);
     fw_cfg_add_i32(fw_cfg, FW_CFG_ID, 1);
     fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
-    fw_cfg_add_bytes(fw_cfg, FW_CFG_ACPI_TABLES,
-                     acpi_tables, acpi_tables_len);
     fw_cfg_add_i32(fw_cfg, FW_CFG_IRQ0_OVERRIDE, kvm_allows_irq0_override());
 
-    smbios_table = smbios_get_table(&smbios_len);
-    if (smbios_table)
-        fw_cfg_add_bytes(fw_cfg, FW_CFG_SMBIOS_ENTRIES,
-                         smbios_table, smbios_len);
     fw_cfg_add_bytes(fw_cfg, FW_CFG_E820_TABLE,
                      &e820_table, sizeof(e820_table));
 
@@ -1012,6 +1004,31 @@ void pc_acpi_init(const char *default_dsdt)
     }
 }
 
+struct pc_bios_post_init {
+    Notifier post_init;
+    void *fw_cfg;
+};
+
+/* Add the ACPI and SMBIOS tables after all the hardware has been initialized.
+ * This gives devices a chance to add to those tables.
+ */
+static void pc_bios_post_initfn(Notifier *n, void *opaque)
+{
+    struct pc_bios_post_init *p = container_of(n, struct pc_bios_post_init,
+                                               post_init);
+    uint8_t *smbios_table;
+    size_t smbios_len;
+
+    fw_cfg_add_bytes(p->fw_cfg, FW_CFG_ACPI_TABLES,
+                     acpi_tables, acpi_tables_len);
+    smbios_table = smbios_get_table(&smbios_len);
+    if (smbios_table)
+        fw_cfg_add_bytes(p->fw_cfg, FW_CFG_SMBIOS_ENTRIES,
+                         smbios_table, smbios_len);
+}
+
+static struct pc_bios_post_init post_init;
+
 void *pc_memory_init(MemoryRegion *system_memory,
                     const char *kernel_filename,
                     const char *kernel_cmdline,
@@ -1071,6 +1088,11 @@ void *pc_memory_init(MemoryRegion *system_memory,
     for (i = 0; i < nb_option_roms; i++) {
         rom_add_option(option_rom[i].name, option_rom[i].bootindex);
     }
+
+    post_init.fw_cfg = fw_cfg;
+    post_init.post_init.notify = pc_bios_post_initfn;
+    qemu_add_machine_init_done_notifier(&post_init.post_init);
+
     return fw_cfg;
 }
 
-- 
1.7.9.5

  parent reply	other threads:[~2013-05-29 22:18 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-29 22:07 [Qemu-devel] [PATCH 00/20] Add an IPMI device to QEMU minyard
2013-05-29 22:07 ` [Qemu-devel] [PATCH 01/20] qemu-char: Allocate CharDriverState in qemu_chr_new_from_opts minyard
2013-05-29 22:07 ` [Qemu-devel] [PATCH 02/20] qemu-char: Allow a chardev to reconnect if disconnected minyard
2013-05-29 22:07 ` [Qemu-devel] [PATCH 03/20] qemu-char: Fix a race reporting opens and closes minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 04/20] qemu-char: remove free of chr from win_stdio_close minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 05/20] qemu-char: Close fd at end of file minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 06/20] Add a base IPMI interface minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 07/20] ipmi: Add a PC ISA type structure minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 08/20] ipmi: Add a KCS low-level interface minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 09/20] ipmi: Add a BT " minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 10/20] ipmi: Add a local BMC simulation minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 11/20] ipmi: Add an external connection simulation interface minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 12/20] ipmi: Add tests minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 13/20] ipmi: Add documentation minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 14/20] ipmi: Add migration capability to the IPMI device minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 15/20] acpi: Add a way to extend tables minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 16/20] acpi: Add table construction tools minyard
2013-05-29 22:08 ` minyard [this message]
2013-05-29 22:08 ` [Qemu-devel] [PATCH 18/20] ipmi: Add ACPI table entries for BMCs minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 19/20] smbios: Add a function to directly add an entry minyard
2013-05-29 22:08 ` [Qemu-devel] [PATCH 20/20] ipmi: Add SMBIOS table entry minyard
2013-11-05 13:56 ` [Qemu-devel] [PATCH 00/20] Add an IPMI device to QEMU Michael S. Tsirkin
2013-11-05 14:05   ` Corey Minyard
2013-11-05 16:09   ` Andreas Färber
2013-11-05 16:48     ` Corey Minyard

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=1369865296-19584-18-git-send-email-minyard@acm.org \
    --to=minyard@acm.org \
    --cc=cminyard@mvista.com \
    --cc=cminyard@mvsita.com \
    --cc=openipmi-developer@lists.sourceforge.net \
    --cc=qemu-devel@nongnu.org \
    /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 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).