diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
commit | 55f4e4a5ec657a017e3bf75299ad71fd1c968dd3 (patch) | |
tree | 550ce922ea0e125ac6a9738210ce2939bf2fe901 /hw/arm_pic.c | |
parent | 413f05aaf54fa08c0ae7e997327a4f4a473c0a8d (diff) | |
download | external_qemu-55f4e4a5ec657a017e3bf75299ad71fd1c968dd3.zip external_qemu-55f4e4a5ec657a017e3bf75299ad71fd1c968dd3.tar.gz external_qemu-55f4e4a5ec657a017e3bf75299ad71fd1c968dd3.tar.bz2 |
Initial Contribution
Diffstat (limited to 'hw/arm_pic.c')
-rw-r--r-- | hw/arm_pic.c | 43 |
1 files changed, 9 insertions, 34 deletions
diff --git a/hw/arm_pic.c b/hw/arm_pic.c index fbc2d67..c228c04 100644 --- a/hw/arm_pic.c +++ b/hw/arm_pic.c @@ -11,11 +11,6 @@ #include "arm_pic.h" /* Stub functions for hardware that doesn't exist. */ -void pic_set_irq(int irq, int level) -{ - cpu_abort(cpu_single_env, "pic_set_irq"); -} - void pic_info(void) { } @@ -24,50 +19,30 @@ void irq_info(void) { } - -void pic_set_irq_new(void *opaque, int irq, int level) -{ - arm_pic_handler *p = (arm_pic_handler *)opaque; - /* Call the real handler. */ - (*p)(opaque, irq, level); -} - -/* Model the IRQ/FIQ CPU interrupt lines as a two input interrupt controller. - Input 0 is IRQ and input 1 is FIQ. */ -typedef struct -{ - arm_pic_handler handler; - CPUState *cpu_env; -} arm_pic_cpu_state; - +/* Input 0 is IRQ and input 1 is FIQ */ static void arm_pic_cpu_handler(void *opaque, int irq, int level) { - arm_pic_cpu_state *s = (arm_pic_cpu_state *)opaque; + CPUState *env = (CPUState *)opaque; switch (irq) { case ARM_PIC_CPU_IRQ: if (level) - cpu_interrupt(s->cpu_env, CPU_INTERRUPT_HARD); + cpu_interrupt(env, CPU_INTERRUPT_HARD); else - cpu_reset_interrupt(s->cpu_env, CPU_INTERRUPT_HARD); + cpu_reset_interrupt(env, CPU_INTERRUPT_HARD); break; case ARM_PIC_CPU_FIQ: if (level) - cpu_interrupt(s->cpu_env, CPU_INTERRUPT_FIQ); + cpu_interrupt(env, CPU_INTERRUPT_FIQ); else - cpu_reset_interrupt(s->cpu_env, CPU_INTERRUPT_FIQ); + cpu_reset_interrupt(env, CPU_INTERRUPT_FIQ); break; default: - cpu_abort(s->cpu_env, "arm_pic_cpu_handler: Bad interrput line %d\n", + cpu_abort(env, "arm_pic_cpu_handler: Bad interrput line %d\n", irq); } } -void *arm_pic_init_cpu(CPUState *env) +qemu_irq *arm_pic_init_cpu(CPUState *env) { - arm_pic_cpu_state *s; - - s = (arm_pic_cpu_state *)malloc(sizeof(arm_pic_cpu_state)); - s->handler = arm_pic_cpu_handler; - s->cpu_env = env; - return s; + return qemu_allocate_irqs(arm_pic_cpu_handler, env, 2); } |