diff options
Diffstat (limited to 'include/linux/irqdesc.h')
| -rw-r--r-- | include/linux/irqdesc.h | 89 |
1 files changed, 26 insertions, 63 deletions
diff --git a/include/linux/irqdesc.h b/include/linux/irqdesc.h index 00218371518b..a082905b5ebe 100644 --- a/include/linux/irqdesc.h +++ b/include/linux/irqdesc.h | |||
| @@ -35,32 +35,7 @@ struct timer_rand_state; | |||
| 35 | * @name: flow handler name for /proc/interrupts output | 35 | * @name: flow handler name for /proc/interrupts output |
| 36 | */ | 36 | */ |
| 37 | struct irq_desc { | 37 | struct irq_desc { |
| 38 | |||
| 39 | #ifdef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED | ||
| 40 | struct irq_data irq_data; | 38 | struct irq_data irq_data; |
| 41 | #else | ||
| 42 | /* | ||
| 43 | * This union will go away, once we fixed the direct access to | ||
| 44 | * irq_desc all over the place. The direct fields are a 1:1 | ||
| 45 | * overlay of irq_data. | ||
| 46 | */ | ||
| 47 | union { | ||
| 48 | struct irq_data irq_data; | ||
| 49 | struct { | ||
| 50 | unsigned int irq; | ||
| 51 | unsigned int node; | ||
| 52 | unsigned int pad_do_not_even_think_about_it; | ||
| 53 | struct irq_chip *chip; | ||
| 54 | void *handler_data; | ||
| 55 | void *chip_data; | ||
| 56 | struct msi_desc *msi_desc; | ||
| 57 | #ifdef CONFIG_SMP | ||
| 58 | cpumask_var_t affinity; | ||
| 59 | #endif | ||
| 60 | }; | ||
| 61 | }; | ||
| 62 | #endif | ||
| 63 | |||
| 64 | struct timer_rand_state *timer_rand_state; | 39 | struct timer_rand_state *timer_rand_state; |
| 65 | unsigned int __percpu *kstat_irqs; | 40 | unsigned int __percpu *kstat_irqs; |
| 66 | irq_flow_handler_t handle_irq; | 41 | irq_flow_handler_t handle_irq; |
| @@ -68,11 +43,7 @@ struct irq_desc { | |||
| 68 | irq_preflow_handler_t preflow_handler; | 43 | irq_preflow_handler_t preflow_handler; |
| 69 | #endif | 44 | #endif |
| 70 | struct irqaction *action; /* IRQ action list */ | 45 | struct irqaction *action; /* IRQ action list */ |
| 71 | #ifdef CONFIG_GENERIC_HARDIRQS_NO_COMPAT | ||
| 72 | unsigned int status_use_accessors; | 46 | unsigned int status_use_accessors; |
| 73 | #else | ||
| 74 | unsigned int status; /* IRQ status */ | ||
| 75 | #endif | ||
| 76 | unsigned int core_internal_state__do_not_mess_with_it; | 47 | unsigned int core_internal_state__do_not_mess_with_it; |
| 77 | unsigned int depth; /* nested irq disables */ | 48 | unsigned int depth; /* nested irq disables */ |
| 78 | unsigned int wake_depth; /* nested wake enables */ | 49 | unsigned int wake_depth; /* nested wake enables */ |
| @@ -100,13 +71,6 @@ struct irq_desc { | |||
| 100 | extern struct irq_desc irq_desc[NR_IRQS]; | 71 | extern struct irq_desc irq_desc[NR_IRQS]; |
| 101 | #endif | 72 | #endif |
| 102 | 73 | ||
| 103 | /* Will be removed once the last users in power and sh are gone */ | ||
| 104 | extern struct irq_desc *irq_to_desc_alloc_node(unsigned int irq, int node); | ||
| 105 | static inline struct irq_desc *move_irq_desc(struct irq_desc *desc, int node) | ||
| 106 | { | ||
| 107 | return desc; | ||
| 108 | } | ||
| 109 | |||
| 110 | #ifdef CONFIG_GENERIC_HARDIRQS | 74 | #ifdef CONFIG_GENERIC_HARDIRQS |
| 111 | 75 | ||
| 112 | static inline struct irq_data *irq_desc_get_irq_data(struct irq_desc *desc) | 76 | static inline struct irq_data *irq_desc_get_irq_data(struct irq_desc *desc) |
| @@ -134,27 +98,6 @@ static inline struct msi_desc *irq_desc_get_msi_desc(struct irq_desc *desc) | |||
| 134 | return desc->irq_data.msi_desc; | 98 | return desc->irq_data.msi_desc; |
| 135 | } | 99 | } |
| 136 | 100 | ||
| 137 | #ifndef CONFIG_GENERIC_HARDIRQS_NO_COMPAT | ||
| 138 | static inline struct irq_chip *get_irq_desc_chip(struct irq_desc *desc) | ||
| 139 | { | ||
| 140 | return irq_desc_get_chip(desc); | ||
| 141 | } | ||
| 142 | static inline void *get_irq_desc_data(struct irq_desc *desc) | ||
| 143 | { | ||
| 144 | return irq_desc_get_handler_data(desc); | ||
| 145 | } | ||
| 146 | |||
| 147 | static inline void *get_irq_desc_chip_data(struct irq_desc *desc) | ||
| 148 | { | ||
| 149 | return irq_desc_get_chip_data(desc); | ||
| 150 | } | ||
| 151 | |||
| 152 | static inline struct msi_desc *get_irq_desc_msi(struct irq_desc *desc) | ||
| 153 | { | ||
| 154 | return irq_desc_get_msi_desc(desc); | ||
| 155 | } | ||
| 156 | #endif | ||
| 157 | |||
| 158 | /* | 101 | /* |
| 159 | * Architectures call this to let the generic IRQ layer | 102 | * Architectures call this to let the generic IRQ layer |
| 160 | * handle an interrupt. If the descriptor is attached to an | 103 | * handle an interrupt. If the descriptor is attached to an |
| @@ -178,24 +121,44 @@ static inline int irq_has_action(unsigned int irq) | |||
| 178 | return desc->action != NULL; | 121 | return desc->action != NULL; |
| 179 | } | 122 | } |
| 180 | 123 | ||
| 181 | #ifndef CONFIG_GENERIC_HARDIRQS_NO_COMPAT | 124 | /* caller has locked the irq_desc and both params are valid */ |
| 182 | static inline int irq_balancing_disabled(unsigned int irq) | 125 | static inline void __irq_set_handler_locked(unsigned int irq, |
| 126 | irq_flow_handler_t handler) | ||
| 183 | { | 127 | { |
| 184 | struct irq_desc *desc; | 128 | struct irq_desc *desc; |
| 185 | 129 | ||
| 186 | desc = irq_to_desc(irq); | 130 | desc = irq_to_desc(irq); |
| 187 | return desc->status & IRQ_NO_BALANCING_MASK; | 131 | desc->handle_irq = handler; |
| 188 | } | 132 | } |
| 189 | #endif | ||
| 190 | 133 | ||
| 191 | /* caller has locked the irq_desc and both params are valid */ | 134 | /* caller has locked the irq_desc and both params are valid */ |
| 192 | static inline void __set_irq_handler_unlocked(int irq, | 135 | static inline void |
| 193 | irq_flow_handler_t handler) | 136 | __irq_set_chip_handler_name_locked(unsigned int irq, struct irq_chip *chip, |
| 137 | irq_flow_handler_t handler, const char *name) | ||
| 194 | { | 138 | { |
| 195 | struct irq_desc *desc; | 139 | struct irq_desc *desc; |
| 196 | 140 | ||
| 197 | desc = irq_to_desc(irq); | 141 | desc = irq_to_desc(irq); |
| 142 | irq_desc_get_irq_data(desc)->chip = chip; | ||
| 198 | desc->handle_irq = handler; | 143 | desc->handle_irq = handler; |
| 144 | desc->name = name; | ||
| 145 | } | ||
| 146 | |||
| 147 | static inline int irq_balancing_disabled(unsigned int irq) | ||
| 148 | { | ||
| 149 | struct irq_desc *desc; | ||
| 150 | |||
| 151 | desc = irq_to_desc(irq); | ||
| 152 | return desc->status_use_accessors & IRQ_NO_BALANCING_MASK; | ||
| 153 | } | ||
| 154 | |||
| 155 | static inline void | ||
| 156 | irq_set_lockdep_class(unsigned int irq, struct lock_class_key *class) | ||
| 157 | { | ||
| 158 | struct irq_desc *desc = irq_to_desc(irq); | ||
| 159 | |||
| 160 | if (desc) | ||
| 161 | lockdep_set_class(&desc->lock, class); | ||
| 199 | } | 162 | } |
| 200 | 163 | ||
| 201 | #ifdef CONFIG_IRQ_PREFLOW_FASTEOI | 164 | #ifdef CONFIG_IRQ_PREFLOW_FASTEOI |
