* [Qemu-devel] [PATCH 0/6] option rom patches, next round
@ 2009-12-17 12:32 Gerd Hoffmann
2009-12-17 12:32 ` [Qemu-devel] [PATCH 1/6] patched seabios binary Gerd Hoffmann
` (7 more replies)
0 siblings, 8 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2009-12-17 12:32 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
All in one patch series for pci rom bar support and option rom loading
via fw_cfg for the non-pci roms. This time the fw_cfg interface is
actually tested with a little linux userspace app (attached below).
cheers,
Gerd
----- [ cut here ] -----
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <sys/io.h>
#include <arpa/inet.h>
#define FW_CFG_FILE_DIR 0x19
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;
void fw_read(void *ptr, int len)
{
uint8_t *data = ptr;
int i;
for (i = 0; i < len; i++) {
data[i] = inb(0x511);
}
}
int main(int argc, char *argv[])
{
uint8_t data[64];
FWCfgFile *entry;
uint32_t e, i, count;
fprintf(stderr, "fwtest - qemu files\n");
ioperm(0x510, 4, 1);
outw(FW_CFG_FILE_DIR, 0x510);
fw_read(&count, sizeof(count));
fprintf(stderr, "%d files\n", ntohl(count));
entry = malloc(sizeof(*entry) * ntohl(count));
fw_read(entry, sizeof(*entry) * ntohl(count));
for (e = 0; e < ntohl(count); e++) {
fprintf(stderr, " #%d: %s (%d bytes)\n", e,
entry[e].name, ntohl(entry[e].size));
outw(ntohs(entry[e].select), 0x510);
fw_read(data, sizeof(data));
for (i = 0; i < sizeof(data); i++) {
if (i % 16 == 0)
fprintf(stderr, " ");
if (i % 4 == 0)
fprintf(stderr, " ");
fprintf(stderr, " %02x", data[i]);
if (i % 16 == 15)
fprintf(stderr, "\n");
}
}
return 0;
}
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 1/6] patched seabios binary
2009-12-17 12:32 [Qemu-devel] [PATCH 0/6] option rom patches, next round Gerd Hoffmann
@ 2009-12-17 12:32 ` Gerd Hoffmann
2009-12-17 12:32 ` [Qemu-devel] [PATCH 2/6] Support PCI based option rom loading Gerd Hoffmann
` (6 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2009-12-17 12:32 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
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..4e7ae7efeb5964454d263a8b6482206c9d7bc358 100644
GIT binary patch
literal 131072
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
literal 131072
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
XbdY_vvYmBgPq`*{;x*HzVUqY?{>O0J
--
1.6.5.2
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 2/6] Support PCI based option rom loading
2009-12-17 12:32 [Qemu-devel] [PATCH 0/6] option rom patches, next round Gerd Hoffmann
2009-12-17 12:32 ` [Qemu-devel] [PATCH 1/6] patched seabios binary Gerd Hoffmann
@ 2009-12-17 12:32 ` Gerd Hoffmann
2009-12-17 12:32 ` [Qemu-devel] [PATCH 3/6] pci romfiles: add property, add default to PCIDeviceInfo Gerd Hoffmann
` (5 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2009-12-17 12:32 UTC (permalink / raw)
To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann
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;
}
}
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 3/6] pci romfiles: add property, add default to PCIDeviceInfo
2009-12-17 12:32 [Qemu-devel] [PATCH 0/6] option rom patches, next round Gerd Hoffmann
2009-12-17 12:32 ` [Qemu-devel] [PATCH 1/6] patched seabios binary Gerd Hoffmann
2009-12-17 12:32 ` [Qemu-devel] [PATCH 2/6] Support PCI based option rom loading Gerd Hoffmann
@ 2009-12-17 12:32 ` Gerd Hoffmann
2009-12-17 20:18 ` Anthony Liguori
2009-12-17 12:32 ` [Qemu-devel] [PATCH 4/6] fw_cfg: make calls typesafe Gerd Hoffmann
` (4 subsequent siblings)
7 siblings, 1 reply; 13+ messages in thread
From: Gerd Hoffmann @ 2009-12-17 12:32 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
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),
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 4/6] fw_cfg: make calls typesafe
2009-12-17 12:32 [Qemu-devel] [PATCH 0/6] option rom patches, next round Gerd Hoffmann
` (2 preceding siblings ...)
2009-12-17 12:32 ` [Qemu-devel] [PATCH 3/6] pci romfiles: add property, add default to PCIDeviceInfo Gerd Hoffmann
@ 2009-12-17 12:32 ` Gerd Hoffmann
2009-12-17 12:32 ` [Qemu-devel] [PATCH 5/6] fw_cfg: add API for file transfer Gerd Hoffmann
` (3 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2009-12-17 12:32 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
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 */
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 5/6] fw_cfg: add API for file transfer.
2009-12-17 12:32 [Qemu-devel] [PATCH 0/6] option rom patches, next round Gerd Hoffmann
` (3 preceding siblings ...)
2009-12-17 12:32 ` [Qemu-devel] [PATCH 4/6] fw_cfg: make calls typesafe Gerd Hoffmann
@ 2009-12-17 12:32 ` Gerd Hoffmann
2009-12-17 12:32 ` [Qemu-devel] [PATCH 6/6] roms: use fw_cfg file Gerd Hoffmann
` (2 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2009-12-17 12:32 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
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);
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 6/6] roms: use fw_cfg file.
2009-12-17 12:32 [Qemu-devel] [PATCH 0/6] option rom patches, next round Gerd Hoffmann
` (4 preceding siblings ...)
2009-12-17 12:32 ` [Qemu-devel] [PATCH 5/6] fw_cfg: add API for file transfer Gerd Hoffmann
@ 2009-12-17 12:32 ` Gerd Hoffmann
2009-12-17 14:46 ` [Qemu-devel] Re: [PATCH 0/6] option rom patches, next round Gerd Hoffmann
2009-12-17 15:34 ` [Qemu-devel] " Anthony Liguori
7 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2009-12-17 12:32 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
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..451ee54 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, "vgabios", 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, "genrom", 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
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH 0/6] option rom patches, next round
2009-12-17 12:32 [Qemu-devel] [PATCH 0/6] option rom patches, next round Gerd Hoffmann
` (5 preceding siblings ...)
2009-12-17 12:32 ` [Qemu-devel] [PATCH 6/6] roms: use fw_cfg file Gerd Hoffmann
@ 2009-12-17 14:46 ` Gerd Hoffmann
2009-12-17 20:22 ` Anthony Liguori
2009-12-17 15:34 ` [Qemu-devel] " Anthony Liguori
7 siblings, 1 reply; 13+ messages in thread
From: Gerd Hoffmann @ 2009-12-17 14:46 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 615 bytes --]
On 12/17/09 13:32, Gerd Hoffmann wrote:
> Hi,
>
> All in one patch series for pci rom bar support and option rom loading
> via fw_cfg for the non-pci roms. This time the fw_cfg interface is
> actually tested with a little linux userspace app (attached below).
Now some seabios bits.
I got the naming of *both* vga and optionrom directories wrong, so there
is first an incremental fix for this patch series.
Also attached are two seabios patches (go on top of the two ones from
anthony) which implement the seabios side of the file interface.
'-kernel' and '-vga std' are working again ;)
cheers,
Gerd
[-- Attachment #2: 0001-loader-fix-dirname-tyops.patch --]
[-- Type: text/plain, Size: 1005 bytes --]
>From 517fd48fdddfe93b5ef4081c11e87b250892cd49 Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <kraxel@redhat.com>
Date: Thu, 17 Dec 2009 15:32:03 +0100
Subject: [PATCH] loader: fix dirname tyops
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/loader.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/loader.c b/hw/loader.c
index 451ee54..ccc0ccc 100644
--- a/hw/loader.c
+++ b/hw/loader.c
@@ -628,7 +628,7 @@ int rom_add_vga(const char *file)
{
if (!rom_enable_driver_roms)
return 0;
- return rom_add_file(file, "vgabios", file,
+ return rom_add_file(file, "vgaroms", file,
PC_ROM_MIN_VGA, PC_ROM_MAX, PC_ROM_ALIGN);
}
@@ -636,7 +636,7 @@ int rom_add_option(const char *file)
{
if (!rom_enable_driver_roms)
return 0;
- return rom_add_file(file, "genrom", file,
+ return rom_add_file(file, "genroms", file,
PC_ROM_MIN_OPTION, PC_ROM_MAX, PC_ROM_ALIGN);
}
--
1.6.5.2
[-- Attachment #3: 0001-move-htonl-friends-to-util.h.patch --]
[-- Type: text/plain, Size: 1412 bytes --]
>From 9ec26264036ae620cccc9e69cfc75b1284a7f06b Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <kraxel@redhat.com>
Date: Thu, 17 Dec 2009 15:33:21 +0100
Subject: [PATCH 1/2] move htonl() + friends to util.h
---
src/coreboot.c | 5 -----
src/util.h | 7 +++++++
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/coreboot.c b/src/coreboot.c
index 7fa18e4..3dc6a7f 100644
--- a/src/coreboot.c
+++ b/src/coreboot.c
@@ -351,11 +351,6 @@ ulzma(u8 *dst, u32 maxlen, const u8 *src, u32 srclen)
* Coreboot flash format
****************************************************************/
-// XXX - optimize
-#define ntohl(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | \
- (((x)&0xff0000) >> 8) | (((x)&0xff000000) >> 24))
-#define htonl(x) ntohl(x)
-
#define CBFS_HEADER_MAGIC 0x4F524243
#define CBFS_HEADPTR_ADDR 0xFFFFFFFc
#define CBFS_VERSION1 0x31313131
diff --git a/src/util.h b/src/util.h
index 1eafce0..24e39d1 100644
--- a/src/util.h
+++ b/src/util.h
@@ -367,4 +367,11 @@ extern u8 BiosChecksum;
// version (auto generated file out/version.c)
extern const char VERSION[];
+// XXX - optimize
+#define ntohl(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | \
+ (((x)&0xff0000) >> 8) | (((x)&0xff000000) >> 24))
+#define htonl(x) ntohl(x)
+#define ntohs(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
+#define htons(x) ntohs(x)
+
#endif // util.h
--
1.6.5.2
[-- Attachment #4: 0002-qemu-add-rom-loading-via-fw_cfg.patch --]
[-- Type: text/plain, Size: 4004 bytes --]
>From 02e660e21d6db37d3ba6033215d2ddae6a8e1eb2 Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <kraxel@redhat.com>
Date: Thu, 17 Dec 2009 15:34:02 +0100
Subject: [PATCH 2/2] qemu: add rom loading via fw_cfg
---
src/optionroms.c | 22 ++++++++++++++++++++++
src/paravirt.c | 37 +++++++++++++++++++++++++++++++++++++
src/paravirt.h | 11 +++++++++++
3 files changed, 70 insertions(+), 0 deletions(-)
diff --git a/src/optionroms.c b/src/optionroms.c
index 27465ad..c5de1ad 100644
--- a/src/optionroms.c
+++ b/src/optionroms.c
@@ -247,6 +247,26 @@ run_cbfs_roms(const char *prefix, int isvga)
}
}
+static void
+run_qemu_roms(const char *prefix, int isvga)
+{
+ struct QemuCfgFile entry;
+ int plen = strlen(prefix);
+ int rc, dlen;
+
+ rc = qemu_cfg_first_file(&entry);
+ while (rc > 0) {
+ if (memcmp(prefix, entry.name, plen) == 0) {
+ dlen = qemu_cfg_read_file(&entry, (void*)RomEnd, max_rom() - RomEnd);
+ if (dlen > 0) {
+ dprintf(1, "init qemu rom: %s\n", entry.name);
+ init_optionrom((void*)RomEnd, 0, isvga);
+ }
+ }
+ rc = qemu_cfg_next_file(&entry);
+ }
+}
+
/****************************************************************
* PCI roms
@@ -375,6 +395,7 @@ optionrom_setup()
// Find and deploy CBFS roms not associated with a device.
run_cbfs_roms("genroms/", 0);
+ run_qemu_roms("genroms/", 0);
}
// All option roms found and deployed - now build BEV/BCV vectors.
@@ -434,6 +455,7 @@ vga_setup()
// Find and deploy CBFS vga-style roms not associated with a device.
run_cbfs_roms("vgaroms/", 1);
+ run_qemu_roms("vgaroms/", 1);
}
if (RomEnd == BUILD_ROM_START) {
diff --git a/src/paravirt.c b/src/paravirt.c
index 6f48d2e..7171bac 100644
--- a/src/paravirt.c
+++ b/src/paravirt.c
@@ -8,6 +8,7 @@
// This file may be distributed under the terms of the GNU LGPLv3 license.
#include "config.h" // CONFIG_COREBOOT
+#include "util.h" // ntoh[ls]
#include "ioport.h" // outw
#include "paravirt.h" // qemu_cfg_port_probe
#include "smbios.h" // struct smbios_structure_header
@@ -287,3 +288,39 @@ u16 qemu_cfg_get_max_cpus(void)
return cnt;
}
+
+u16 qemu_cfg_first_file(QemuCfgFile *entry)
+{
+ memset(entry, 0, sizeof(*entry));
+ return qemu_cfg_next_file(entry);
+}
+
+u16 qemu_cfg_next_file(QemuCfgFile *entry)
+{
+ u16 last = ntohs(entry->select);
+ u32 e,count;
+
+ if (!qemu_cfg_present)
+ return 0;
+
+ qemu_cfg_read_entry(&count, QEMU_CFG_FILE_DIR, sizeof(count));
+ for (e = 0; e < ntohl(count); e++) {
+ qemu_cfg_read((void*)entry, sizeof(*entry));
+ if (ntohs(entry->select) > last) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+u32 qemu_cfg_read_file(QemuCfgFile *entry, void *dst, u32 maxlen)
+{
+ int len = ntohl(entry->size);
+
+ if (!qemu_cfg_present)
+ return 0;
+ if (len > maxlen)
+ return 0;
+ qemu_cfg_read_entry(dst, ntohs(entry->select), len);
+ return len;
+}
diff --git a/src/paravirt.h b/src/paravirt.h
index 29a2c04..d33e10d 100644
--- a/src/paravirt.h
+++ b/src/paravirt.h
@@ -31,6 +31,7 @@ static inline int kvm_para_available(void)
#define QEMU_CFG_NUMA 0x0d
#define QEMU_CFG_BOOT_MENU 0x0e
#define QEMU_CFG_MAX_CPUS 0x0f
+#define QEMU_CFG_FILE_DIR 0x19
#define QEMU_CFG_ARCH_LOCAL 0x8000
#define QEMU_CFG_ACPI_TABLES (QEMU_CFG_ARCH_LOCAL + 0)
#define QEMU_CFG_SMBIOS_ENTRIES (QEMU_CFG_ARCH_LOCAL + 1)
@@ -53,4 +54,14 @@ int qemu_cfg_get_numa_nodes(void);
void qemu_cfg_get_numa_data(u64 *data, int n);
u16 qemu_cfg_get_max_cpus(void);
+typedef struct QemuCfgFile {
+ u32 size; /* file size */
+ u16 select; /* write this to 0x510 to read it */
+ u16 reserved;
+ char name[56];
+} QemuCfgFile;
+
+u16 qemu_cfg_first_file(QemuCfgFile *entry);
+u16 qemu_cfg_next_file(QemuCfgFile *entry);
+
#endif
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 0/6] option rom patches, next round
2009-12-17 12:32 [Qemu-devel] [PATCH 0/6] option rom patches, next round Gerd Hoffmann
` (6 preceding siblings ...)
2009-12-17 14:46 ` [Qemu-devel] Re: [PATCH 0/6] option rom patches, next round Gerd Hoffmann
@ 2009-12-17 15:34 ` Anthony Liguori
2009-12-17 15:46 ` Gerd Hoffmann
7 siblings, 1 reply; 13+ messages in thread
From: Anthony Liguori @ 2009-12-17 15:34 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
Gerd Hoffmann wrote:
> Hi,
>
> All in one patch series for pci rom bar support and option rom loading
> via fw_cfg for the non-pci roms. This time the fw_cfg interface is
> actually tested with a little linux userspace app (attached below).
>
Does this mean that -kernel works with this series?
Regards,
Anthony Liguori
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 0/6] option rom patches, next round
2009-12-17 15:34 ` [Qemu-devel] " Anthony Liguori
@ 2009-12-17 15:46 ` Gerd Hoffmann
0 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2009-12-17 15:46 UTC (permalink / raw)
To: Anthony Liguori; +Cc: qemu-devel
On 12/17/09 16:34, Anthony Liguori wrote:
> Gerd Hoffmann wrote:
>> Hi,
>>
>> All in one patch series for pci rom bar support and option rom loading
>> via fw_cfg for the non-pci roms. This time the fw_cfg interface is
>> actually tested with a little linux userspace app (attached below).
>
> Does this mean that -kernel works with this series?
Almost. See the followup with a little qemu fix and seabios patches,
this is needed additionally.
cheers,
Gerd
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 3/6] pci romfiles: add property, add default to PCIDeviceInfo
2009-12-17 12:32 ` [Qemu-devel] [PATCH 3/6] pci romfiles: add property, add default to PCIDeviceInfo Gerd Hoffmann
@ 2009-12-17 20:18 ` Anthony Liguori
0 siblings, 0 replies; 13+ messages in thread
From: Anthony Liguori @ 2009-12-17 20:18 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
Gerd Hoffmann wrote:
> 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,
> };
>
Really nice example of qdev in action. Very nice cleanup!
Regards,
Anthony Liguori
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] Re: [PATCH 0/6] option rom patches, next round
2009-12-17 14:46 ` [Qemu-devel] Re: [PATCH 0/6] option rom patches, next round Gerd Hoffmann
@ 2009-12-17 20:22 ` Anthony Liguori
2009-12-18 9:30 ` Gerd Hoffmann
0 siblings, 1 reply; 13+ messages in thread
From: Anthony Liguori @ 2009-12-17 20:22 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
Gerd Hoffmann wrote:
> On 12/17/09 13:32, Gerd Hoffmann wrote:
>> Hi,
>>
>> All in one patch series for pci rom bar support and option rom loading
>> via fw_cfg for the non-pci roms. This time the fw_cfg interface is
>> actually tested with a little linux userspace app (attached below).
>
> Now some seabios bits.
>
> I got the naming of *both* vga and optionrom directories wrong, so
> there is first an incremental fix for this patch series.
>
> Also attached are two seabios patches (go on top of the two ones from
> anthony) which implement the seabios side of the file interface.
>
> '-kernel' and '-vga std' are working again ;)
Very nice! No reason not to convert std vga and vmware vga to use the
pci based rom loading interface.
Care to fold everything into one series that we can bring into the tree?
> cheers,
> Gerd
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] Re: [PATCH 0/6] option rom patches, next round
2009-12-17 20:22 ` Anthony Liguori
@ 2009-12-18 9:30 ` Gerd Hoffmann
0 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2009-12-18 9:30 UTC (permalink / raw)
To: Anthony Liguori; +Cc: qemu-devel
On 12/17/09 21:22, Anthony Liguori wrote:
> Very nice! No reason not to convert std vga and vmware vga to use the
> pci based rom loading interface.
seabios thinks about vgabios.bin:
Scan for VGA option rom
Attempting to init PCI bdf 00:02.0 (dev/ven 11111234)
Attempting to map option rom on dev 00:02.0
Option rom sizing returned f0800000 ffff0000
Inspecting possible rom at 0xf0800000 (dv=11111234 bdf=10)
No valid pci signature found
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Adding a pci rom header (with vendor and product id which seabios will
check) doesn't look that useful for a generic vga bios though. If we go
down that route we'll need at least two roms then (one for std, one for
vmware-svga) where the only difference is the pci header ...
cheers,
Gerd
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2009-12-18 9:30 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-17 12:32 [Qemu-devel] [PATCH 0/6] option rom patches, next round Gerd Hoffmann
2009-12-17 12:32 ` [Qemu-devel] [PATCH 1/6] patched seabios binary Gerd Hoffmann
2009-12-17 12:32 ` [Qemu-devel] [PATCH 2/6] Support PCI based option rom loading Gerd Hoffmann
2009-12-17 12:32 ` [Qemu-devel] [PATCH 3/6] pci romfiles: add property, add default to PCIDeviceInfo Gerd Hoffmann
2009-12-17 20:18 ` Anthony Liguori
2009-12-17 12:32 ` [Qemu-devel] [PATCH 4/6] fw_cfg: make calls typesafe Gerd Hoffmann
2009-12-17 12:32 ` [Qemu-devel] [PATCH 5/6] fw_cfg: add API for file transfer Gerd Hoffmann
2009-12-17 12:32 ` [Qemu-devel] [PATCH 6/6] roms: use fw_cfg file Gerd Hoffmann
2009-12-17 14:46 ` [Qemu-devel] Re: [PATCH 0/6] option rom patches, next round Gerd Hoffmann
2009-12-17 20:22 ` Anthony Liguori
2009-12-18 9:30 ` Gerd Hoffmann
2009-12-17 15:34 ` [Qemu-devel] " Anthony Liguori
2009-12-17 15:46 ` Gerd Hoffmann
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).