diff options
author | Thomas Heijligen <thomas.heijligen@secunet.com> | 2019-01-10 17:39:00 +0100 |
---|---|---|
committer | Nico Huber <nico.h@gmx.de> | 2019-02-05 10:53:19 +0000 |
commit | 721c8b457bb6eb43f4e7c35a0eaa8b70ad92922f (patch) | |
tree | 4d7ad2a49c3ad4e2b8fde608939b9f40206704a9 | |
parent | d7e5f4b7c50eacf033154e2514a6bef3db80d4b5 (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.c | 52 |
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) |