1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include "hw.h"
26#include "isa.h"
27
28static void isa_mmio_writeb (void *opaque, target_phys_addr_t addr,
29 uint32_t val)
30{
31 cpu_outb(addr & IOPORTS_MASK, val);
32}
33
34static void isa_mmio_writew(void *opaque, target_phys_addr_t addr,
35 uint32_t val)
36{
37 cpu_outw(addr & IOPORTS_MASK, val);
38}
39
40static void isa_mmio_writel(void *opaque, target_phys_addr_t addr,
41 uint32_t val)
42{
43 cpu_outl(addr & IOPORTS_MASK, val);
44}
45
46static uint32_t isa_mmio_readb (void *opaque, target_phys_addr_t addr)
47{
48 return cpu_inb(addr & IOPORTS_MASK);
49}
50
51static uint32_t isa_mmio_readw(void *opaque, target_phys_addr_t addr)
52{
53 return cpu_inw(addr & IOPORTS_MASK);
54}
55
56static uint32_t isa_mmio_readl(void *opaque, target_phys_addr_t addr)
57{
58 return cpu_inl(addr & IOPORTS_MASK);
59}
60
61static CPUWriteMemoryFunc * const isa_mmio_write[] = {
62 &isa_mmio_writeb,
63 &isa_mmio_writew,
64 &isa_mmio_writel,
65};
66
67static CPUReadMemoryFunc * const isa_mmio_read[] = {
68 &isa_mmio_readb,
69 &isa_mmio_readw,
70 &isa_mmio_readl,
71};
72
73void isa_mmio_init(target_phys_addr_t base, target_phys_addr_t size)
74{
75 int isa_mmio_iomemtype;
76
77 isa_mmio_iomemtype = cpu_register_io_memory(isa_mmio_read,
78 isa_mmio_write,
79 NULL,
80 DEVICE_LITTLE_ENDIAN);
81 cpu_register_physical_memory(base, size, isa_mmio_iomemtype);
82}
83