Revision 7063f49f hw/pl061.c
b/hw/pl061.c | ||
---|---|---|
24 | 24 |
#endif |
25 | 25 |
|
26 | 26 |
static const uint8_t pl061_id[12] = |
27 |
{ 0x00, 0x00, 0x00, 0x00, 0x61, 0x10, 0x04, 0x00, 0x0d, 0xf0, 0x05, 0xb1 }; |
|
28 |
static const uint8_t pl061_id_luminary[12] = |
|
27 | 29 |
{ 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x18, 0x01, 0x0d, 0xf0, 0x05, 0xb1 }; |
28 | 30 |
|
29 | 31 |
typedef struct { |
... | ... | |
50 | 52 |
uint8_t float_high; |
51 | 53 |
qemu_irq irq; |
52 | 54 |
qemu_irq out[8]; |
55 |
const unsigned char *id; |
|
53 | 56 |
} pl061_state; |
54 | 57 |
|
55 | 58 |
static void pl061_update(pl061_state *s) |
... | ... | |
83 | 86 |
pl061_state *s = (pl061_state *)opaque; |
84 | 87 |
|
85 | 88 |
if (offset >= 0xfd0 && offset < 0x1000) { |
86 |
return pl061_id[(offset - 0xfd0) >> 2];
|
|
89 |
return s->id[(offset - 0xfd0) >> 2];
|
|
87 | 90 |
} |
88 | 91 |
if (offset < 0x400) { |
89 | 92 |
return s->data & (offset >> 2); |
... | ... | |
291 | 294 |
return 0; |
292 | 295 |
} |
293 | 296 |
|
294 |
static int pl061_init(SysBusDevice *dev) |
|
297 |
static int pl061_init(SysBusDevice *dev, const unsigned char *id)
|
|
295 | 298 |
{ |
296 | 299 |
int iomemtype; |
297 | 300 |
pl061_state *s = FROM_SYSBUS(pl061_state, dev); |
298 |
|
|
301 |
s->id = id; |
|
299 | 302 |
iomemtype = cpu_register_io_memory(pl061_readfn, |
300 | 303 |
pl061_writefn, s, |
301 | 304 |
DEVICE_NATIVE_ENDIAN); |
... | ... | |
308 | 311 |
return 0; |
309 | 312 |
} |
310 | 313 |
|
314 |
static int pl061_init_luminary(SysBusDevice *dev) |
|
315 |
{ |
|
316 |
return pl061_init(dev, pl061_id_luminary); |
|
317 |
} |
|
318 |
|
|
319 |
static int pl061_init_arm(SysBusDevice *dev) |
|
320 |
{ |
|
321 |
return pl061_init(dev, pl061_id); |
|
322 |
} |
|
323 |
|
|
311 | 324 |
static void pl061_register_devices(void) |
312 | 325 |
{ |
313 | 326 |
sysbus_register_dev("pl061", sizeof(pl061_state), |
314 |
pl061_init); |
|
327 |
pl061_init_arm); |
|
328 |
sysbus_register_dev("pl061_luminary", sizeof(pl061_state), |
|
329 |
pl061_init_luminary); |
|
315 | 330 |
} |
316 | 331 |
|
317 | 332 |
device_init(pl061_register_devices) |
Also available in: Unified diff