arm_pic.c revision 8b23a6c7e1aee255004dd19098d4c2462b61b849
18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/*
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Generic ARM Programmable Interrupt Controller support.
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Copyright (c) 2006 CodeSourcery.
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Written by Paul Brook
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * This code is licenced under the LGPL
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "hw.h"
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "arm-misc.h"
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Stub functions for hardware that doesn't exist.  */
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid pic_info(void)
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid irq_info(void)
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Input 0 is IRQ and input 1 is FIQ.  */
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic void arm_pic_cpu_handler(void *opaque, int irq, int level)
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    CPUState *env = (CPUState *)opaque;
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    switch (irq) {
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case ARM_PIC_CPU_IRQ:
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        if (level)
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            cpu_interrupt(env, CPU_INTERRUPT_HARD);
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        else
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            cpu_reset_interrupt(env, CPU_INTERRUPT_HARD);
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        break;
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case ARM_PIC_CPU_FIQ:
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        if (level)
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            cpu_interrupt(env, CPU_INTERRUPT_FIQ);
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        else
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            cpu_reset_interrupt(env, CPU_INTERRUPT_FIQ);
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        break;
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    default:
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        cpu_abort(env, "arm_pic_cpu_handler: Bad interrput line %d\n", irq);
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqemu_irq *arm_pic_init_cpu(CPUState *env)
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    return qemu_allocate_irqs(arm_pic_cpu_handler, env, 2);
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
49