/*
 * MIPS CPU interrupt support.
 *
 */

#include "hw/hw.h"

/* Stub functions for hardware that don't exist.  */
void pic_info(void)
{
}

void irq_info(void)
{
}

static void mips_cpu_irq_handler(void *opaque, int irq, int level)
{
    CPUState *cs = opaque;
    CPUArchState *env = cs->env_ptr;
    int causebit;

    if (irq < 0 || 7 < irq)
        cpu_abort(cs, "mips_pic_cpu_handler: Bad interrupt line %d\n",
                  irq);

    causebit = 0x00000100 << irq;
    if (level) {
        env->CP0_Cause |= causebit;
        cpu_interrupt(cs, CPU_INTERRUPT_HARD);
    } else {
        env->CP0_Cause &= ~causebit;
        cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
    }
}

qemu_irq *mips_cpu_irq_init(CPUArchState *env)
{
    return qemu_allocate_irqs(mips_cpu_irq_handler, ENV_GET_CPU(env), 8);
}
