forked from Minki/linux
4a2581a080
Patch from Thomas Gleixner From: Thomas Gleixner <tglx@linutronix.de> Switch the ARM irq core handling to the generic implementation. The ARM specific header files now contain mostly migration stubs and helper macros. Note that each machine type must be converted after this step seperately. This was seperated out from the patch for easier review. The main changes for the machine type code is the conversion of the type handlers to a 'type flow' and 'chip' model. This affects only the multiplex interrupt handlers. A conversion macro needs to be added to those implementations, which defines the data structure which is registered by the set_irq_chained_handler() macro. Some minor fixups of include files and the conversion of data structure access is necessary all over the place. The mostly macro based conversion was provided to allow an easy migration of the existing implementations. The code compiles on all defconfigs available in arch/arm/configs except those which were broken also before applying the conversion patches. The code has been boot and runtime tested on most ARM platforms. The results of an extensive testing and bugfixing series can be found at: http://www.linutronix.de/index.php?page=testing Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
68 lines
1.5 KiB
C
68 lines
1.5 KiB
C
/*
|
|
* 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
|