]> git.proxmox.com Git - qemu.git/blame - hw/arm/pic_cpu.c
arm: fix location of some include files
[qemu.git] / hw / arm / pic_cpu.c
CommitLineData
5fafdf24 1/*
cdbdb648
PB
2 * Generic ARM Programmable Interrupt Controller support.
3 *
4 * Copyright (c) 2006 CodeSourcery.
5 * Written by Paul Brook
6 *
8e31bf38 7 * This code is licensed under the LGPL
cdbdb648
PB
8 */
9
83c9f4ca 10#include "hw/hw.h"
bd2be150 11#include "hw/arm/arm.h"
494b00c7 12#include "sysemu/kvm.h"
cdbdb648 13
d537cf6c 14/* Input 0 is IRQ and input 1 is FIQ. */
cdbdb648
PB
15static void arm_pic_cpu_handler(void *opaque, int irq, int level)
16{
4bd74661 17 ARMCPU *cpu = opaque;
d8ed887b 18 CPUState *cs = CPU(cpu);
4bd74661 19
cdbdb648
PB
20 switch (irq) {
21 case ARM_PIC_CPU_IRQ:
d8ed887b 22 if (level) {
c3affe56 23 cpu_interrupt(cs, CPU_INTERRUPT_HARD);
d8ed887b
AF
24 } else {
25 cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
26 }
cdbdb648
PB
27 break;
28 case ARM_PIC_CPU_FIQ:
d8ed887b 29 if (level) {
c3affe56 30 cpu_interrupt(cs, CPU_INTERRUPT_FIQ);
d8ed887b
AF
31 } else {
32 cpu_reset_interrupt(cs, CPU_INTERRUPT_FIQ);
33 }
cdbdb648
PB
34 break;
35 default:
47601f22 36 hw_error("arm_pic_cpu_handler: Bad interrupt line %d\n", irq);
cdbdb648
PB
37 }
38}
39
494b00c7
CD
40static void kvm_arm_pic_cpu_handler(void *opaque, int irq, int level)
41{
42#ifdef CONFIG_KVM
43 ARMCPU *cpu = opaque;
44 CPUState *cs = CPU(cpu);
45 int kvm_irq = KVM_ARM_IRQ_TYPE_CPU << KVM_ARM_IRQ_TYPE_SHIFT;
46
47 switch (irq) {
48 case ARM_PIC_CPU_IRQ:
49 kvm_irq |= KVM_ARM_IRQ_CPU_IRQ;
50 break;
51 case ARM_PIC_CPU_FIQ:
52 kvm_irq |= KVM_ARM_IRQ_CPU_FIQ;
53 break;
54 default:
55 hw_error("kvm_arm_pic_cpu_handler: Bad interrupt line %d\n", irq);
56 }
57 kvm_irq |= cs->cpu_index << KVM_ARM_IRQ_VCPU_SHIFT;
58 kvm_set_irq(kvm_state, kvm_irq, level ? 1 : 0);
59#endif
60}
61
4bd74661 62qemu_irq *arm_pic_init_cpu(ARMCPU *cpu)
cdbdb648 63{
494b00c7
CD
64 if (kvm_enabled()) {
65 return qemu_allocate_irqs(kvm_arm_pic_cpu_handler, cpu, 2);
66 }
4bd74661 67 return qemu_allocate_irqs(arm_pic_cpu_handler, cpu, 2);
cdbdb648 68}