From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Anthony Liguori <aliguori@us.ibm.com>
Subject: [Qemu-devel] [PATCH v2 3/5] pc: pass PCI hole ranges to Guests
Date: Thu, 30 May 2013 14:07:22 +0300 [thread overview]
Message-ID: <1369911913-10934-4-git-send-email-mst@redhat.com> (raw)
In-Reply-To: <1369911913-10934-1-git-send-email-mst@redhat.com>
Guest currently has to jump through lots of hoops to guess the PCI hole
ranges. It's fragile, and makes us change BIOS each time we add a new
chipset. Let's report the window in a ROM file, to make BIOS do exactly
what QEMU intends.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
hw/i386/pc.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index c233161..64101cb 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -978,6 +978,26 @@ void pc_cpus_init(const char *cpu_model, DeviceState *icc_bridge)
}
}
+/* pci-info ROM file. Little endian format */
+typedef struct PcRomPciInfo {
+ uint64_t w32_min;
+ uint64_t w32_max;
+ uint64_t w64_min;
+ uint64_t w64_max;
+} PcRomPciInfo;
+
+static void pc_fw_cfg_guest_info(PcGuestInfo *guest_info)
+{
+ PcRomPciInfo *info = g_malloc(sizeof *info);
+ info->w32_min = cpu_to_le64(guest_info->pci_info.w32.begin);
+ info->w32_max = cpu_to_le64(guest_info->pci_info.w32.end);
+ info->w64_min = cpu_to_le64(guest_info->pci_info.w64.begin);
+ info->w64_max = cpu_to_le64(guest_info->pci_info.w64.end);
+ /* Pass PCI hole info to guest via a side channel.
+ * Required so guest PCI enumeration does the right thing. */
+ fw_cfg_add_file(guest_info->fw_cfg, "etc/pci-info", info, sizeof *info);
+}
+
typedef struct PcGuestInfoState {
PcGuestInfo info;
Notifier machine_done;
@@ -989,6 +1009,7 @@ void pc_guest_info_machine_done(Notifier *notifier, void *data)
PcGuestInfoState *guest_info_state = container_of(notifier,
PcGuestInfoState,
machine_done);
+ pc_fw_cfg_guest_info(&guest_info_state->info);
}
PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size,
--
MST
next prev parent reply other threads:[~2013-05-30 11:07 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-30 11:07 [Qemu-devel] [PATCH v2 0/5] pc: pass pci window data to guests Michael S. Tsirkin
2013-05-30 11:07 ` [Qemu-devel] [PATCH v2 1/5] range: add Range structure Michael S. Tsirkin
2013-05-31 2:41 ` Hu Tao
2013-05-30 11:07 ` [Qemu-devel] [PATCH v2 2/5] pci: store PCI hole ranges in guestinfo structure Michael S. Tsirkin
2013-05-30 12:16 ` Gerd Hoffmann
2013-05-30 12:19 ` Michael S. Tsirkin
2013-05-30 12:32 ` Gerd Hoffmann
2013-05-30 12:55 ` Michael S. Tsirkin
2013-05-31 5:43 ` Gerd Hoffmann
2013-05-30 12:25 ` Laszlo Ersek
2013-05-30 12:45 ` Michael S. Tsirkin
2013-05-31 3:26 ` Hu Tao
2013-05-30 11:07 ` Michael S. Tsirkin [this message]
2013-05-30 11:07 ` [Qemu-devel] [PATCH v2 4/5] pc: add 1.6 compat type Michael S. Tsirkin
2013-05-30 15:55 ` Andreas Färber
2013-05-30 17:40 ` Michael S. Tsirkin
2013-05-30 11:07 ` [Qemu-devel] [PATCH v2 5/5] pc: pci-info add compat support Michael S. Tsirkin
2013-05-30 16:32 ` Laszlo Ersek
2013-05-30 17:39 ` Michael S. Tsirkin
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=1369911913-10934-4-git-send-email-mst@redhat.com \
--to=mst@redhat.com \
--cc=aliguori@us.ibm.com \
--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 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.