aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/filesystems/proc.txt32
-rw-r--r--fs/proc/proc_tty.c158
2 files changed, 0 insertions, 190 deletions
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt
index 98223a676940..a6aca8740883 100644
--- a/Documentation/filesystems/proc.txt
+++ b/Documentation/filesystems/proc.txt
@@ -1075,7 +1075,6 @@ Table 1-11: Files in /proc/tty
1075 drivers list of drivers and their usage 1075 drivers list of drivers and their usage
1076 ldiscs registered line disciplines 1076 ldiscs registered line disciplines
1077 driver/serial usage statistic and status of single tty lines 1077 driver/serial usage statistic and status of single tty lines
1078 consoles registered system console lines
1079.............................................................................. 1078..............................................................................
1080 1079
1081To see which tty's are currently in use, you can simply look into the file 1080To see which tty's are currently in use, you can simply look into the file
@@ -1094,37 +1093,6 @@ To see which tty's are currently in use, you can simply look into the file
1094 /dev/tty /dev/tty 5 0 system:/dev/tty 1093 /dev/tty /dev/tty 5 0 system:/dev/tty
1095 unknown /dev/tty 4 1-63 console 1094 unknown /dev/tty 4 1-63 console
1096 1095
1097To see which character device lines are currently used for the system console
1098/dev/console, you may simply look into the file /proc/tty/consoles:
1099
1100 > cat /proc/tty/consoles
1101 tty0 -WU (ECp) 4:7
1102 ttyS0 -W- (Ep) 4:64
1103
1104The columns are:
1105
1106 device name of the device
1107 operations R = can do read operations
1108 W = can do write operations
1109 U = can do unblank
1110 flags E = it is enabled
1111 C = it is prefered console
1112 B = it is primary boot console
1113 p = it is used for printk buffer
1114 b = it is not a TTY but a Braille device
1115 a = it is safe to use when cpu is offline
1116 * = it is standard input of the reading process
1117 major:minor major and minor number of the device separated by a colon
1118
1119If the reading process holds /dev/console open at the regular standard input
1120stream the active device will be marked by an asterisk:
1121
1122 > cat /proc/tty/consoles < /dev/console
1123 tty0 -WU (ECp*) 4:7
1124 ttyS0 -W- (Ep) 4:64
1125 > tty
1126 /dev/pts/3
1127
1128 1096
11291.8 Miscellaneous kernel statistics in /proc/stat 10971.8 Miscellaneous kernel statistics in /proc/stat
1130------------------------------------------------- 1098-------------------------------------------------
diff --git a/fs/proc/proc_tty.c b/fs/proc/proc_tty.c
index dc44f94022f1..83adcc869437 100644
--- a/fs/proc/proc_tty.c
+++ b/fs/proc/proc_tty.c
@@ -12,10 +12,7 @@
12#include <linux/proc_fs.h> 12#include <linux/proc_fs.h>
13#include <linux/stat.h> 13#include <linux/stat.h>
14#include <linux/tty.h> 14#include <linux/tty.h>
15#include <linux/tty_driver.h>
16#include <linux/console.h>
17#include <linux/seq_file.h> 15#include <linux/seq_file.h>
18#include <linux/fdtable.h>
19#include <linux/bitops.h> 16#include <linux/bitops.h>
20 17
21/* 18/*
@@ -140,160 +137,6 @@ static const struct file_operations proc_tty_drivers_operations = {
140}; 137};
141 138
142/* 139/*
143 * The device ID of file descriptor 0 of the current reading
144 * task if a character device...
145 */
146static dev_t current_dev;
147
148/*
149 * This is the handler for /proc/tty/consoles
150 */
151static int show_console_dev(struct seq_file *m, void *v)
152{
153 const struct tty_driver *driver;
154 struct console *con;
155 int index, len;
156 char flags[10];
157 dev_t dev;
158
159 if (v == SEQ_START_TOKEN)
160 return 0;
161 con = (struct console *)v;
162 if (!con)
163 return 0;
164 driver = con->device(con, &index);
165 if (!driver)
166 return 0;
167 dev = MKDEV(driver->major, driver->minor_start) + index;
168
169 index = 0;
170 if (con->flags & CON_ENABLED)
171 flags[index++] = 'E';
172 if (con->flags & CON_CONSDEV)
173 flags[index++] = 'C';
174 if (con->flags & CON_BOOT)
175 flags[index++] = 'B';
176 if (con->flags & CON_PRINTBUFFER)
177 flags[index++] = 'p';
178 if (con->flags & CON_BRL)
179 flags[index++] = 'b';
180 if (con->flags & CON_ANYTIME)
181 flags[index++] = 'a';
182 if (current_dev == dev)
183 flags[index++] = '*';
184 flags[index] = 0;
185
186 seq_printf(m, "%s%d%n", con->name, con->index, &len);
187 len = 21 - len;
188 if (len < 1)
189 len = 1;
190 seq_printf(m, "%*c", len, ' ');
191 seq_printf(m, "%c%c%c (%s)%n", con->read ? 'R' : '-',
192 con->write ? 'W' : '-', con->unblank ? 'U' : '-',
193 flags, &len);
194 len = 13 - len;
195 if (len < 1)
196 len = 1;
197 seq_printf(m, "%*c%4d:%d\n", len, ' ', MAJOR(dev), MINOR(dev));
198
199 return 0;
200}
201
202/* iterator for consoles */
203static void *c_start(struct seq_file *m, loff_t *pos)
204{
205 struct console *con;
206 loff_t off = 0;
207
208 if (*pos == 0)
209 return SEQ_START_TOKEN;
210
211 acquire_console_sem();
212 for (con = console_drivers; con; con = con->next) {
213 if (!con->device)
214 continue;
215 if (++off == *pos)
216 break;
217 }
218 release_console_sem();
219
220 return con;
221}
222
223static void *c_next(struct seq_file *m, void *v, loff_t *pos)
224{
225 struct console *con;
226
227 acquire_console_sem();
228 if (v == SEQ_START_TOKEN)
229 con = console_drivers;
230 else
231 con = ((struct console *)v)->next;
232 for (; con; con = con->next) {
233 if (!con->device)
234 continue;
235 ++*pos;
236 break;
237 }
238 release_console_sem();
239
240 return con;
241}
242
243static void c_stop(struct seq_file *m, void *v)
244{
245}
246
247static const struct seq_operations tty_consoles_op = {
248 .start = c_start,
249 .next = c_next,
250 .stop = c_stop,
251 .show = show_console_dev
252};
253
254/*
255 * Used for open /proc/tty/consoles. Before this detect
256 * the device ID of file descriptor 0 of the current
257 * reading task if a character device...
258 */
259static int tty_consoles_open(struct inode *inode, struct file *file)
260{
261 struct files_struct *curfiles;
262
263 current_dev = 0;
264 curfiles = get_files_struct(current);
265 if (curfiles) {
266 const struct file *curfp;
267 spin_lock(&curfiles->file_lock);
268 curfp = fcheck_files(curfiles, 0);
269 if (curfp && curfp->private_data) {
270 const struct inode *inode;
271 dget(curfp->f_dentry);
272 inode = curfp->f_dentry->d_inode;
273 if (S_ISCHR(inode->i_mode)) {
274 struct tty_struct *tty;
275 tty = (struct tty_struct *)curfp->private_data;
276 if (tty && tty->magic == TTY_MAGIC) {
277 tty = tty_pair_get_tty(tty);
278 current_dev = tty_devnum(tty);
279 }
280 }
281 dput(curfp->f_dentry);
282 }
283 spin_unlock(&curfiles->file_lock);
284 put_files_struct(curfiles);
285 }
286 return seq_open(file, &tty_consoles_op);
287}
288
289static const struct file_operations proc_tty_consoles_operations = {
290 .open = tty_consoles_open,
291 .read = seq_read,
292 .llseek = seq_lseek,
293 .release = seq_release,
294};
295
296/*
297 * This function is called by tty_register_driver() to handle 140 * This function is called by tty_register_driver() to handle
298 * registering the driver's /proc handler into /proc/tty/driver/<foo> 141 * registering the driver's /proc handler into /proc/tty/driver/<foo>
299 */ 142 */
@@ -343,5 +186,4 @@ void __init proc_tty_init(void)
343 proc_tty_driver = proc_mkdir_mode("tty/driver", S_IRUSR|S_IXUSR, NULL); 186 proc_tty_driver = proc_mkdir_mode("tty/driver", S_IRUSR|S_IXUSR, NULL);
344 proc_create("tty/ldiscs", 0, NULL, &tty_ldiscs_proc_fops); 187 proc_create("tty/ldiscs", 0, NULL, &tty_ldiscs_proc_fops);
345 proc_create("tty/drivers", 0, NULL, &proc_tty_drivers_operations); 188 proc_create("tty/drivers", 0, NULL, &proc_tty_drivers_operations);
346 proc_create("tty/consoles", 0, NULL, &proc_tty_consoles_operations);
347} 189}