From: Anthony Liguori aliguori@us.ibm.com
Hi,
Option rom saga continued. This is the first series I consider ready for merging. Changes:
* pci roms: will be loaded via option pci rom bar. * non-pci roms: will be loaded via fw_cfg.
Note that using the old bochs-bios based pc-bios will stop working with this patch series applied.
The last two patches of this series are *not* intended to be merged, they are just for testing convinience. They carry a new seabios binary and the changes needed and turn on bios debug messages in qemu.
Seabios patches will be posted shortly as separate patch series.
cheers, Gerd
From: Anthony Liguori aliguori@us.ibm.com
Currently, we preload option roms into the option rom space in memory. This prevents DDIM from functioning correctly which severely limits the number of roms we can support.
This patch introduces a pci_add_option_rom() which registers the PCI_ROM_ADDRESS bar which points to our option rom. It also converts over the cirrus vga adapter, the rtl8139, virtio, and the e1000 to use this new mechanism.
The result is that PXE boot functions even with three unique types of cards.
Signed-off-by: Anthony Liguori aliguori@us.ibm.com Signed-off-by: Gerd Hoffmann kraxel@redhat.com --- hw/cirrus_vga.c | 2 +- hw/e1000.c | 2 +- hw/pci.c | 35 +++++++++++++++++++++++++++++++++++ hw/pci.h | 5 +++++ hw/rtl8139.c | 2 +- hw/virtio-pci.c | 2 +- 6 files changed, 44 insertions(+), 4 deletions(-)
diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c index 24af81c..b08d2ae 100644 --- a/hw/cirrus_vga.c +++ b/hw/cirrus_vga.c @@ -3211,7 +3211,7 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev) }
/* ROM BIOS */ - rom_add_vga(VGABIOS_CIRRUS_FILENAME); + pci_add_option_rom((PCIDevice *)d, VGABIOS_CIRRUS_FILENAME); return 0; }
diff --git a/hw/e1000.c b/hw/e1000.c index 8566fe3..f795601 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -1125,7 +1125,7 @@ static int pci_e1000_init(PCIDevice *pci_dev) if (!pci_dev->qdev.hotplugged) { static int loaded = 0; if (!loaded) { - rom_add_option("pxe-e1000.bin"); + pci_add_option_rom(&d->dev, "pxe-e1000.bin"); loaded = 1; } } diff --git a/hw/pci.c b/hw/pci.c index 404eead..dbdfdbf 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -26,6 +26,7 @@ #include "monitor.h" #include "net.h" #include "sysemu.h" +#include "loader.h"
//#define DEBUG_PCI #ifdef DEBUG_PCI @@ -1463,6 +1464,40 @@ static uint8_t pci_find_capability_list(PCIDevice *pdev, uint8_t cap_id, return next; }
+static void pci_map_option_rom(PCIDevice *pdev, int region_num, pcibus_t addr, pcibus_t size, int type) +{ + cpu_register_physical_memory(addr, size, pdev->rom_offset); +} + +/* Add an option rom for the device */ +int pci_add_option_rom(PCIDevice *pdev, const char *name) +{ + int size; + char *path; + void *ptr; + + path = qemu_find_file(QEMU_FILE_TYPE_BIOS, name); + if (path == NULL) { + path = qemu_strdup(name); + } + + size = get_image_size(path); + if (size & (size - 1)) { + size = 1 << qemu_fls(size); + } + + pdev->rom_offset = qemu_ram_alloc(size); + + ptr = qemu_get_ram_ptr(pdev->rom_offset); + load_image(path, ptr); + qemu_free(path); + + pci_register_bar(pdev, PCI_ROM_SLOT, size, + 0, pci_map_option_rom); + + return 0; +} + /* Reserve space and add capability to the linked list in pci config space */ int pci_add_capability(PCIDevice *pdev, uint8_t cap_id, uint8_t size) { diff --git a/hw/pci.h b/hw/pci.h index d279e3f..89b3f55 100644 --- a/hw/pci.h +++ b/hw/pci.h @@ -243,6 +243,9 @@ struct PCIDevice { uint32_t msix_bar_size; /* Version id needed for VMState */ int32_t version_id; + + /* Location of option rom */ + ram_addr_t rom_offset; };
PCIDevice *pci_register_device(PCIBus *bus, const char *name, @@ -254,6 +257,8 @@ void pci_register_bar(PCIDevice *pci_dev, int region_num, pcibus_t size, int type, PCIMapIORegionFunc *map_func);
+int pci_add_option_rom(PCIDevice *pdev, const char *name); + int pci_add_capability(PCIDevice *pci_dev, uint8_t cap_id, uint8_t cap_size);
void pci_del_capability(PCIDevice *pci_dev, uint8_t cap_id, uint8_t cap_size); diff --git a/hw/rtl8139.c b/hw/rtl8139.c index 9fd05a8..2cee97b 100644 --- a/hw/rtl8139.c +++ b/hw/rtl8139.c @@ -3357,7 +3357,7 @@ static int pci_rtl8139_init(PCIDevice *dev) if (!dev->qdev.hotplugged) { static int loaded = 0; if (!loaded) { - rom_add_option("pxe-rtl8139.bin"); + pci_add_option_rom(&s->dev, "pxe-rtl8139.bin"); loaded = 1; } } diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c index 4500130..85f14a2 100644 --- a/hw/virtio-pci.c +++ b/hw/virtio-pci.c @@ -522,7 +522,7 @@ static int virtio_net_init_pci(PCIDevice *pci_dev) if (!pci_dev->qdev.hotplugged) { static int loaded = 0; if (!loaded) { - rom_add_option("pxe-virtio.bin"); + pci_add_option_rom(pci_dev, "pxe-virtio.bin"); loaded = 1; } }
On Fri, Dec 18, 2009 at 11:01 AM, Gerd Hoffmann kraxel@redhat.com wrote:
From: Anthony Liguori aliguori@us.ibm.com
Currently, we preload option roms into the option rom space in memory. This prevents DDIM from functioning correctly which severely limits the number of roms we can support.
This patch introduces a pci_add_option_rom() which registers the PCI_ROM_ADDRESS bar which points to our option rom. It also converts over the cirrus vga adapter, the rtl8139, virtio, and the e1000 to use this new mechanism.
This means that the VGA roms are now visible for all targets, not just when rom_enable_driver_roms is true. I'm not opposing this, but it may create regressions.
Blue Swirl wrote:
On Fri, Dec 18, 2009 at 11:01 AM, Gerd Hoffmann kraxel@redhat.com wrote:
From: Anthony Liguori aliguori@us.ibm.com
Currently, we preload option roms into the option rom space in memory. This prevents DDIM from functioning correctly which severely limits the number of roms we can support.
This patch introduces a pci_add_option_rom() which registers the PCI_ROM_ADDRESS bar which points to our option rom. It also converts over the cirrus vga adapter, the rtl8139, virtio, and the e1000 to use this new mechanism.
This means that the VGA roms are now visible for all targets, not just when rom_enable_driver_roms is true. I'm not opposing this, but it may create regressions.
This is pretty normal on bare metal though, no? I thought a lot of non-x86 systems actually use x86 emulators specifically to enable support for these roms.
Regards,
Anthony Liguori
On Sun, Dec 20, 2009 at 3:34 PM, Anthony Liguori anthony@codemonkey.ws wrote:
Blue Swirl wrote:
On Fri, Dec 18, 2009 at 11:01 AM, Gerd Hoffmann kraxel@redhat.com wrote:
From: Anthony Liguori aliguori@us.ibm.com
Currently, we preload option roms into the option rom space in memory. This prevents DDIM from functioning correctly which severely limits the number of roms we can support.
This patch introduces a pci_add_option_rom() which registers the PCI_ROM_ADDRESS bar which points to our option rom. It also converts over the cirrus vga adapter, the rtl8139, virtio, and the e1000 to use this new mechanism.
This means that the VGA roms are now visible for all targets, not just when rom_enable_driver_roms is true. I'm not opposing this, but it may create regressions.
This is pretty normal on bare metal though, no? I thought a lot of non-x86 systems actually use x86 emulators specifically to enable support for these roms.
I think so too, but ROM loading was first introduced with rom_enable_driver_roms mechanism just for cases like this.
But if there are no regressions, rom_enable_driver_roms mechanism could be removed.
On 20.12.2009, at 18:02, Blue Swirl wrote:
On Sun, Dec 20, 2009 at 3:34 PM, Anthony Liguori anthony@codemonkey.ws wrote:
Blue Swirl wrote:
On Fri, Dec 18, 2009 at 11:01 AM, Gerd Hoffmann kraxel@redhat.com wrote:
From: Anthony Liguori aliguori@us.ibm.com
Currently, we preload option roms into the option rom space in memory. This prevents DDIM from functioning correctly which severely limits the number of roms we can support.
This patch introduces a pci_add_option_rom() which registers the PCI_ROM_ADDRESS bar which points to our option rom. It also converts over the cirrus vga adapter, the rtl8139, virtio, and the e1000 to use this new mechanism.
This means that the VGA roms are now visible for all targets, not just when rom_enable_driver_roms is true. I'm not opposing this, but it may create regressions.
This is pretty normal on bare metal though, no? I thought a lot of non-x86 systems actually use x86 emulators specifically to enable support for these roms.
I think so too, but ROM loading was first introduced with rom_enable_driver_roms mechanism just for cases like this.
But if there are no regressions, rom_enable_driver_roms mechanism could be removed.
Don't macs usually have a powerpc vgabios?
I don't think we'd introduce regressions, just something you wouldn't find in a real machine. But then again the mac target isn't exactly that close to real hw anyways ...
Alex
Alexander Graf wrote:
Don't macs usually have a powerpc vgabios?
I'm not certain, but this is what x86emu is for in X11.
VGA is a PC concept and just about nothing about it really make sense on a different architecture. The interface is an extension of the PC BIOS (software interrupts) and the dictated memory layouts are specific to the x86. I think most non-x86 systems have to use native drivers for whatever graphics cards they support from the start.
Regards,
Anthony Liguori
On 20.12.2009, at 18:55, Anthony Liguori wrote:
Alexander Graf wrote:
Don't macs usually have a powerpc vgabios?
I'm not certain, but this is what x86emu is for in X11.
VGA is a PC concept and just about nothing about it really make sense on a different architecture. The interface is an extension of the PC BIOS (software interrupts) and the dictated memory layouts are specific to the x86. I think most non-x86 systems have to use native drivers for whatever graphics cards they support from the start.
Yes. The Alpha for example used stock VGABIOSes. IIRC Sparc has its own graphics anyways and I don't know about the others, but I suspect they either use x86 VGABIOSes or no VGABIOSes.
Macs are different though. IIRC they have a normal VGA interface in ppc logic, but I might be wrong. Maybe it's also some OpenFirmware stuff. They definitely don't have an x86 VGABIOS in the graphics card's rom slot, but something different.
Since we're using the Cirrus on Macs, I guess we'd need a Cirrus PPC VGABIOS - phew.
Other PPCs on the other hand, such as the Powerstation, use x86 roms.
Oh well, let's just export the x86 one for now but use video.x for video output. Looks like there'd be quite a lot of work involved in getting it aligned to real world mac hw :-(.
Alex
PS: Ben, please correct me if I'm wrong.
Am 20.12.2009 um 19:01 schrieb Alexander Graf:
On 20.12.2009, at 18:55, Anthony Liguori wrote:
Alexander Graf wrote:
Don't macs usually have a powerpc vgabios?
I'm not certain, but this is what x86emu is for in X11.
VGA is a PC concept and just about nothing about it really make sense on a different architecture. The interface is an extension of the PC BIOS (software interrupts) and the dictated memory layouts are specific to the x86. I think most non-x86 systems have to use native drivers for whatever graphics cards they support from the start.
Yes. The Alpha for example used stock VGABIOSes. IIRC Sparc has its own graphics anyways and I don't know about the others, but I suspect they either use x86 VGABIOSes or no VGABIOSes.
Macs are different though. IIRC they have a normal VGA interface in ppc logic, but I might be wrong. Maybe it's also some OpenFirmware stuff. They definitely don't have an x86 VGABIOS in the graphics card's rom slot, but something different.
Since we're using the Cirrus on Macs, I guess we'd need a Cirrus PPC VGABIOS - phew.
ATI used to sell special "Mac Edition" graphics cards. That would seem to back up the possibility of a ppc VGABIOS on Mac.
Never tried putting such a card into a PC though or vice versa. Maybe we'd get the same sick-coloured penguins then...? ;)
Andreas
Other PPCs on the other hand, such as the Powerstation, use x86 roms.
Oh well, let's just export the x86 one for now but use video.x for video output. Looks like there'd be quite a lot of work involved in getting it aligned to real world mac hw :-(.
Alex
PS: Ben, please correct me if I'm wrong.
On Sun, Dec 20, 2009 at 6:24 PM, Andreas Färber andreas.faerber@web.de wrote:
Am 20.12.2009 um 19:01 schrieb Alexander Graf:
On 20.12.2009, at 18:55, Anthony Liguori wrote:
Alexander Graf wrote:
Don't macs usually have a powerpc vgabios?
I'm not certain, but this is what x86emu is for in X11.
VGA is a PC concept and just about nothing about it really make sense on a different architecture. The interface is an extension of the PC BIOS (software interrupts) and the dictated memory layouts are specific to the x86. I think most non-x86 systems have to use native drivers for whatever graphics cards they support from the start.
Yes. The Alpha for example used stock VGABIOSes. IIRC Sparc has its own graphics anyways and I don't know about the others, but I suspect they either use x86 VGABIOSes or no VGABIOSes.
Macs are different though. IIRC they have a normal VGA interface in ppc logic, but I might be wrong. Maybe it's also some OpenFirmware stuff. They definitely don't have an x86 VGABIOS in the graphics card's rom slot, but something different.
Since we're using the Cirrus on Macs, I guess we'd need a Cirrus PPC VGABIOS - phew.
ATI used to sell special "Mac Edition" graphics cards. That would seem to back up the possibility of a ppc VGABIOS on Mac.
Some Sun machines also had "ATY,Rage XL" cards but I don't know if they had special roms.
On Sun, 2009-12-20 at 18:53 +0000, Blue Swirl wrote:
Some Sun machines also had "ATY,Rage XL" cards but I don't know if they had special roms.
They would have similar f-code to the mac ones (ie. Tokenized forth for Open Firmware).
However, in the case of qemu, I don't see much point in doing so for the sake of OpenBIOS :-)
Cheers Ben.
On Sun, 2009-12-20 at 19:01 +0100, Alexander Graf wrote:
Yes. The Alpha for example used stock VGABIOSes. IIRC Sparc has its own graphics anyways and I don't know about the others, but I suspect they either use x86 VGABIOSes or no VGABIOSes.
Macs are different though. IIRC they have a normal VGA interface in ppc logic, but I might be wrong. Maybe it's also some OpenFirmware stuff. They definitely don't have an x86 VGABIOS in the graphics card's rom slot, but something different.
Since we're using the Cirrus on Macs, I guess we'd need a Cirrus PPC VGABIOS - phew.
Other PPCs on the other hand, such as the Powerstation, use x86 roms.
Oh well, let's just export the x86 one for now but use video.x for video output. Looks like there'd be quite a lot of work involved in getting it aligned to real world mac hw :-(.
Hrm, I missed the beginning of the story :-) But basically here's what things look like vs. option ROMs on powerpc:
- Most Open Firmware based machines (pSeries and Macs) can load some f-code firmware from there (tokenized forth). The f-code is platform agnostic (in theory, Apple did play games in that area) and so in theory the same f-code would work on, for example, an x86 with Open Firmware (if you had a slot on the OLPC you could try :-)
- That f-code firmware is used for whatever initializations the card need (for example, video cards generally need specific inits before being usable at all by the OS, at least older ones do). It can create additional properties in the device-tree as well.
- On Macs specifically, they have a trick consisting of putting a powerpc MacOS video driver in there, in the form of one big property (AAPL,NDRV iirc). This is a MacOS 7/8/9 style PEF driver but generally compiled and linked to work in a very limited environment for which OS X provides a sandbox, and which provides basic monitor detection and mode settings. video.x is such a driver (I wrote it :-) though I don't remember precisely whether the video.x file is the raw NDRV or the packaged f-code which contains the ndrv).
- Some powerpc machines (Pegasos, Efika, PowerStation, ... ) also have an x86emu variant in their firmware that can load a VGA ROM and use it to setup some kind of boot display for the firmware.
- An option ROM can contain multiple images :-) IE. It can contain -both- the x86 style ROM and the Open Firmware style f-code...
Now, in the light of the above, what is interesting to do on qemu ?
It all depends how "close" we consider OpenBIOS to be from qemu. If "close" then we don't need any of the f-code stuff. OpenBIOS could use some private calls to inside qemu and be done with it, including for sucking the video.x MacOS driver if the machine "profile" is a Mac (see the discussions on using the device-tree to define machines inside qemu, I believe that would be a great improvement).
A VGA ROM is not really useful past the firmware stage on ppc, as generally X is built without Int10 and we cannot really do anything with it appart from the FW initializing the card. This is not true of real ATI or nVidia cards because their driver uses tables in the VGA ROM for various things but that isn't necessarily very useful for qemu. But on the other hand, it doesn't hurt to have it there.
We should also look formward to native flat device tree booting without OpenBIOS in which case we probably don't care much (though again a VGA ROM might prove useful if whatever we boot has an x86emu variant).
Cheers, Ben.
This patch adds a romfile property to the pci bus. It allows to specify a romfile to load into the rom bar of the pci device. The default value comes from a new field in PCIDeviceInfo. The property allows to change the file and also to disable the rom loading using an empty string.
Signed-off-by: Gerd Hoffmann kraxel@redhat.com --- hw/cirrus_vga.c | 4 +--- hw/e1000.c | 9 +-------- hw/pci.c | 24 +++++++++++++++++++++--- hw/pci.h | 6 ++++-- hw/rtl8139.c | 9 +-------- hw/virtio-pci.c | 9 +-------- 6 files changed, 29 insertions(+), 32 deletions(-)
diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c index b08d2ae..6fe433d 100644 --- a/hw/cirrus_vga.c +++ b/hw/cirrus_vga.c @@ -3209,9 +3209,6 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev) pci_register_bar((PCIDevice *)d, 1, CIRRUS_PNPMMIO_SIZE, PCI_BASE_ADDRESS_SPACE_MEMORY, cirrus_pci_mmio_map); } - - /* ROM BIOS */ - pci_add_option_rom((PCIDevice *)d, VGABIOS_CIRRUS_FILENAME); return 0; }
@@ -3226,6 +3223,7 @@ static PCIDeviceInfo cirrus_vga_info = { .qdev.size = sizeof(PCICirrusVGAState), .qdev.vmsd = &vmstate_pci_cirrus_vga, .init = pci_cirrus_vga_initfn, + .romfile = VGABIOS_CIRRUS_FILENAME, .config_write = pci_cirrus_write_config, };
diff --git a/hw/e1000.c b/hw/e1000.c index f795601..33c4bc6 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -1121,14 +1121,6 @@ static int pci_e1000_init(PCIDevice *pci_dev) d->dev.qdev.info->name, d->dev.qdev.id, d);
qemu_format_nic_info_str(&d->nic->nc, macaddr); - - if (!pci_dev->qdev.hotplugged) { - static int loaded = 0; - if (!loaded) { - pci_add_option_rom(&d->dev, "pxe-e1000.bin"); - loaded = 1; - } - } return 0; }
@@ -1146,6 +1138,7 @@ static PCIDeviceInfo e1000_info = { .qdev.vmsd = &vmstate_e1000, .init = pci_e1000_init, .exit = pci_e1000_uninit, + .romfile = "pxe-e1000.bin", .qdev.props = (Property[]) { DEFINE_NIC_PROPERTIES(E1000State, conf), DEFINE_PROP_END_OF_LIST(), diff --git a/hw/pci.c b/hw/pci.c index dbdfdbf..d54f05e 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -63,12 +63,14 @@ static struct BusInfo pci_bus_info = { .print_dev = pcibus_dev_print, .props = (Property[]) { DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1), + DEFINE_PROP_STRING("romfile", PCIDevice, romfile), DEFINE_PROP_END_OF_LIST() } };
static void pci_update_mappings(PCIDevice *d); static void pci_set_irq(void *opaque, int irq_num, int level); +static int pci_add_option_rom(PCIDevice *pdev);
target_phys_addr_t pci_mem_base; static uint16_t pci_default_sub_vendor_id = PCI_SUBVENDOR_ID_REDHAT_QUMRANET; @@ -1387,6 +1389,12 @@ static int pci_qdev_init(DeviceState *qdev, DeviceInfo *base) rc = info->init(pci_dev); if (rc != 0) return rc; + + /* rom loading */ + if (pci_dev->romfile == NULL && info->romfile != NULL) + pci_dev->romfile = qemu_strdup(info->romfile); + pci_add_option_rom(pci_dev); + if (qdev->hotplugged) bus->hotplug(pci_dev, 1); return 0; @@ -1470,18 +1478,28 @@ static void pci_map_option_rom(PCIDevice *pdev, int region_num, pcibus_t addr, p }
/* Add an option rom for the device */ -int pci_add_option_rom(PCIDevice *pdev, const char *name) +static int pci_add_option_rom(PCIDevice *pdev) { int size; char *path; void *ptr;
- path = qemu_find_file(QEMU_FILE_TYPE_BIOS, name); + if (!pdev->romfile) + return 0; + if (strlen(pdev->romfile) == 0) + return 0; + + path = qemu_find_file(QEMU_FILE_TYPE_BIOS, pdev->romfile); if (path == NULL) { - path = qemu_strdup(name); + path = qemu_strdup(pdev->romfile); }
size = get_image_size(path); + if (size < 0) { + qemu_error("%s: failed to find romfile "%s"\n", __FUNCTION__, + pdev->romfile); + return -1; + } if (size & (size - 1)) { size = 1 << qemu_fls(size); } diff --git a/hw/pci.h b/hw/pci.h index 89b3f55..39da7df 100644 --- a/hw/pci.h +++ b/hw/pci.h @@ -245,6 +245,7 @@ struct PCIDevice { int32_t version_id;
/* Location of option rom */ + char *romfile; ram_addr_t rom_offset; };
@@ -257,8 +258,6 @@ void pci_register_bar(PCIDevice *pci_dev, int region_num, pcibus_t size, int type, PCIMapIORegionFunc *map_func);
-int pci_add_option_rom(PCIDevice *pdev, const char *name); - int pci_add_capability(PCIDevice *pci_dev, uint8_t cap_id, uint8_t cap_size);
void pci_del_capability(PCIDevice *pci_dev, uint8_t cap_id, uint8_t cap_size); @@ -386,6 +385,9 @@ typedef struct {
/* pcie stuff */ int is_express; /* is this device pci express? */ + + /* rom bar */ + const char *romfile; } PCIDeviceInfo;
void pci_qdev_register(PCIDeviceInfo *info); diff --git a/hw/rtl8139.c b/hw/rtl8139.c index 2cee97b..fcdcd1d 100644 --- a/hw/rtl8139.c +++ b/hw/rtl8139.c @@ -3353,14 +3353,6 @@ static int pci_rtl8139_init(PCIDevice *dev) qemu_mod_timer(s->timer, rtl8139_get_next_tctr_time(s,qemu_get_clock(vm_clock))); #endif /* RTL8139_ONBOARD_TIMER */ - - if (!dev->qdev.hotplugged) { - static int loaded = 0; - if (!loaded) { - pci_add_option_rom(&s->dev, "pxe-rtl8139.bin"); - loaded = 1; - } - } return 0; }
@@ -3371,6 +3363,7 @@ static PCIDeviceInfo rtl8139_info = { .qdev.vmsd = &vmstate_rtl8139, .init = pci_rtl8139_init, .exit = pci_rtl8139_uninit, + .romfile = "pxe-rtl8139.bin", .qdev.props = (Property[]) { DEFINE_NIC_PROPERTIES(RTL8139State, conf), DEFINE_PROP_END_OF_LIST(), diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c index 85f14a2..62b46bd 100644 --- a/hw/virtio-pci.c +++ b/hw/virtio-pci.c @@ -518,14 +518,6 @@ static int virtio_net_init_pci(PCIDevice *pci_dev)
/* make the actual value visible */ proxy->nvectors = vdev->nvectors; - - if (!pci_dev->qdev.hotplugged) { - static int loaded = 0; - if (!loaded) { - pci_add_option_rom(pci_dev, "pxe-virtio.bin"); - loaded = 1; - } - } return 0; }
@@ -569,6 +561,7 @@ static PCIDeviceInfo virtio_info[] = { .qdev.size = sizeof(VirtIOPCIProxy), .init = virtio_net_init_pci, .exit = virtio_net_exit_pci, + .romfile = "pxe-virtio.bin", .qdev.props = (Property[]) { DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3), DEFINE_NIC_PROPERTIES(VirtIOPCIProxy, nic),
Signed-off-by: Gerd Hoffmann kraxel@redhat.com --- hw/fw_cfg.c | 26 ++++++++++++-------------- hw/fw_cfg.h | 16 +++++++++------- 2 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/hw/fw_cfg.c b/hw/fw_cfg.c index b25afff..2e3662d 100644 --- a/hw/fw_cfg.c +++ b/hw/fw_cfg.c @@ -45,11 +45,11 @@ typedef struct _FWCfgEntry { FWCfgCallback callback; } FWCfgEntry;
-typedef struct _FWCfgState { +struct _FWCfgState { FWCfgEntry entries[2][FW_CFG_MAX_ENTRY]; uint16_t cur_entry; uint32_t cur_offset; -} FWCfgState; +};
static void fw_cfg_write(FWCfgState *s, uint8_t value) { @@ -210,9 +210,8 @@ static const VMStateDescription vmstate_fw_cfg = { } };
-int fw_cfg_add_bytes(void *opaque, uint16_t key, uint8_t *data, uint32_t len) +int fw_cfg_add_bytes(FWCfgState *s, uint16_t key, uint8_t *data, uint32_t len) { - FWCfgState *s = opaque; int arch = !!(key & FW_CFG_ARCH_LOCAL);
key &= FW_CFG_ENTRY_MASK; @@ -226,37 +225,36 @@ int fw_cfg_add_bytes(void *opaque, uint16_t key, uint8_t *data, uint32_t len) return 1; }
-int fw_cfg_add_i16(void *opaque, uint16_t key, uint16_t value) +int fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value) { uint16_t *copy;
copy = qemu_malloc(sizeof(value)); *copy = cpu_to_le16(value); - return fw_cfg_add_bytes(opaque, key, (uint8_t *)copy, sizeof(value)); + return fw_cfg_add_bytes(s, key, (uint8_t *)copy, sizeof(value)); }
-int fw_cfg_add_i32(void *opaque, uint16_t key, uint32_t value) +int fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value) { uint32_t *copy;
copy = qemu_malloc(sizeof(value)); *copy = cpu_to_le32(value); - return fw_cfg_add_bytes(opaque, key, (uint8_t *)copy, sizeof(value)); + return fw_cfg_add_bytes(s, key, (uint8_t *)copy, sizeof(value)); }
-int fw_cfg_add_i64(void *opaque, uint16_t key, uint64_t value) +int fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value) { uint64_t *copy;
copy = qemu_malloc(sizeof(value)); *copy = cpu_to_le64(value); - return fw_cfg_add_bytes(opaque, key, (uint8_t *)copy, sizeof(value)); + return fw_cfg_add_bytes(s, key, (uint8_t *)copy, sizeof(value)); }
-int fw_cfg_add_callback(void *opaque, uint16_t key, FWCfgCallback callback, +int fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, void *callback_opaque, uint8_t *data, size_t len) { - FWCfgState *s = opaque; int arch = !!(key & FW_CFG_ARCH_LOCAL);
if (!(key & FW_CFG_WRITE_CHANNEL)) @@ -275,8 +273,8 @@ int fw_cfg_add_callback(void *opaque, uint16_t key, FWCfgCallback callback, return 1; }
-void *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, - target_phys_addr_t ctl_addr, target_phys_addr_t data_addr) +FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, + target_phys_addr_t ctl_addr, target_phys_addr_t data_addr) { FWCfgState *s; int io_ctl_memory, io_data_memory; diff --git a/hw/fw_cfg.h b/hw/fw_cfg.h index 7070c94..b06665e 100644 --- a/hw/fw_cfg.h +++ b/hw/fw_cfg.h @@ -37,14 +37,16 @@ #ifndef NO_QEMU_PROTOS typedef void (*FWCfgCallback)(void *opaque, uint8_t *data);
-int fw_cfg_add_bytes(void *opaque, uint16_t key, uint8_t *data, uint32_t len); -int fw_cfg_add_i16(void *opaque, uint16_t key, uint16_t value); -int fw_cfg_add_i32(void *opaque, uint16_t key, uint32_t value); -int fw_cfg_add_i64(void *opaque, uint16_t key, uint64_t value); -int fw_cfg_add_callback(void *opaque, uint16_t key, FWCfgCallback callback, +typedef struct _FWCfgState FWCfgState; +int fw_cfg_add_bytes(FWCfgState *s, uint16_t key, uint8_t *data, uint32_t len); +int fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value); +int fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value); +int fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value); +int fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, void *callback_opaque, uint8_t *data, size_t len); -void *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, - target_phys_addr_t crl_addr, target_phys_addr_t data_addr); +int fw_cfg_add_file(FWCfgState *s, uint8_t type, uint8_t *data, uint32_t len); +FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, + target_phys_addr_t crl_addr, target_phys_addr_t data_addr);
#endif /* NO_QEMU_PROTOS */
This patch adds a file transfer interface to fw_cfg. Intended to be used for passing non-pci option roms and vgabios to seabios. Namespace is modeled after the existing cbfs filesystem support in seabios.
Reading the new FW_CFG_FILE_DIR entry returns a file list. Fields there are in network byte order (aka bigendian).
Signed-off-by: Gerd Hoffmann kraxel@redhat.com --- hw/fw_cfg.c | 43 +++++++++++++++++++++++++++++++++++++++++++ hw/fw_cfg.h | 21 +++++++++++++++++++-- 2 files changed, 62 insertions(+), 2 deletions(-)
diff --git a/hw/fw_cfg.c b/hw/fw_cfg.c index 2e3662d..0492f5f 100644 --- a/hw/fw_cfg.c +++ b/hw/fw_cfg.c @@ -47,6 +47,7 @@ typedef struct _FWCfgEntry {
struct _FWCfgState { FWCfgEntry entries[2][FW_CFG_MAX_ENTRY]; + FWCfgFiles *files; uint16_t cur_entry; uint32_t cur_offset; }; @@ -273,6 +274,48 @@ int fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, return 1; }
+int fw_cfg_add_file(FWCfgState *s, const char *dir, const char *filename, + uint8_t *data, uint32_t len) +{ + const char *basename; + int index; + + if (!s->files) { + int dsize = sizeof(uint32_t) + sizeof(FWCfgFile) * FW_CFG_FILE_SLOTS; + s->files = qemu_mallocz(dsize); + fw_cfg_add_bytes(s, FW_CFG_FILE_DIR, (uint8_t*)s->files, dsize); + } + + index = be32_to_cpu(s->files->count); + if (index == FW_CFG_FILE_SLOTS) { + fprintf(stderr, "fw_cfg: out of file slots\n"); + return 0; + } + + fw_cfg_add_bytes(s, FW_CFG_FILE_FIRST + index, data, len); + + basename = strrchr(filename, '/'); + if (basename) { + basename++; + } else { + basename = filename; + } + if (dir) { + snprintf(s->files->f[index].name, sizeof(s->files->f[index].name), + "%s/%s", dir, basename); + } else { + snprintf(s->files->f[index].name, sizeof(s->files->f[index].name), + "%s", basename); + } + s->files->f[index].size = cpu_to_be32(len); + s->files->f[index].select = cpu_to_be16(FW_CFG_FILE_FIRST + index); + fprintf(stderr, "%s: #%d: %s (%d bytes)\n", __FUNCTION__, + index, s->files->f[index].name, len); + + s->files->count = cpu_to_be32(index+1); + return 1; +} + FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, target_phys_addr_t ctl_addr, target_phys_addr_t data_addr) { diff --git a/hw/fw_cfg.h b/hw/fw_cfg.h index b06665e..a63f54f 100644 --- a/hw/fw_cfg.h +++ b/hw/fw_cfg.h @@ -26,7 +26,11 @@ #define FW_CFG_SETUP_ADDR 0x16 #define FW_CFG_SETUP_SIZE 0x17 #define FW_CFG_SETUP_DATA 0x18 -#define FW_CFG_MAX_ENTRY 0x19 +#define FW_CFG_FILE_DIR 0x19 + +#define FW_CFG_FILE_FIRST 0x20 +#define FW_CFG_FILE_SLOTS 0x10 +#define FW_CFG_MAX_ENTRY (FW_CFG_FILE_FIRST+FW_CFG_FILE_SLOTS)
#define FW_CFG_WRITE_CHANNEL 0x4000 #define FW_CFG_ARCH_LOCAL 0x8000 @@ -34,6 +38,18 @@
#define FW_CFG_INVALID 0xffff
+typedef struct FWCfgFile { + uint32_t size; /* file size */ + uint16_t select; /* write this to 0x510 to read it */ + uint16_t reserved; + char name[56]; +} FWCfgFile; + +typedef struct FWCfgFiles { + uint32_t count; + FWCfgFile f[]; +} FWCfgFiles; + #ifndef NO_QEMU_PROTOS typedef void (*FWCfgCallback)(void *opaque, uint8_t *data);
@@ -44,7 +60,8 @@ int fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value); int fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value); int fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, void *callback_opaque, uint8_t *data, size_t len); -int fw_cfg_add_file(FWCfgState *s, uint8_t type, uint8_t *data, uint32_t len); +int fw_cfg_add_file(FWCfgState *s, const char *dir, const char *filename, + uint8_t *data, uint32_t len); FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, target_phys_addr_t crl_addr, target_phys_addr_t data_addr);
On Fri, Dec 18, 2009 at 11:01 AM, Gerd Hoffmann kraxel@redhat.com wrote:
This patch adds a file transfer interface to fw_cfg. Intended to be used for passing non-pci option roms and vgabios to seabios. Namespace is modeled after the existing cbfs filesystem support in seabios.
Reading the new FW_CFG_FILE_DIR entry returns a file list. Fields there are in network byte order (aka bigendian).
The 16 bit selector for other cases is in little endian order. Please use LE for consistency.
- fprintf(stderr, "%s: #%d: %s (%d bytes)\n", __FUNCTION__,
- index, s->files->f[index].name, len);
No.
On Fri, Dec 18, 2009 at 12:01:10PM +0100, Gerd Hoffmann wrote:
This patch adds a file transfer interface to fw_cfg. Intended to be used for passing non-pci option roms and vgabios to seabios. Namespace is modeled after the existing cbfs filesystem support in seabios.
Reading the new FW_CFG_FILE_DIR entry returns a file list. Fields there are in network byte order (aka bigendian).
Signed-off-by: Gerd Hoffmann kraxel@redhat.com
hw/fw_cfg.c | 43 +++++++++++++++++++++++++++++++++++++++++++ hw/fw_cfg.h | 21 +++++++++++++++++++-- 2 files changed, 62 insertions(+), 2 deletions(-)
diff --git a/hw/fw_cfg.c b/hw/fw_cfg.c index 2e3662d..0492f5f 100644 --- a/hw/fw_cfg.c +++ b/hw/fw_cfg.c @@ -47,6 +47,7 @@ typedef struct _FWCfgEntry {
struct _FWCfgState { FWCfgEntry entries[2][FW_CFG_MAX_ENTRY];
- FWCfgFiles *files; uint16_t cur_entry; uint32_t cur_offset;
}; @@ -273,6 +274,48 @@ int fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, return 1; }
+int fw_cfg_add_file(FWCfgState *s, const char *dir, const char *filename,
uint8_t *data, uint32_t len)
+{
- const char *basename;
- int index;
- if (!s->files) {
int dsize = sizeof(uint32_t) + sizeof(FWCfgFile) * FW_CFG_FILE_SLOTS;
s->files = qemu_mallocz(dsize);
fw_cfg_add_bytes(s, FW_CFG_FILE_DIR, (uint8_t*)s->files, dsize);
- }
- index = be32_to_cpu(s->files->count);
- if (index == FW_CFG_FILE_SLOTS) {
fprintf(stderr, "fw_cfg: out of file slots\n");
return 0;
- }
- fw_cfg_add_bytes(s, FW_CFG_FILE_FIRST + index, data, len);
- basename = strrchr(filename, '/');
- if (basename) {
basename++;
- } else {
basename = filename;
- }
- if (dir) {
snprintf(s->files->f[index].name, sizeof(s->files->f[index].name),
"%s/%s", dir, basename);
- } else {
snprintf(s->files->f[index].name, sizeof(s->files->f[index].name),
"%s", basename);
- }
- s->files->f[index].size = cpu_to_be32(len);
- s->files->f[index].select = cpu_to_be16(FW_CFG_FILE_FIRST + index);
- fprintf(stderr, "%s: #%d: %s (%d bytes)\n", __FUNCTION__,
index, s->files->f[index].name, len);
- s->files->count = cpu_to_be32(index+1);
- return 1;
+}
FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, target_phys_addr_t ctl_addr, target_phys_addr_t data_addr) { diff --git a/hw/fw_cfg.h b/hw/fw_cfg.h index b06665e..a63f54f 100644 --- a/hw/fw_cfg.h +++ b/hw/fw_cfg.h @@ -26,7 +26,11 @@ #define FW_CFG_SETUP_ADDR 0x16 #define FW_CFG_SETUP_SIZE 0x17 #define FW_CFG_SETUP_DATA 0x18 -#define FW_CFG_MAX_ENTRY 0x19 +#define FW_CFG_FILE_DIR 0x19
+#define FW_CFG_FILE_FIRST 0x20 +#define FW_CFG_FILE_SLOTS 0x10
The name of this define looks like CFG option number but it is not. Lets rename it.
+#define FW_CFG_MAX_ENTRY (FW_CFG_FILE_FIRST+FW_CFG_FILE_SLOTS)
#define FW_CFG_WRITE_CHANNEL 0x4000 #define FW_CFG_ARCH_LOCAL 0x8000 @@ -34,6 +38,18 @@
#define FW_CFG_INVALID 0xffff
+typedef struct FWCfgFile {
- uint32_t size; /* file size */
- uint16_t select; /* write this to 0x510 to read it */
- uint16_t reserved;
- char name[56];
+} FWCfgFile;
+typedef struct FWCfgFiles {
- uint32_t count;
- FWCfgFile f[];
+} FWCfgFiles;
#ifndef NO_QEMU_PROTOS typedef void (*FWCfgCallback)(void *opaque, uint8_t *data);
@@ -44,7 +60,8 @@ int fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value); int fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value); int fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, void *callback_opaque, uint8_t *data, size_t len); -int fw_cfg_add_file(FWCfgState *s, uint8_t type, uint8_t *data, uint32_t len); +int fw_cfg_add_file(FWCfgState *s, const char *dir, const char *filename,
uint8_t *data, uint32_t len);
FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, target_phys_addr_t crl_addr, target_phys_addr_t data_addr);
-- 1.6.5.2
SeaBIOS mailing list SeaBIOS@seabios.org http://www.seabios.org/mailman/listinfo/seabios
-- Gleb.
roms: use fw_cfg for vgabios and option rom loading, additionally to deploying them the traditional way (copy to 0xc0000 -> 0xe0000 range).
Signed-off-by: Gerd Hoffmann kraxel@redhat.com --- hw/loader.c | 25 ++++++++++++++++++++++--- hw/loader.h | 5 +++-- hw/pc.c | 2 ++ 3 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/hw/loader.c b/hw/loader.c index 2d7a2c4..ccc0ccc 100644 --- a/hw/loader.c +++ b/hw/loader.c @@ -48,6 +48,7 @@ #include "sysemu.h" #include "uboot_image.h" #include "loader.h" +#include "fw_cfg.h"
#include <zlib.h>
@@ -528,6 +529,8 @@ struct Rom { uint8_t *data; int align; int isrom; + char *fw_dir; + char *fw_file;
target_phys_addr_t min; target_phys_addr_t max; @@ -556,7 +559,7 @@ static void rom_insert(Rom *rom) QTAILQ_INSERT_TAIL(&roms, rom, next); }
-int rom_add_file(const char *file, +int rom_add_file(const char *file, const char *fw_dir, const char *fw_file, target_phys_addr_t min, target_phys_addr_t max, int align) { Rom *rom; @@ -576,6 +579,8 @@ int rom_add_file(const char *file, goto err; }
+ rom->fw_dir = fw_dir ? qemu_strdup(fw_dir) : NULL; + rom->fw_file = fw_file ? qemu_strdup(fw_file) : NULL; rom->align = align; rom->min = min; rom->max = max; @@ -623,14 +628,16 @@ int rom_add_vga(const char *file) { if (!rom_enable_driver_roms) return 0; - return rom_add_file(file, PC_ROM_MIN_VGA, PC_ROM_MAX, PC_ROM_ALIGN); + return rom_add_file(file, "vgaroms", file, + PC_ROM_MIN_VGA, PC_ROM_MAX, PC_ROM_ALIGN); }
int rom_add_option(const char *file) { if (!rom_enable_driver_roms) return 0; - return rom_add_file(file, PC_ROM_MIN_OPTION, PC_ROM_MAX, PC_ROM_ALIGN); + return rom_add_file(file, "genroms", file, + PC_ROM_MIN_OPTION, PC_ROM_MAX, PC_ROM_ALIGN); }
static void rom_reset(void *unused) @@ -692,6 +699,18 @@ int rom_load_all(void) return 0; }
+int rom_load_fw(void *fw_cfg) +{ + Rom *rom; + + QTAILQ_FOREACH(rom, &roms, next) { + if (!rom->fw_file) + continue; + fw_cfg_add_file(fw_cfg, rom->fw_dir, rom->fw_file, rom->data, rom->romsize); + } + return 0; +} + static Rom *find_rom(target_phys_addr_t addr) { Rom *rom; diff --git a/hw/loader.h b/hw/loader.h index b3311a3..634f7d5 100644 --- a/hw/loader.h +++ b/hw/loader.h @@ -19,17 +19,18 @@ void pstrcpy_targphys(const char *name, target_phys_addr_t dest, int buf_size, const char *source);
-int rom_add_file(const char *file, +int rom_add_file(const char *file, const char *fw_dir, const char *fw_file, target_phys_addr_t min, target_phys_addr_t max, int align); int rom_add_blob(const char *name, const void *blob, size_t len, target_phys_addr_t min, target_phys_addr_t max, int align); int rom_load_all(void); +int rom_load_fw(void *fw_cfg); int rom_copy(uint8_t *dest, target_phys_addr_t addr, size_t size); void *rom_ptr(target_phys_addr_t addr); void do_info_roms(Monitor *mon);
#define rom_add_file_fixed(_f, _a) \ - rom_add_file(_f, _a, 0, 0) + rom_add_file(_f, NULL, NULL, _a, 0, 0) #define rom_add_blob_fixed(_f, _b, _l, _a) \ rom_add_blob(_f, _b, _l, _a, 0, 0)
diff --git a/hw/pc.c b/hw/pc.c index 147a9a7..be70f50 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -1248,6 +1248,8 @@ static void pc_init1(ram_addr_t ram_size, } } } + + rom_load_fw(fw_cfg); }
static void pc_init_pci(ram_addr_t ram_size,
On Fri, Dec 18, 2009 at 12:01:11PM +0100, Gerd Hoffmann wrote:
roms: use fw_cfg for vgabios and option rom loading, additionally to deploying them the traditional way (copy to 0xc0000 -> 0xe0000 range).
Signed-off-by: Gerd Hoffmann kraxel@redhat.com
hw/loader.c | 25 ++++++++++++++++++++++--- hw/loader.h | 5 +++-- hw/pc.c | 2 ++ 3 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/hw/loader.c b/hw/loader.c index 2d7a2c4..ccc0ccc 100644 --- a/hw/loader.c +++ b/hw/loader.c @@ -48,6 +48,7 @@ #include "sysemu.h" #include "uboot_image.h" #include "loader.h" +#include "fw_cfg.h"
#include <zlib.h>
@@ -528,6 +529,8 @@ struct Rom { uint8_t *data; int align; int isrom;
char *fw_dir;
char *fw_file;
target_phys_addr_t min; target_phys_addr_t max;
@@ -556,7 +559,7 @@ static void rom_insert(Rom *rom) QTAILQ_INSERT_TAIL(&roms, rom, next); }
-int rom_add_file(const char *file, +int rom_add_file(const char *file, const char *fw_dir, const char *fw_file,
Currently file == fw_file except for rom_add_file_fixed. Is this always going to be the case? If yes may be better to pass "bool fixed" instead of "const char *fw_file"?
target_phys_addr_t min, target_phys_addr_t max, int align)
{ Rom *rom; @@ -576,6 +579,8 @@ int rom_add_file(const char *file, goto err; }
- rom->fw_dir = fw_dir ? qemu_strdup(fw_dir) : NULL;
- rom->fw_file = fw_file ? qemu_strdup(fw_file) : NULL; rom->align = align; rom->min = min; rom->max = max;
@@ -623,14 +628,16 @@ int rom_add_vga(const char *file) { if (!rom_enable_driver_roms) return 0;
- return rom_add_file(file, PC_ROM_MIN_VGA, PC_ROM_MAX, PC_ROM_ALIGN);
- return rom_add_file(file, "vgaroms", file,
PC_ROM_MIN_VGA, PC_ROM_MAX, PC_ROM_ALIGN);
}
int rom_add_option(const char *file) { if (!rom_enable_driver_roms) return 0;
- return rom_add_file(file, PC_ROM_MIN_OPTION, PC_ROM_MAX, PC_ROM_ALIGN);
- return rom_add_file(file, "genroms", file,
PC_ROM_MIN_OPTION, PC_ROM_MAX, PC_ROM_ALIGN);
}
static void rom_reset(void *unused) @@ -692,6 +699,18 @@ int rom_load_all(void) return 0; }
+int rom_load_fw(void *fw_cfg) +{
- Rom *rom;
- QTAILQ_FOREACH(rom, &roms, next) {
if (!rom->fw_file)
continue;
fw_cfg_add_file(fw_cfg, rom->fw_dir, rom->fw_file, rom->data, rom->romsize);
- }
- return 0;
+}
static Rom *find_rom(target_phys_addr_t addr) { Rom *rom; diff --git a/hw/loader.h b/hw/loader.h index b3311a3..634f7d5 100644 --- a/hw/loader.h +++ b/hw/loader.h @@ -19,17 +19,18 @@ void pstrcpy_targphys(const char *name, target_phys_addr_t dest, int buf_size, const char *source);
-int rom_add_file(const char *file, +int rom_add_file(const char *file, const char *fw_dir, const char *fw_file, target_phys_addr_t min, target_phys_addr_t max, int align); int rom_add_blob(const char *name, const void *blob, size_t len, target_phys_addr_t min, target_phys_addr_t max, int align); int rom_load_all(void); +int rom_load_fw(void *fw_cfg); int rom_copy(uint8_t *dest, target_phys_addr_t addr, size_t size); void *rom_ptr(target_phys_addr_t addr); void do_info_roms(Monitor *mon);
#define rom_add_file_fixed(_f, _a) \
- rom_add_file(_f, _a, 0, 0)
- rom_add_file(_f, NULL, NULL, _a, 0, 0)
#define rom_add_blob_fixed(_f, _b, _l, _a) \ rom_add_blob(_f, _b, _l, _a, 0, 0)
diff --git a/hw/pc.c b/hw/pc.c index 147a9a7..be70f50 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -1248,6 +1248,8 @@ static void pc_init1(ram_addr_t ram_size, } } }
- rom_load_fw(fw_cfg);
}
static void pc_init_pci(ram_addr_t ram_size,
1.6.5.2
SeaBIOS mailing list SeaBIOS@seabios.org http://www.seabios.org/mailman/listinfo/seabios
-- Gleb.
Now that we load the option roms via fw_cfg, we can stop copying them to the 0xc000 -> 0xe000. The patch does just that.
Also the rom loader gets simplified as all remaining users of the rom loader load the bits at a fixed address so the packing and aligning logic can go away.
Signed-off-by: Gerd Hoffmann kraxel@redhat.com --- hw/loader.c | 103 ++++++++++++++++++++++++++--------------------------------- hw/loader.h | 8 ++-- 2 files changed, 49 insertions(+), 62 deletions(-)
diff --git a/hw/loader.c b/hw/loader.c index ccc0ccc..49d4839 100644 --- a/hw/loader.c +++ b/hw/loader.c @@ -527,13 +527,10 @@ struct Rom { char *path; size_t romsize; uint8_t *data; - int align; int isrom; char *fw_dir; char *fw_file;
- target_phys_addr_t min; - target_phys_addr_t max; target_phys_addr_t addr; QTAILQ_ENTRY(Rom) next; }; @@ -551,7 +548,7 @@ static void rom_insert(Rom *rom)
/* list is ordered by load address */ QTAILQ_FOREACH(item, &roms, next) { - if (rom->min >= item->min) + if (rom->addr >= item->addr) continue; QTAILQ_INSERT_BEFORE(item, rom, next); return; @@ -560,7 +557,7 @@ static void rom_insert(Rom *rom) }
int rom_add_file(const char *file, const char *fw_dir, const char *fw_file, - target_phys_addr_t min, target_phys_addr_t max, int align) + target_phys_addr_t addr) { Rom *rom; int rc, fd = -1; @@ -581,9 +578,7 @@ int rom_add_file(const char *file, const char *fw_dir, const char *fw_file,
rom->fw_dir = fw_dir ? qemu_strdup(fw_dir) : NULL; rom->fw_file = fw_file ? qemu_strdup(fw_file) : NULL; - rom->align = align; - rom->min = min; - rom->max = max; + rom->addr = addr; rom->romsize = lseek(fd, 0, SEEK_END); rom->data = qemu_mallocz(rom->romsize); lseek(fd, 0, SEEK_SET); @@ -608,15 +603,13 @@ err: }
int rom_add_blob(const char *name, const void *blob, size_t len, - target_phys_addr_t min, target_phys_addr_t max, int align) + target_phys_addr_t addr) { Rom *rom;
rom = qemu_mallocz(sizeof(*rom)); rom->name = qemu_strdup(name); - rom->align = align; - rom->min = min; - rom->max = max; + rom->addr = addr; rom->romsize = len; rom->data = qemu_mallocz(rom->romsize); memcpy(rom->data, blob, len); @@ -628,16 +621,14 @@ int rom_add_vga(const char *file) { if (!rom_enable_driver_roms) return 0; - return rom_add_file(file, "vgaroms", file, - PC_ROM_MIN_VGA, PC_ROM_MAX, PC_ROM_ALIGN); + return rom_add_file(file, "vgaroms", file, 0); }
int rom_add_option(const char *file) { if (!rom_enable_driver_roms) return 0; - return rom_add_file(file, "genroms", file, - PC_ROM_MIN_OPTION, PC_ROM_MAX, PC_ROM_ALIGN); + return rom_add_file(file, "genroms", file, 0); }
static void rom_reset(void *unused) @@ -645,6 +636,8 @@ static void rom_reset(void *unused) Rom *rom;
QTAILQ_FOREACH(rom, &roms, next) { + if (rom->addr == 0) + continue; if (rom->data == NULL) continue; cpu_physical_memory_write_rom(rom->addr, rom->data, rom->romsize); @@ -663,32 +656,16 @@ int rom_load_all(void) Rom *rom;
QTAILQ_FOREACH(rom, &roms, next) { - if (addr < rom->min) - addr = rom->min; - if (rom->max) { - /* load address range */ - if (rom->align) { - addr += (rom->align-1); - addr &= ~(rom->align-1); - } - if (addr + rom->romsize > rom->max) { - fprintf(stderr, "rom: out of memory (rom %s, " - "addr 0x" TARGET_FMT_plx - ", size 0x%zx, max 0x" TARGET_FMT_plx ")\n", - rom->name, addr, rom->romsize, rom->max); - return -1; - } - } else { - /* fixed address requested */ - if (addr != rom->min) { - fprintf(stderr, "rom: requested regions overlap " - "(rom %s. free=0x" TARGET_FMT_plx - ", addr=0x" TARGET_FMT_plx ")\n", - rom->name, addr, rom->min); - return -1; - } + if (rom->addr == 0) + continue; + if (addr > rom->addr) { + fprintf(stderr, "rom: requested regions overlap " + "(rom %s. free=0x" TARGET_FMT_plx + ", addr=0x" TARGET_FMT_plx ")\n", + rom->name, addr, rom->addr); + return -1; } - rom->addr = addr; + addr = rom->addr; addr += rom->romsize; memtype = cpu_get_physical_page_desc(rom->addr) & (3 << IO_MEM_SHIFT); if (memtype == IO_MEM_ROM) @@ -716,11 +693,11 @@ static Rom *find_rom(target_phys_addr_t addr) Rom *rom;
QTAILQ_FOREACH(rom, &roms, next) { - if (rom->max) + if (rom->addr == 0) continue; - if (rom->min > addr) + if (rom->addr > addr) continue; - if (rom->min + rom->romsize < addr) + if (rom->addr + rom->romsize < addr) continue; return rom; } @@ -735,25 +712,25 @@ int rom_copy(uint8_t *dest, target_phys_addr_t addr, size_t size) Rom *rom;
QTAILQ_FOREACH(rom, &roms, next) { - if (rom->max) + if (rom->addr == 0) continue; - if (rom->min > addr) + if (rom->addr > addr) continue; - if (rom->min + rom->romsize < addr) + if (rom->addr + rom->romsize < addr) continue; - if (rom->min > end) + if (rom->addr > end) break; if (!rom->data) continue;
- d = dest + (rom->min - addr); + d = dest + (rom->addr - addr); s = rom->data; l = rom->romsize;
- if (rom->min < addr) { + if (rom->addr < addr) { d = dest; - s += (addr - rom->min); - l -= (addr - rom->min); + s += (addr - rom->addr); + l -= (addr - rom->addr); } if ((d + l) > (dest + size)) { l = dest - d; @@ -772,7 +749,7 @@ void *rom_ptr(target_phys_addr_t addr) rom = find_rom(addr); if (!rom || !rom->data) return NULL; - return rom->data + (addr - rom->min); + return rom->data + (addr - rom->addr); }
void do_info_roms(Monitor *mon) @@ -780,10 +757,20 @@ void do_info_roms(Monitor *mon) Rom *rom;
QTAILQ_FOREACH(rom, &roms, next) { - monitor_printf(mon, "addr=" TARGET_FMT_plx - " size=0x%06zx mem=%s name="%s" \n", - rom->addr, rom->romsize, - rom->isrom ? "rom" : "ram", - rom->name); + if (rom->addr) { + monitor_printf(mon, "addr=" TARGET_FMT_plx + " size=0x%06zx mem=%s name="%s" \n", + rom->addr, rom->romsize, + rom->isrom ? "rom" : "ram", + rom->name); + } else { + monitor_printf(mon, "fw=%s%s%s" + " size=0x%06zx name="%s" \n", + rom->fw_dir ? rom->fw_dir : "", + rom->fw_dir ? "/" : "", + rom->fw_file, + rom->romsize, + rom->name); + } } } diff --git a/hw/loader.h b/hw/loader.h index 634f7d5..77beb0e 100644 --- a/hw/loader.h +++ b/hw/loader.h @@ -20,9 +20,9 @@ void pstrcpy_targphys(const char *name, const char *source);
int rom_add_file(const char *file, const char *fw_dir, const char *fw_file, - target_phys_addr_t min, target_phys_addr_t max, int align); + target_phys_addr_t addr); int rom_add_blob(const char *name, const void *blob, size_t len, - target_phys_addr_t min, target_phys_addr_t max, int align); + target_phys_addr_t addr); int rom_load_all(void); int rom_load_fw(void *fw_cfg); int rom_copy(uint8_t *dest, target_phys_addr_t addr, size_t size); @@ -30,9 +30,9 @@ void *rom_ptr(target_phys_addr_t addr); void do_info_roms(Monitor *mon);
#define rom_add_file_fixed(_f, _a) \ - rom_add_file(_f, NULL, NULL, _a, 0, 0) + rom_add_file(_f, NULL, NULL, _a) #define rom_add_blob_fixed(_f, _b, _l, _a) \ - rom_add_blob(_f, _b, _l, _a, 0, 0) + rom_add_blob(_f, _b, _l, _a)
#define PC_ROM_MIN_VGA 0xc0000 #define PC_ROM_MIN_OPTION 0xc8000
Signed-off-by: Gerd Hoffmann kraxel@redhat.com --- pc-bios/bios.bin | Bin 131072 -> 131072 bytes 1 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/pc-bios/bios.bin b/pc-bios/bios.bin index 29495801950660c19630444e410ff30d673e46af..22a555a2b0fe827500c0a859884bc69290a848da 100644 GIT binary patch literal 131072 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
literal 131072 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 XbdY_vvYmBgPq`*{;x*HzVUqY?{>O0J
Signed-off-by: Gerd Hoffmann kraxel@redhat.com --- hw/pc.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/hw/pc.c b/hw/pc.c index be70f50..18d958d 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -46,7 +46,7 @@ #include "elf.h"
/* output Bochs bios info messages */ -//#define DEBUG_BIOS +#define DEBUG_BIOS
/* Show multiboot debug output */ //#define DEBUG_MULTIBOOT
Gerd Hoffmann wrote:
From: Anthony Liguori aliguori@us.ibm.com
Hi,
Option rom saga continued. This is the first series I consider ready for merging. Changes:
- pci roms: will be loaded via option pci rom bar.
- non-pci roms: will be loaded via fw_cfg.
Note that using the old bochs-bios based pc-bios will stop working with this patch series applied.
The last two patches of this series are *not* intended to be merged, they are just for testing convinience. They carry a new seabios binary and the changes needed and turn on bios debug messages in qemu.
Seabios patches will be posted shortly as separate patch series.
I know this series carries a good bit of risk but I'd like to bring it in 0.12.0. Because this has a guest visible change to the PCI devices, we cannot carry it in stable-0.12 post release and I think the functionality it brings it's very important. Otherwise, it's easy to trip up with using multiple nics and extboot in qemu-kvm.
Any objections?
Regards,
Anthony Liguori
On 12/18/09 15:35, Anthony Liguori wrote:
I know this series carries a good bit of risk but I'd like to bring it in 0.12.0. Because this has a guest visible change to the PCI devices, we cannot carry it in stable-0.12 post release and I think the functionality it brings it's very important.
The guest visible change automatically raises the question: Do we need to do something for -M pc-0.11? Like loading the pci roms via fw_cfg too so the guest doesn't see the new pci rom bar?
Oh, and while thinking about compatibility issues: What about migration? I think we have to save rom_offset in case $pcidevice has a rom bar, otherwise your roms are gone after migration. Which you wouldn't notice until reboot though.
Is 0.11 -> 0.12 migration supposed to work? That could become quite nasty too. But maybe that is impossible anyway due to the switch to seabios?
cheers, Gerd
On Fri, Dec 18, 2009 at 12:01:06PM +0100, Gerd Hoffmann wrote:
From: Anthony Liguori aliguori@us.ibm.com
Hi,
Option rom saga continued. This is the first series I consider ready for merging. Changes:
- pci roms: will be loaded via option pci rom bar.
- non-pci roms: will be loaded via fw_cfg.
Note that using the old bochs-bios based pc-bios will stop working with this patch series applied.
The last two patches of this series are *not* intended to be merged, they are just for testing convinience. They carry a new seabios binary and the changes needed and turn on bios debug messages in qemu.
Seabios patches will be posted shortly as separate patch series.
I see that this is merged already, but I have a question. How migration during ROM loading suppose to work? What will happed if we migrate to newer qemu with updated vgabios ROM while BIOS is in the middle of loading it on the source? It seems that destination will have garbled ROM loaded.
-- Gleb.