Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

arm: Move chained_irq_(enter|exit) to a generic file

These functions have been introduced by commit 10a8c383 (irq: introduce
entry and exit functions for chained handlers) in asm/mach/irq.h. This
patch moves them to linux/irqchip/chained_irq.h so that generic irqchip
drivers do not rely on architecture specific header files.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Tested-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Rob Herring <rob.herring@calxeda.com>

+71 -55
-31
arch/arm/include/asm/mach/irq.h
··· 30 30 raw_spin_unlock(&desc->lock); \ 31 31 } while(0) 32 32 33 - #ifndef __ASSEMBLY__ 34 - /* 35 - * Entry/exit functions for chained handlers where the primary IRQ chip 36 - * may implement either fasteoi or level-trigger flow control. 37 - */ 38 - static inline void chained_irq_enter(struct irq_chip *chip, 39 - struct irq_desc *desc) 40 - { 41 - /* FastEOI controllers require no action on entry. */ 42 - if (chip->irq_eoi) 43 - return; 44 - 45 - if (chip->irq_mask_ack) { 46 - chip->irq_mask_ack(&desc->irq_data); 47 - } else { 48 - chip->irq_mask(&desc->irq_data); 49 - if (chip->irq_ack) 50 - chip->irq_ack(&desc->irq_data); 51 - } 52 - } 53 - 54 - static inline void chained_irq_exit(struct irq_chip *chip, 55 - struct irq_desc *desc) 56 - { 57 - if (chip->irq_eoi) 58 - chip->irq_eoi(&desc->irq_data); 59 - else 60 - chip->irq_unmask(&desc->irq_data); 61 - } 62 - #endif 63 - 64 33 #endif
+1 -2
arch/arm/mach-at91/gpio.c
··· 22 22 #include <linux/module.h> 23 23 #include <linux/io.h> 24 24 #include <linux/irqdomain.h> 25 + #include <linux/irqchip/chained_irq.h> 25 26 #include <linux/of_address.h> 26 - 27 - #include <asm/mach/irq.h> 28 27 29 28 #include <mach/hardware.h> 30 29 #include <mach/at91_pio.h>
+1
arch/arm/mach-exynos/common.c
··· 26 26 #include <linux/irqchip.h> 27 27 #include <linux/of_address.h> 28 28 #include <linux/irqchip/arm-gic.h> 29 + #include <linux/irqchip/chained_irq.h> 29 30 30 31 #include <asm/proc-fns.h> 31 32 #include <asm/exception.h>
+1
arch/arm/mach-s3c24xx/irq.c
··· 25 25 #include <linux/ioport.h> 26 26 #include <linux/device.h> 27 27 #include <linux/irqdomain.h> 28 + #include <linux/irqchip/chained_irq.h> 28 29 29 30 #include <asm/mach/irq.h> 30 31
+1 -2
arch/arm/plat-samsung/irq-vic-timer.c
··· 16 16 #include <linux/kernel.h> 17 17 #include <linux/interrupt.h> 18 18 #include <linux/irq.h> 19 + #include <linux/irqchip/chained_irq.h> 19 20 #include <linux/io.h> 20 21 21 22 #include <mach/map.h> 22 23 #include <plat/cpu.h> 23 24 #include <plat/irq-vic-timer.h> 24 25 #include <plat/regs-timer.h> 25 - 26 - #include <asm/mach/irq.h> 27 26 28 27 static void s3c_irq_demux_vic_timer(unsigned int irq, struct irq_desc *desc) 29 28 {
+1 -2
arch/arm/plat-samsung/s5p-irq-gpioint.c
··· 14 14 #include <linux/kernel.h> 15 15 #include <linux/interrupt.h> 16 16 #include <linux/irq.h> 17 + #include <linux/irqchip/chained_irq.h> 17 18 #include <linux/io.h> 18 19 #include <linux/gpio.h> 19 20 #include <linux/slab.h> ··· 22 21 #include <mach/map.h> 23 22 #include <plat/gpio-core.h> 24 23 #include <plat/gpio-cfg.h> 25 - 26 - #include <asm/mach/irq.h> 27 24 28 25 #define GPIO_BASE(chip) ((void __iomem *)((unsigned long)((chip)->base) & 0xFFFFF000u)) 29 26
+1 -2
drivers/gpio/gpio-msm-v2.c
··· 23 23 #include <linux/init.h> 24 24 #include <linux/interrupt.h> 25 25 #include <linux/io.h> 26 + #include <linux/irqchip/chained_irq.h> 26 27 #include <linux/irq.h> 27 28 #include <linux/module.h> 28 29 #include <linux/platform_device.h> 29 30 #include <linux/spinlock.h> 30 - 31 - #include <asm/mach/irq.h> 32 31 33 32 #include <mach/msm_gpiomux.h> 34 33 #include <mach/msm_iomap.h>
+1 -1
drivers/gpio/gpio-mxc.c
··· 24 24 #include <linux/io.h> 25 25 #include <linux/irq.h> 26 26 #include <linux/irqdomain.h> 27 + #include <linux/irqchip/chained_irq.h> 27 28 #include <linux/gpio.h> 28 29 #include <linux/platform_device.h> 29 30 #include <linux/slab.h> ··· 33 32 #include <linux/of_device.h> 34 33 #include <linux/module.h> 35 34 #include <asm-generic/bug.h> 36 - #include <asm/mach/irq.h> 37 35 38 36 enum mxc_gpio_hwtype { 39 37 IMX1_GPIO, /* runs on i.mx1 */
+1 -2
drivers/gpio/gpio-omap.c
··· 25 25 #include <linux/of.h> 26 26 #include <linux/of_device.h> 27 27 #include <linux/irqdomain.h> 28 + #include <linux/irqchip/chained_irq.h> 28 29 #include <linux/gpio.h> 29 30 #include <linux/platform_data/gpio-omap.h> 30 - 31 - #include <asm/mach/irq.h> 32 31 33 32 #define OFF_MODE 1 34 33
+1 -1
drivers/gpio/gpio-pl061.c
··· 15 15 #include <linux/io.h> 16 16 #include <linux/ioport.h> 17 17 #include <linux/irq.h> 18 + #include <linux/irqchip/chained_irq.h> 18 19 #include <linux/bitops.h> 19 20 #include <linux/workqueue.h> 20 21 #include <linux/gpio.h> ··· 24 23 #include <linux/amba/pl061.h> 25 24 #include <linux/slab.h> 26 25 #include <linux/pm.h> 27 - #include <asm/mach/irq.h> 28 26 29 27 #define GPIODIR 0x400 30 28 #define GPIOIS 0x404
+1 -2
drivers/gpio/gpio-pxa.c
··· 19 19 #include <linux/init.h> 20 20 #include <linux/irq.h> 21 21 #include <linux/irqdomain.h> 22 + #include <linux/irqchip/chained_irq.h> 22 23 #include <linux/io.h> 23 24 #include <linux/of.h> 24 25 #include <linux/of_device.h> 25 26 #include <linux/platform_device.h> 26 27 #include <linux/syscore_ops.h> 27 28 #include <linux/slab.h> 28 - 29 - #include <asm/mach/irq.h> 30 29 31 30 #include <mach/irqs.h> 32 31
+1 -2
drivers/gpio/gpio-tegra.c
··· 27 27 #include <linux/platform_device.h> 28 28 #include <linux/module.h> 29 29 #include <linux/irqdomain.h> 30 + #include <linux/irqchip/chained_irq.h> 30 31 #include <linux/pinctrl/consumer.h> 31 32 #include <linux/pm.h> 32 - 33 - #include <asm/mach/irq.h> 34 33 35 34 #define GPIO_BANK(x) ((x) >> 5) 36 35 #define GPIO_PORT(x) (((x) >> 3) & 0x3)
+1
drivers/irqchip/exynos-combiner.c
··· 13 13 #include <linux/init.h> 14 14 #include <linux/io.h> 15 15 #include <linux/irqdomain.h> 16 + #include <linux/irqchip/chained_irq.h> 16 17 #include <linux/of_address.h> 17 18 #include <linux/of_irq.h> 18 19 #include <asm/mach/irq.h>
+1
drivers/irqchip/irq-gic.c
··· 38 38 #include <linux/interrupt.h> 39 39 #include <linux/percpu.h> 40 40 #include <linux/slab.h> 41 + #include <linux/irqchip/chained_irq.h> 41 42 #include <linux/irqchip/arm-gic.h> 42 43 43 44 #include <asm/irq.h>
+1 -2
drivers/pinctrl/pinctrl-at91.c
··· 18 18 #include <linux/interrupt.h> 19 19 #include <linux/irq.h> 20 20 #include <linux/irqdomain.h> 21 + #include <linux/irqchip/chained_irq.h> 21 22 #include <linux/io.h> 22 23 #include <linux/gpio.h> 23 24 #include <linux/pinctrl/machine.h> ··· 27 26 #include <linux/pinctrl/pinmux.h> 28 27 /* Since we request GPIOs from ourself */ 29 28 #include <linux/pinctrl/consumer.h> 30 - 31 - #include <asm/mach/irq.h> 32 29 33 30 #include <mach/hardware.h> 34 31 #include <mach/at91_pio.h>
+1 -2
drivers/pinctrl/pinctrl-exynos.c
··· 23 23 #include <linux/interrupt.h> 24 24 #include <linux/irqdomain.h> 25 25 #include <linux/irq.h> 26 + #include <linux/irqchip/chained_irq.h> 26 27 #include <linux/of_irq.h> 27 28 #include <linux/io.h> 28 29 #include <linux/slab.h> 29 30 #include <linux/err.h> 30 - 31 - #include <asm/mach/irq.h> 32 31 33 32 #include "pinctrl-samsung.h" 34 33 #include "pinctrl-exynos.h"
+1 -1
drivers/pinctrl/pinctrl-nomadik.c
··· 23 23 #include <linux/interrupt.h> 24 24 #include <linux/irq.h> 25 25 #include <linux/irqdomain.h> 26 + #include <linux/irqchip/chained_irq.h> 26 27 #include <linux/slab.h> 27 28 #include <linux/of_device.h> 28 29 #include <linux/of_address.h> ··· 34 33 /* Since we request GPIOs from ourself */ 35 34 #include <linux/pinctrl/consumer.h> 36 35 #include <linux/platform_data/pinctrl-nomadik.h> 37 - #include <asm/mach/irq.h> 38 36 #include "pinctrl-nomadik.h" 39 37 #include "core.h" 40 38
+1 -1
drivers/pinctrl/pinctrl-sirf.c
··· 14 14 #include <linux/slab.h> 15 15 #include <linux/err.h> 16 16 #include <linux/irqdomain.h> 17 + #include <linux/irqchip/chained_irq.h> 17 18 #include <linux/pinctrl/pinctrl.h> 18 19 #include <linux/pinctrl/pinmux.h> 19 20 #include <linux/pinctrl/consumer.h> ··· 26 25 #include <linux/bitops.h> 27 26 #include <linux/gpio.h> 28 27 #include <linux/of_gpio.h> 29 - #include <asm/mach/irq.h> 30 28 31 29 #define DRIVER_NAME "pinmux-sirf" 32 30
+1 -1
drivers/pinctrl/spear/pinctrl-plgpio.c
··· 15 15 #include <linux/io.h> 16 16 #include <linux/irq.h> 17 17 #include <linux/irqdomain.h> 18 + #include <linux/irqchip/chained_irq.h> 18 19 #include <linux/module.h> 19 20 #include <linux/pinctrl/consumer.h> 20 21 #include <linux/platform_device.h> 21 22 #include <linux/pm.h> 22 23 #include <linux/spinlock.h> 23 - #include <asm/mach/irq.h> 24 24 25 25 #define MAX_GPIO_PER_REG 32 26 26 #define PIN_OFFSET(pin) (pin % MAX_GPIO_PER_REG)
+1 -1
drivers/staging/imx-drm/ipu-v3/ipu-common.c
··· 25 25 #include <linux/clk.h> 26 26 #include <linux/list.h> 27 27 #include <linux/irq.h> 28 + #include <linux/irqchip/chained_irq.h> 28 29 #include <linux/of_device.h> 29 - #include <asm/mach/irq.h> 30 30 31 31 #include "imx-ipu-v3.h" 32 32 #include "ipu-prv.h"
+52
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 */