]> git.proxmox.com Git - mirror_qemu.git/blob - include/hw/sparc/sun4m.h
sun4m: implement IOMMU translation using IOMMU memory region
[mirror_qemu.git] / include / hw / sparc / sun4m.h
1 #ifndef SUN4M_H
2 #define SUN4M_H
3
4 #include "qemu-common.h"
5 #include "exec/hwaddr.h"
6 #include "qapi/qmp/types.h"
7 #include "hw/sysbus.h"
8
9 /* Devices used by sparc32 system. */
10
11 /* iommu.c */
12 #define TYPE_SUN4M_IOMMU "iommu"
13 #define SUN4M_IOMMU(obj) OBJECT_CHECK(IOMMUState, (obj), TYPE_SUN4M_IOMMU)
14
15 #define TYPE_SUN4M_IOMMU_MEMORY_REGION "sun4m-iommu-memory-region"
16
17 #define IOMMU_NREGS (4 * 4096 / 4)
18
19 typedef struct IOMMUState {
20 SysBusDevice parent_obj;
21
22 AddressSpace iommu_as;
23 IOMMUMemoryRegion iommu;
24
25 MemoryRegion iomem;
26 uint32_t regs[IOMMU_NREGS];
27 hwaddr iostart;
28 qemu_irq irq;
29 uint32_t version;
30 } IOMMUState;
31
32 void sparc_iommu_memory_rw(void *opaque, hwaddr addr,
33 uint8_t *buf, int len, int is_write);
34 static inline void sparc_iommu_memory_read(void *opaque,
35 hwaddr addr,
36 uint8_t *buf, int len)
37 {
38 sparc_iommu_memory_rw(opaque, addr, buf, len, 0);
39 }
40
41 static inline void sparc_iommu_memory_write(void *opaque,
42 hwaddr addr,
43 uint8_t *buf, int len)
44 {
45 sparc_iommu_memory_rw(opaque, addr, buf, len, 1);
46 }
47
48 /* sparc32_dma.c */
49 #include "hw/sparc/sparc32_dma.h"
50
51 #endif