/*
 * Copyright (c) 2016 Cadence Design Systems, Inc.
 * SPDX-License-Identifier: Apache-2.0
 */

#include <kernel.h>
#include <irq_offload.h>
#include <arch/xtensa/arch.h>
#include <xtensa_api.h>

/*
 * Xtensa core should support software interrupt in order to allow using
 * irq_offload feature
 */

static irq_offload_routine_t offload_routine;
static void *offload_param;

/* Called by ISR dispatcher */
void _irq_do_offload(void *unused)
{
	ARG_UNUSED(unused);
	offload_routine(offload_param);
}

void irq_offload(irq_offload_routine_t routine, void *parameter)
{
	IRQ_CONNECT(CONFIG_IRQ_OFFLOAD_INTNUM, XCHAL_EXCM_LEVEL,
		_irq_do_offload, NULL, 0);
	_arch_irq_disable(CONFIG_IRQ_OFFLOAD_INTNUM);
	offload_routine = routine;
	offload_param = parameter;
	_xt_set_intset(1 << CONFIG_IRQ_OFFLOAD_INTNUM);
	/*
	 * Enable the software interrupt, in case it is disabled, so that IRQ
	 * offload is serviced.
	 */
	_arch_irq_enable(CONFIG_IRQ_OFFLOAD_INTNUM);
}
