/*
 * Copyright (C) 2006 Atmark Techno, Inc.
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License. See the file "COPYING" in the main directory of this archive
 * for more details.
 */

#ifndef _ASM_MICROBLAZE_IRQ_H
#define _ASM_MICROBLAZE_IRQ_H


/*
 * Linux IRQ# is currently offset by one to map to the hardware
 * irq number. So hardware IRQ0 maps to Linux irq 1.
 */
#define NO_IRQ_OFFSET	1
#define IRQ_OFFSET	NO_IRQ_OFFSET
#define NR_IRQS		(32 + IRQ_OFFSET)
#include <asm-generic/irq.h>

/* This type is the placeholder for a hardware interrupt number. It has to
 * be big enough to enclose whatever representation is used by a given
 * platform.
 */
typedef unsigned long irq_hw_number_t;

extern unsigned int nr_irq;

struct pt_regs;
extern void do_IRQ(struct pt_regs *regs);

/** FIXME - not implement
 * irq_dispose_mapping - Unmap an interrupt
 * @virq: linux virq number of the interrupt to unmap
 */
static inline void irq_dispose_mapping(unsigned int virq)
{
	return;
}

struct irq_domain;

/**
 * irq_create_mapping - Map a hardware interrupt into linux virq space
 * @host: host owning this hardware interrupt or NULL for default host
 * @hwirq: hardware irq number in that host space
 *
 * Only one mapping per hardware interrupt is permitted. Returns a linux
 * virq number.
 * If the sense/trigger is to be specified, set_irq_type() should be called
 * on the number returned from that call.
 */
extern unsigned int irq_create_mapping(struct irq_domain *host,
					irq_hw_number_t hwirq);

#endif /* _ASM_MICROBLAZE_IRQ_H */
