Revision f930d07e hw/iommu.c

b/hw/iommu.c
81 81
#define IOMMU_SBCFG_BA16    0x00000004 /* Slave supports 16 byte bursts */
82 82
#define IOMMU_SBCFG_BA8     0x00000002 /* Slave supports 8 byte bursts */
83 83
#define IOMMU_SBCFG_BYPASS  0x00000001 /* Bypass IOMMU, treat all addresses
84
       	                                  produced by this device as pure
84
                                          produced by this device as pure
85 85
                                          physical. */
86 86
#define IOMMU_SBCFG_MASK    0x00010003
87 87

  
......
98 98

  
99 99
#define PAGE_SHIFT      12
100 100
#define PAGE_SIZE       (1 << PAGE_SHIFT)
101
#define PAGE_MASK	(PAGE_SIZE - 1)
101
#define PAGE_MASK       (PAGE_SIZE - 1)
102 102

  
103 103
typedef struct IOMMUState {
104 104
    target_phys_addr_t addr;
......
114 114
    saddr = (addr - s->addr) >> 2;
115 115
    switch (saddr) {
116 116
    default:
117
	DPRINTF("read reg[%d] = %x\n", (int)saddr, s->regs[saddr]);
118
	return s->regs[saddr];
119
	break;
117
        DPRINTF("read reg[%d] = %x\n", (int)saddr, s->regs[saddr]);
118
        return s->regs[saddr];
119
        break;
120 120
    }
121 121
    return 0;
122 122
}
......
130 130
    DPRINTF("write reg[%d] = %x\n", (int)saddr, val);
131 131
    switch (saddr) {
132 132
    case IOMMU_CTRL:
133
	switch (val & IOMMU_CTRL_RNGE) {
134
	case IOMMU_RNGE_16MB:
135
	    s->iostart = 0xffffffffff000000ULL;
136
	    break;
137
	case IOMMU_RNGE_32MB:
138
	    s->iostart = 0xfffffffffe000000ULL;
139
	    break;
140
	case IOMMU_RNGE_64MB:
141
	    s->iostart = 0xfffffffffc000000ULL;
142
	    break;
143
	case IOMMU_RNGE_128MB:
144
	    s->iostart = 0xfffffffff8000000ULL;
145
	    break;
146
	case IOMMU_RNGE_256MB:
147
	    s->iostart = 0xfffffffff0000000ULL;
148
	    break;
149
	case IOMMU_RNGE_512MB:
150
	    s->iostart = 0xffffffffe0000000ULL;
151
	    break;
152
	case IOMMU_RNGE_1GB:
153
	    s->iostart = 0xffffffffc0000000ULL;
154
	    break;
155
	default:
156
	case IOMMU_RNGE_2GB:
157
	    s->iostart = 0xffffffff80000000ULL;
158
	    break;
159
	}
160
	DPRINTF("iostart = " TARGET_FMT_plx "\n", s->iostart);
161
	s->regs[saddr] = ((val & IOMMU_CTRL_MASK) | IOMMU_VERSION);
162
	break;
133
        switch (val & IOMMU_CTRL_RNGE) {
134
        case IOMMU_RNGE_16MB:
135
            s->iostart = 0xffffffffff000000ULL;
136
            break;
137
        case IOMMU_RNGE_32MB:
138
            s->iostart = 0xfffffffffe000000ULL;
139
            break;
140
        case IOMMU_RNGE_64MB:
141
            s->iostart = 0xfffffffffc000000ULL;
142
            break;
143
        case IOMMU_RNGE_128MB:
144
            s->iostart = 0xfffffffff8000000ULL;
145
            break;
146
        case IOMMU_RNGE_256MB:
147
            s->iostart = 0xfffffffff0000000ULL;
148
            break;
149
        case IOMMU_RNGE_512MB:
150
            s->iostart = 0xffffffffe0000000ULL;
151
            break;
152
        case IOMMU_RNGE_1GB:
153
            s->iostart = 0xffffffffc0000000ULL;
154
            break;
155
        default:
156
        case IOMMU_RNGE_2GB:
157
            s->iostart = 0xffffffff80000000ULL;
158
            break;
159
        }
160
        DPRINTF("iostart = " TARGET_FMT_plx "\n", s->iostart);
161
        s->regs[saddr] = ((val & IOMMU_CTRL_MASK) | IOMMU_VERSION);
162
        break;
163 163
    case IOMMU_BASE:
164
	s->regs[saddr] = val & IOMMU_BASE_MASK;
165
	break;
164
        s->regs[saddr] = val & IOMMU_BASE_MASK;
165
        break;
166 166
    case IOMMU_TLBFLUSH:
167
	DPRINTF("tlb flush %x\n", val);
168
	s->regs[saddr] = val & IOMMU_TLBFLUSH_MASK;
169
	break;
167
        DPRINTF("tlb flush %x\n", val);
168
        s->regs[saddr] = val & IOMMU_TLBFLUSH_MASK;
169
        break;
170 170
    case IOMMU_PGFLUSH:
171
	DPRINTF("page flush %x\n", val);
172
	s->regs[saddr] = val & IOMMU_PGFLUSH_MASK;
173
	break;
171
        DPRINTF("page flush %x\n", val);
172
        s->regs[saddr] = val & IOMMU_PGFLUSH_MASK;
173
        break;
174 174
    case IOMMU_SBCFG0:
175 175
    case IOMMU_SBCFG1:
176 176
    case IOMMU_SBCFG2:
177 177
    case IOMMU_SBCFG3:
178
	s->regs[saddr] = val & IOMMU_SBCFG_MASK;
179
	break;
178
        s->regs[saddr] = val & IOMMU_SBCFG_MASK;
179
        break;
180 180
    case IOMMU_ARBEN:
181 181
        // XXX implement SBus probing: fault when reading unmapped
182 182
        // addresses, fault cause and address stored to MMU/IOMMU
183
	s->regs[saddr] = (val & IOMMU_ARBEN_MASK) | IOMMU_MID;
184
	break;
183
        s->regs[saddr] = (val & IOMMU_ARBEN_MASK) | IOMMU_MID;
184
        break;
185 185
    default:
186
	s->regs[saddr] = val;
187
	break;
186
        s->regs[saddr] = val;
187
        break;
188 188
    }
189 189
}
190 190

  
......
283 283
    int i;
284 284

  
285 285
    for (i = 0; i < IOMMU_NREGS; i++)
286
	qemu_put_be32s(f, &s->regs[i]);
286
        qemu_put_be32s(f, &s->regs[i]);
287 287
    qemu_put_be64s(f, &s->iostart);
288 288
}
289 289

  

Also available in: Unified diff