1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#ifndef IOPORT_H
25#define IOPORT_H
26
27#include "qemu-common.h"
28#include "exec/iorange.h"
29
30typedef uint32_t pio_addr_t;
31#define FMT_pioaddr PRIx32
32
33#define MAX_IOPORTS (64 * 1024)
34#define IOPORTS_MASK (MAX_IOPORTS - 1)
35
36
37typedef void (IOPortWriteFunc)(void *opaque, uint32_t address, uint32_t data);
38typedef uint32_t (IOPortReadFunc)(void *opaque, uint32_t address);
39typedef void (IOPortDestructor)(void *opaque);
40
41void ioport_register(IORange *iorange);
42int register_ioport_read(pio_addr_t start, int length, int size,
43 IOPortReadFunc *func, void *opaque);
44int register_ioport_write(pio_addr_t start, int length, int size,
45 IOPortWriteFunc *func, void *opaque);
46void isa_unassign_ioport(pio_addr_t start, int length);
47bool isa_is_ioport_assigned(pio_addr_t start);
48
49void cpu_outb(pio_addr_t addr, uint8_t val);
50void cpu_outw(pio_addr_t addr, uint16_t val);
51void cpu_outl(pio_addr_t addr, uint32_t val);
52uint8_t cpu_inb(pio_addr_t addr);
53uint16_t cpu_inw(pio_addr_t addr);
54uint32_t cpu_inl(pio_addr_t addr);
55
56struct MemoryRegion;
57struct MemoryRegionPortio;
58
59typedef struct PortioList {
60 const struct MemoryRegionPortio *ports;
61 struct MemoryRegion *address_space;
62 unsigned nr;
63 struct MemoryRegion **regions;
64 struct MemoryRegion **aliases;
65 void *opaque;
66 const char *name;
67} PortioList;
68
69void portio_list_init(PortioList *piolist,
70 const struct MemoryRegionPortio *callbacks,
71 void *opaque, const char *name);
72void portio_list_destroy(PortioList *piolist);
73void portio_list_add(PortioList *piolist,
74 struct MemoryRegion *address_space,
75 uint32_t addr);
76void portio_list_del(PortioList *piolist);
77
78#endif
79