aboutsummaryrefslogtreecommitdiff
path: root/tests/libqos/fw_cfg.c
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2013-06-26 15:52:22 +0200
committerAnthony Liguori <aliguori@us.ibm.com>2013-07-18 13:27:47 -0500
commit26491a388ce69d80c6d7d2b15ddf93d4399f04bc (patch)
treee63510dc6531157286f601f8d28d59ad955772a3 /tests/libqos/fw_cfg.c
parentf88dc7dd4d5942714672aa293a3357f5c6469568 (diff)
downloadqemu-26491a388ce69d80c6d7d2b15ddf93d4399f04bc.zip
qemu-26491a388ce69d80c6d7d2b15ddf93d4399f04bc.tar.gz
qemu-26491a388ce69d80c6d7d2b15ddf93d4399f04bc.tar.bz2
libqos: Generalize I/O-mapped fw_cfg
Provide a constructor that takes the base address in addition to the PC-specific one. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-id: 1372254743-15808-12-git-send-email-armbru@redhat.com Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'tests/libqos/fw_cfg.c')
-rw-r--r--tests/libqos/fw_cfg.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/libqos/fw_cfg.c b/tests/libqos/fw_cfg.c
index 49d1683..ef00fed 100644
--- a/tests/libqos/fw_cfg.c
+++ b/tests/libqos/fw_cfg.c
@@ -79,3 +79,29 @@ QFWCFG *mm_fw_cfg_init(uint64_t base)
return fw_cfg;
}
+
+static void io_fw_cfg_select(QFWCFG *fw_cfg, uint16_t key)
+{
+ outw(fw_cfg->base, key);
+}
+
+static void io_fw_cfg_read(QFWCFG *fw_cfg, void *data, size_t len)
+{
+ uint8_t *ptr = data;
+ int i;
+
+ for (i = 0; i < len; i++) {
+ ptr[i] = inb(fw_cfg->base + 1);
+ }
+}
+
+QFWCFG *io_fw_cfg_init(uint16_t base)
+{
+ QFWCFG *fw_cfg = g_malloc0(sizeof(*fw_cfg));
+
+ fw_cfg->base = base;
+ fw_cfg->select = io_fw_cfg_select;
+ fw_cfg->read = io_fw_cfg_read;
+
+ return fw_cfg;
+}