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