From a05f8a96b4996c4eacada660b5db3a4046ad733d Mon Sep 17 00:00:00 2001 From: Thomas Heijligen Date: Thu, 10 Jan 2019 12:55:59 +0100 Subject: mb/emulation/qemu-i440fx: prepare fw_cfg for romstage usage Add separate functions for selecting the port and reading the port. Romstage can now read incremental from the data port. Change-Id: I0ffde3bc2a4415a8af99af2275d16f6609099e37 Signed-off-by: Thomas Heijligen Reviewed-on: https://review.coreboot.org/c/30846 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Rudolph --- src/mainboard/emulation/qemu-i440fx/fw_cfg.c | 12 +++++++++++- src/mainboard/emulation/qemu-i440fx/fw_cfg.h | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mainboard/emulation/qemu-i440fx/fw_cfg.c b/src/mainboard/emulation/qemu-i440fx/fw_cfg.c index 9b394f2e00..364221eacc 100644 --- a/src/mainboard/emulation/qemu-i440fx/fw_cfg.c +++ b/src/mainboard/emulation/qemu-i440fx/fw_cfg.c @@ -42,12 +42,22 @@ static int fw_cfg_present(void) return fw_cfg_detected; } -void fw_cfg_get(int entry, void *dst, int dstlen) +static void fw_cfg_select(uint16_t entry) { outw(entry, FW_CFG_PORT_CTL); +} + +static void fw_cfg_read(void *dst, int dstlen) +{ insb(FW_CFG_PORT_DATA, dst, dstlen); } +void fw_cfg_get(uint16_t entry, void *dst, int dstlen) +{ + fw_cfg_select(entry); + fw_cfg_read(dst, dstlen); +} + static void fw_cfg_init_file(void) { u32 i, size, count = 0; diff --git a/src/mainboard/emulation/qemu-i440fx/fw_cfg.h b/src/mainboard/emulation/qemu-i440fx/fw_cfg.h index b5cdb9292c..91b758c46d 100644 --- a/src/mainboard/emulation/qemu-i440fx/fw_cfg.h +++ b/src/mainboard/emulation/qemu-i440fx/fw_cfg.h @@ -14,7 +14,7 @@ #define FW_CFG_H #include "fw_cfg_if.h" -void fw_cfg_get(int entry, void *dst, int dstlen); +void fw_cfg_get(uint16_t entry, void *dst, int dstlen); int fw_cfg_check_file(FWCfgFile *file, const char *name); int fw_cfg_max_cpus(void); unsigned long fw_cfg_smbios_tables(int *handle, unsigned long *current); -- cgit v1.2.3