Revision a8170e5e hw/sun4m_iommu.c
b/hw/sun4m_iommu.c | ||
---|---|---|
130 | 130 |
SysBusDevice busdev; |
131 | 131 |
MemoryRegion iomem; |
132 | 132 |
uint32_t regs[IOMMU_NREGS]; |
133 |
target_phys_addr_t iostart;
|
|
133 |
hwaddr iostart;
|
|
134 | 134 |
qemu_irq irq; |
135 | 135 |
uint32_t version; |
136 | 136 |
} IOMMUState; |
137 | 137 |
|
138 |
static uint64_t iommu_mem_read(void *opaque, target_phys_addr_t addr,
|
|
138 |
static uint64_t iommu_mem_read(void *opaque, hwaddr addr,
|
|
139 | 139 |
unsigned size) |
140 | 140 |
{ |
141 | 141 |
IOMMUState *s = opaque; |
142 |
target_phys_addr_t saddr;
|
|
142 |
hwaddr saddr;
|
|
143 | 143 |
uint32_t ret; |
144 | 144 |
|
145 | 145 |
saddr = addr >> 2; |
... | ... | |
157 | 157 |
return ret; |
158 | 158 |
} |
159 | 159 |
|
160 |
static void iommu_mem_write(void *opaque, target_phys_addr_t addr,
|
|
160 |
static void iommu_mem_write(void *opaque, hwaddr addr,
|
|
161 | 161 |
uint64_t val, unsigned size) |
162 | 162 |
{ |
163 | 163 |
IOMMUState *s = opaque; |
164 |
target_phys_addr_t saddr;
|
|
164 |
hwaddr saddr;
|
|
165 | 165 |
|
166 | 166 |
saddr = addr >> 2; |
167 | 167 |
trace_sun4m_iommu_mem_writel(saddr, val); |
... | ... | |
249 | 249 |
}, |
250 | 250 |
}; |
251 | 251 |
|
252 |
static uint32_t iommu_page_get_flags(IOMMUState *s, target_phys_addr_t addr)
|
|
252 |
static uint32_t iommu_page_get_flags(IOMMUState *s, hwaddr addr)
|
|
253 | 253 |
{ |
254 | 254 |
uint32_t ret; |
255 |
target_phys_addr_t iopte;
|
|
256 |
target_phys_addr_t pa = addr;
|
|
255 |
hwaddr iopte;
|
|
256 |
hwaddr pa = addr;
|
|
257 | 257 |
|
258 | 258 |
iopte = s->regs[IOMMU_BASE] << 4; |
259 | 259 |
addr &= ~s->iostart; |
... | ... | |
264 | 264 |
return ret; |
265 | 265 |
} |
266 | 266 |
|
267 |
static target_phys_addr_t iommu_translate_pa(target_phys_addr_t addr,
|
|
267 |
static hwaddr iommu_translate_pa(hwaddr addr,
|
|
268 | 268 |
uint32_t pte) |
269 | 269 |
{ |
270 |
target_phys_addr_t pa;
|
|
270 |
hwaddr pa;
|
|
271 | 271 |
|
272 | 272 |
pa = ((pte & IOPTE_PAGE) << 4) + (addr & ~IOMMU_PAGE_MASK); |
273 | 273 |
trace_sun4m_iommu_translate_pa(addr, pa, pte); |
274 | 274 |
return pa; |
275 | 275 |
} |
276 | 276 |
|
277 |
static void iommu_bad_addr(IOMMUState *s, target_phys_addr_t addr,
|
|
277 |
static void iommu_bad_addr(IOMMUState *s, hwaddr addr,
|
|
278 | 278 |
int is_write) |
279 | 279 |
{ |
280 | 280 |
trace_sun4m_iommu_bad_addr(addr); |
... | ... | |
286 | 286 |
qemu_irq_raise(s->irq); |
287 | 287 |
} |
288 | 288 |
|
289 |
void sparc_iommu_memory_rw(void *opaque, target_phys_addr_t addr,
|
|
289 |
void sparc_iommu_memory_rw(void *opaque, hwaddr addr,
|
|
290 | 290 |
uint8_t *buf, int len, int is_write) |
291 | 291 |
{ |
292 | 292 |
int l; |
293 | 293 |
uint32_t flags; |
294 |
target_phys_addr_t page, phys_addr;
|
|
294 |
hwaddr page, phys_addr;
|
|
295 | 295 |
|
296 | 296 |
while (len > 0) { |
297 | 297 |
page = addr & IOMMU_PAGE_MASK; |
Also available in: Unified diff