1 /* 2 * Generic ARM Programmable Interrupt Controller support. 3 * 4 * Copyright (c) 2006 CodeSourcery. 5 * Written by Paul Brook 6 * 7 * This code is licenced 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. */ 15 void pic_info(Monitor *mon) 16 { 17 } 18 19 void irq_info(Monitor *mon) 20 { 21 } 22 23 24 /* Input 0 is IRQ and input 1 is FIQ. */ 25 static 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 46 qemu_irq *arm_pic_init_cpu(CPUState *env) 47 { 48 return qemu_allocate_irqs(arm_pic_cpu_handler, env, 2); 49 } 50