1 | // SPDX-License-Identifier: GPL-2.0 |
2 | #include <linux/fs.h> |
3 | #include <linux/init.h> |
4 | #include <linux/interrupt.h> |
5 | #include <linux/irqnr.h> |
6 | #include <linux/proc_fs.h> |
7 | #include <linux/seq_file.h> |
8 | |
9 | /* |
10 | * /proc/interrupts |
11 | */ |
12 | static void *int_seq_start(struct seq_file *f, loff_t *pos) |
13 | { |
14 | return (*pos <= nr_irqs) ? pos : NULL; |
15 | } |
16 | |
17 | static void *int_seq_next(struct seq_file *f, void *v, loff_t *pos) |
18 | { |
19 | (*pos)++; |
20 | if (*pos > nr_irqs) |
21 | return NULL; |
22 | return pos; |
23 | } |
24 | |
25 | static void int_seq_stop(struct seq_file *f, void *v) |
26 | { |
27 | /* Nothing to do */ |
28 | } |
29 | |
30 | static const struct seq_operations int_seq_ops = { |
31 | .start = int_seq_start, |
32 | .next = int_seq_next, |
33 | .stop = int_seq_stop, |
34 | .show = show_interrupts |
35 | }; |
36 | |
37 | static int __init proc_interrupts_init(void) |
38 | { |
39 | proc_create_seq("interrupts" , 0, NULL, &int_seq_ops); |
40 | return 0; |
41 | } |
42 | fs_initcall(proc_interrupts_init); |
43 | |