summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Heijligen <thomas.heijligen@secunet.com>2019-01-10 17:39:00 +0100
committerNico Huber <nico.h@gmx.de>2019-02-05 10:53:19 +0000
commit721c8b457bb6eb43f4e7c35a0eaa8b70ad92922f (patch)
tree4d7ad2a49c3ad4e2b8fde608939b9f40206704a9
parentd7e5f4b7c50eacf033154e2514a6bef3db80d4b5 (diff)
mb/emulation/qemu-i440fx: remove mm file listing
Remove memory mapped copy of the file list to use it also in romstage. fw_cfg_find_file searches directly for the file on data port. Change-Id: Ie97ed3f0c98a5bb18a35ab0eaf8c4777a53e5779 Signed-off-by: Thomas Heijligen <thomas.heijligen@secunet.com> Reviewed-on: https://review.coreboot.org/c/30847 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <siro@das-labor.org>
-rw-r--r--src/mainboard/emulation/qemu-i440fx/fw_cfg.c52
1 files changed, 16 insertions, 36 deletions
diff --git a/src/mainboard/emulation/qemu-i440fx/fw_cfg.c b/src/mainboard/emulation/qemu-i440fx/fw_cfg.c
index 364221eacc..b859bdbcb7 100644
--- a/src/mainboard/emulation/qemu-i440fx/fw_cfg.c
+++ b/src/mainboard/emulation/qemu-i440fx/fw_cfg.c
@@ -26,7 +26,6 @@
#define FW_CFG_PORT_DATA 0x0511
static unsigned char fw_cfg_detected = 0xff;
-static FWCfgFiles *fw_files;
static int fw_cfg_present(void)
{
@@ -58,49 +57,30 @@ void fw_cfg_get(uint16_t entry, void *dst, int dstlen)
fw_cfg_read(dst, dstlen);
}
-static void fw_cfg_init_file(void)
+static int fw_cfg_find_file(FWCfgFile *file, const char *name)
{
- u32 i, size, count = 0;
-
- if (fw_files != NULL)
- return;
-
- fw_cfg_get(FW_CFG_FILE_DIR, &count, sizeof(count));
- count = swab32(count);
- size = count * sizeof(FWCfgFile) + sizeof(count);
- printk(BIOS_DEBUG, "QEMU: %d files in fw_cfg\n", count);
- fw_files = malloc(size);
- fw_cfg_get(FW_CFG_FILE_DIR, fw_files, size);
- fw_files->count = swab32(fw_files->count);
- for (i = 0; i < count; i++) {
- fw_files->f[i].size = swab32(fw_files->f[i].size);
- fw_files->f[i].select = swab16(fw_files->f[i].select);
- printk(BIOS_DEBUG, "QEMU: %s [size=%d]\n",
- fw_files->f[i].name, fw_files->f[i].size);
+ uint32_t count = 0;
+
+ fw_cfg_select(FW_CFG_FILE_DIR);
+ fw_cfg_read(&count, sizeof(count));
+ count = be32_to_cpu(count);
+
+ for (int i = 0; i < count; i++) {
+ fw_cfg_read(file, sizeof(*file));
+ if (strcmp(file->name, name) == 0) {
+ file->size = be32_to_cpu(file->size);
+ file->select = be16_to_cpu(file->select);
+ return 0;
+ }
}
-}
-
-static FWCfgFile *fw_cfg_find_file(const char *name)
-{
- int i;
-
- fw_cfg_init_file();
- for (i = 0; i < fw_files->count; i++)
- if (strcmp(fw_files->f[i].name, name) == 0)
- return fw_files->f + i;
- return NULL;
+ return -1;
}
int fw_cfg_check_file(FWCfgFile *file, const char *name)
{
- FWCfgFile *f;
if (!fw_cfg_present())
return -1;
- f = fw_cfg_find_file(name);
- if (!f)
- return -1;
- *file = *f;
- return 0;
+ return fw_cfg_find_file(file, name);
}
int fw_cfg_max_cpus(void)