Revision 845769fc
b/hw/a9mpcore.c | ||
---|---|---|
12 | 12 |
|
13 | 13 |
/* A9MP private memory region. */ |
14 | 14 |
|
15 |
typedef struct a9mp_priv_state {
|
|
15 |
typedef struct A9MPPrivState {
|
|
16 | 16 |
SysBusDevice busdev; |
17 | 17 |
uint32_t scu_control; |
18 | 18 |
uint32_t scu_status; |
... | ... | |
23 | 23 |
DeviceState *mptimer; |
24 | 24 |
DeviceState *gic; |
25 | 25 |
uint32_t num_irq; |
26 |
} a9mp_priv_state;
|
|
26 |
} A9MPPrivState;
|
|
27 | 27 |
|
28 | 28 |
static uint64_t a9_scu_read(void *opaque, hwaddr offset, |
29 | 29 |
unsigned size) |
30 | 30 |
{ |
31 |
a9mp_priv_state *s = (a9mp_priv_state *)opaque;
|
|
31 |
A9MPPrivState *s = (A9MPPrivState *)opaque;
|
|
32 | 32 |
switch (offset) { |
33 | 33 |
case 0x00: /* Control */ |
34 | 34 |
return s->scu_control; |
... | ... | |
59 | 59 |
static void a9_scu_write(void *opaque, hwaddr offset, |
60 | 60 |
uint64_t value, unsigned size) |
61 | 61 |
{ |
62 |
a9mp_priv_state *s = (a9mp_priv_state *)opaque;
|
|
62 |
A9MPPrivState *s = (A9MPPrivState *)opaque;
|
|
63 | 63 |
uint32_t mask; |
64 | 64 |
uint32_t shift; |
65 | 65 |
switch (size) { |
... | ... | |
112 | 112 |
|
113 | 113 |
static void a9mp_priv_reset(DeviceState *dev) |
114 | 114 |
{ |
115 |
a9mp_priv_state *s = FROM_SYSBUS(a9mp_priv_state, SYS_BUS_DEVICE(dev));
|
|
115 |
A9MPPrivState *s = FROM_SYSBUS(A9MPPrivState, SYS_BUS_DEVICE(dev));
|
|
116 | 116 |
int i; |
117 | 117 |
s->scu_control = 0; |
118 | 118 |
for (i = 0; i < ARRAY_SIZE(s->old_timer_status); i++) { |
... | ... | |
122 | 122 |
|
123 | 123 |
static void a9mp_priv_set_irq(void *opaque, int irq, int level) |
124 | 124 |
{ |
125 |
a9mp_priv_state *s = (a9mp_priv_state *)opaque;
|
|
125 |
A9MPPrivState *s = (A9MPPrivState *)opaque;
|
|
126 | 126 |
qemu_set_irq(qdev_get_gpio_in(s->gic, irq), level); |
127 | 127 |
} |
128 | 128 |
|
129 | 129 |
static int a9mp_priv_init(SysBusDevice *dev) |
130 | 130 |
{ |
131 |
a9mp_priv_state *s = FROM_SYSBUS(a9mp_priv_state, dev);
|
|
131 |
A9MPPrivState *s = FROM_SYSBUS(A9MPPrivState, dev);
|
|
132 | 132 |
SysBusDevice *busdev, *gicbusdev; |
133 | 133 |
int i; |
134 | 134 |
|
... | ... | |
196 | 196 |
.version_id = 2, |
197 | 197 |
.minimum_version_id = 1, |
198 | 198 |
.fields = (VMStateField[]) { |
199 |
VMSTATE_UINT32(scu_control, a9mp_priv_state),
|
|
200 |
VMSTATE_UINT32_ARRAY(old_timer_status, a9mp_priv_state, 8),
|
|
201 |
VMSTATE_UINT32_V(scu_status, a9mp_priv_state, 2),
|
|
199 |
VMSTATE_UINT32(scu_control, A9MPPrivState),
|
|
200 |
VMSTATE_UINT32_ARRAY(old_timer_status, A9MPPrivState, 8),
|
|
201 |
VMSTATE_UINT32_V(scu_status, A9MPPrivState, 2),
|
|
202 | 202 |
VMSTATE_END_OF_LIST() |
203 | 203 |
} |
204 | 204 |
}; |
205 | 205 |
|
206 | 206 |
static Property a9mp_priv_properties[] = { |
207 |
DEFINE_PROP_UINT32("num-cpu", a9mp_priv_state, num_cpu, 1),
|
|
207 |
DEFINE_PROP_UINT32("num-cpu", A9MPPrivState, num_cpu, 1),
|
|
208 | 208 |
/* The Cortex-A9MP may have anything from 0 to 224 external interrupt |
209 | 209 |
* IRQ lines (with another 32 internal). We default to 64+32, which |
210 | 210 |
* is the number provided by the Cortex-A9MP test chip in the |
211 | 211 |
* Realview PBX-A9 and Versatile Express A9 development boards. |
212 | 212 |
* Other boards may differ and should set this property appropriately. |
213 | 213 |
*/ |
214 |
DEFINE_PROP_UINT32("num-irq", a9mp_priv_state, num_irq, 96),
|
|
214 |
DEFINE_PROP_UINT32("num-irq", A9MPPrivState, num_irq, 96),
|
|
215 | 215 |
DEFINE_PROP_END_OF_LIST(), |
216 | 216 |
}; |
217 | 217 |
|
... | ... | |
229 | 229 |
static const TypeInfo a9mp_priv_info = { |
230 | 230 |
.name = "a9mpcore_priv", |
231 | 231 |
.parent = TYPE_SYS_BUS_DEVICE, |
232 |
.instance_size = sizeof(a9mp_priv_state),
|
|
232 |
.instance_size = sizeof(A9MPPrivState),
|
|
233 | 233 |
.class_init = a9mp_priv_class_init, |
234 | 234 |
}; |
235 | 235 |
|
b/hw/arm11mpcore.c | ||
---|---|---|
12 | 12 |
|
13 | 13 |
/* MPCore private memory region. */ |
14 | 14 |
|
15 |
typedef struct mpcore_priv_state {
|
|
15 |
typedef struct ARM11MPCorePriveState {
|
|
16 | 16 |
SysBusDevice busdev; |
17 | 17 |
uint32_t scu_control; |
18 | 18 |
int iomemtype; |
... | ... | |
23 | 23 |
DeviceState *mptimer; |
24 | 24 |
DeviceState *gic; |
25 | 25 |
uint32_t num_irq; |
26 |
} mpcore_priv_state;
|
|
26 |
} ARM11MPCorePriveState;
|
|
27 | 27 |
|
28 | 28 |
/* Per-CPU private memory mapped IO. */ |
29 | 29 |
|
30 | 30 |
static uint64_t mpcore_scu_read(void *opaque, hwaddr offset, |
31 | 31 |
unsigned size) |
32 | 32 |
{ |
33 |
mpcore_priv_state *s = (mpcore_priv_state *)opaque;
|
|
33 |
ARM11MPCorePriveState *s = (ARM11MPCorePriveState *)opaque;
|
|
34 | 34 |
int id; |
35 | 35 |
/* SCU */ |
36 | 36 |
switch (offset) { |
... | ... | |
53 | 53 |
static void mpcore_scu_write(void *opaque, hwaddr offset, |
54 | 54 |
uint64_t value, unsigned size) |
55 | 55 |
{ |
56 |
mpcore_priv_state *s = (mpcore_priv_state *)opaque;
|
|
56 |
ARM11MPCorePriveState *s = (ARM11MPCorePriveState *)opaque;
|
|
57 | 57 |
/* SCU */ |
58 | 58 |
switch (offset) { |
59 | 59 |
case 0: /* Control register. */ |
... | ... | |
76 | 76 |
|
77 | 77 |
static void mpcore_priv_set_irq(void *opaque, int irq, int level) |
78 | 78 |
{ |
79 |
mpcore_priv_state *s = (mpcore_priv_state *)opaque;
|
|
79 |
ARM11MPCorePriveState *s = (ARM11MPCorePriveState *)opaque;
|
|
80 | 80 |
qemu_set_irq(qdev_get_gpio_in(s->gic, irq), level); |
81 | 81 |
} |
82 | 82 |
|
83 |
static void mpcore_priv_map_setup(mpcore_priv_state *s)
|
|
83 |
static void mpcore_priv_map_setup(ARM11MPCorePriveState *s)
|
|
84 | 84 |
{ |
85 | 85 |
int i; |
86 | 86 |
SysBusDevice *gicbusdev = SYS_BUS_DEVICE(s->gic); |
... | ... | |
121 | 121 |
|
122 | 122 |
static int mpcore_priv_init(SysBusDevice *dev) |
123 | 123 |
{ |
124 |
mpcore_priv_state *s = FROM_SYSBUS(mpcore_priv_state, dev);
|
|
124 |
ARM11MPCorePriveState *s = FROM_SYSBUS(ARM11MPCorePriveState, dev);
|
|
125 | 125 |
|
126 | 126 |
s->gic = qdev_create(NULL, "arm_gic"); |
127 | 127 |
qdev_prop_set_uint32(s->gic, "num-cpu", s->num_cpu); |
... | ... | |
230 | 230 |
}; |
231 | 231 |
|
232 | 232 |
static Property mpcore_priv_properties[] = { |
233 |
DEFINE_PROP_UINT32("num-cpu", mpcore_priv_state, num_cpu, 1),
|
|
233 |
DEFINE_PROP_UINT32("num-cpu", ARM11MPCorePriveState, num_cpu, 1),
|
|
234 | 234 |
/* The ARM11 MPCORE TRM says the on-chip controller may have |
235 | 235 |
* anything from 0 to 224 external interrupt IRQ lines (with another |
236 | 236 |
* 32 internal). We default to 32+32, which is the number provided by |
... | ... | |
239 | 239 |
* appropriately. Some Linux kernels may not boot if the hardware |
240 | 240 |
* has more IRQ lines than the kernel expects. |
241 | 241 |
*/ |
242 |
DEFINE_PROP_UINT32("num-irq", mpcore_priv_state, num_irq, 64),
|
|
242 |
DEFINE_PROP_UINT32("num-irq", ARM11MPCorePriveState, num_irq, 64),
|
|
243 | 243 |
DEFINE_PROP_END_OF_LIST(), |
244 | 244 |
}; |
245 | 245 |
|
... | ... | |
255 | 255 |
static const TypeInfo mpcore_priv_info = { |
256 | 256 |
.name = "arm11mpcore_priv", |
257 | 257 |
.parent = TYPE_SYS_BUS_DEVICE, |
258 |
.instance_size = sizeof(mpcore_priv_state),
|
|
258 |
.instance_size = sizeof(ARM11MPCorePriveState),
|
|
259 | 259 |
.class_init = mpcore_priv_class_init, |
260 | 260 |
}; |
261 | 261 |
|
Also available in: Unified diff