1 /* 2 * arch/arm/include/asm/mach/irq.h 3 * 4 * Copyright (C) 1995-2000 Russell King. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 */ 10 #ifndef __ASM_ARM_MACH_IRQ_H 11 #define __ASM_ARM_MACH_IRQ_H 12 13 #include <linux/irq.h> 14 15 struct seq_file; 16 17 /* 18 * This is internal. Do not use it. 19 */ 20 extern void init_FIQ(void); 21 extern int show_fiq_list(struct seq_file *, int); 22 23 #ifdef CONFIG_MULTI_IRQ_HANDLER 24 extern void (*handle_arch_irq)(struct pt_regs *); 25 #endif 26 27 /* 28 * This is for easy migration, but should be changed in the source 29 */ 30 #define do_bad_IRQ(irq,desc) \ 31 do { \ 32 raw_spin_lock(&desc->lock); \ 33 handle_bad_irq(irq, desc); \ 34 raw_spin_unlock(&desc->lock); \ 35 } while(0) 36 37 #ifndef __ASSEMBLY__ 38 /* 39 * Entry/exit functions for chained handlers where the primary IRQ chip 40 * may implement either fasteoi or level-trigger flow control. 41 */ 42 static inline void chained_irq_enter(struct irq_chip *chip, 43 struct irq_desc *desc) 44 { 45 /* FastEOI controllers require no action on entry. */ 46 if (chip->irq_eoi) 47 return; 48 49 if (chip->irq_mask_ack) { 50 chip->irq_mask_ack(&desc->irq_data); 51 } else { 52 chip->irq_mask(&desc->irq_data); 53 if (chip->irq_ack) 54 chip->irq_ack(&desc->irq_data); 55 } 56 } 57 58 static inline void chained_irq_exit(struct irq_chip *chip, 59 struct irq_desc *desc) 60 { 61 if (chip->irq_eoi) 62 chip->irq_eoi(&desc->irq_data); 63 else 64 chip->irq_unmask(&desc->irq_data); 65 } 66 #endif 67 68 #endif 69