mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
openpic SMP support (Jocelyn Mayer)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1655 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
e5d13e2f64
commit
7668a27f1d
3 changed files with 10 additions and 8 deletions
13
hw/openpic.c
13
hw/openpic.c
|
@ -159,7 +159,7 @@ typedef struct IRQ_dst_t {
|
|||
uint32_t pcsr; /* CPU sensitivity register */
|
||||
IRQ_queue_t raised;
|
||||
IRQ_queue_t servicing;
|
||||
CPUState *env; /* Needed if we did SMP */
|
||||
CPUState *env;
|
||||
} IRQ_dst_t;
|
||||
|
||||
struct openpic_t {
|
||||
|
@ -265,8 +265,7 @@ static void IRQ_local_pipe (openpic_t *opp, int n_CPU, int n_IRQ)
|
|||
if (priority > dst->raised.priority) {
|
||||
IRQ_get_next(opp, &dst->raised);
|
||||
DPRINTF("Raise CPU IRQ\n");
|
||||
/* XXX: choose the correct cpu */
|
||||
cpu_interrupt(first_cpu, CPU_INTERRUPT_HARD);
|
||||
cpu_interrupt(dst->env, CPU_INTERRUPT_HARD);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -782,8 +781,7 @@ static void openpic_cpu_write (void *opaque, uint32_t addr, uint32_t val)
|
|||
src = &opp->src[n_IRQ];
|
||||
if (IPVP_PRIORITY(src->ipvp) > dst->servicing.priority) {
|
||||
DPRINTF("Raise CPU IRQ\n");
|
||||
/* XXX: choose cpu */
|
||||
cpu_interrupt(first_cpu, CPU_INTERRUPT_HARD);
|
||||
cpu_interrupt(dst->env, CPU_INTERRUPT_HARD);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -965,7 +963,8 @@ static void openpic_map(PCIDevice *pci_dev, int region_num,
|
|||
#endif
|
||||
}
|
||||
|
||||
openpic_t *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus)
|
||||
openpic_t *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus,
|
||||
CPUPPCState **envp)
|
||||
{
|
||||
openpic_t *opp;
|
||||
uint8_t *pci_conf;
|
||||
|
@ -1019,6 +1018,8 @@ openpic_t *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus)
|
|||
for (; i < MAX_IRQ; i++) {
|
||||
opp->src[i].type = IRQ_INTERNAL;
|
||||
}
|
||||
for (i = 0; i < nb_cpus; i++)
|
||||
opp->dst[i].env = envp[i];
|
||||
openpic_reset(opp);
|
||||
if (pmem_index)
|
||||
*pmem_index = opp->mem_index;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue