1#include <linux/fs.h> 2#include <linux/init.h> 3#include <linux/interrupt.h> 4#include <linux/irqnr.h> 5#include <linux/proc_fs.h> 6#include <linux/seq_file.h> 7 8/* 9 * /proc/interrupts 10 */ 11static void *int_seq_start(struct seq_file *f, loff_t *pos) 12{ 13 return (*pos <= nr_irqs) ? pos : NULL; 14} 15 16static void *int_seq_next(struct seq_file *f, void *v, loff_t *pos) 17{ 18 (*pos)++; 19 if (*pos > nr_irqs) 20 return NULL; 21 return pos; 22} 23 24static void int_seq_stop(struct seq_file *f, void *v) 25{ 26 /* Nothing to do */ 27} 28 29static const struct seq_operations int_seq_ops = { 30 .start = int_seq_start, 31 .next = int_seq_next, 32 .stop = int_seq_stop, 33 .show = show_interrupts 34}; 35 36static int interrupts_open(struct inode *inode, struct file *filp) 37{ 38 return seq_open(filp, &int_seq_ops); 39} 40 41static const struct file_operations proc_interrupts_operations = { 42 .open = interrupts_open, 43 .read = seq_read, 44 .llseek = seq_lseek, 45 .release = seq_release, 46}; 47 48static int __init proc_interrupts_init(void) 49{ 50 proc_create("interrupts", 0, NULL, &proc_interrupts_operations); 51 return 0; 52} 53module_init(proc_interrupts_init); 54