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"
115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "pc.h"
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "arm-misc.h"
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Stub functions for hardware that doesn't exist.  */
155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid pic_info(Monitor *mon)
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid irq_info(Monitor *mon)
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Input 0 is IRQ and input 1 is FIQ.  */
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic void arm_pic_cpu_handler(void *opaque, int irq, int level)
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    CPUState *env = (CPUState *)opaque;
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    switch (irq) {
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case ARM_PIC_CPU_IRQ:
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        if (level)
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            cpu_interrupt(env, CPU_INTERRUPT_HARD);
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        else
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            cpu_reset_interrupt(env, CPU_INTERRUPT_HARD);
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        break;
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case ARM_PIC_CPU_FIQ:
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        if (level)
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            cpu_interrupt(env, CPU_INTERRUPT_FIQ);
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        else
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            cpu_reset_interrupt(env, CPU_INTERRUPT_FIQ);
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        break;
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    default:
425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        hw_error("arm_pic_cpu_handler: Bad interrput line %d\n", irq);
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqemu_irq *arm_pic_init_cpu(CPUState *env)
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    return qemu_allocate_irqs(arm_pic_cpu_handler, env, 2);
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
50