Revision d09510b2
b/hw/lm32_timer.c | ||
---|---|---|
51 | 51 |
|
52 | 52 |
struct LM32TimerState { |
53 | 53 |
SysBusDevice busdev; |
54 |
MemoryRegion iomem; |
|
54 | 55 |
|
55 | 56 |
QEMUBH *bh; |
56 | 57 |
ptimer_state *ptimer; |
... | ... | |
70 | 71 |
qemu_set_irq(s->irq, state); |
71 | 72 |
} |
72 | 73 |
|
73 |
static uint32_t timer_read(void *opaque, target_phys_addr_t addr)
|
|
74 |
static uint64_t timer_read(void *opaque, target_phys_addr_t addr, unsigned size)
|
|
74 | 75 |
{ |
75 | 76 |
LM32TimerState *s = opaque; |
76 | 77 |
uint32_t r = 0; |
... | ... | |
95 | 96 |
return r; |
96 | 97 |
} |
97 | 98 |
|
98 |
static void timer_write(void *opaque, target_phys_addr_t addr, uint32_t value) |
|
99 |
static void timer_write(void *opaque, target_phys_addr_t addr, |
|
100 |
uint64_t value, unsigned size) |
|
99 | 101 |
{ |
100 | 102 |
LM32TimerState *s = opaque; |
101 | 103 |
|
... | ... | |
131 | 133 |
timer_update_irq(s); |
132 | 134 |
} |
133 | 135 |
|
134 |
static CPUReadMemoryFunc * const timer_read_fn[] = { |
|
135 |
NULL, |
|
136 |
NULL, |
|
137 |
&timer_read, |
|
138 |
}; |
|
139 |
|
|
140 |
static CPUWriteMemoryFunc * const timer_write_fn[] = { |
|
141 |
NULL, |
|
142 |
NULL, |
|
143 |
&timer_write, |
|
136 |
static const MemoryRegionOps timer_ops = { |
|
137 |
.read = timer_read, |
|
138 |
.write = timer_write, |
|
139 |
.endianness = DEVICE_NATIVE_ENDIAN, |
|
140 |
.valid = { |
|
141 |
.min_access_size = 4, |
|
142 |
.max_access_size = 4, |
|
143 |
}, |
|
144 | 144 |
}; |
145 | 145 |
|
146 | 146 |
static void timer_hit(void *opaque) |
... | ... | |
172 | 172 |
static int lm32_timer_init(SysBusDevice *dev) |
173 | 173 |
{ |
174 | 174 |
LM32TimerState *s = FROM_SYSBUS(typeof(*s), dev); |
175 |
int timer_regs; |
|
176 | 175 |
|
177 | 176 |
sysbus_init_irq(dev, &s->irq); |
178 | 177 |
|
... | ... | |
180 | 179 |
s->ptimer = ptimer_init(s->bh); |
181 | 180 |
ptimer_set_freq(s->ptimer, s->freq_hz); |
182 | 181 |
|
183 |
timer_regs = cpu_register_io_memory(timer_read_fn, timer_write_fn, s, |
|
184 |
DEVICE_NATIVE_ENDIAN); |
|
185 |
sysbus_init_mmio(dev, R_MAX * 4, timer_regs); |
|
182 |
memory_region_init_io(&s->iomem, &timer_ops, s, "timer", R_MAX * 4); |
|
183 |
sysbus_init_mmio_region(dev, &s->iomem); |
|
186 | 184 |
|
187 | 185 |
return 0; |
188 | 186 |
} |
Also available in: Unified diff