diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2010-12-01 07:11:51 +0200 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2010-12-01 07:11:51 +0200 |
commit | c924f36a300cbc54d3cb511116e8e2bae17f5ae6 (patch) | |
tree | 04e57676b1db1db7d8b33934b349f8f37780fa2a /ioport.c | |
parent | 1abeb5a65d515f8a8a9cfc4a82342f731bd9321f (diff) | |
parent | 09fa35e5cdc7d17ed3e1528ca743893ae77a0ea2 (diff) | |
download | qemu-c924f36a300cbc54d3cb511116e8e2bae17f5ae6.zip qemu-c924f36a300cbc54d3cb511116e8e2bae17f5ae6.tar.gz qemu-c924f36a300cbc54d3cb511116e8e2bae17f5ae6.tar.bz2 |
Merge remote branch 'origin/master' into pci
Conflicts:
Makefile.objs
hw/virtio.c
Diffstat (limited to 'ioport.c')
-rw-r--r-- | ioport.c | 64 |
1 files changed, 64 insertions, 0 deletions
@@ -174,6 +174,70 @@ int register_ioport_write(pio_addr_t start, int length, int size, return 0; } +static uint32_t ioport_readb_thunk(void *opaque, uint32_t addr) +{ + IORange *ioport = opaque; + uint64_t data; + + ioport->ops->read(ioport, addr - ioport->base, 1, &data); + return data; +} + +static uint32_t ioport_readw_thunk(void *opaque, uint32_t addr) +{ + IORange *ioport = opaque; + uint64_t data; + + ioport->ops->read(ioport, addr - ioport->base, 2, &data); + return data; +} + +static uint32_t ioport_readl_thunk(void *opaque, uint32_t addr) +{ + IORange *ioport = opaque; + uint64_t data; + + ioport->ops->read(ioport, addr - ioport->base, 4, &data); + return data; +} + +static void ioport_writeb_thunk(void *opaque, uint32_t addr, uint32_t data) +{ + IORange *ioport = opaque; + + ioport->ops->write(ioport, addr - ioport->base, 1, data); +} + +static void ioport_writew_thunk(void *opaque, uint32_t addr, uint32_t data) +{ + IORange *ioport = opaque; + + ioport->ops->write(ioport, addr - ioport->base, 2, data); +} + +static void ioport_writel_thunk(void *opaque, uint32_t addr, uint32_t data) +{ + IORange *ioport = opaque; + + ioport->ops->write(ioport, addr - ioport->base, 4, data); +} + +void ioport_register(IORange *ioport) +{ + register_ioport_read(ioport->base, ioport->len, 1, + ioport_readb_thunk, ioport); + register_ioport_read(ioport->base, ioport->len, 2, + ioport_readw_thunk, ioport); + register_ioport_read(ioport->base, ioport->len, 4, + ioport_readl_thunk, ioport); + register_ioport_write(ioport->base, ioport->len, 1, + ioport_writeb_thunk, ioport); + register_ioport_write(ioport->base, ioport->len, 2, + ioport_writew_thunk, ioport); + register_ioport_write(ioport->base, ioport->len, 4, + ioport_writel_thunk, ioport); +} + void isa_unassign_ioport(pio_addr_t start, int length) { int i; |