1/* 2 * Generic ARM Programmable Interrupt Controller support. 3 * 4 * Copyright (c) 2006 CodeSourcery. 5 * Written by Paul Brook 6 * 7 * This code is licensed under the LGPL 8 */ 9 10#include "hw.h" 11#include "pc.h" 12#include "arm-misc.h" 13 14/* Stub functions for hardware that doesn't exist. */ 15void pic_info(Monitor *mon) 16{ 17} 18 19void irq_info(Monitor *mon) 20{ 21} 22 23 24/* Input 0 is IRQ and input 1 is FIQ. */ 25static void arm_pic_cpu_handler(void *opaque, int irq, int level) 26{ 27 CPUState *env = (CPUState *)opaque; 28 switch (irq) { 29 case ARM_PIC_CPU_IRQ: 30 if (level) 31 cpu_interrupt(env, CPU_INTERRUPT_HARD); 32 else 33 cpu_reset_interrupt(env, CPU_INTERRUPT_HARD); 34 break; 35 case ARM_PIC_CPU_FIQ: 36 if (level) 37 cpu_interrupt(env, CPU_INTERRUPT_FIQ); 38 else 39 cpu_reset_interrupt(env, CPU_INTERRUPT_FIQ); 40 break; 41 default: 42 hw_error("arm_pic_cpu_handler: Bad interrput line %d\n", irq); 43 } 44} 45 46qemu_irq *arm_pic_init_cpu(CPUState *env) 47{ 48 return qemu_allocate_irqs(arm_pic_cpu_handler, env, 2); 49} 50