2 * linux/kernel/irq/chip.c
4 * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar
5 * Copyright (C) 2005-2006, Thomas Gleixner, Russell King
7 * This file contains the core interrupt handling code, for irq-chip
10 * Detailed information is available in Documentation/DocBook/genericirq
13 #include <linux/irq.h>
14 #include <linux/msi.h>
15 #include <linux/module.h>
16 #include <linux/interrupt.h>
17 #include <linux/kernel_stat.h>
19 #include "internals.h"
22 * set_irq_chip - set the irq chip for an irq
24 * @chip: pointer to irq chip description structure
26 int set_irq_chip(unsigned int irq
, struct irq_chip
*chip
)
28 struct irq_desc
*desc
= irq_to_desc(irq
);
32 WARN(1, KERN_ERR
"Trying to install chip for IRQ%d\n", irq
);
39 raw_spin_lock_irqsave(&desc
->lock
, flags
);
40 irq_chip_set_defaults(chip
);
41 desc
->irq_data
.chip
= chip
;
42 raw_spin_unlock_irqrestore(&desc
->lock
, flags
);
46 EXPORT_SYMBOL(set_irq_chip
);
49 * set_irq_type - set the irq trigger type for an irq
51 * @type: IRQ_TYPE_{LEVEL,EDGE}_* value - see include/linux/irq.h
53 int set_irq_type(unsigned int irq
, unsigned int type
)
55 struct irq_desc
*desc
= irq_to_desc(irq
);
60 printk(KERN_ERR
"Trying to set irq type for IRQ%d\n", irq
);
64 type
&= IRQ_TYPE_SENSE_MASK
;
65 if (type
== IRQ_TYPE_NONE
)
69 raw_spin_lock_irqsave(&desc
->lock
, flags
);
70 ret
= __irq_set_trigger(desc
, irq
, type
);
71 raw_spin_unlock_irqrestore(&desc
->lock
, flags
);
72 chip_bus_sync_unlock(desc
);
75 EXPORT_SYMBOL(set_irq_type
);
78 * set_irq_data - set irq type data for an irq
79 * @irq: Interrupt number
80 * @data: Pointer to interrupt specific data
82 * Set the hardware irq controller data for an irq
84 int set_irq_data(unsigned int irq
, void *data
)
86 struct irq_desc
*desc
= irq_to_desc(irq
);
91 "Trying to install controller data for IRQ%d\n", irq
);
95 raw_spin_lock_irqsave(&desc
->lock
, flags
);
96 desc
->irq_data
.handler_data
= data
;
97 raw_spin_unlock_irqrestore(&desc
->lock
, flags
);
100 EXPORT_SYMBOL(set_irq_data
);
103 * set_irq_msi - set MSI descriptor data for an irq
104 * @irq: Interrupt number
105 * @entry: Pointer to MSI descriptor data
107 * Set the MSI descriptor entry for an irq
109 int set_irq_msi(unsigned int irq
, struct msi_desc
*entry
)
111 struct irq_desc
*desc
= irq_to_desc(irq
);
116 "Trying to install msi data for IRQ%d\n", irq
);
120 raw_spin_lock_irqsave(&desc
->lock
, flags
);
121 desc
->irq_data
.msi_desc
= entry
;
124 raw_spin_unlock_irqrestore(&desc
->lock
, flags
);
129 * set_irq_chip_data - set irq chip data for an irq
130 * @irq: Interrupt number
131 * @data: Pointer to chip specific data
133 * Set the hardware irq chip data for an irq
135 int set_irq_chip_data(unsigned int irq
, void *data
)
137 struct irq_desc
*desc
= irq_to_desc(irq
);
142 "Trying to install chip data for IRQ%d\n", irq
);
146 if (!desc
->irq_data
.chip
) {
147 printk(KERN_ERR
"BUG: bad set_irq_chip_data(IRQ#%d)\n", irq
);
151 raw_spin_lock_irqsave(&desc
->lock
, flags
);
152 desc
->irq_data
.chip_data
= data
;
153 raw_spin_unlock_irqrestore(&desc
->lock
, flags
);
157 EXPORT_SYMBOL(set_irq_chip_data
);
159 struct irq_data
*irq_get_irq_data(unsigned int irq
)
161 struct irq_desc
*desc
= irq_to_desc(irq
);
163 return desc
? &desc
->irq_data
: NULL
;
165 EXPORT_SYMBOL_GPL(irq_get_irq_data
);
168 * set_irq_nested_thread - Set/Reset the IRQ_NESTED_THREAD flag of an irq
170 * @irq: Interrupt number
171 * @nest: 0 to clear / 1 to set the IRQ_NESTED_THREAD flag
173 * The IRQ_NESTED_THREAD flag indicates that on
174 * request_threaded_irq() no separate interrupt thread should be
175 * created for the irq as the handler are called nested in the
176 * context of a demultiplexing interrupt handler thread.
178 void set_irq_nested_thread(unsigned int irq
, int nest
)
180 struct irq_desc
*desc
= irq_to_desc(irq
);
186 raw_spin_lock_irqsave(&desc
->lock
, flags
);
188 desc
->status
|= IRQ_NESTED_THREAD
;
190 desc
->status
&= ~IRQ_NESTED_THREAD
;
191 raw_spin_unlock_irqrestore(&desc
->lock
, flags
);
193 EXPORT_SYMBOL_GPL(set_irq_nested_thread
);
196 * default enable function
198 static void default_enable(struct irq_data
*data
)
200 struct irq_desc
*desc
= irq_data_to_desc(data
);
202 desc
->irq_data
.chip
->irq_unmask(&desc
->irq_data
);
203 desc
->status
&= ~IRQ_MASKED
;
207 * default disable function
209 static void default_disable(struct irq_data
*data
)
214 * default startup function
216 static unsigned int default_startup(struct irq_data
*data
)
218 struct irq_desc
*desc
= irq_data_to_desc(data
);
220 desc
->irq_data
.chip
->irq_enable(data
);
225 * default shutdown function
227 static void default_shutdown(struct irq_data
*data
)
229 struct irq_desc
*desc
= irq_data_to_desc(data
);
231 desc
->irq_data
.chip
->irq_mask(&desc
->irq_data
);
232 desc
->status
|= IRQ_MASKED
;
235 #ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
236 /* Temporary migration helpers */
237 static void compat_irq_mask(struct irq_data
*data
)
239 data
->chip
->mask(data
->irq
);
242 static void compat_irq_unmask(struct irq_data
*data
)
244 data
->chip
->unmask(data
->irq
);
247 static void compat_irq_ack(struct irq_data
*data
)
249 data
->chip
->ack(data
->irq
);
252 static void compat_irq_mask_ack(struct irq_data
*data
)
254 data
->chip
->mask_ack(data
->irq
);
257 static void compat_irq_eoi(struct irq_data
*data
)
259 data
->chip
->eoi(data
->irq
);
262 static void compat_irq_enable(struct irq_data
*data
)
264 data
->chip
->enable(data
->irq
);
267 static void compat_irq_disable(struct irq_data
*data
)
269 data
->chip
->disable(data
->irq
);
272 static void compat_irq_shutdown(struct irq_data
*data
)
274 data
->chip
->shutdown(data
->irq
);
277 static unsigned int compat_irq_startup(struct irq_data
*data
)
279 return data
->chip
->startup(data
->irq
);
282 static int compat_irq_set_affinity(struct irq_data
*data
,
283 const struct cpumask
*dest
, bool force
)
285 return data
->chip
->set_affinity(data
->irq
, dest
);
288 static int compat_irq_set_type(struct irq_data
*data
, unsigned int type
)
290 return data
->chip
->set_type(data
->irq
, type
);
293 static int compat_irq_set_wake(struct irq_data
*data
, unsigned int on
)
295 return data
->chip
->set_wake(data
->irq
, on
);
298 static int compat_irq_retrigger(struct irq_data
*data
)
300 return data
->chip
->retrigger(data
->irq
);
303 static void compat_bus_lock(struct irq_data
*data
)
305 data
->chip
->bus_lock(data
->irq
);
308 static void compat_bus_sync_unlock(struct irq_data
*data
)
310 data
->chip
->bus_sync_unlock(data
->irq
);
315 * Fixup enable/disable function pointers
317 void irq_chip_set_defaults(struct irq_chip
*chip
)
319 #ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
321 * Compat fixup functions need to be before we set the
322 * defaults for enable/disable/startup/shutdown
325 chip
->irq_enable
= compat_irq_enable
;
327 chip
->irq_disable
= compat_irq_disable
;
329 chip
->irq_shutdown
= compat_irq_shutdown
;
331 chip
->irq_startup
= compat_irq_startup
;
336 if (!chip
->irq_enable
)
337 chip
->irq_enable
= default_enable
;
338 if (!chip
->irq_disable
)
339 chip
->irq_disable
= default_disable
;
340 if (!chip
->irq_startup
)
341 chip
->irq_startup
= default_startup
;
343 * We use chip->irq_disable, when the user provided its own. When
344 * we have default_disable set for chip->irq_disable, then we need
345 * to use default_shutdown, otherwise the irq line is not
346 * disabled on free_irq():
348 if (!chip
->irq_shutdown
)
349 chip
->irq_shutdown
= chip
->irq_disable
!= default_disable
?
350 chip
->irq_disable
: default_shutdown
;
352 #ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
354 chip
->end
= dummy_irq_chip
.end
;
357 * Now fix up the remaining compat handlers
360 chip
->irq_bus_lock
= compat_bus_lock
;
361 if (chip
->bus_sync_unlock
)
362 chip
->irq_bus_sync_unlock
= compat_bus_sync_unlock
;
364 chip
->irq_mask
= compat_irq_mask
;
366 chip
->irq_unmask
= compat_irq_unmask
;
368 chip
->irq_ack
= compat_irq_ack
;
370 chip
->irq_mask_ack
= compat_irq_mask_ack
;
372 chip
->irq_eoi
= compat_irq_eoi
;
373 if (chip
->set_affinity
)
374 chip
->irq_set_affinity
= compat_irq_set_affinity
;
376 chip
->irq_set_type
= compat_irq_set_type
;
378 chip
->irq_set_wake
= compat_irq_set_wake
;
380 chip
->irq_retrigger
= compat_irq_retrigger
;
384 static inline void mask_ack_irq(struct irq_desc
*desc
)
386 if (desc
->irq_data
.chip
->irq_mask_ack
)
387 desc
->irq_data
.chip
->irq_mask_ack(&desc
->irq_data
);
389 desc
->irq_data
.chip
->irq_mask(&desc
->irq_data
);
390 if (desc
->irq_data
.chip
->irq_ack
)
391 desc
->irq_data
.chip
->irq_ack(&desc
->irq_data
);
393 desc
->status
|= IRQ_MASKED
;
396 static inline void mask_irq(struct irq_desc
*desc
)
398 if (desc
->irq_data
.chip
->irq_mask
) {
399 desc
->irq_data
.chip
->irq_mask(&desc
->irq_data
);
400 desc
->status
|= IRQ_MASKED
;
404 static inline void unmask_irq(struct irq_desc
*desc
)
406 if (desc
->irq_data
.chip
->irq_unmask
) {
407 desc
->irq_data
.chip
->irq_unmask(&desc
->irq_data
);
408 desc
->status
&= ~IRQ_MASKED
;
413 * handle_nested_irq - Handle a nested irq from a irq thread
414 * @irq: the interrupt number
416 * Handle interrupts which are nested into a threaded interrupt
417 * handler. The handler function is called inside the calling
420 void handle_nested_irq(unsigned int irq
)
422 struct irq_desc
*desc
= irq_to_desc(irq
);
423 struct irqaction
*action
;
424 irqreturn_t action_ret
;
428 raw_spin_lock_irq(&desc
->lock
);
430 kstat_incr_irqs_this_cpu(irq
, desc
);
432 action
= desc
->action
;
433 if (unlikely(!action
|| (desc
->status
& IRQ_DISABLED
)))
436 desc
->status
|= IRQ_INPROGRESS
;
437 raw_spin_unlock_irq(&desc
->lock
);
439 action_ret
= action
->thread_fn(action
->irq
, action
->dev_id
);
441 note_interrupt(irq
, desc
, action_ret
);
443 raw_spin_lock_irq(&desc
->lock
);
444 desc
->status
&= ~IRQ_INPROGRESS
;
447 raw_spin_unlock_irq(&desc
->lock
);
449 EXPORT_SYMBOL_GPL(handle_nested_irq
);
452 * handle_simple_irq - Simple and software-decoded IRQs.
453 * @irq: the interrupt number
454 * @desc: the interrupt description structure for this irq
456 * Simple interrupts are either sent from a demultiplexing interrupt
457 * handler or come from hardware, where no interrupt hardware control
460 * Note: The caller is expected to handle the ack, clear, mask and
461 * unmask issues if necessary.
464 handle_simple_irq(unsigned int irq
, struct irq_desc
*desc
)
466 struct irqaction
*action
;
467 irqreturn_t action_ret
;
469 raw_spin_lock(&desc
->lock
);
471 if (unlikely(desc
->status
& IRQ_INPROGRESS
))
473 desc
->status
&= ~(IRQ_REPLAY
| IRQ_WAITING
);
474 kstat_incr_irqs_this_cpu(irq
, desc
);
476 action
= desc
->action
;
477 if (unlikely(!action
|| (desc
->status
& IRQ_DISABLED
)))
480 desc
->status
|= IRQ_INPROGRESS
;
481 raw_spin_unlock(&desc
->lock
);
483 action_ret
= handle_IRQ_event(irq
, action
);
485 note_interrupt(irq
, desc
, action_ret
);
487 raw_spin_lock(&desc
->lock
);
488 desc
->status
&= ~IRQ_INPROGRESS
;
490 raw_spin_unlock(&desc
->lock
);
494 * handle_level_irq - Level type irq handler
495 * @irq: the interrupt number
496 * @desc: the interrupt description structure for this irq
498 * Level type interrupts are active as long as the hardware line has
499 * the active level. This may require to mask the interrupt and unmask
500 * it after the associated handler has acknowledged the device, so the
501 * interrupt line is back to inactive.
504 handle_level_irq(unsigned int irq
, struct irq_desc
*desc
)
506 struct irqaction
*action
;
507 irqreturn_t action_ret
;
509 raw_spin_lock(&desc
->lock
);
512 if (unlikely(desc
->status
& IRQ_INPROGRESS
))
514 desc
->status
&= ~(IRQ_REPLAY
| IRQ_WAITING
);
515 kstat_incr_irqs_this_cpu(irq
, desc
);
518 * If its disabled or no action available
519 * keep it masked and get out of here
521 action
= desc
->action
;
522 if (unlikely(!action
|| (desc
->status
& IRQ_DISABLED
)))
525 desc
->status
|= IRQ_INPROGRESS
;
526 raw_spin_unlock(&desc
->lock
);
528 action_ret
= handle_IRQ_event(irq
, action
);
530 note_interrupt(irq
, desc
, action_ret
);
532 raw_spin_lock(&desc
->lock
);
533 desc
->status
&= ~IRQ_INPROGRESS
;
535 if (!(desc
->status
& (IRQ_DISABLED
| IRQ_ONESHOT
)))
538 raw_spin_unlock(&desc
->lock
);
540 EXPORT_SYMBOL_GPL(handle_level_irq
);
543 * handle_fasteoi_irq - irq handler for transparent controllers
544 * @irq: the interrupt number
545 * @desc: the interrupt description structure for this irq
547 * Only a single callback will be issued to the chip: an ->eoi()
548 * call when the interrupt has been serviced. This enables support
549 * for modern forms of interrupt handlers, which handle the flow
550 * details in hardware, transparently.
553 handle_fasteoi_irq(unsigned int irq
, struct irq_desc
*desc
)
555 struct irqaction
*action
;
556 irqreturn_t action_ret
;
558 raw_spin_lock(&desc
->lock
);
560 if (unlikely(desc
->status
& IRQ_INPROGRESS
))
563 desc
->status
&= ~(IRQ_REPLAY
| IRQ_WAITING
);
564 kstat_incr_irqs_this_cpu(irq
, desc
);
567 * If its disabled or no action available
568 * then mask it and get out of here:
570 action
= desc
->action
;
571 if (unlikely(!action
|| (desc
->status
& IRQ_DISABLED
))) {
572 desc
->status
|= IRQ_PENDING
;
577 desc
->status
|= IRQ_INPROGRESS
;
578 desc
->status
&= ~IRQ_PENDING
;
579 raw_spin_unlock(&desc
->lock
);
581 action_ret
= handle_IRQ_event(irq
, action
);
583 note_interrupt(irq
, desc
, action_ret
);
585 raw_spin_lock(&desc
->lock
);
586 desc
->status
&= ~IRQ_INPROGRESS
;
588 desc
->irq_data
.chip
->irq_eoi(&desc
->irq_data
);
590 raw_spin_unlock(&desc
->lock
);
594 * handle_edge_irq - edge type IRQ handler
595 * @irq: the interrupt number
596 * @desc: the interrupt description structure for this irq
598 * Interrupt occures on the falling and/or rising edge of a hardware
599 * signal. The occurence is latched into the irq controller hardware
600 * and must be acked in order to be reenabled. After the ack another
601 * interrupt can happen on the same source even before the first one
602 * is handled by the associated event handler. If this happens it
603 * might be necessary to disable (mask) the interrupt depending on the
604 * controller hardware. This requires to reenable the interrupt inside
605 * of the loop which handles the interrupts which have arrived while
606 * the handler was running. If all pending interrupts are handled, the
610 handle_edge_irq(unsigned int irq
, struct irq_desc
*desc
)
612 raw_spin_lock(&desc
->lock
);
614 desc
->status
&= ~(IRQ_REPLAY
| IRQ_WAITING
);
617 * If we're currently running this IRQ, or its disabled,
618 * we shouldn't process the IRQ. Mark it pending, handle
619 * the necessary masking and go out
621 if (unlikely((desc
->status
& (IRQ_INPROGRESS
| IRQ_DISABLED
)) ||
623 desc
->status
|= (IRQ_PENDING
| IRQ_MASKED
);
627 kstat_incr_irqs_this_cpu(irq
, desc
);
629 /* Start handling the irq */
630 desc
->irq_data
.chip
->irq_ack(&desc
->irq_data
);
632 /* Mark the IRQ currently in progress.*/
633 desc
->status
|= IRQ_INPROGRESS
;
636 struct irqaction
*action
= desc
->action
;
637 irqreturn_t action_ret
;
639 if (unlikely(!action
)) {
645 * When another irq arrived while we were handling
646 * one, we could have masked the irq.
647 * Renable it, if it was not disabled in meantime.
649 if (unlikely((desc
->status
&
650 (IRQ_PENDING
| IRQ_MASKED
| IRQ_DISABLED
)) ==
651 (IRQ_PENDING
| IRQ_MASKED
))) {
655 desc
->status
&= ~IRQ_PENDING
;
656 raw_spin_unlock(&desc
->lock
);
657 action_ret
= handle_IRQ_event(irq
, action
);
659 note_interrupt(irq
, desc
, action_ret
);
660 raw_spin_lock(&desc
->lock
);
662 } while ((desc
->status
& (IRQ_PENDING
| IRQ_DISABLED
)) == IRQ_PENDING
);
664 desc
->status
&= ~IRQ_INPROGRESS
;
666 raw_spin_unlock(&desc
->lock
);
670 * handle_percpu_irq - Per CPU local irq handler
671 * @irq: the interrupt number
672 * @desc: the interrupt description structure for this irq
674 * Per CPU interrupts on SMP machines without locking requirements
677 handle_percpu_irq(unsigned int irq
, struct irq_desc
*desc
)
679 irqreturn_t action_ret
;
681 kstat_incr_irqs_this_cpu(irq
, desc
);
683 if (desc
->irq_data
.chip
->irq_ack
)
684 desc
->irq_data
.chip
->irq_ack(&desc
->irq_data
);
686 action_ret
= handle_IRQ_event(irq
, desc
->action
);
688 note_interrupt(irq
, desc
, action_ret
);
690 if (desc
->irq_data
.chip
->irq_eoi
)
691 desc
->irq_data
.chip
->irq_eoi(&desc
->irq_data
);
695 __set_irq_handler(unsigned int irq
, irq_flow_handler_t handle
, int is_chained
,
698 struct irq_desc
*desc
= irq_to_desc(irq
);
703 "Trying to install type control for IRQ%d\n", irq
);
708 handle
= handle_bad_irq
;
709 else if (desc
->irq_data
.chip
== &no_irq_chip
) {
710 printk(KERN_WARNING
"Trying to install %sinterrupt handler "
711 "for IRQ%d\n", is_chained
? "chained " : "", irq
);
713 * Some ARM implementations install a handler for really dumb
714 * interrupt hardware without setting an irq_chip. This worked
715 * with the ARM no_irq_chip but the check in setup_irq would
716 * prevent us to setup the interrupt at all. Switch it to
717 * dummy_irq_chip for easy transition.
719 desc
->irq_data
.chip
= &dummy_irq_chip
;
723 raw_spin_lock_irqsave(&desc
->lock
, flags
);
726 if (handle
== handle_bad_irq
) {
727 if (desc
->irq_data
.chip
!= &no_irq_chip
)
729 desc
->status
|= IRQ_DISABLED
;
732 desc
->handle_irq
= handle
;
735 if (handle
!= handle_bad_irq
&& is_chained
) {
736 desc
->status
&= ~IRQ_DISABLED
;
737 desc
->status
|= IRQ_NOREQUEST
| IRQ_NOPROBE
;
739 desc
->irq_data
.chip
->irq_startup(&desc
->irq_data
);
741 raw_spin_unlock_irqrestore(&desc
->lock
, flags
);
742 chip_bus_sync_unlock(desc
);
744 EXPORT_SYMBOL_GPL(__set_irq_handler
);
747 set_irq_chip_and_handler(unsigned int irq
, struct irq_chip
*chip
,
748 irq_flow_handler_t handle
)
750 set_irq_chip(irq
, chip
);
751 __set_irq_handler(irq
, handle
, 0, NULL
);
755 set_irq_chip_and_handler_name(unsigned int irq
, struct irq_chip
*chip
,
756 irq_flow_handler_t handle
, const char *name
)
758 set_irq_chip(irq
, chip
);
759 __set_irq_handler(irq
, handle
, 0, name
);
762 void irq_modify_status(unsigned int irq
, unsigned long clr
, unsigned long set
)
764 struct irq_desc
*desc
= irq_to_desc(irq
);
771 set
&= IRQF_MODIFY_MASK
;
772 clr
&= IRQF_MODIFY_MASK
;
774 raw_spin_lock_irqsave(&desc
->lock
, flags
);
775 desc
->status
&= ~clr
;
777 raw_spin_unlock_irqrestore(&desc
->lock
, flags
);