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