root / hw / arm_pic.c @ a1e47211
History | View | Annotate | Download (963 Bytes)
1 | 5fafdf24 | ths | /*
|
---|---|---|---|
2 | cdbdb648 | pbrook | * Generic ARM Programmable Interrupt Controller support.
|
3 | cdbdb648 | pbrook | *
|
4 | cdbdb648 | pbrook | * Copyright (c) 2006 CodeSourcery.
|
5 | cdbdb648 | pbrook | * Written by Paul Brook
|
6 | cdbdb648 | pbrook | *
|
7 | 8e31bf38 | Matthew Fernandez | * This code is licensed under the LGPL
|
8 | cdbdb648 | pbrook | */
|
9 | cdbdb648 | pbrook | |
10 | 87ecb68b | pbrook | #include "hw.h" |
11 | 87ecb68b | pbrook | #include "arm-misc.h" |
12 | cdbdb648 | pbrook | |
13 | d537cf6c | pbrook | /* Input 0 is IRQ and input 1 is FIQ. */
|
14 | cdbdb648 | pbrook | static void arm_pic_cpu_handler(void *opaque, int irq, int level) |
15 | cdbdb648 | pbrook | { |
16 | 4bd74661 | Andreas Färber | ARMCPU *cpu = opaque; |
17 | 4bd74661 | Andreas Färber | CPUARMState *env = &cpu->env; |
18 | 4bd74661 | Andreas Färber | |
19 | cdbdb648 | pbrook | switch (irq) {
|
20 | cdbdb648 | pbrook | case ARM_PIC_CPU_IRQ:
|
21 | cdbdb648 | pbrook | if (level)
|
22 | d537cf6c | pbrook | cpu_interrupt(env, CPU_INTERRUPT_HARD); |
23 | cdbdb648 | pbrook | else
|
24 | d537cf6c | pbrook | cpu_reset_interrupt(env, CPU_INTERRUPT_HARD); |
25 | cdbdb648 | pbrook | break;
|
26 | cdbdb648 | pbrook | case ARM_PIC_CPU_FIQ:
|
27 | cdbdb648 | pbrook | if (level)
|
28 | d537cf6c | pbrook | cpu_interrupt(env, CPU_INTERRUPT_FIQ); |
29 | cdbdb648 | pbrook | else
|
30 | d537cf6c | pbrook | cpu_reset_interrupt(env, CPU_INTERRUPT_FIQ); |
31 | cdbdb648 | pbrook | break;
|
32 | cdbdb648 | pbrook | default:
|
33 | 47601f22 | Andreas Färber | hw_error("arm_pic_cpu_handler: Bad interrupt line %d\n", irq);
|
34 | cdbdb648 | pbrook | } |
35 | cdbdb648 | pbrook | } |
36 | cdbdb648 | pbrook | |
37 | 4bd74661 | Andreas Färber | qemu_irq *arm_pic_init_cpu(ARMCPU *cpu) |
38 | cdbdb648 | pbrook | { |
39 | 4bd74661 | Andreas Färber | return qemu_allocate_irqs(arm_pic_cpu_handler, cpu, 2); |
40 | cdbdb648 | pbrook | } |