Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
irq.h
Go to the documentation of this file.
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(int);
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