mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 15:23:53 -06:00
pc: pass PCI hole ranges to Guests
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>
This commit is contained in:
parent
3459a62521
commit
f8c457b88d
4 changed files with 52 additions and 3 deletions
26
hw/i386/pc.c
26
hw/i386/pc.c
|
@ -989,6 +989,31 @@ 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;
|
||||
if (!guest_info->has_pci_info) {
|
||||
return;
|
||||
}
|
||||
|
||||
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;
|
||||
|
@ -1000,6 +1025,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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue