2 * Copyright (c) 2010 Werner Fink, Jiri Slaby
7 #include <linux/console.h>
8 #include <linux/kernel.h>
9 #include <linux/proc_fs.h>
10 #include <linux/seq_file.h>
11 #include <linux/tty_driver.h>
14 * This is handler for /proc/consoles
16 static int show_console_dev(struct seq_file
*m
, void *v
)
25 { CON_PRINTBUFFER
, 'p' },
29 char flags
[ARRAY_SIZE(con_flags
) + 1];
30 struct console
*con
= v
;
36 const struct tty_driver
*driver
;
38 driver
= con
->device(con
, &index
);
40 dev
= MKDEV(driver
->major
, driver
->minor_start
);
45 for (a
= 0; a
< ARRAY_SIZE(con_flags
); a
++)
46 flags
[a
] = (con
->flags
& con_flags
[a
].flag
) ?
47 con_flags
[a
].name
: ' ';
50 seq_printf(m
, "%s%d%n", con
->name
, con
->index
, &len
);
54 seq_printf(m
, "%*c%c%c%c (%s)", len
, ' ', con
->read
? 'R' : '-',
55 con
->write
? 'W' : '-', con
->unblank
? 'U' : '-',
58 seq_printf(m
, " %4d:%d", MAJOR(dev
), MINOR(dev
));
65 static void *c_start(struct seq_file
*m
, loff_t
*pos
)
78 static void *c_next(struct seq_file
*m
, void *v
, loff_t
*pos
)
80 struct console
*con
= v
;
85 static void c_stop(struct seq_file
*m
, void *v
)
90 static const struct seq_operations consoles_op
= {
94 .show
= show_console_dev
97 static int consoles_open(struct inode
*inode
, struct file
*file
)
99 return seq_open(file
, &consoles_op
);
102 static const struct file_operations proc_consoles_operations
= {
103 .open
= consoles_open
,
106 .release
= seq_release
,
109 static int __init
proc_consoles_init(void)
111 proc_create("consoles", 0, NULL
, &proc_consoles_operations
);
114 module_init(proc_consoles_init
);