Linux Audio

Check our new training course

Loading...
/*
 * 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