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 102ec695af7284adbedcdbc08a22d818b6bdd8990cDavid 'Digit' Turner#include "hw/hw.h" 112ec695af7284adbedcdbc08a22d818b6bdd8990cDavid 'Digit' Turner#include "hw/i386/pc.h" 1262fba4882dbb1bea4f69e0b543cb90acee84742fDavid 'Digit' Turner#include "hw/arm/arm.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{ 27e2678e116c8cdb0f36b247a5bd9cfacc849362fcDavid 'Digit' Turner CPUOldState *env = (CPUOldState *)opaque; 28bf7a22f3a6c38d359d2e933dec4706d1c7375f0aDavid 'Digit' Turner CPUState *cpu = ENV_GET_CPU(env); 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project switch (irq) { 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project case ARM_PIC_CPU_IRQ: 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (level) 32bf7a22f3a6c38d359d2e933dec4706d1c7375f0aDavid 'Digit' Turner cpu_interrupt(cpu, CPU_INTERRUPT_HARD); 338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project else 34bf7a22f3a6c38d359d2e933dec4706d1c7375f0aDavid 'Digit' Turner cpu_reset_interrupt(cpu, CPU_INTERRUPT_HARD); 358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project break; 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project case ARM_PIC_CPU_FIQ: 378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (level) 38bf7a22f3a6c38d359d2e933dec4706d1c7375f0aDavid 'Digit' Turner cpu_interrupt(cpu, CPU_INTERRUPT_FIQ); 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project else 40bf7a22f3a6c38d359d2e933dec4706d1c7375f0aDavid 'Digit' Turner cpu_reset_interrupt(cpu, CPU_INTERRUPT_FIQ); 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project break; 428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project default: 435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner hw_error("arm_pic_cpu_handler: Bad interrput line %d\n", irq); 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 47e2678e116c8cdb0f36b247a5bd9cfacc849362fcDavid 'Digit' Turnerqemu_irq *arm_pic_init_cpu(CPUOldState *env) 488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return qemu_allocate_irqs(arm_pic_cpu_handler, env, 2); 508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 51