4
* Copyright (c) 2016 Marek Vasut <marek.vasut@gmail.com>
6
* This library is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
11
* This library is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with this library; if not, see
18
* <http://www.gnu.org/licenses/lgpl-2.1.html>
21
#include "qemu/osdep.h"
22
#include "qapi/error.h"
23
#include "qemu-common.h"
26
#include "qemu/config-file.h"
30
static void nios2_pic_cpu_handler(void *opaque, int irq, int level)
32
Nios2CPU *cpu = opaque;
33
CPUNios2State *env = &cpu->env;
34
CPUState *cs = CPU(cpu);
35
int type = irq ? CPU_INTERRUPT_NMI : CPU_INTERRUPT_HARD;
37
if (type == CPU_INTERRUPT_HARD) {
38
env->irq_pending = level;
40
if (level && (env->regs[CR_STATUS] & CR_STATUS_PIE)) {
42
cpu_interrupt(cs, type);
45
cpu_reset_interrupt(cs, type);
49
cpu_interrupt(cs, type);
51
cpu_reset_interrupt(cs, type);
56
void nios2_check_interrupts(CPUNios2State *env)
58
Nios2CPU *cpu = nios2_env_get_cpu(env);
59
CPUState *cs = CPU(cpu);
61
if (env->irq_pending) {
63
cpu_interrupt(cs, CPU_INTERRUPT_HARD);
67
qemu_irq *nios2_cpu_pic_init(Nios2CPU *cpu)
69
return qemu_allocate_irqs(nios2_pic_cpu_handler, cpu, 2);