]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * Generic ARM Programmable Interrupt Controller support. | |
3 | * | |
4 | * Copyright (c) 2006 CodeSourcery. | |
5 | * Written by Paul Brook | |
6 | * | |
7 | * This code is licenced under the LGPL | |
8 | */ | |
9 | ||
10 | #include "hw.h" | |
11 | #include "pc.h" | |
12 | #include "arm-misc.h" | |
13 | ||
14 | /* Stub functions for hardware that doesn't exist. */ | |
15 | void pic_info(Monitor *mon) | |
16 | { | |
17 | } | |
18 | ||
19 | void irq_info(Monitor *mon) | |
20 | { | |
21 | } | |
22 | ||
23 | ||
24 | /* Input 0 is IRQ and input 1 is FIQ. */ | |
25 | static void arm_pic_cpu_handler(void *opaque, int irq, int level) | |
26 | { | |
27 | CPUState *env = (CPUState *)opaque; | |
28 | switch (irq) { | |
29 | case ARM_PIC_CPU_IRQ: | |
30 | if (level) | |
31 | cpu_interrupt(env, CPU_INTERRUPT_HARD); | |
32 | else | |
33 | cpu_reset_interrupt(env, CPU_INTERRUPT_HARD); | |
34 | break; | |
35 | case ARM_PIC_CPU_FIQ: | |
36 | if (level) | |
37 | cpu_interrupt(env, CPU_INTERRUPT_FIQ); | |
38 | else | |
39 | cpu_reset_interrupt(env, CPU_INTERRUPT_FIQ); | |
40 | break; | |
41 | default: | |
42 | hw_error("arm_pic_cpu_handler: Bad interrput line %d\n", irq); | |
43 | } | |
44 | } | |
45 | ||
46 | qemu_irq *arm_pic_init_cpu(CPUState *env) | |
47 | { | |
48 | return qemu_allocate_irqs(arm_pic_cpu_handler, env, 2); | |
49 | } |