Revision 8b0de438 hw/iommu.c

b/hw/iommu.c
109 109
#define IOPTE_VALID         0x00000002 /* IOPTE is valid */
110 110
#define IOPTE_WAZ           0x00000001 /* Write as zeros */
111 111

  
112
#define PAGE_SHIFT      12
113
#define PAGE_SIZE       (1 << PAGE_SHIFT)
114
#define PAGE_MASK       (PAGE_SIZE - 1)
112
#define IOMMU_PAGE_SHIFT    12
113
#define IOMMU_PAGE_SIZE     (1 << IOMMU_PAGE_SHIFT)
114
#define IOMMU_PAGE_MASK     ~(IOMMU_PAGE_SIZE - 1)
115 115

  
116 116
typedef struct IOMMUState {
117 117
    uint32_t regs[IOMMU_NREGS];
......
242 242

  
243 243
    iopte = s->regs[IOMMU_BASE] << 4;
244 244
    addr &= ~s->iostart;
245
    iopte += (addr >> (PAGE_SHIFT - 2)) & ~3;
245
    iopte += (addr >> (IOMMU_PAGE_SHIFT - 2)) & ~3;
246 246
    cpu_physical_memory_read(iopte, (uint8_t *)&ret, 4);
247 247
    tswap32s(&ret);
248 248
    DPRINTF("get flags addr " TARGET_FMT_plx " => pte " TARGET_FMT_plx
......
258 258
    target_phys_addr_t pa;
259 259

  
260 260
    tmppte = pte;
261
    pa = ((pte & IOPTE_PAGE) << 4) + (addr & PAGE_MASK);
261
    pa = ((pte & IOPTE_PAGE) << 4) + (addr & ~IOMMU_PAGE_MASK);
262 262
    DPRINTF("xlate dva " TARGET_FMT_plx " => pa " TARGET_FMT_plx
263 263
            " (iopte = %x)\n", addr, pa, tmppte);
264 264

  
......
285 285
    target_phys_addr_t page, phys_addr;
286 286

  
287 287
    while (len > 0) {
288
        page = addr & TARGET_PAGE_MASK;
289
        l = (page + TARGET_PAGE_SIZE) - addr;
288
        page = addr & IOMMU_PAGE_MASK;
289
        l = (page + IOMMU_PAGE_SIZE) - addr;
290 290
        if (l > len)
291 291
            l = len;
292 292
        flags = iommu_page_get_flags(opaque, page);

Also available in: Unified diff