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