From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34287) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UnRyj-0000xE-Uk for qemu-devel@nongnu.org; Fri, 14 Jun 2013 07:15:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UnRyf-0004uR-Hb for qemu-devel@nongnu.org; Fri, 14 Jun 2013 07:15:37 -0400 Received: from oxygen.pond.sub.org ([2a01:4f8:121:10e4::3]:44299) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UnRyf-0004uG-9B for qemu-devel@nongnu.org; Fri, 14 Jun 2013 07:15:33 -0400 From: Markus Armbruster Date: Fri, 14 Jun 2013 13:15:15 +0200 Message-Id: <1371208516-7857-16-git-send-email-armbru@redhat.com> In-Reply-To: <1371208516-7857-1-git-send-email-armbru@redhat.com> References: <1371208516-7857-1-git-send-email-armbru@redhat.com> Subject: [Qemu-devel] [PATCH v3 15/16] boot-order-test: Support fw_cfg in I/O space List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com, jan.kiszka@siemens.com, Blue Swirl , alex.williamson@redhat.com, aviksil@linux.vnet.ibm.com, afaerber@suse.de Next commit needs it. Cc: Blue Swirl Signed-off-by: Markus Armbruster --- tests/boot-order-test.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/tests/boot-order-test.c b/tests/boot-order-test.c index 7b1edc1..d1d99f8 100644 --- a/tests/boot-order-test.c +++ b/tests/boot-order-test.c @@ -133,23 +133,31 @@ static void test_prep_boot_order(void) test_boot_orders("prep", read_boot_order_prep, test_cases_prep); } -static void read_fw_cfg(uint64_t cfg_addr, uint16_t cmd, +static void read_fw_cfg(uint64_t cfg_addr, bool addr_is_io, uint16_t cmd, void *buf, size_t len) { uint8_t *p = buf; size_t i; - writew(cfg_addr, cmd); - for (i = 0; i < len; i++) { - p[i] = readb(cfg_addr + 2); + if (addr_is_io) { + outw(cfg_addr, cmd); + for (i = 0; i < len; i++) { + p[i] = inb(cfg_addr + 1); + } + } else { + writew(cfg_addr, cmd); + for (i = 0; i < len; i++) { + p[i] = readb(cfg_addr + 2); + } } } -static uint16_t read_fw_cfg_i16(uint64_t cfg_addr, uint16_t cmd) +static uint16_t read_fw_cfg_i16(uint64_t cfg_addr, bool addr_is_io, + uint16_t cmd) { uint16_t value; - read_fw_cfg(cfg_addr, cmd, &value, sizeof(value)); + read_fw_cfg(cfg_addr, addr_is_io, cmd, &value, sizeof(value)); return le16_to_cpu(value); } @@ -157,7 +165,7 @@ static uint16_t read_fw_cfg_i16(uint64_t cfg_addr, uint16_t cmd) static uint64_t read_boot_order_pmac(void) { - return read_fw_cfg_i16(PMAC_CFG_ADDR, FW_CFG_BOOT_DEVICE); + return read_fw_cfg_i16(PMAC_CFG_ADDR, false, FW_CFG_BOOT_DEVICE); } static const boot_order_test test_cases_fw_cfg[] = { @@ -182,7 +190,7 @@ static void test_pmac_newworld_boot_order(void) static uint64_t read_boot_order_sun4m(void) { - return read_fw_cfg_i16(SUN4M_CFG_ADDR, FW_CFG_BOOT_DEVICE); + return read_fw_cfg_i16(SUN4M_CFG_ADDR, false, FW_CFG_BOOT_DEVICE); } static void test_sun4m_boot_order(void) -- 1.7.11.7