Blame view
fs/proc/consoles.c
1.91 KB
f50a7f3d9 treewide: Replace... |
1 |
// SPDX-License-Identifier: GPL-2.0-only |
23308ba54 console: add /pro... |
2 3 |
/* * Copyright (c) 2010 Werner Fink, Jiri Slaby |
23308ba54 console: add /pro... |
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
*/ #include <linux/console.h> #include <linux/kernel.h> #include <linux/proc_fs.h> #include <linux/seq_file.h> #include <linux/tty_driver.h> /* * This is handler for /proc/consoles */ static int show_console_dev(struct seq_file *m, void *v) { static const struct { short flag; char name; } con_flags[] = { { CON_ENABLED, 'E' }, { CON_CONSDEV, 'C' }, { CON_BOOT, 'B' }, { CON_PRINTBUFFER, 'p' }, { CON_BRL, 'b' }, { CON_ANYTIME, 'a' }, }; char flags[ARRAY_SIZE(con_flags) + 1]; struct console *con = v; unsigned int a; |
23308ba54 console: add /pro... |
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
dev_t dev = 0; if (con->device) { const struct tty_driver *driver; int index; driver = con->device(con, &index); if (driver) { dev = MKDEV(driver->major, driver->minor_start); dev += index; } } for (a = 0; a < ARRAY_SIZE(con_flags); a++) flags[a] = (con->flags & con_flags[a].flag) ? con_flags[a].name : ' '; flags[a] = 0; |
652586df9 seq_file: remove ... |
47 48 49 50 |
seq_setwidth(m, 21 - 1); seq_printf(m, "%s%d", con->name, con->index); seq_pad(m, ' '); seq_printf(m, "%c%c%c (%s)", con->read ? 'R' : '-', |
23308ba54 console: add /pro... |
51 52 53 54 |
con->write ? 'W' : '-', con->unblank ? 'U' : '-', flags); if (dev) seq_printf(m, " %4d:%d", MAJOR(dev), MINOR(dev)); |
4bf8ba811 fs/proc/consoles.... |
55 56 |
seq_putc(m, ' '); |
23308ba54 console: add /pro... |
57 58 59 60 61 62 63 |
return 0; } static void *c_start(struct seq_file *m, loff_t *pos) { struct console *con; loff_t off = 0; |
ac751efa6 console: rename a... |
64 |
console_lock(); |
23308ba54 console: add /pro... |
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
for_each_console(con) if (off++ == *pos) break; return con; } static void *c_next(struct seq_file *m, void *v, loff_t *pos) { struct console *con = v; ++*pos; return con->next; } static void c_stop(struct seq_file *m, void *v) { |
ac751efa6 console: rename a... |
81 |
console_unlock(); |
23308ba54 console: add /pro... |
82 83 84 85 86 87 88 89 |
} static const struct seq_operations consoles_op = { .start = c_start, .next = c_next, .stop = c_stop, .show = show_console_dev }; |
bf33cbdf8 proc: move proc_c... |
90 |
static int __init proc_consoles_init(void) |
23308ba54 console: add /pro... |
91 |
{ |
fddda2b7b proc: introduce p... |
92 |
proc_create_seq("consoles", 0, NULL, &consoles_op); |
23308ba54 console: add /pro... |
93 94 |
return 0; } |
abaf3787a fs/proc: don't us... |
95 |
fs_initcall(proc_consoles_init); |