root / hw / arm_pic.c @ cf4dc461
History | View | Annotate | Download (944 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 | d537cf6c | pbrook | CPUState *env = (CPUState *)opaque; |
17 | cdbdb648 | pbrook | switch (irq) {
|
18 | cdbdb648 | pbrook | case ARM_PIC_CPU_IRQ:
|
19 | cdbdb648 | pbrook | if (level)
|
20 | d537cf6c | pbrook | cpu_interrupt(env, CPU_INTERRUPT_HARD); |
21 | cdbdb648 | pbrook | else
|
22 | d537cf6c | pbrook | cpu_reset_interrupt(env, CPU_INTERRUPT_HARD); |
23 | cdbdb648 | pbrook | break;
|
24 | cdbdb648 | pbrook | case ARM_PIC_CPU_FIQ:
|
25 | cdbdb648 | pbrook | if (level)
|
26 | d537cf6c | pbrook | cpu_interrupt(env, CPU_INTERRUPT_FIQ); |
27 | cdbdb648 | pbrook | else
|
28 | d537cf6c | pbrook | cpu_reset_interrupt(env, CPU_INTERRUPT_FIQ); |
29 | cdbdb648 | pbrook | break;
|
30 | cdbdb648 | pbrook | default:
|
31 | 47601f22 | Andreas Färber | hw_error("arm_pic_cpu_handler: Bad interrupt line %d\n", irq);
|
32 | cdbdb648 | pbrook | } |
33 | cdbdb648 | pbrook | } |
34 | cdbdb648 | pbrook | |
35 | d537cf6c | pbrook | qemu_irq *arm_pic_init_cpu(CPUState *env) |
36 | cdbdb648 | pbrook | { |
37 | d537cf6c | pbrook | return qemu_allocate_irqs(arm_pic_cpu_handler, env, 2); |
38 | cdbdb648 | pbrook | } |