/*
 *  linux/include/asm-arm/mach/irq.h
 *
 *  Copyright (C) 1995-2000 Russell King.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#ifndef __ASM_ARM_MACH_IRQ_H
#define __ASM_ARM_MACH_IRQ_H

#include <linux/irq.h>

struct seq_file;

/*
 * This is internal.  Do not use it.
 */
extern void (*init_arch_irq)(void);
extern void init_FIQ(void);
extern int show_fiq_list(struct seq_file *, void *);

/*
 * Function wrappers
 */
#define set_irq_chipdata(irq, d)	set_irq_chip_data(irq, d)
#define get_irq_chipdata(irq)		get_irq_chip_data(irq)

/*
 * Obsolete inline function for calling irq descriptor handlers.
 */
static inline void desc_handle_irq(unsigned int irq, struct irq_desc *desc,
				   struct pt_regs *regs)
{
	desc->handle_irq(irq, desc, regs);
}

void set_irq_flags(unsigned int irq, unsigned int flags);

#define IRQF_VALID	(1 << 0)
#define IRQF_PROBE	(1 << 1)
#define IRQF_NOAUTOEN	(1 << 2)

/*
 * This is for easy migration, but should be changed in the source
 */
#define do_level_IRQ	handle_level_irq
#define do_edge_IRQ	handle_edge_irq
#define do_simple_IRQ	handle_simple_irq
#define irqdesc		irq_desc
#define irqchip		irq_chip

#define do_bad_IRQ(irq,desc,regs)			\
do {							\
	spin_lock(&desc->lock);				\
	handle_bad_irq(irq, desc, regs);		\
	spin_unlock(&desc->lock);			\
} while(0)

extern unsigned long irq_err_count;
static inline void ack_bad_irq(int irq)
{
	irq_err_count++;
}

#endif
