internals.h revision 591d2fb02ea80472d846c0b8507007806bdd69cc
11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * IRQ subsystem internal functions and variables:
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int noirqdebug;
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
76a6de9ef5850d063c3d3fb50784bfe3a6d0712c6Thomas Gleixner/* Set default functions for irq_chip structures: */
86a6de9ef5850d063c3d3fb50784bfe3a6d0712c6Thomas Gleixnerextern void irq_chip_set_defaults(struct irq_chip *chip);
96a6de9ef5850d063c3d3fb50784bfe3a6d0712c6Thomas Gleixner
106a6de9ef5850d063c3d3fb50784bfe3a6d0712c6Thomas Gleixner/* Set default handler: */
116a6de9ef5850d063c3d3fb50784bfe3a6d0712c6Thomas Gleixnerextern void compat_irq_chip_set_default_handler(struct irq_desc *desc);
126a6de9ef5850d063c3d3fb50784bfe3a6d0712c6Thomas Gleixner
130c5d1eb77a8be917b638344a22afe1398236482bDavid Brownellextern int __irq_set_trigger(struct irq_desc *desc, unsigned int irq,
140c5d1eb77a8be917b638344a22afe1398236482bDavid Brownell		unsigned long flags);
150a0c5168df270a50e3518e4f12bddb31f8f5f38fRafael J. Wysockiextern void __disable_irq(struct irq_desc *desc, unsigned int irq, bool susp);
160a0c5168df270a50e3518e4f12bddb31f8f5f38fRafael J. Wysockiextern void __enable_irq(struct irq_desc *desc, unsigned int irq, bool resume);
170c5d1eb77a8be917b638344a22afe1398236482bDavid Brownell
1848a1b10aff588833b73994704c47bbd0deb73e9cYinghai Luextern struct lock_class_key irq_desc_lock_class;
1985ac16d033370caf6f48d743c8dc8103700f5cc5Yinghai Luextern void init_kstat_irqs(struct irq_desc *desc, int node, int nr);
200f3c2a89c1451cdf6328f99977bd9decd4f708e1Yinghai Luextern void clear_kstat_irqs(struct irq_desc *desc);
2148a1b10aff588833b73994704c47bbd0deb73e9cYinghai Luextern spinlock_t sparse_irq_lock;
220fa0ebbf15addc1be8f73325d809c8547a9de304Mike Travis
230fa0ebbf15addc1be8f73325d809c8547a9de304Mike Travis#ifdef CONFIG_SPARSE_IRQ
240fa0ebbf15addc1be8f73325d809c8547a9de304Mike Travis/* irq_desc_ptrs allocated at boot time */
250fa0ebbf15addc1be8f73325d809c8547a9de304Mike Travisextern struct irq_desc **irq_desc_ptrs;
260fa0ebbf15addc1be8f73325d809c8547a9de304Mike Travis#else
270fa0ebbf15addc1be8f73325d809c8547a9de304Mike Travis/* irq_desc_ptrs is a fixed size array */
2848a1b10aff588833b73994704c47bbd0deb73e9cYinghai Luextern struct irq_desc *irq_desc_ptrs[NR_IRQS];
290fa0ebbf15addc1be8f73325d809c8547a9de304Mike Travis#endif
3048a1b10aff588833b73994704c47bbd0deb73e9cYinghai Lu
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_PROC_FS
322c6927a38f65b53b62f86158fba29a068c4e8b6aYinghai Luextern void register_irq_proc(unsigned int irq, struct irq_desc *desc);
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void register_handler_proc(unsigned int irq, struct irqaction *action);
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void unregister_handler_proc(unsigned int irq, struct irqaction *action);
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
362c6927a38f65b53b62f86158fba29a068c4e8b6aYinghai Lustatic inline void register_irq_proc(unsigned int irq, struct irq_desc *desc) { }
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void register_handler_proc(unsigned int irq,
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					 struct irqaction *action) { }
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void unregister_handler_proc(unsigned int irq,
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					   struct irqaction *action) { }
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43f6d87f4bd259cf33e092cd1a8fde05f291c47af1Thomas Gleixnerextern int irq_select_affinity_usr(unsigned int irq);
44f6d87f4bd259cf33e092cd1a8fde05f291c47af1Thomas Gleixner
45591d2fb02ea80472d846c0b8507007806bdd69ccThomas Gleixnerextern void irq_set_thread_affinity(struct irq_desc *desc);
4657b150cce8e004ddd36330490a68bfb59b7271e9Yinghai Lu
4743f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar/*
4843f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar * Debugging printout:
4943f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar */
5043f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar
5143f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar#include <linux/kallsyms.h>
5243f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar
5343f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar#define P(f) if (desc->status & f) printk("%14s set\n", #f)
5443f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar
5543f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnarstatic inline void print_irq_desc(unsigned int irq, struct irq_desc *desc)
5643f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar{
5743f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	printk("irq %d, desc: %p, depth: %d, count: %d, unhandled: %d\n",
5843f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar		irq, desc, desc->depth, desc->irq_count, desc->irqs_unhandled);
5943f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	printk("->handle_irq():  %p, ", desc->handle_irq);
6043f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	print_symbol("%s\n", (unsigned long)desc->handle_irq);
6143f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	printk("->chip(): %p, ", desc->chip);
6243f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	print_symbol("%s\n", (unsigned long)desc->chip);
6343f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	printk("->action(): %p\n", desc->action);
6443f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	if (desc->action) {
6543f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar		printk("->action->handler(): %p, ", desc->action->handler);
6643f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar		print_symbol("%s\n", (unsigned long)desc->action->handler);
6743f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	}
6843f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar
6943f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_INPROGRESS);
7043f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_DISABLED);
7143f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_PENDING);
7243f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_REPLAY);
7343f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_AUTODETECT);
7443f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_WAITING);
7543f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_LEVEL);
7643f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_MASKED);
7743f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar#ifdef CONFIG_IRQ_PER_CPU
7843f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_PER_CPU);
7943f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar#endif
8043f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_NOPROBE);
8143f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_NOREQUEST);
8243f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_NOAUTOEN);
8343f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar}
8443f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar
8543f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar#undef P
8643f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar
87