internals.h revision f6d87f4bd259cf33e092cd1a8fde05f291c47af1
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);
150c5d1eb77a8be917b638344a22afe1398236482bDavid Brownell
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_PROC_FS
172c6927a38f65b53b62f86158fba29a068c4e8b6aYinghai Luextern void register_irq_proc(unsigned int irq, struct irq_desc *desc);
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void register_handler_proc(unsigned int irq, struct irqaction *action);
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void unregister_handler_proc(unsigned int irq, struct irqaction *action);
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
212c6927a38f65b53b62f86158fba29a068c4e8b6aYinghai Lustatic inline void register_irq_proc(unsigned int irq, struct irq_desc *desc) { }
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void register_handler_proc(unsigned int irq,
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					 struct irqaction *action) { }
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void unregister_handler_proc(unsigned int irq,
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					   struct irqaction *action) { }
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28f6d87f4bd259cf33e092cd1a8fde05f291c47af1Thomas Gleixnerextern int irq_select_affinity_usr(unsigned int irq);
29f6d87f4bd259cf33e092cd1a8fde05f291c47af1Thomas Gleixner
3043f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar/*
3143f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar * Debugging printout:
3243f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar */
3343f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar
3443f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar#include <linux/kallsyms.h>
3543f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar
3643f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar#define P(f) if (desc->status & f) printk("%14s set\n", #f)
3743f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar
3843f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnarstatic inline void print_irq_desc(unsigned int irq, struct irq_desc *desc)
3943f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar{
4043f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	printk("irq %d, desc: %p, depth: %d, count: %d, unhandled: %d\n",
4143f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar		irq, desc, desc->depth, desc->irq_count, desc->irqs_unhandled);
4243f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	printk("->handle_irq():  %p, ", desc->handle_irq);
4343f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	print_symbol("%s\n", (unsigned long)desc->handle_irq);
4443f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	printk("->chip(): %p, ", desc->chip);
4543f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	print_symbol("%s\n", (unsigned long)desc->chip);
4643f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	printk("->action(): %p\n", desc->action);
4743f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	if (desc->action) {
4843f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar		printk("->action->handler(): %p, ", desc->action->handler);
4943f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar		print_symbol("%s\n", (unsigned long)desc->action->handler);
5043f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	}
5143f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar
5243f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_INPROGRESS);
5343f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_DISABLED);
5443f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_PENDING);
5543f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_REPLAY);
5643f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_AUTODETECT);
5743f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_WAITING);
5843f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_LEVEL);
5943f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_MASKED);
6043f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar#ifdef CONFIG_IRQ_PER_CPU
6143f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_PER_CPU);
6243f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar#endif
6343f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_NOPROBE);
6443f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_NOREQUEST);
6543f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar	P(IRQ_NOAUTOEN);
6643f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar}
6743f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar
6843f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar#undef P
6943f7775944e40221827e4b3aec43824aa4c4e4a9Ingo Molnar
70