/*
 * Copyright (c) 2016 Jean-Paul Etienne <fractalclone@gmail.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * @file
 * @brief pulpino interrupt management code
 */
#include <irq.h>
#include <soc.h>

void _arch_irq_enable(unsigned int irq)
{
	int key;

	key = irq_lock();
	/*
	 * enable both IRQ and Event
	 * Event will allow system to wakeup upon an interrupt,
	 * if CPU was set to sleep
	 */
	PULP_IER |= (1 << irq);
	PULP_EER |= (1 << irq);
	irq_unlock(key);
};

void _arch_irq_disable(unsigned int irq)
{
	int key;

	key = irq_lock();
	PULP_IER &= ~(1 << irq);
	PULP_EER &= ~(1 << irq);
	irq_unlock(key);
};

int _arch_irq_is_enabled(unsigned int irq)
{
	return !!(PULP_IER & (1 << irq));
}

#if defined(CONFIG_RISCV_SOC_INTERRUPT_INIT)
void soc_interrupt_init(void)
{
	/* ensure that all interrupts are disabled */
	(void)irq_lock();
	PULP_IER = 0;
	PULP_EER = 0;
}
#endif
