/*
 * (C) Copyright 2007 Michal Simek
 *
 * Michal  SIMEK <monstr@monstr.cz>
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */

typedef volatile struct microblaze_intc_t {
	int isr; /* interrupt status register */
	int ipr; /* interrupt pending register */
	int ier; /* interrupt enable register */
	int iar; /* interrupt acknowledge register */
	int sie; /* set interrupt enable bits */
	int cie; /* clear interrupt enable bits */
	int ivr; /* interrupt vector register */
	int mer; /* master enable register */
} microblaze_intc_t;

struct irq_action {
	interrupt_handler_t *handler; /* pointer to interrupt rutine */
	void *arg;
	int count; /* number of interrupt */
};

/**
 * Register and unregister interrupt handler rutines
 *
 * @param irq	IRQ number
 * @param hdlr	Interrupt handler rutine
 * @param arg	Pointer to argument which is passed to int. handler rutine
 * @return	0 if registration pass, 1 if unregistration pass,
 *		or an error code < 0 otherwise
 */
int install_interrupt_handler(int irq, interrupt_handler_t *hdlr,
				       void *arg);

int interrupts_init(void);
