Revision e0087e61 hw/sparc32_dma.c
b/hw/sparc32_dma.c | ||
---|---|---|
44 | 44 |
/* We need the mask, because one instance of the device is not page |
45 | 45 |
aligned (ledma, start address 0x0010) */ |
46 | 46 |
#define DMA_MASK (DMA_SIZE - 1) |
47 |
/* ledma has more than 4 registers, Solaris reads the 5th one */
|
|
47 |
/* OBP says 0x20 bytes for ledma, the extras are aliased to espdma */
|
|
48 | 48 |
#define DMA_ETH_SIZE (8 * sizeof(uint32_t)) |
49 | 49 |
#define DMA_MAX_REG_OFFSET (2 * DMA_SIZE - 1) |
50 | 50 |
|
... | ... | |
170 | 170 |
uint32_t saddr; |
171 | 171 |
|
172 | 172 |
if (s->is_ledma && (addr > DMA_MAX_REG_OFFSET)) { |
173 |
return 0; /* extra mystery register(s) */ |
|
173 |
/* aliased to espdma, but we can't get there from here */ |
|
174 |
/* buggy driver if using undocumented behavior, just return 0 */ |
|
175 |
trace_sparc32_dma_mem_readl(addr, 0); |
|
176 |
return 0; |
|
174 | 177 |
} |
175 | 178 |
saddr = (addr & DMA_MASK) >> 2; |
176 | 179 |
trace_sparc32_dma_mem_readl(addr, s->dmaregs[saddr]); |
... | ... | |
183 | 186 |
uint32_t saddr; |
184 | 187 |
|
185 | 188 |
if (s->is_ledma && (addr > DMA_MAX_REG_OFFSET)) { |
186 |
return; /* extra mystery register(s) */ |
|
189 |
/* aliased to espdma, but we can't get there from here */ |
|
190 |
trace_sparc32_dma_mem_writel(addr, 0, val); |
|
191 |
return; |
|
187 | 192 |
} |
188 | 193 |
saddr = (addr & DMA_MASK) >> 2; |
189 | 194 |
trace_sparc32_dma_mem_writel(addr, s->dmaregs[saddr], val); |
Also available in: Unified diff