From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48887) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V1GaI-0006C1-Hm for qemu-devel@nongnu.org; Mon, 22 Jul 2013 09:55:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V1GaG-00062h-UW for qemu-devel@nongnu.org; Mon, 22 Jul 2013 09:55:30 -0400 Received: from mail-ea0-x22f.google.com ([2a00:1450:4013:c01::22f]:50169) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V1GaG-00062X-Nt for qemu-devel@nongnu.org; Mon, 22 Jul 2013 09:55:28 -0400 Received: by mail-ea0-f175.google.com with SMTP id z7so3843077eaf.34 for ; Mon, 22 Jul 2013 06:55:28 -0700 (PDT) Sender: Paolo Bonzini From: Paolo Bonzini Date: Mon, 22 Jul 2013 15:54:26 +0200 Message-Id: <1374501278-31549-17-git-send-email-pbonzini@redhat.com> In-Reply-To: <1374501278-31549-1-git-send-email-pbonzini@redhat.com> References: <1374501278-31549-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 16/28] pc-testdev: support 8 and 16-bit accesses to 0xe0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com, aik@ozlabs.ru, agraf@suse.de, hpoussin@reactos.org, jan.kiszka@siemens.com, aurelien@aurel32.net This will let us use the testdev to test endianness. Signed-off-by: Paolo Bonzini --- hw/misc/pc-testdev.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/hw/misc/pc-testdev.c b/hw/misc/pc-testdev.c index 699a16f..6588ea2 100644 --- a/hw/misc/pc-testdev.c +++ b/hw/misc/pc-testdev.c @@ -80,13 +80,20 @@ static void test_ioport_write(void *opaque, hwaddr addr, uint64_t data, unsigned len) { PCTestdev *dev = opaque; - dev->ioport_data = data; + int bits = len * 8; + int start_bit = (addr & 3) * 8; + uint32_t mask = ((uint32_t)-1 >> (32 - bits)) << start_bit; + dev->ioport_data &= ~mask; + dev->ioport_data |= data << start_bit; } static uint64_t test_ioport_read(void *opaque, hwaddr addr, unsigned len) { PCTestdev *dev = opaque; - return dev->ioport_data; + int bits = len * 8; + int start_bit = (addr & 3) * 8; + uint32_t mask = ((uint32_t)-1 >> (32 - bits)) << start_bit; + return (dev->ioport_data & mask) >> start_bit; } static const MemoryRegionOps test_ioport_ops = { -- 1.8.1.4