root / hw / arm_pic.c @ b4b784fe
History | View | Annotate | Download (1.1 kB)
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 | cdbdb648 | pbrook | * This code is licenced under the LGPL
|
8 | cdbdb648 | pbrook | */
|
9 | cdbdb648 | pbrook | |
10 | 87ecb68b | pbrook | #include "hw.h" |
11 | 376253ec | aliguori | #include "pc.h" |
12 | 87ecb68b | pbrook | #include "arm-misc.h" |
13 | cdbdb648 | pbrook | |
14 | cdbdb648 | pbrook | /* Stub functions for hardware that doesn't exist. */
|
15 | 376253ec | aliguori | void pic_info(Monitor *mon)
|
16 | cdbdb648 | pbrook | { |
17 | cdbdb648 | pbrook | } |
18 | cdbdb648 | pbrook | |
19 | 376253ec | aliguori | void irq_info(Monitor *mon)
|
20 | cdbdb648 | pbrook | { |
21 | cdbdb648 | pbrook | } |
22 | cdbdb648 | pbrook | |
23 | cdbdb648 | pbrook | |
24 | d537cf6c | pbrook | /* Input 0 is IRQ and input 1 is FIQ. */
|
25 | cdbdb648 | pbrook | static void arm_pic_cpu_handler(void *opaque, int irq, int level) |
26 | cdbdb648 | pbrook | { |
27 | d537cf6c | pbrook | CPUState *env = (CPUState *)opaque; |
28 | cdbdb648 | pbrook | switch (irq) {
|
29 | cdbdb648 | pbrook | case ARM_PIC_CPU_IRQ:
|
30 | cdbdb648 | pbrook | if (level)
|
31 | d537cf6c | pbrook | cpu_interrupt(env, CPU_INTERRUPT_HARD); |
32 | cdbdb648 | pbrook | else
|
33 | d537cf6c | pbrook | cpu_reset_interrupt(env, CPU_INTERRUPT_HARD); |
34 | cdbdb648 | pbrook | break;
|
35 | cdbdb648 | pbrook | case ARM_PIC_CPU_FIQ:
|
36 | cdbdb648 | pbrook | if (level)
|
37 | d537cf6c | pbrook | cpu_interrupt(env, CPU_INTERRUPT_FIQ); |
38 | cdbdb648 | pbrook | else
|
39 | d537cf6c | pbrook | cpu_reset_interrupt(env, CPU_INTERRUPT_FIQ); |
40 | cdbdb648 | pbrook | break;
|
41 | cdbdb648 | pbrook | default:
|
42 | 2ac71179 | Paul Brook | hw_error("arm_pic_cpu_handler: Bad interrput line %d\n", irq);
|
43 | cdbdb648 | pbrook | } |
44 | cdbdb648 | pbrook | } |
45 | cdbdb648 | pbrook | |
46 | d537cf6c | pbrook | qemu_irq *arm_pic_init_cpu(CPUState *env) |
47 | cdbdb648 | pbrook | { |
48 | d537cf6c | pbrook | return qemu_allocate_irqs(arm_pic_cpu_handler, env, 2); |
49 | cdbdb648 | pbrook | } |