Revision d537cf6c hw/pl190.c
b/hw/pl190.c | ||
---|---|---|
17 | 17 |
#define PL190_NUM_PRIO 17 |
18 | 18 |
|
19 | 19 |
typedef struct { |
20 |
arm_pic_handler handler; |
|
21 | 20 |
uint32_t base; |
22 | 21 |
DisplayState *ds; |
23 | 22 |
uint32_t level; |
... | ... | |
33 | 32 |
/* Current priority level. */ |
34 | 33 |
int priority; |
35 | 34 |
int prev_prio[PL190_NUM_PRIO]; |
36 |
void *parent; |
|
37 |
int irq; |
|
38 |
int fiq; |
|
35 |
qemu_irq irq; |
|
36 |
qemu_irq fiq; |
|
39 | 37 |
} pl190_state; |
40 | 38 |
|
41 | 39 |
static const unsigned char pl190_id[] = |
... | ... | |
53 | 51 |
int set; |
54 | 52 |
|
55 | 53 |
set = (level & s->prio_mask[s->priority]) != 0; |
56 |
pic_set_irq_new(s->parent, s->irq, set);
|
|
54 |
qemu_set_irq(s->irq, set);
|
|
57 | 55 |
set = ((s->level | s->soft_level) & s->fiq_select) != 0; |
58 |
pic_set_irq_new(s->parent, s->fiq, set);
|
|
56 |
qemu_set_irq(s->fiq, set);
|
|
59 | 57 |
} |
60 | 58 |
|
61 | 59 |
static void pl190_set_irq(void *opaque, int irq, int level) |
... | ... | |
232 | 230 |
pl190_update_vectors(s); |
233 | 231 |
} |
234 | 232 |
|
235 |
void *pl190_init(uint32_t base, void *parent, int irq, int fiq)
|
|
233 |
qemu_irq *pl190_init(uint32_t base, qemu_irq irq, qemu_irq fiq)
|
|
236 | 234 |
{ |
237 | 235 |
pl190_state *s; |
236 |
qemu_irq *qi; |
|
238 | 237 |
int iomemtype; |
239 | 238 |
|
240 | 239 |
s = (pl190_state *)qemu_mallocz(sizeof(pl190_state)); |
241 | 240 |
iomemtype = cpu_register_io_memory(0, pl190_readfn, |
242 | 241 |
pl190_writefn, s); |
243 | 242 |
cpu_register_physical_memory(base, 0x00000fff, iomemtype); |
244 |
s->handler = pl190_set_irq;
|
|
243 |
qi = qemu_allocate_irqs(pl190_set_irq, s, 16);
|
|
245 | 244 |
s->base = base; |
246 |
s->parent = parent; |
|
247 | 245 |
s->irq = irq; |
248 | 246 |
s->fiq = fiq; |
249 | 247 |
pl190_reset(s); |
250 | 248 |
/* ??? Save/restore. */ |
251 |
return s;
|
|
249 |
return qi;
|
|
252 | 250 |
} |
Also available in: Unified diff