Statistics
| Branch: | Revision:

root / hw / arm_pic.c @ 3a9d8549

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
}