Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / include / linux / irqchip / chained_irq.h
1 /*
2  * Chained IRQ handlers support.
3  *
4  * Copyright (C) 2011 ARM Ltd.
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  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 #ifndef __IRQCHIP_CHAINED_IRQ_H
19 #define __IRQCHIP_CHAINED_IRQ_H
20
21 #include <linux/irq.h>
22
23 /*
24  * Entry/exit functions for chained handlers where the primary IRQ chip
25  * may implement either fasteoi or level-trigger flow control.
26  */
27 static inline void chained_irq_enter(struct irq_chip *chip,
28                                      struct irq_desc *desc)
29 {
30         /* FastEOI controllers require no action on entry. */
31         if (chip->irq_eoi)
32                 return;
33
34         if (chip->irq_mask_ack) {
35                 chip->irq_mask_ack(&desc->irq_data);
36         } else {
37                 chip->irq_mask(&desc->irq_data);
38                 if (chip->irq_ack)
39                         chip->irq_ack(&desc->irq_data);
40         }
41 }
42
43 static inline void chained_irq_exit(struct irq_chip *chip,
44                                     struct irq_desc *desc)
45 {
46         if (chip->irq_eoi)
47                 chip->irq_eoi(&desc->irq_data);
48         else
49                 chip->irq_unmask(&desc->irq_data);
50 }
51
52 #endif /* __IRQCHIP_CHAINED_IRQ_H */