diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/hardirq.h | 2 | ||||
| -rw-r--r-- | include/linux/interrupt.h | 18 | ||||
| -rw-r--r-- | include/linux/irq.h | 7 | ||||
| -rw-r--r-- | include/linux/irqchip/arm-gic.h | 7 | ||||
| -rw-r--r-- | include/linux/irqchip/irq-crossbar.h | 11 | ||||
| -rw-r--r-- | include/linux/irqchip/mips-gic.h | 2 | ||||
| -rw-r--r-- | include/linux/irqflags.h | 43 |
7 files changed, 48 insertions, 42 deletions
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index cba442ec3c66..f4af03404b97 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | 9 | ||
| 10 | 10 | ||
| 11 | extern void synchronize_irq(unsigned int irq); | 11 | extern void synchronize_irq(unsigned int irq); |
| 12 | extern void synchronize_hardirq(unsigned int irq); | 12 | extern bool synchronize_hardirq(unsigned int irq); |
| 13 | 13 | ||
| 14 | #if defined(CONFIG_TINY_RCU) | 14 | #if defined(CONFIG_TINY_RCU) |
| 15 | 15 | ||
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 2e88580194f0..950ae4501826 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -39,8 +39,6 @@ | |||
| 39 | * These flags used only by the kernel as part of the | 39 | * These flags used only by the kernel as part of the |
| 40 | * irq handling routines. | 40 | * irq handling routines. |
| 41 | * | 41 | * |
| 42 | * IRQF_DISABLED - keep irqs disabled when calling the action handler. | ||
| 43 | * DEPRECATED. This flag is a NOOP and scheduled to be removed | ||
| 44 | * IRQF_SHARED - allow sharing the irq among several devices | 42 | * IRQF_SHARED - allow sharing the irq among several devices |
| 45 | * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur | 43 | * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur |
| 46 | * IRQF_TIMER - Flag to mark this interrupt as timer interrupt | 44 | * IRQF_TIMER - Flag to mark this interrupt as timer interrupt |
| @@ -64,7 +62,6 @@ | |||
| 64 | * wakeup devices users need to implement wakeup detection in | 62 | * wakeup devices users need to implement wakeup detection in |
| 65 | * their interrupt handlers. | 63 | * their interrupt handlers. |
| 66 | */ | 64 | */ |
| 67 | #define IRQF_DISABLED 0x00000020 | ||
| 68 | #define IRQF_SHARED 0x00000080 | 65 | #define IRQF_SHARED 0x00000080 |
| 69 | #define IRQF_PROBE_SHARED 0x00000100 | 66 | #define IRQF_PROBE_SHARED 0x00000100 |
| 70 | #define __IRQF_TIMER 0x00000200 | 67 | #define __IRQF_TIMER 0x00000200 |
| @@ -191,6 +188,7 @@ extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id); | |||
| 191 | #endif | 188 | #endif |
| 192 | 189 | ||
| 193 | extern void disable_irq_nosync(unsigned int irq); | 190 | extern void disable_irq_nosync(unsigned int irq); |
| 191 | extern bool disable_hardirq(unsigned int irq); | ||
| 194 | extern void disable_irq(unsigned int irq); | 192 | extern void disable_irq(unsigned int irq); |
| 195 | extern void disable_percpu_irq(unsigned int irq); | 193 | extern void disable_percpu_irq(unsigned int irq); |
| 196 | extern void enable_irq(unsigned int irq); | 194 | extern void enable_irq(unsigned int irq); |
| @@ -363,6 +361,20 @@ static inline int disable_irq_wake(unsigned int irq) | |||
| 363 | return irq_set_irq_wake(irq, 0); | 361 | return irq_set_irq_wake(irq, 0); |
| 364 | } | 362 | } |
| 365 | 363 | ||
| 364 | /* | ||
| 365 | * irq_get_irqchip_state/irq_set_irqchip_state specific flags | ||
| 366 | */ | ||
| 367 | enum irqchip_irq_state { | ||
| 368 | IRQCHIP_STATE_PENDING, /* Is interrupt pending? */ | ||
| 369 | IRQCHIP_STATE_ACTIVE, /* Is interrupt in progress? */ | ||
| 370 | IRQCHIP_STATE_MASKED, /* Is interrupt masked? */ | ||
| 371 | IRQCHIP_STATE_LINE_LEVEL, /* Is IRQ line high? */ | ||
| 372 | }; | ||
| 373 | |||
| 374 | extern int irq_get_irqchip_state(unsigned int irq, enum irqchip_irq_state which, | ||
| 375 | bool *state); | ||
| 376 | extern int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which, | ||
| 377 | bool state); | ||
| 366 | 378 | ||
| 367 | #ifdef CONFIG_IRQ_FORCED_THREADING | 379 | #ifdef CONFIG_IRQ_FORCED_THREADING |
| 368 | extern bool force_irqthreads; | 380 | extern bool force_irqthreads; |
diff --git a/include/linux/irq.h b/include/linux/irq.h index d09ec7a1243e..62c6901cab55 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | struct seq_file; | 30 | struct seq_file; |
| 31 | struct module; | 31 | struct module; |
| 32 | struct msi_msg; | 32 | struct msi_msg; |
| 33 | enum irqchip_irq_state; | ||
| 33 | 34 | ||
| 34 | /* | 35 | /* |
| 35 | * IRQ line status. | 36 | * IRQ line status. |
| @@ -324,6 +325,8 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d) | |||
| 324 | * irq_request_resources | 325 | * irq_request_resources |
| 325 | * @irq_compose_msi_msg: optional to compose message content for MSI | 326 | * @irq_compose_msi_msg: optional to compose message content for MSI |
| 326 | * @irq_write_msi_msg: optional to write message content for MSI | 327 | * @irq_write_msi_msg: optional to write message content for MSI |
| 328 | * @irq_get_irqchip_state: return the internal state of an interrupt | ||
| 329 | * @irq_set_irqchip_state: set the internal state of a interrupt | ||
| 327 | * @flags: chip specific flags | 330 | * @flags: chip specific flags |
| 328 | */ | 331 | */ |
| 329 | struct irq_chip { | 332 | struct irq_chip { |
| @@ -363,6 +366,9 @@ struct irq_chip { | |||
| 363 | void (*irq_compose_msi_msg)(struct irq_data *data, struct msi_msg *msg); | 366 | void (*irq_compose_msi_msg)(struct irq_data *data, struct msi_msg *msg); |
| 364 | void (*irq_write_msi_msg)(struct irq_data *data, struct msi_msg *msg); | 367 | void (*irq_write_msi_msg)(struct irq_data *data, struct msi_msg *msg); |
| 365 | 368 | ||
| 369 | int (*irq_get_irqchip_state)(struct irq_data *data, enum irqchip_irq_state which, bool *state); | ||
| 370 | int (*irq_set_irqchip_state)(struct irq_data *data, enum irqchip_irq_state which, bool state); | ||
| 371 | |||
| 366 | unsigned long flags; | 372 | unsigned long flags; |
| 367 | }; | 373 | }; |
| 368 | 374 | ||
| @@ -460,6 +466,7 @@ extern void irq_chip_eoi_parent(struct irq_data *data); | |||
| 460 | extern int irq_chip_set_affinity_parent(struct irq_data *data, | 466 | extern int irq_chip_set_affinity_parent(struct irq_data *data, |
| 461 | const struct cpumask *dest, | 467 | const struct cpumask *dest, |
| 462 | bool force); | 468 | bool force); |
| 469 | extern int irq_chip_set_wake_parent(struct irq_data *data, unsigned int on); | ||
| 463 | #endif | 470 | #endif |
| 464 | 471 | ||
| 465 | /* Handling of unhandled and spurious interrupts: */ | 472 | /* Handling of unhandled and spurious interrupts: */ |
diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h index 71d706d5f169..36ec4ae74634 100644 --- a/include/linux/irqchip/arm-gic.h +++ b/include/linux/irqchip/arm-gic.h | |||
| @@ -97,6 +97,7 @@ struct device_node; | |||
| 97 | 97 | ||
| 98 | extern struct irq_chip gic_arch_extn; | 98 | extern struct irq_chip gic_arch_extn; |
| 99 | 99 | ||
| 100 | void gic_set_irqchip_flags(unsigned long flags); | ||
| 100 | void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *, | 101 | void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *, |
| 101 | u32 offset, struct device_node *); | 102 | u32 offset, struct device_node *); |
| 102 | void gic_cascade_irq(unsigned int gic_nr, unsigned int irq); | 103 | void gic_cascade_irq(unsigned int gic_nr, unsigned int irq); |
| @@ -115,11 +116,5 @@ int gic_get_cpu_id(unsigned int cpu); | |||
| 115 | void gic_migrate_target(unsigned int new_cpu_id); | 116 | void gic_migrate_target(unsigned int new_cpu_id); |
| 116 | unsigned long gic_get_sgir_physaddr(void); | 117 | unsigned long gic_get_sgir_physaddr(void); |
| 117 | 118 | ||
| 118 | extern const struct irq_domain_ops *gic_routable_irq_domain_ops; | ||
| 119 | static inline void __init register_routable_domain_ops | ||
| 120 | (const struct irq_domain_ops *ops) | ||
| 121 | { | ||
| 122 | gic_routable_irq_domain_ops = ops; | ||
| 123 | } | ||
| 124 | #endif /* __ASSEMBLY */ | 119 | #endif /* __ASSEMBLY */ |
| 125 | #endif | 120 | #endif |
diff --git a/include/linux/irqchip/irq-crossbar.h b/include/linux/irqchip/irq-crossbar.h deleted file mode 100644 index e5537b81df8d..000000000000 --- a/include/linux/irqchip/irq-crossbar.h +++ /dev/null | |||
| @@ -1,11 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * drivers/irqchip/irq-crossbar.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com | ||
| 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 | */ | ||
| 11 | int irqcrossbar_init(void); | ||
diff --git a/include/linux/irqchip/mips-gic.h b/include/linux/irqchip/mips-gic.h index e6a6aac451db..3ea2e4754c40 100644 --- a/include/linux/irqchip/mips-gic.h +++ b/include/linux/irqchip/mips-gic.h | |||
| @@ -240,6 +240,8 @@ extern unsigned int gic_get_count_width(void); | |||
| 240 | extern cycle_t gic_read_compare(void); | 240 | extern cycle_t gic_read_compare(void); |
| 241 | extern void gic_write_compare(cycle_t cnt); | 241 | extern void gic_write_compare(cycle_t cnt); |
| 242 | extern void gic_write_cpu_compare(cycle_t cnt, int cpu); | 242 | extern void gic_write_cpu_compare(cycle_t cnt, int cpu); |
| 243 | extern void gic_start_count(void); | ||
| 244 | extern void gic_stop_count(void); | ||
| 243 | extern void gic_send_ipi(unsigned int intr); | 245 | extern void gic_send_ipi(unsigned int intr); |
| 244 | extern unsigned int plat_ipi_call_int_xlate(unsigned int); | 246 | extern unsigned int plat_ipi_call_int_xlate(unsigned int); |
| 245 | extern unsigned int plat_ipi_resched_int_xlate(unsigned int); | 247 | extern unsigned int plat_ipi_resched_int_xlate(unsigned int); |
diff --git a/include/linux/irqflags.h b/include/linux/irqflags.h index d176d658fe25..5dd1272d1ab2 100644 --- a/include/linux/irqflags.h +++ b/include/linux/irqflags.h | |||
| @@ -85,7 +85,7 @@ | |||
| 85 | * The local_irq_*() APIs are equal to the raw_local_irq*() | 85 | * The local_irq_*() APIs are equal to the raw_local_irq*() |
| 86 | * if !TRACE_IRQFLAGS. | 86 | * if !TRACE_IRQFLAGS. |
| 87 | */ | 87 | */ |
| 88 | #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT | 88 | #ifdef CONFIG_TRACE_IRQFLAGS |
| 89 | #define local_irq_enable() \ | 89 | #define local_irq_enable() \ |
| 90 | do { trace_hardirqs_on(); raw_local_irq_enable(); } while (0) | 90 | do { trace_hardirqs_on(); raw_local_irq_enable(); } while (0) |
| 91 | #define local_irq_disable() \ | 91 | #define local_irq_disable() \ |
| @@ -107,22 +107,6 @@ | |||
| 107 | raw_local_irq_restore(flags); \ | 107 | raw_local_irq_restore(flags); \ |
| 108 | } \ | 108 | } \ |
| 109 | } while (0) | 109 | } while (0) |
| 110 | #define local_save_flags(flags) \ | ||
| 111 | do { \ | ||
| 112 | raw_local_save_flags(flags); \ | ||
| 113 | } while (0) | ||
| 114 | |||
| 115 | #define irqs_disabled_flags(flags) \ | ||
| 116 | ({ \ | ||
| 117 | raw_irqs_disabled_flags(flags); \ | ||
| 118 | }) | ||
| 119 | |||
| 120 | #define irqs_disabled() \ | ||
| 121 | ({ \ | ||
| 122 | unsigned long _flags; \ | ||
| 123 | raw_local_save_flags(_flags); \ | ||
| 124 | raw_irqs_disabled_flags(_flags); \ | ||
| 125 | }) | ||
| 126 | 110 | ||
| 127 | #define safe_halt() \ | 111 | #define safe_halt() \ |
| 128 | do { \ | 112 | do { \ |
| @@ -131,7 +115,7 @@ | |||
| 131 | } while (0) | 115 | } while (0) |
| 132 | 116 | ||
| 133 | 117 | ||
| 134 | #else /* !CONFIG_TRACE_IRQFLAGS_SUPPORT */ | 118 | #else /* !CONFIG_TRACE_IRQFLAGS */ |
| 135 | 119 | ||
| 136 | #define local_irq_enable() do { raw_local_irq_enable(); } while (0) | 120 | #define local_irq_enable() do { raw_local_irq_enable(); } while (0) |
| 137 | #define local_irq_disable() do { raw_local_irq_disable(); } while (0) | 121 | #define local_irq_disable() do { raw_local_irq_disable(); } while (0) |
| @@ -140,11 +124,28 @@ | |||
| 140 | raw_local_irq_save(flags); \ | 124 | raw_local_irq_save(flags); \ |
| 141 | } while (0) | 125 | } while (0) |
| 142 | #define local_irq_restore(flags) do { raw_local_irq_restore(flags); } while (0) | 126 | #define local_irq_restore(flags) do { raw_local_irq_restore(flags); } while (0) |
| 143 | #define local_save_flags(flags) do { raw_local_save_flags(flags); } while (0) | ||
| 144 | #define irqs_disabled() (raw_irqs_disabled()) | ||
| 145 | #define irqs_disabled_flags(flags) (raw_irqs_disabled_flags(flags)) | ||
| 146 | #define safe_halt() do { raw_safe_halt(); } while (0) | 127 | #define safe_halt() do { raw_safe_halt(); } while (0) |
| 147 | 128 | ||
| 129 | #endif /* CONFIG_TRACE_IRQFLAGS */ | ||
| 130 | |||
| 131 | #define local_save_flags(flags) raw_local_save_flags(flags) | ||
| 132 | |||
| 133 | /* | ||
| 134 | * Some architectures don't define arch_irqs_disabled(), so even if either | ||
| 135 | * definition would be fine we need to use different ones for the time being | ||
| 136 | * to avoid build issues. | ||
| 137 | */ | ||
| 138 | #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT | ||
| 139 | #define irqs_disabled() \ | ||
| 140 | ({ \ | ||
| 141 | unsigned long _flags; \ | ||
| 142 | raw_local_save_flags(_flags); \ | ||
| 143 | raw_irqs_disabled_flags(_flags); \ | ||
| 144 | }) | ||
| 145 | #else /* !CONFIG_TRACE_IRQFLAGS_SUPPORT */ | ||
| 146 | #define irqs_disabled() raw_irqs_disabled() | ||
| 148 | #endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */ | 147 | #endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */ |
| 149 | 148 | ||
| 149 | #define irqs_disabled_flags(flags) raw_irqs_disabled_flags(flags) | ||
| 150 | |||
| 150 | #endif | 151 | #endif |
