[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 5/8] ioport: reimplement cpu_in/cpu_out using add
From: |
Hervé Poussineau |
Subject: |
[Qemu-devel] [PATCH v2 5/8] ioport: reimplement cpu_in/cpu_out using address_space_rw |
Date: |
Sun, 9 Jun 2013 01:44:03 +0800 |
Signed-off-by: Hervé Poussineau <address@hidden>
---
ioport.c | 83 ++++++--------------------------------------------------------
1 file changed, 7 insertions(+), 76 deletions(-)
diff --git a/ioport.c b/ioport.c
index d26d3e1..7bc9d8f 100644
--- a/ioport.c
+++ b/ioport.c
@@ -28,6 +28,7 @@
#include "exec/ioport.h"
#include "trace.h"
#include "exec/memory.h"
+#include "exec/address-spaces.h"
#include "qemu/host-utils.h"
/***********************************************************/
@@ -55,76 +56,6 @@ static IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
static IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
static IOPortDestructor *ioport_destructor_table[MAX_IOPORTS];
-static IOPortReadFunc default_ioport_readb, default_ioport_readw,
default_ioport_readl;
-static IOPortWriteFunc default_ioport_writeb, default_ioport_writew,
default_ioport_writel;
-
-static uint32_t ioport_read(int index, uint32_t address)
-{
- static IOPortReadFunc * const default_func[3] = {
- default_ioport_readb,
- default_ioport_readw,
- default_ioport_readl
- };
- IOPortReadFunc *func = ioport_read_table[index][address];
- if (!func)
- func = default_func[index];
- return func(ioport_opaque[address], address);
-}
-
-static void ioport_write(int index, uint32_t address, uint32_t data)
-{
- static IOPortWriteFunc * const default_func[3] = {
- default_ioport_writeb,
- default_ioport_writew,
- default_ioport_writel
- };
- IOPortWriteFunc *func = ioport_write_table[index][address];
- if (!func)
- func = default_func[index];
- func(ioport_opaque[address], address, data);
-}
-
-static uint32_t default_ioport_readb(void *opaque, uint32_t address)
-{
- LOG_UNUSED_IOPORT("unused inb: port=0x%04"PRIx32"\n", address);
- return 0xff;
-}
-
-static void default_ioport_writeb(void *opaque, uint32_t address, uint32_t
data)
-{
- LOG_UNUSED_IOPORT("unused outb: port=0x%04"PRIx32" data=0x%02"PRIx32"\n",
- address, data);
-}
-
-/* default is to make two byte accesses */
-static uint32_t default_ioport_readw(void *opaque, uint32_t address)
-{
- uint32_t data;
- data = ioport_read(0, address);
- address = (address + 1) & IOPORTS_MASK;
- data |= ioport_read(0, address) << 8;
- return data;
-}
-
-static void default_ioport_writew(void *opaque, uint32_t address, uint32_t
data)
-{
- ioport_write(0, address, data & 0xff);
- address = (address + 1) & IOPORTS_MASK;
- ioport_write(0, address, (data >> 8) & 0xff);
-}
-
-static uint32_t default_ioport_readl(void *opaque, uint32_t address)
-{
- LOG_UNUSED_IOPORT("unused inl: port=0x%04"PRIx32"\n", address);
- return 0xffffffff;
-}
-
-static void default_ioport_writel(void *opaque, uint32_t address, uint32_t
data)
-{
- LOG_UNUSED_IOPORT("unused outl: port=0x%04"PRIx32" data=0x%02"PRIx32"\n",
- address, data);
-}
-
static int ioport_bsize(int size, int *bsize)
{
if (size == 1) {
@@ -287,27 +218,27 @@ void cpu_outb(pio_addr_t addr, uint8_t val)
{
LOG_IOPORT("outb: %04"FMT_pioaddr" %02"PRIx8"\n", addr, val);
trace_cpu_out(addr, val);
- ioport_write(0, addr, val);
+ address_space_write(&address_space_io, addr, &val, 1);
}
void cpu_outw(pio_addr_t addr, uint16_t val)
{
LOG_IOPORT("outw: %04"FMT_pioaddr" %04"PRIx16"\n", addr, val);
trace_cpu_out(addr, val);
- ioport_write(1, addr, val);
+ address_space_write(&address_space_io, addr, (uint8_t *)&val, 2);
}
void cpu_outl(pio_addr_t addr, uint32_t val)
{
LOG_IOPORT("outl: %04"FMT_pioaddr" %08"PRIx32"\n", addr, val);
trace_cpu_out(addr, val);
- ioport_write(2, addr, val);
+ address_space_write(&address_space_io, addr, (uint8_t *)&val, 4);
}
uint8_t cpu_inb(pio_addr_t addr)
{
uint8_t val;
- val = ioport_read(0, addr);
+ address_space_read(&address_space_io, addr, &val, 1);
trace_cpu_in(addr, val);
LOG_IOPORT("inb : %04"FMT_pioaddr" %02"PRIx8"\n", addr, val);
return val;
@@ -316,7 +247,7 @@ uint8_t cpu_inb(pio_addr_t addr)
uint16_t cpu_inw(pio_addr_t addr)
{
uint16_t val;
- val = ioport_read(1, addr);
+ address_space_read(&address_space_io, addr, (uint8_t *)&val, 2);
trace_cpu_in(addr, val);
LOG_IOPORT("inw : %04"FMT_pioaddr" %04"PRIx16"\n", addr, val);
return val;
@@ -325,7 +256,7 @@ uint16_t cpu_inw(pio_addr_t addr)
uint32_t cpu_inl(pio_addr_t addr)
{
uint32_t val;
- val = ioport_read(2, addr);
+ address_space_read(&address_space_io, addr, (uint8_t *)&val, 4);
trace_cpu_in(addr, val);
LOG_IOPORT("inl : %04"FMT_pioaddr" %08"PRIx32"\n", addr, val);
return val;
--
1.7.10.4
- [Qemu-devel] [PATCH v2 0/8] memory: remove old_portio usage, Hervé Poussineau, 2013/06/08
- [Qemu-devel] [PATCH v2 2/8] memory: handle old_portio accesses in MMIO path, Hervé Poussineau, 2013/06/08
- [Qemu-devel] [PATCH v2 1/8] isa: fix documentation of isa_register_portio_list, Hervé Poussineau, 2013/06/08
- [Qemu-devel] [PATCH v2 3/8] ioport: register memory regions for I/O port lists, Hervé Poussineau, 2013/06/08
- [Qemu-devel] [PATCH v2 4/8] memory: remove code dealing with old_portio, Hervé Poussineau, 2013/06/08
- [Qemu-devel] [PATCH v2 5/8] ioport: reimplement cpu_in/cpu_out using address_space_rw,
Hervé Poussineau <=
- [Qemu-devel] [PATCH v2 6/8] ppc: simplify access to PReP I/O region, Hervé Poussineau, 2013/06/08
- [Qemu-devel] [PATCH v2 7/8] PPC: pseries: Remove hack for PIO window, Hervé Poussineau, 2013/06/08
- [Qemu-devel] [PATCH v2 8/8] isa_mmio: simplify access to system I/O region, Hervé Poussineau, 2013/06/08
- Re: [Qemu-devel] [PATCH v2 0/8] memory: remove old_portio usage, Hervé Poussineau, 2013/06/16
- Re: [Qemu-devel] [PATCH v2 0/8] memory: remove old_portio usage, Paolo Bonzini, 2013/06/17
- Re: [Qemu-devel] [PATCH v2 0/8] memory: remove old_portio usage, Jan Kiszka, 2013/06/17
- Re: [Qemu-devel] [PATCH v2 0/8] memory: remove old_portio usage, Hervé Poussineau, 2013/06/17
- Re: [Qemu-devel] [PATCH v2 0/8] memory: remove old_portio usage, Jan Kiszka, 2013/06/18
- Re: [Qemu-devel] [PATCH v2 0/8] memory: remove old_portio usage, Hervé Poussineau, 2013/06/18
- Re: [Qemu-devel] [PATCH v2 0/8] memory: remove old_portio usage, Jan Kiszka, 2013/06/21