tty_io.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:60k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/drivers/char/tty_io.c
  3.  *
  4.  *  Copyright (C) 1991, 1992  Linus Torvalds
  5.  */
  6. /*
  7.  * 'tty_io.c' gives an orthogonal feeling to tty's, be they consoles
  8.  * or rs-channels. It also implements echoing, cooked mode etc.
  9.  *
  10.  * Kill-line thanks to John T Kohl, who also corrected VMIN = VTIME = 0.
  11.  *
  12.  * Modified by Theodore Ts'o, 9/14/92, to dynamically allocate the
  13.  * tty_struct and tty_queue structures.  Previously there was an array
  14.  * of 256 tty_struct's which was statically allocated, and the
  15.  * tty_queue structures were allocated at boot time.  Both are now
  16.  * dynamically allocated only when the tty is open.
  17.  *
  18.  * Also restructured routines so that there is more of a separation
  19.  * between the high-level tty routines (tty_io.c and tty_ioctl.c) and
  20.  * the low-level tty routines (serial.c, pty.c, console.c).  This
  21.  * makes for cleaner and more compact code.  -TYT, 9/17/92 
  22.  *
  23.  * Modified by Fred N. van Kempen, 01/29/93, to add line disciplines
  24.  * which can be dynamically activated and de-activated by the line
  25.  * discipline handling modules (like SLIP).
  26.  *
  27.  * NOTE: pay no attention to the line discipline code (yet); its
  28.  * interface is still subject to change in this version...
  29.  * -- TYT, 1/31/92
  30.  *
  31.  * Added functionality to the OPOST tty handling.  No delays, but all
  32.  * other bits should be there.
  33.  * -- Nick Holloway <alfie@dcs.warwick.ac.uk>, 27th May 1993.
  34.  *
  35.  * Rewrote canonical mode and added more termios flags.
  36.  *  -- julian@uhunix.uhcc.hawaii.edu (J. Cowley), 13Jan94
  37.  *
  38.  * Reorganized FASYNC support so mouse code can share it.
  39.  * -- ctm@ardi.com, 9Sep95
  40.  *
  41.  * New TIOCLINUX variants added.
  42.  * -- mj@k332.feld.cvut.cz, 19-Nov-95
  43.  * 
  44.  * Restrict vt switching via ioctl()
  45.  *      -- grif@cs.ucr.edu, 5-Dec-95
  46.  *
  47.  * Move console and virtual terminal code to more appropriate files,
  48.  * implement CONFIG_VT and generalize console device interface.
  49.  * -- Marko Kohtala <Marko.Kohtala@hut.fi>, March 97
  50.  *
  51.  * Rewrote init_dev and release_dev to eliminate races.
  52.  * -- Bill Hawes <whawes@star.net>, June 97
  53.  *
  54.  * Added devfs support.
  55.  *      -- C. Scott Ananian <cananian@alumni.princeton.edu>, 13-Jan-1998
  56.  *
  57.  * Added support for a Unix98-style ptmx device.
  58.  *      -- C. Scott Ananian <cananian@alumni.princeton.edu>, 14-Jan-1998
  59.  *
  60.  * Reduced memory usage for older ARM systems
  61.  *      -- Russell King <rmk@arm.linux.org.uk>
  62.  *
  63.  * Move do_SAK() into process context.  Less stack use in devfs functions.
  64.  * alloc_tty_struct() always uses kmalloc() -- Andrew Morton <andrewm@uow.edu.eu> 17Mar01
  65.  */
  66. #include <linux/config.h>
  67. #include <linux/types.h>
  68. #include <linux/major.h>
  69. #include <linux/errno.h>
  70. #include <linux/signal.h>
  71. #include <linux/fcntl.h>
  72. #include <linux/sched.h>
  73. #include <linux/interrupt.h>
  74. #include <linux/tty.h>
  75. #include <linux/tty_driver.h>
  76. #include <linux/tty_flip.h>
  77. #include <linux/devpts_fs.h>
  78. #include <linux/file.h>
  79. #include <linux/console.h>
  80. #include <linux/timer.h>
  81. #include <linux/ctype.h>
  82. #include <linux/kd.h>
  83. #include <linux/mm.h>
  84. #include <linux/string.h>
  85. #include <linux/slab.h>
  86. #include <linux/poll.h>
  87. #include <linux/proc_fs.h>
  88. #include <linux/init.h>
  89. #include <linux/module.h>
  90. #include <linux/smp_lock.h>
  91. #include <asm/uaccess.h>
  92. #include <asm/system.h>
  93. #include <asm/bitops.h>
  94. #include <linux/kbd_kern.h>
  95. #include <linux/vt_kern.h>
  96. #include <linux/selection.h>
  97. #include <linux/devfs_fs_kernel.h>
  98. #include <linux/kmod.h>
  99. #ifdef CONFIG_VT
  100. extern void con_init_devfs (void);
  101. #endif
  102. extern void disable_early_printk(void);
  103. #define CONSOLE_DEV MKDEV(TTY_MAJOR,0)
  104. #define TTY_DEV MKDEV(TTYAUX_MAJOR,0)
  105. #define SYSCONS_DEV MKDEV(TTYAUX_MAJOR,1)
  106. #define PTMX_DEV MKDEV(TTYAUX_MAJOR,2)
  107. #undef TTY_DEBUG_HANGUP
  108. #define TTY_PARANOIA_CHECK 1
  109. #define CHECK_TTY_COUNT 1
  110. struct termios tty_std_termios; /* for the benefit of tty drivers  */
  111. struct tty_driver *tty_drivers; /* linked list of tty drivers */
  112. struct tty_ldisc ldiscs[NR_LDISCS]; /* line disc dispatch table */
  113. #ifdef CONFIG_UNIX98_PTYS
  114. extern struct tty_driver ptm_driver[]; /* Unix98 pty masters; for /dev/ptmx */
  115. extern struct tty_driver pts_driver[]; /* Unix98 pty slaves;  for /dev/ptmx */
  116. #endif
  117. /*
  118.  * redirect is the pseudo-tty that console output
  119.  * is redirected to if asked by TIOCCONS.
  120.  */
  121. struct tty_struct * redirect;
  122. static void initialize_tty_struct(struct tty_struct *tty);
  123. static ssize_t tty_read(struct file *, char *, size_t, loff_t *);
  124. static ssize_t tty_write(struct file *, const char *, size_t, loff_t *);
  125. static unsigned int tty_poll(struct file *, poll_table *);
  126. static int tty_open(struct inode *, struct file *);
  127. static int tty_release(struct inode *, struct file *);
  128. int tty_ioctl(struct inode * inode, struct file * file,
  129.       unsigned int cmd, unsigned long arg);
  130. static int tty_fasync(int fd, struct file * filp, int on);
  131. extern int vme_scc_init (void);
  132. extern long vme_scc_console_init(void);
  133. extern int serial167_init(void);
  134. extern long serial167_console_init(void);
  135. extern void console_8xx_init(void);
  136. extern int rs_8xx_init(void);
  137. extern void mac_scc_console_init(void);
  138. extern void hwc_console_init(void);
  139. extern void hwc_tty_init(void);
  140. extern void con3215_init(void);
  141. extern void tty3215_init(void);
  142. extern void tub3270_con_init(void);
  143. extern void tub3270_init(void);
  144. extern void rs285_console_init(void);
  145. extern void sa1100_rs_console_init(void);
  146. extern void sgi_serial_console_init(void);
  147. extern void sci_console_init(void);
  148. extern void tx3912_console_init(void);
  149. extern void tx3912_rs_init(void);
  150. extern void txx927_console_init(void);
  151. extern void sb1250_serial_console_init(void);
  152. #ifndef MIN
  153. #define MIN(a,b) ((a) < (b) ? (a) : (b))
  154. #endif
  155. #ifndef MAX
  156. #define MAX(a,b) ((a) < (b) ? (b) : (a))
  157. #endif
  158. static struct tty_struct *alloc_tty_struct(void)
  159. {
  160. struct tty_struct *tty;
  161. tty = kmalloc(sizeof(struct tty_struct), GFP_KERNEL);
  162. if (tty)
  163. memset(tty, 0, sizeof(struct tty_struct));
  164. return tty;
  165. }
  166. static inline void free_tty_struct(struct tty_struct *tty)
  167. {
  168. kfree(tty);
  169. }
  170. /*
  171.  * This routine returns the name of tty.
  172.  */
  173. static char *
  174. _tty_make_name(struct tty_struct *tty, const char *name, char *buf)
  175. {
  176. int idx = (tty)?MINOR(tty->device) - tty->driver.minor_start:0;
  177. if (!tty) /* Hmm.  NULL pointer.  That's fun. */
  178. strcpy(buf, "NULL tty");
  179. else
  180. sprintf(buf, name,
  181. idx + tty->driver.name_base);
  182. return buf;
  183. }
  184. #define TTY_NUMBER(tty) (MINOR((tty)->device) - (tty)->driver.minor_start + 
  185.  (tty)->driver.name_base)
  186. char *tty_name(struct tty_struct *tty, char *buf)
  187. {
  188. return _tty_make_name(tty, (tty)?tty->driver.name:NULL, buf);
  189. }
  190. inline int tty_paranoia_check(struct tty_struct *tty, kdev_t device,
  191.       const char *routine)
  192. {
  193. #ifdef TTY_PARANOIA_CHECK
  194. static const char badmagic[] = KERN_WARNING
  195. "Warning: bad magic number for tty struct (%s) in %sn";
  196. static const char badtty[] = KERN_WARNING
  197. "Warning: null TTY for (%s) in %sn";
  198. if (!tty) {
  199. printk(badtty, kdevname(device), routine);
  200. return 1;
  201. }
  202. if (tty->magic != TTY_MAGIC) {
  203. printk(badmagic, kdevname(device), routine);
  204. return 1;
  205. }
  206. #endif
  207. return 0;
  208. }
  209. static int check_tty_count(struct tty_struct *tty, const char *routine)
  210. {
  211. #ifdef CHECK_TTY_COUNT
  212. struct list_head *p;
  213. int count = 0;
  214. file_list_lock();
  215. for(p = tty->tty_files.next; p != &tty->tty_files; p = p->next) {
  216. if(list_entry(p, struct file, f_list)->private_data == tty)
  217. count++;
  218. }
  219. file_list_unlock();
  220. if (tty->driver.type == TTY_DRIVER_TYPE_PTY &&
  221.     tty->driver.subtype == PTY_TYPE_SLAVE &&
  222.     tty->link && tty->link->count)
  223. count++;
  224. if (tty->count != count) {
  225. printk(KERN_WARNING "Warning: dev (%s) tty->count(%d) "
  226.     "!= #fd's(%d) in %sn",
  227.        kdevname(tty->device), tty->count, count, routine);
  228. return count;
  229.        }
  230. #endif
  231. return 0;
  232. }
  233. int tty_register_ldisc(int disc, struct tty_ldisc *new_ldisc)
  234. {
  235. if (disc < N_TTY || disc >= NR_LDISCS)
  236. return -EINVAL;
  237. if (new_ldisc) {
  238. ldiscs[disc] = *new_ldisc;
  239. ldiscs[disc].flags |= LDISC_FLAG_DEFINED;
  240. ldiscs[disc].num = disc;
  241. } else
  242. memset(&ldiscs[disc], 0, sizeof(struct tty_ldisc));
  243. return 0;
  244. }
  245. EXPORT_SYMBOL(tty_register_ldisc);
  246. /* Set the discipline of a tty line. */
  247. static int tty_set_ldisc(struct tty_struct *tty, int ldisc)
  248. {
  249. int retval = 0;
  250. struct tty_ldisc o_ldisc;
  251. char buf[64];
  252. if ((ldisc < N_TTY) || (ldisc >= NR_LDISCS))
  253. return -EINVAL;
  254. /* Eduardo Blanco <ejbs@cs.cs.com.uy> */
  255. /* Cyrus Durgin <cider@speakeasy.org> */
  256. if (!(ldiscs[ldisc].flags & LDISC_FLAG_DEFINED)) {
  257. char modname [20];
  258. sprintf(modname, "tty-ldisc-%d", ldisc);
  259. request_module (modname);
  260. }
  261. if (!(ldiscs[ldisc].flags & LDISC_FLAG_DEFINED))
  262. return -EINVAL;
  263. if (tty->ldisc.num == ldisc)
  264. return 0; /* We are already in the desired discipline */
  265. o_ldisc = tty->ldisc;
  266. tty_wait_until_sent(tty, 0);
  267. /* Shutdown the current discipline. */
  268. if (tty->ldisc.close)
  269. (tty->ldisc.close)(tty);
  270. /* Now set up the new line discipline. */
  271. tty->ldisc = ldiscs[ldisc];
  272. tty->termios->c_line = ldisc;
  273. if (tty->ldisc.open)
  274. retval = (tty->ldisc.open)(tty);
  275. if (retval < 0) {
  276. tty->ldisc = o_ldisc;
  277. tty->termios->c_line = tty->ldisc.num;
  278. if (tty->ldisc.open && (tty->ldisc.open(tty) < 0)) {
  279. tty->ldisc = ldiscs[N_TTY];
  280. tty->termios->c_line = N_TTY;
  281. if (tty->ldisc.open) {
  282. int r = tty->ldisc.open(tty);
  283. if (r < 0)
  284. panic("Couldn't open N_TTY ldisc for "
  285.       "%s --- error %d.",
  286.       tty_name(tty, buf), r);
  287. }
  288. }
  289. }
  290. if (tty->ldisc.num != o_ldisc.num && tty->driver.set_ldisc)
  291. tty->driver.set_ldisc(tty);
  292. return retval;
  293. }
  294. /*
  295.  * This routine returns a tty driver structure, given a device number
  296.  */
  297. struct tty_driver *get_tty_driver(kdev_t device)
  298. {
  299. int major, minor;
  300. struct tty_driver *p;
  301. minor = MINOR(device);
  302. major = MAJOR(device);
  303. for (p = tty_drivers; p; p = p->next) {
  304. if (p->major != major)
  305. continue;
  306. if (minor < p->minor_start)
  307. continue;
  308. if (minor >= p->minor_start + p->num)
  309. continue;
  310. return p;
  311. }
  312. return NULL;
  313. }
  314. /*
  315.  * If we try to write to, or set the state of, a terminal and we're
  316.  * not in the foreground, send a SIGTTOU.  If the signal is blocked or
  317.  * ignored, go ahead and perform the operation.  (POSIX 7.2)
  318.  */
  319. int tty_check_change(struct tty_struct * tty)
  320. {
  321. if (current->tty != tty)
  322. return 0;
  323. if (tty->pgrp <= 0) {
  324. printk(KERN_WARNING "tty_check_change: tty->pgrp <= 0!n");
  325. return 0;
  326. }
  327. if (current->pgrp == tty->pgrp)
  328. return 0;
  329. if (is_ignored(SIGTTOU))
  330. return 0;
  331. if (is_orphaned_pgrp(current->pgrp))
  332. return -EIO;
  333. (void) kill_pg(current->pgrp,SIGTTOU,1);
  334. return -ERESTARTSYS;
  335. }
  336. static ssize_t hung_up_tty_read(struct file * file, char * buf,
  337. size_t count, loff_t *ppos)
  338. {
  339. /* Can't seek (pread) on ttys.  */
  340. if (ppos != &file->f_pos)
  341. return -ESPIPE;
  342. return 0;
  343. }
  344. static ssize_t hung_up_tty_write(struct file * file, const char * buf,
  345.  size_t count, loff_t *ppos)
  346. {
  347. /* Can't seek (pwrite) on ttys.  */
  348. if (ppos != &file->f_pos)
  349. return -ESPIPE;
  350. return -EIO;
  351. }
  352. /* No kernel lock held - none needed ;) */
  353. static unsigned int hung_up_tty_poll(struct file * filp, poll_table * wait)
  354. {
  355. return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM;
  356. }
  357. static int hung_up_tty_ioctl(struct inode * inode, struct file * file,
  358.      unsigned int cmd, unsigned long arg)
  359. {
  360. return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
  361. }
  362. static struct file_operations tty_fops = {
  363. llseek: no_llseek,
  364. read: tty_read,
  365. write: tty_write,
  366. poll: tty_poll,
  367. ioctl: tty_ioctl,
  368. open: tty_open,
  369. release: tty_release,
  370. fasync: tty_fasync,
  371. };
  372. static struct file_operations hung_up_tty_fops = {
  373. llseek: no_llseek,
  374. read: hung_up_tty_read,
  375. write: hung_up_tty_write,
  376. poll: hung_up_tty_poll,
  377. ioctl: hung_up_tty_ioctl,
  378. release: tty_release,
  379. };
  380. /*
  381.  * This can be called by the "eventd" kernel thread.  That is process synchronous,
  382.  * but doesn't hold any locks, so we need to make sure we have the appropriate
  383.  * locks for what we're doing..
  384.  */
  385. void do_tty_hangup(void *data)
  386. {
  387. struct tty_struct *tty = (struct tty_struct *) data;
  388. struct file * cons_filp = NULL;
  389. struct task_struct *p;
  390. struct list_head *l;
  391. int    closecount = 0, n;
  392. if (!tty)
  393. return;
  394. /* inuse_filps is protected by the single kernel lock */
  395. lock_kernel();
  396. check_tty_count(tty, "do_tty_hangup");
  397. file_list_lock();
  398. for (l = tty->tty_files.next; l != &tty->tty_files; l = l->next) {
  399. struct file * filp = list_entry(l, struct file, f_list);
  400. if (filp->f_dentry->d_inode->i_rdev == CONSOLE_DEV ||
  401.     filp->f_dentry->d_inode->i_rdev == SYSCONS_DEV) {
  402. cons_filp = filp;
  403. continue;
  404. }
  405. if (filp->f_op != &tty_fops)
  406. continue;
  407. closecount++;
  408. tty_fasync(-1, filp, 0); /* can't block */
  409. filp->f_op = &hung_up_tty_fops;
  410. }
  411. file_list_unlock();
  412. /* FIXME! What are the locking issues here? This may me overdoing things.. */
  413. {
  414. unsigned long flags;
  415. save_flags(flags); cli();
  416. if (tty->ldisc.flush_buffer)
  417. tty->ldisc.flush_buffer(tty);
  418. if (tty->driver.flush_buffer)
  419. tty->driver.flush_buffer(tty);
  420. if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
  421.     tty->ldisc.write_wakeup)
  422. (tty->ldisc.write_wakeup)(tty);
  423. restore_flags(flags);
  424. }
  425. wake_up_interruptible(&tty->write_wait);
  426. wake_up_interruptible(&tty->read_wait);
  427. /*
  428.  * Shutdown the current line discipline, and reset it to
  429.  * N_TTY.
  430.  */
  431. if (tty->driver.flags & TTY_DRIVER_RESET_TERMIOS)
  432. *tty->termios = tty->driver.init_termios;
  433. if (tty->ldisc.num != ldiscs[N_TTY].num) {
  434. if (tty->ldisc.close)
  435. (tty->ldisc.close)(tty);
  436. tty->ldisc = ldiscs[N_TTY];
  437. tty->termios->c_line = N_TTY;
  438. if (tty->ldisc.open) {
  439. int i = (tty->ldisc.open)(tty);
  440. if (i < 0)
  441. printk(KERN_ERR "do_tty_hangup: N_TTY open: "
  442. "error %dn", -i);
  443. }
  444. }
  445. read_lock(&tasklist_lock);
  446.   for_each_task(p) {
  447. if ((tty->session > 0) && (p->session == tty->session) &&
  448.     p->leader) {
  449. send_sig(SIGHUP,p,1);
  450. send_sig(SIGCONT,p,1);
  451. if (tty->pgrp > 0)
  452. p->tty_old_pgrp = tty->pgrp;
  453. }
  454. if (p->tty == tty)
  455. p->tty = NULL;
  456. }
  457. read_unlock(&tasklist_lock);
  458. tty->flags = 0;
  459. tty->session = 0;
  460. tty->pgrp = -1;
  461. tty->ctrl_status = 0;
  462. /*
  463.  * If one of the devices matches a console pointer, we
  464.  * cannot just call hangup() because that will cause
  465.  * tty->count and state->count to go out of sync.
  466.  * So we just call close() the right number of times.
  467.  */
  468. if (cons_filp) {
  469. if (tty->driver.close)
  470. for (n = 0; n < closecount; n++)
  471. tty->driver.close(tty, cons_filp);
  472. } else if (tty->driver.hangup)
  473. (tty->driver.hangup)(tty);
  474. unlock_kernel();
  475. }
  476. void tty_hangup(struct tty_struct * tty)
  477. {
  478. #ifdef TTY_DEBUG_HANGUP
  479. char buf[64];
  480. printk(KERN_DEBUG "%s hangup...n", tty_name(tty, buf));
  481. #endif
  482. schedule_task(&tty->tq_hangup);
  483. }
  484. void tty_vhangup(struct tty_struct * tty)
  485. {
  486. #ifdef TTY_DEBUG_HANGUP
  487. char buf[64];
  488. printk(KERN_DEBUG "%s vhangup...n", tty_name(tty, buf));
  489. #endif
  490. do_tty_hangup((void *) tty);
  491. }
  492. int tty_hung_up_p(struct file * filp)
  493. {
  494. return (filp->f_op == &hung_up_tty_fops);
  495. }
  496. /*
  497.  * This function is typically called only by the session leader, when
  498.  * it wants to disassociate itself from its controlling tty.
  499.  *
  500.  * It performs the following functions:
  501.  *  (1)  Sends a SIGHUP and SIGCONT to the foreground process group
  502.  *  (2)  Clears the tty from being controlling the session
  503.  *  (3)  Clears the controlling tty for all processes in the
  504.  *  session group.
  505.  *
  506.  * The argument on_exit is set to 1 if called when a process is
  507.  * exiting; it is 0 if called by the ioctl TIOCNOTTY.
  508.  */
  509. void disassociate_ctty(int on_exit)
  510. {
  511. struct tty_struct *tty = current->tty;
  512. struct task_struct *p;
  513. int tty_pgrp = -1;
  514. if (tty) {
  515. tty_pgrp = tty->pgrp;
  516. if (on_exit && tty->driver.type != TTY_DRIVER_TYPE_PTY)
  517. tty_vhangup(tty);
  518. } else {
  519. if (current->tty_old_pgrp) {
  520. kill_pg(current->tty_old_pgrp, SIGHUP, on_exit);
  521. kill_pg(current->tty_old_pgrp, SIGCONT, on_exit);
  522. }
  523. return;
  524. }
  525. if (tty_pgrp > 0) {
  526. kill_pg(tty_pgrp, SIGHUP, on_exit);
  527. if (!on_exit)
  528. kill_pg(tty_pgrp, SIGCONT, on_exit);
  529. }
  530. current->tty_old_pgrp = 0;
  531. tty->session = 0;
  532. tty->pgrp = -1;
  533. read_lock(&tasklist_lock);
  534. for_each_task(p)
  535.    if (p->session == current->session)
  536. p->tty = NULL;
  537. read_unlock(&tasklist_lock);
  538. }
  539. void stop_tty(struct tty_struct *tty)
  540. {
  541. if (tty->stopped)
  542. return;
  543. tty->stopped = 1;
  544. if (tty->link && tty->link->packet) {
  545. tty->ctrl_status &= ~TIOCPKT_START;
  546. tty->ctrl_status |= TIOCPKT_STOP;
  547. wake_up_interruptible(&tty->link->read_wait);
  548. }
  549. if (tty->driver.stop)
  550. (tty->driver.stop)(tty);
  551. }
  552. void start_tty(struct tty_struct *tty)
  553. {
  554. if (!tty->stopped || tty->flow_stopped)
  555. return;
  556. tty->stopped = 0;
  557. if (tty->link && tty->link->packet) {
  558. tty->ctrl_status &= ~TIOCPKT_STOP;
  559. tty->ctrl_status |= TIOCPKT_START;
  560. wake_up_interruptible(&tty->link->read_wait);
  561. }
  562. if (tty->driver.start)
  563. (tty->driver.start)(tty);
  564. if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
  565.     tty->ldisc.write_wakeup)
  566. (tty->ldisc.write_wakeup)(tty);
  567. wake_up_interruptible(&tty->write_wait);
  568. }
  569. static ssize_t tty_read(struct file * file, char * buf, size_t count, 
  570. loff_t *ppos)
  571. {
  572. int i;
  573. struct tty_struct * tty;
  574. struct inode *inode;
  575. /* Can't seek (pread) on ttys.  */
  576. if (ppos != &file->f_pos)
  577. return -ESPIPE;
  578. tty = (struct tty_struct *)file->private_data;
  579. inode = file->f_dentry->d_inode;
  580. if (tty_paranoia_check(tty, inode->i_rdev, "tty_read"))
  581. return -EIO;
  582. if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
  583. return -EIO;
  584. /* This check not only needs to be done before reading, but also
  585.    whenever read_chan() gets woken up after sleeping, so I've
  586.    moved it to there.  This should only be done for the N_TTY
  587.    line discipline, anyway.  Same goes for write_chan(). -- jlc. */
  588. #if 0
  589. if ((inode->i_rdev != CONSOLE_DEV) && /* don't stop on /dev/console */
  590.     (tty->pgrp > 0) &&
  591.     (current->tty == tty) &&
  592.     (tty->pgrp != current->pgrp))
  593. if (is_ignored(SIGTTIN) || is_orphaned_pgrp(current->pgrp))
  594. return -EIO;
  595. else {
  596. (void) kill_pg(current->pgrp, SIGTTIN, 1);
  597. return -ERESTARTSYS;
  598. }
  599. #endif
  600. lock_kernel();
  601. if (tty->ldisc.read)
  602. i = (tty->ldisc.read)(tty,file,buf,count);
  603. else
  604. i = -EIO;
  605. unlock_kernel();
  606. if (i > 0)
  607. inode->i_atime = CURRENT_TIME;
  608. return i;
  609. }
  610. /*
  611.  * Split writes up in sane blocksizes to avoid
  612.  * denial-of-service type attacks
  613.  */
  614. static inline ssize_t do_tty_write(
  615. ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t),
  616. struct tty_struct *tty,
  617. struct file *file,
  618. const unsigned char *buf,
  619. size_t count)
  620. {
  621. ssize_t ret = 0, written = 0;
  622. if (file->f_flags & O_NONBLOCK) {
  623. if (down_trylock(&tty->atomic_write))
  624. return -EAGAIN;
  625. }
  626. else {
  627. if (down_interruptible(&tty->atomic_write))
  628. return -ERESTARTSYS;
  629. }
  630. if ( test_bit(TTY_NO_WRITE_SPLIT, &tty->flags) ) {
  631. lock_kernel();
  632. written = write(tty, file, buf, count);
  633. unlock_kernel();
  634. } else {
  635. for (;;) {
  636. unsigned long size = MAX(PAGE_SIZE*2,16384);
  637. if (size > count)
  638. size = count;
  639. lock_kernel();
  640. ret = write(tty, file, buf, size);
  641. unlock_kernel();
  642. if (ret <= 0)
  643. break;
  644. written += ret;
  645. buf += ret;
  646. count -= ret;
  647. if (!count)
  648. break;
  649. ret = -ERESTARTSYS;
  650. if (signal_pending(current))
  651. break;
  652. if (current->need_resched)
  653. schedule();
  654. }
  655. }
  656. if (written) {
  657. file->f_dentry->d_inode->i_mtime = CURRENT_TIME;
  658. ret = written;
  659. }
  660. up(&tty->atomic_write);
  661. return ret;
  662. }
  663. static ssize_t tty_write(struct file * file, const char * buf, size_t count,
  664.  loff_t *ppos)
  665. {
  666. int is_console;
  667. struct tty_struct * tty;
  668. struct inode *inode;
  669. /* Can't seek (pwrite) on ttys.  */
  670. if (ppos != &file->f_pos)
  671. return -ESPIPE;
  672. /*
  673.  *      For now, we redirect writes from /dev/console as
  674.  *      well as /dev/tty0.
  675.  */
  676. inode = file->f_dentry->d_inode;
  677. is_console = (inode->i_rdev == SYSCONS_DEV ||
  678.       inode->i_rdev == CONSOLE_DEV);
  679. if (is_console && redirect)
  680. tty = redirect;
  681. else
  682. tty = (struct tty_struct *)file->private_data;
  683. if (tty_paranoia_check(tty, inode->i_rdev, "tty_write"))
  684. return -EIO;
  685. if (!tty || !tty->driver.write || (test_bit(TTY_IO_ERROR, &tty->flags)))
  686. return -EIO;
  687. #if 0
  688. if (!is_console && L_TOSTOP(tty) && (tty->pgrp > 0) &&
  689.     (current->tty == tty) && (tty->pgrp != current->pgrp)) {
  690. if (is_orphaned_pgrp(current->pgrp))
  691. return -EIO;
  692. if (!is_ignored(SIGTTOU)) {
  693. (void) kill_pg(current->pgrp, SIGTTOU, 1);
  694. return -ERESTARTSYS;
  695. }
  696. }
  697. #endif
  698. if (!tty->ldisc.write)
  699. return -EIO;
  700. return do_tty_write(tty->ldisc.write, tty, file,
  701.     (const unsigned char *)buf, count);
  702. }
  703. /* Semaphore to protect creating and releasing a tty */
  704. static DECLARE_MUTEX(tty_sem);
  705. static void down_tty_sem(int index)
  706. {
  707. down(&tty_sem);
  708. }
  709. static void up_tty_sem(int index)
  710. {
  711. up(&tty_sem);
  712. }
  713. static void release_mem(struct tty_struct *tty, int idx);
  714. /*
  715.  * WSH 06/09/97: Rewritten to remove races and properly clean up after a
  716.  * failed open.  The new code protects the open with a semaphore, so it's
  717.  * really quite straightforward.  The semaphore locking can probably be
  718.  * relaxed for the (most common) case of reopening a tty.
  719.  */
  720. static int init_dev(kdev_t device, struct tty_struct **ret_tty)
  721. {
  722. struct tty_struct *tty, *o_tty;
  723. struct termios *tp, **tp_loc, *o_tp, **o_tp_loc;
  724. struct termios *ltp, **ltp_loc, *o_ltp, **o_ltp_loc;
  725. struct tty_driver *driver;
  726. int retval=0;
  727. int idx;
  728. driver = get_tty_driver(device);
  729. if (!driver)
  730. return -ENODEV;
  731. idx = MINOR(device) - driver->minor_start;
  732. /* 
  733.  * Check whether we need to acquire the tty semaphore to avoid
  734.  * race conditions.  For now, play it safe.
  735.  */
  736. down_tty_sem(idx);
  737. /* check whether we're reopening an existing tty */
  738. tty = driver->table[idx];
  739. if (tty) goto fast_track;
  740. /*
  741.  * First time open is complex, especially for PTY devices.
  742.  * This code guarantees that either everything succeeds and the
  743.  * TTY is ready for operation, or else the table slots are vacated
  744.  * and the allocated memory released.  (Except that the termios 
  745.  * and locked termios may be retained.)
  746.  */
  747. o_tty = NULL;
  748. tp = o_tp = NULL;
  749. ltp = o_ltp = NULL;
  750. tty = alloc_tty_struct();
  751. if(!tty)
  752. goto fail_no_mem;
  753. initialize_tty_struct(tty);
  754. tty->device = device;
  755. tty->driver = *driver;
  756. tp_loc = &driver->termios[idx];
  757. if (!*tp_loc) {
  758. tp = (struct termios *) kmalloc(sizeof(struct termios),
  759. GFP_KERNEL);
  760. if (!tp)
  761. goto free_mem_out;
  762. *tp = driver->init_termios;
  763. }
  764. ltp_loc = &driver->termios_locked[idx];
  765. if (!*ltp_loc) {
  766. ltp = (struct termios *) kmalloc(sizeof(struct termios),
  767.  GFP_KERNEL);
  768. if (!ltp)
  769. goto free_mem_out;
  770. memset(ltp, 0, sizeof(struct termios));
  771. }
  772. if (driver->type == TTY_DRIVER_TYPE_PTY) {
  773. o_tty = alloc_tty_struct();
  774. if (!o_tty)
  775. goto free_mem_out;
  776. initialize_tty_struct(o_tty);
  777. o_tty->device = (kdev_t) MKDEV(driver->other->major,
  778. driver->other->minor_start + idx);
  779. o_tty->driver = *driver->other;
  780. o_tp_loc  = &driver->other->termios[idx];
  781. if (!*o_tp_loc) {
  782. o_tp = (struct termios *)
  783. kmalloc(sizeof(struct termios), GFP_KERNEL);
  784. if (!o_tp)
  785. goto free_mem_out;
  786. *o_tp = driver->other->init_termios;
  787. }
  788. o_ltp_loc = &driver->other->termios_locked[idx];
  789. if (!*o_ltp_loc) {
  790. o_ltp = (struct termios *)
  791. kmalloc(sizeof(struct termios), GFP_KERNEL);
  792. if (!o_ltp)
  793. goto free_mem_out;
  794. memset(o_ltp, 0, sizeof(struct termios));
  795. }
  796. /*
  797.  * Everything allocated ... set up the o_tty structure.
  798.  */
  799. driver->other->table[idx] = o_tty;
  800. if (!*o_tp_loc)
  801. *o_tp_loc = o_tp;
  802. if (!*o_ltp_loc)
  803. *o_ltp_loc = o_ltp;
  804. o_tty->termios = *o_tp_loc;
  805. o_tty->termios_locked = *o_ltp_loc;
  806. (*driver->other->refcount)++;
  807. if (driver->subtype == PTY_TYPE_MASTER)
  808. o_tty->count++;
  809. /* Establish the links in both directions */
  810. tty->link   = o_tty;
  811. o_tty->link = tty;
  812. }
  813. /* 
  814.  * All structures have been allocated, so now we install them.
  815.  * Failures after this point use release_mem to clean up, so 
  816.  * there's no need to null out the local pointers.
  817.  */
  818. driver->table[idx] = tty;
  819. if (!*tp_loc)
  820. *tp_loc = tp;
  821. if (!*ltp_loc)
  822. *ltp_loc = ltp;
  823. tty->termios = *tp_loc;
  824. tty->termios_locked = *ltp_loc;
  825. (*driver->refcount)++;
  826. tty->count++;
  827. /* 
  828.  * Structures all installed ... call the ldisc open routines.
  829.  * If we fail here just call release_mem to clean up.  No need
  830.  * to decrement the use counts, as release_mem doesn't care.
  831.  */
  832. if (tty->ldisc.open) {
  833. retval = (tty->ldisc.open)(tty);
  834. if (retval)
  835. goto release_mem_out;
  836. }
  837. if (o_tty && o_tty->ldisc.open) {
  838. retval = (o_tty->ldisc.open)(o_tty);
  839. if (retval) {
  840. if (tty->ldisc.close)
  841. (tty->ldisc.close)(tty);
  842. goto release_mem_out;
  843. }
  844. }
  845. goto success;
  846. /*
  847.  * This fast open can be used if the tty is already open.
  848.  * No memory is allocated, and the only failures are from
  849.  * attempting to open a closing tty or attempting multiple
  850.  * opens on a pty master.
  851.  */
  852. fast_track:
  853. if (test_bit(TTY_CLOSING, &tty->flags)) {
  854. retval = -EIO;
  855. goto end_init;
  856. }
  857. if (driver->type == TTY_DRIVER_TYPE_PTY &&
  858.     driver->subtype == PTY_TYPE_MASTER) {
  859. /*
  860.  * special case for PTY masters: only one open permitted, 
  861.  * and the slave side open count is incremented as well.
  862.  */
  863. if (tty->count) {
  864. retval = -EIO;
  865. goto end_init;
  866. }
  867. tty->link->count++;
  868. }
  869. tty->count++;
  870. tty->driver = *driver; /* N.B. why do this every time?? */
  871. success:
  872. *ret_tty = tty;
  873. /* All paths come through here to release the semaphore */
  874. end_init:
  875. up_tty_sem(idx);
  876. return retval;
  877. /* Release locally allocated memory ... nothing placed in slots */
  878. free_mem_out:
  879. if (o_tp)
  880. kfree(o_tp);
  881. if (o_tty)
  882. free_tty_struct(o_tty);
  883. if (ltp)
  884. kfree(ltp);
  885. if (tp)
  886. kfree(tp);
  887. free_tty_struct(tty);
  888. fail_no_mem:
  889. retval = -ENOMEM;
  890. goto end_init;
  891. /* call the tty release_mem routine to clean out this slot */
  892. release_mem_out:
  893. printk(KERN_INFO "init_dev: ldisc open failed, "
  894.  "clearing slot %dn", idx);
  895. release_mem(tty, idx);
  896. goto end_init;
  897. }
  898. /*
  899.  * Releases memory associated with a tty structure, and clears out the
  900.  * driver table slots.
  901.  */
  902. static void release_mem(struct tty_struct *tty, int idx)
  903. {
  904. struct tty_struct *o_tty;
  905. struct termios *tp;
  906. if ((o_tty = tty->link) != NULL) {
  907. o_tty->driver.table[idx] = NULL;
  908. if (o_tty->driver.flags & TTY_DRIVER_RESET_TERMIOS) {
  909. tp = o_tty->driver.termios[idx];
  910. o_tty->driver.termios[idx] = NULL;
  911. kfree(tp);
  912. }
  913. o_tty->magic = 0;
  914. (*o_tty->driver.refcount)--;
  915. list_del(&o_tty->tty_files);
  916. free_tty_struct(o_tty);
  917. }
  918. tty->driver.table[idx] = NULL;
  919. if (tty->driver.flags & TTY_DRIVER_RESET_TERMIOS) {
  920. tp = tty->driver.termios[idx];
  921. tty->driver.termios[idx] = NULL;
  922. kfree(tp);
  923. }
  924. tty->magic = 0;
  925. (*tty->driver.refcount)--;
  926. list_del(&tty->tty_files);
  927. free_tty_struct(tty);
  928. }
  929. /*
  930.  * Even releasing the tty structures is a tricky business.. We have
  931.  * to be very careful that the structures are all released at the
  932.  * same time, as interrupts might otherwise get the wrong pointers.
  933.  *
  934.  * WSH 09/09/97: rewritten to avoid some nasty race conditions that could
  935.  * lead to double frees or releasing memory still in use.
  936.  */
  937. static void release_dev(struct file * filp)
  938. {
  939. struct tty_struct *tty, *o_tty;
  940. int pty_master, tty_closing, o_tty_closing, do_sleep;
  941. int idx;
  942. char buf[64];
  943. tty = (struct tty_struct *)filp->private_data;
  944. if (tty_paranoia_check(tty, filp->f_dentry->d_inode->i_rdev, "release_dev"))
  945. return;
  946. check_tty_count(tty, "release_dev");
  947. tty_fasync(-1, filp, 0);
  948. idx = MINOR(tty->device) - tty->driver.minor_start;
  949. pty_master = (tty->driver.type == TTY_DRIVER_TYPE_PTY &&
  950.       tty->driver.subtype == PTY_TYPE_MASTER);
  951. o_tty = tty->link;
  952. #ifdef TTY_PARANOIA_CHECK
  953. if (idx < 0 || idx >= tty->driver.num) {
  954. printk(KERN_DEBUG "release_dev: bad idx when trying to "
  955.   "free (%s)n", kdevname(tty->device));
  956. return;
  957. }
  958. if (tty != tty->driver.table[idx]) {
  959. printk(KERN_DEBUG "release_dev: driver.table[%d] not tty "
  960.   "for (%s)n", idx, kdevname(tty->device));
  961. return;
  962. }
  963. if (tty->termios != tty->driver.termios[idx]) {
  964. printk(KERN_DEBUG "release_dev: driver.termios[%d] not termios "
  965.        "for (%s)n",
  966.        idx, kdevname(tty->device));
  967. return;
  968. }
  969. if (tty->termios_locked != tty->driver.termios_locked[idx]) {
  970. printk(KERN_DEBUG "release_dev: driver.termios_locked[%d] not "
  971.        "termios_locked for (%s)n",
  972.        idx, kdevname(tty->device));
  973. return;
  974. }
  975. #endif
  976. #ifdef TTY_DEBUG_HANGUP
  977. printk(KERN_DEBUG "release_dev of %s (tty count=%d)...",
  978.        tty_name(tty, buf), tty->count);
  979. #endif
  980. #ifdef TTY_PARANOIA_CHECK
  981. if (tty->driver.other) {
  982. if (o_tty != tty->driver.other->table[idx]) {
  983. printk(KERN_DEBUG "release_dev: other->table[%d] "
  984.   "not o_tty for (%s)n",
  985.        idx, kdevname(tty->device));
  986. return;
  987. }
  988. if (o_tty->termios != tty->driver.other->termios[idx]) {
  989. printk(KERN_DEBUG "release_dev: other->termios[%d] "
  990.   "not o_termios for (%s)n",
  991.        idx, kdevname(tty->device));
  992. return;
  993. }
  994. if (o_tty->termios_locked != 
  995.       tty->driver.other->termios_locked[idx]) {
  996. printk(KERN_DEBUG "release_dev: other->termios_locked["
  997.   "%d] not o_termios_locked for (%s)n",
  998.        idx, kdevname(tty->device));
  999. return;
  1000. }
  1001. if (o_tty->link != tty) {
  1002. printk(KERN_DEBUG "release_dev: bad pty pointersn");
  1003. return;
  1004. }
  1005. }
  1006. #endif
  1007. if (tty->driver.close)
  1008. tty->driver.close(tty, filp);
  1009. /*
  1010.  * Sanity check: if tty->count is going to zero, there shouldn't be
  1011.  * any waiters on tty->read_wait or tty->write_wait.  We test the
  1012.  * wait queues and kick everyone out _before_ actually starting to
  1013.  * close.  This ensures that we won't block while releasing the tty
  1014.  * structure.
  1015.  *
  1016.  * The test for the o_tty closing is necessary, since the master and
  1017.  * slave sides may close in any order.  If the slave side closes out
  1018.  * first, its count will be one, since the master side holds an open.
  1019.  * Thus this test wouldn't be triggered at the time the slave closes,
  1020.  * so we do it now.
  1021.  *
  1022.  * Note that it's possible for the tty to be opened again while we're
  1023.  * flushing out waiters.  By recalculating the closing flags before
  1024.  * each iteration we avoid any problems.
  1025.  */
  1026. while (1) {
  1027. tty_closing = tty->count <= 1;
  1028. o_tty_closing = o_tty &&
  1029. (o_tty->count <= (pty_master ? 1 : 0));
  1030. do_sleep = 0;
  1031. if (tty_closing) {
  1032. if (waitqueue_active(&tty->read_wait)) {
  1033. wake_up(&tty->read_wait);
  1034. do_sleep++;
  1035. }
  1036. if (waitqueue_active(&tty->write_wait)) {
  1037. wake_up(&tty->write_wait);
  1038. do_sleep++;
  1039. }
  1040. }
  1041. if (o_tty_closing) {
  1042. if (waitqueue_active(&o_tty->read_wait)) {
  1043. wake_up(&o_tty->read_wait);
  1044. do_sleep++;
  1045. }
  1046. if (waitqueue_active(&o_tty->write_wait)) {
  1047. wake_up(&o_tty->write_wait);
  1048. do_sleep++;
  1049. }
  1050. }
  1051. if (!do_sleep)
  1052. break;
  1053. printk(KERN_WARNING "release_dev: %s: read/write wait queue "
  1054.     "active!n", tty_name(tty, buf));
  1055. schedule();
  1056. }
  1057. /*
  1058.  * The closing flags are now consistent with the open counts on 
  1059.  * both sides, and we've completed the last operation that could 
  1060.  * block, so it's safe to proceed with closing.
  1061.  */
  1062. if (pty_master) {
  1063. if (--o_tty->count < 0) {
  1064. printk(KERN_WARNING "release_dev: bad pty slave count "
  1065.     "(%d) for %sn",
  1066.        o_tty->count, tty_name(o_tty, buf));
  1067. o_tty->count = 0;
  1068. }
  1069. }
  1070. if (--tty->count < 0) {
  1071. printk(KERN_WARNING "release_dev: bad tty->count (%d) for %sn",
  1072.        tty->count, tty_name(tty, buf));
  1073. tty->count = 0;
  1074. }
  1075. /*
  1076.  * We've decremented tty->count, so we should zero out
  1077.  * filp->private_data, to break the link between the tty and
  1078.  * the file descriptor.  Otherwise if filp_close() blocks before
  1079.  * the file descriptor is removed from the inuse_filp
  1080.  * list, check_tty_count() could observe a discrepancy and
  1081.  * printk a warning message to the user.
  1082.  */
  1083. filp->private_data = 0;
  1084. /*
  1085.  * Perform some housekeeping before deciding whether to return.
  1086.  *
  1087.  * Set the TTY_CLOSING flag if this was the last open.  In the
  1088.  * case of a pty we may have to wait around for the other side
  1089.  * to close, and TTY_CLOSING makes sure we can't be reopened.
  1090.  */
  1091. if(tty_closing)
  1092. set_bit(TTY_CLOSING, &tty->flags);
  1093. if(o_tty_closing)
  1094. set_bit(TTY_CLOSING, &o_tty->flags);
  1095. /*
  1096.  * If _either_ side is closing, make sure there aren't any
  1097.  * processes that still think tty or o_tty is their controlling
  1098.  * tty.  Also, clear redirect if it points to either tty.
  1099.  */
  1100. if (tty_closing || o_tty_closing) {
  1101. struct task_struct *p;
  1102. read_lock(&tasklist_lock);
  1103. for_each_task(p) {
  1104. if (p->tty == tty || (o_tty && p->tty == o_tty))
  1105. p->tty = NULL;
  1106. }
  1107. read_unlock(&tasklist_lock);
  1108. if (redirect == tty || (o_tty && redirect == o_tty))
  1109. redirect = NULL;
  1110. }
  1111. /* check whether both sides are closing ... */
  1112. if (!tty_closing || (o_tty && !o_tty_closing))
  1113. return;
  1114. #ifdef TTY_DEBUG_HANGUP
  1115. printk(KERN_DEBUG "freeing tty structure...");
  1116. #endif
  1117. /*
  1118.  * Shutdown the current line discipline, and reset it to N_TTY.
  1119.  * N.B. why reset ldisc when we're releasing the memory??
  1120.  */
  1121. if (tty->ldisc.close)
  1122. (tty->ldisc.close)(tty);
  1123. tty->ldisc = ldiscs[N_TTY];
  1124. tty->termios->c_line = N_TTY;
  1125. if (o_tty) {
  1126. if (o_tty->ldisc.close)
  1127. (o_tty->ldisc.close)(o_tty);
  1128. o_tty->ldisc = ldiscs[N_TTY];
  1129. }
  1130. /*
  1131.  * Make sure that the tty's task queue isn't activated. 
  1132.  */
  1133. run_task_queue(&tq_timer);
  1134. flush_scheduled_tasks();
  1135. /* 
  1136.  * The release_mem function takes care of the details of clearing
  1137.  * the slots and preserving the termios structure.
  1138.  */
  1139. release_mem(tty, idx);
  1140. }
  1141. /*
  1142.  * tty_open and tty_release keep up the tty count that contains the
  1143.  * number of opens done on a tty. We cannot use the inode-count, as
  1144.  * different inodes might point to the same tty.
  1145.  *
  1146.  * Open-counting is needed for pty masters, as well as for keeping
  1147.  * track of serial lines: DTR is dropped when the last close happens.
  1148.  * (This is not done solely through tty->count, now.  - Ted 1/27/92)
  1149.  *
  1150.  * The termios state of a pty is reset on first open so that
  1151.  * settings don't persist across reuse.
  1152.  */
  1153. static int tty_open(struct inode * inode, struct file * filp)
  1154. {
  1155. struct tty_struct *tty;
  1156. int noctty, retval;
  1157. kdev_t device;
  1158. unsigned short saved_flags;
  1159. char buf[64];
  1160. saved_flags = filp->f_flags;
  1161. retry_open:
  1162. noctty = filp->f_flags & O_NOCTTY;
  1163. device = inode->i_rdev;
  1164. if (device == TTY_DEV) {
  1165. if (!current->tty)
  1166. return -ENXIO;
  1167. device = current->tty->device;
  1168. filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */
  1169. /* noctty = 1; */
  1170. }
  1171. #ifdef CONFIG_VT
  1172. if (device == CONSOLE_DEV) {
  1173. extern int fg_console;
  1174. device = MKDEV(TTY_MAJOR, fg_console + 1);
  1175. noctty = 1;
  1176. }
  1177. #endif
  1178. if (device == SYSCONS_DEV) {
  1179. struct console *c = console_drivers;
  1180. while(c && !c->device)
  1181. c = c->next;
  1182. if (!c)
  1183.                         return -ENODEV;
  1184.                 device = c->device(c);
  1185. filp->f_flags |= O_NONBLOCK; /* Don't let /dev/console block */
  1186. noctty = 1;
  1187. }
  1188. if (device == PTMX_DEV) {
  1189. #ifdef CONFIG_UNIX98_PTYS
  1190. /* find a free pty. */
  1191. int major, minor;
  1192. struct tty_driver *driver;
  1193. /* find a device that is not in use. */
  1194. retval = -1;
  1195. for ( major = 0 ; major < UNIX98_NR_MAJORS ; major++ ) {
  1196. driver = &ptm_driver[major];
  1197. for (minor = driver->minor_start ;
  1198.      minor < driver->minor_start + driver->num ;
  1199.      minor++) {
  1200. device = MKDEV(driver->major, minor);
  1201. if (!init_dev(device, &tty)) goto ptmx_found; /* ok! */
  1202. }
  1203. }
  1204. return -EIO; /* no free ptys */
  1205. ptmx_found:
  1206. set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
  1207. minor -= driver->minor_start;
  1208. devpts_pty_new(driver->other->name_base + minor, MKDEV(driver->other->major, minor + driver->other->minor_start));
  1209. tty_register_devfs(&pts_driver[major], DEVFS_FL_DEFAULT,
  1210.    pts_driver[major].minor_start + minor);
  1211. noctty = 1;
  1212. goto init_dev_done;
  1213. #else   /* CONFIG_UNIX_98_PTYS */
  1214. return -ENODEV;
  1215. #endif  /* CONFIG_UNIX_98_PTYS */
  1216. }
  1217. retval = init_dev(device, &tty);
  1218. if (retval)
  1219. return retval;
  1220. #ifdef CONFIG_UNIX98_PTYS
  1221. init_dev_done:
  1222. #endif
  1223. filp->private_data = tty;
  1224. file_move(filp, &tty->tty_files);
  1225. check_tty_count(tty, "tty_open");
  1226. if (tty->driver.type == TTY_DRIVER_TYPE_PTY &&
  1227.     tty->driver.subtype == PTY_TYPE_MASTER)
  1228. noctty = 1;
  1229. #ifdef TTY_DEBUG_HANGUP
  1230. printk(KERN_DEBUG "opening %s...", tty_name(tty, buf));
  1231. #endif
  1232. if (tty->driver.open)
  1233. retval = tty->driver.open(tty, filp);
  1234. else
  1235. retval = -ENODEV;
  1236. filp->f_flags = saved_flags;
  1237. if (!retval && test_bit(TTY_EXCLUSIVE, &tty->flags) && !suser())
  1238. retval = -EBUSY;
  1239. if (retval) {
  1240. #ifdef TTY_DEBUG_HANGUP
  1241. printk(KERN_DEBUG "error %d in opening %s...", retval,
  1242.        tty_name(tty, buf));
  1243. #endif
  1244. release_dev(filp);
  1245. if (retval != -ERESTARTSYS)
  1246. return retval;
  1247. if (signal_pending(current))
  1248. return retval;
  1249. schedule();
  1250. /*
  1251.  * Need to reset f_op in case a hangup happened.
  1252.  */
  1253. filp->f_op = &tty_fops;
  1254. goto retry_open;
  1255. }
  1256. if (!noctty &&
  1257.     current->leader &&
  1258.     !current->tty &&
  1259.     tty->session == 0) {
  1260.      task_lock(current);
  1261. current->tty = tty;
  1262. task_unlock(current);
  1263. current->tty_old_pgrp = 0;
  1264. tty->session = current->session;
  1265. tty->pgrp = current->pgrp;
  1266. }
  1267. if ((tty->driver.type == TTY_DRIVER_TYPE_SERIAL) &&
  1268.     (tty->driver.subtype == SERIAL_TYPE_CALLOUT) &&
  1269.     (tty->count == 1)) {
  1270. static int nr_warns;
  1271. if (nr_warns < 5) {
  1272. printk(KERN_WARNING "tty_io.c: "
  1273. "process %d (%s) used obsolete /dev/%s - "
  1274. "update software to use /dev/ttyS%dn",
  1275. current->pid, current->comm,
  1276. tty_name(tty, buf), TTY_NUMBER(tty));
  1277. nr_warns++;
  1278. }
  1279. }
  1280. return 0;
  1281. }
  1282. static int tty_release(struct inode * inode, struct file * filp)
  1283. {
  1284. lock_kernel();
  1285. release_dev(filp);
  1286. unlock_kernel();
  1287. return 0;
  1288. }
  1289. /* No kernel lock held - fine */
  1290. static unsigned int tty_poll(struct file * filp, poll_table * wait)
  1291. {
  1292. struct tty_struct * tty;
  1293. tty = (struct tty_struct *)filp->private_data;
  1294. if (tty_paranoia_check(tty, filp->f_dentry->d_inode->i_rdev, "tty_poll"))
  1295. return 0;
  1296. if (tty->ldisc.poll)
  1297. return (tty->ldisc.poll)(tty, filp, wait);
  1298. return 0;
  1299. }
  1300. static int tty_fasync(int fd, struct file * filp, int on)
  1301. {
  1302. struct tty_struct * tty;
  1303. int retval;
  1304. tty = (struct tty_struct *)filp->private_data;
  1305. if (tty_paranoia_check(tty, filp->f_dentry->d_inode->i_rdev, "tty_fasync"))
  1306. return 0;
  1307. retval = fasync_helper(fd, filp, on, &tty->fasync);
  1308. if (retval <= 0)
  1309. return retval;
  1310. if (on) {
  1311. if (!waitqueue_active(&tty->read_wait))
  1312. tty->minimum_to_wake = 1;
  1313. if (filp->f_owner.pid == 0) {
  1314. filp->f_owner.pid = (-tty->pgrp) ? : current->pid;
  1315. filp->f_owner.uid = current->uid;
  1316. filp->f_owner.euid = current->euid;
  1317. }
  1318. } else {
  1319. if (!tty->fasync && !waitqueue_active(&tty->read_wait))
  1320. tty->minimum_to_wake = N_TTY_BUF_SIZE;
  1321. }
  1322. return 0;
  1323. }
  1324. static int tiocsti(struct tty_struct *tty, char * arg)
  1325. {
  1326. char ch, mbz = 0;
  1327. if ((current->tty != tty) && !suser())
  1328. return -EPERM;
  1329. if (get_user(ch, arg))
  1330. return -EFAULT;
  1331. tty->ldisc.receive_buf(tty, &ch, &mbz, 1);
  1332. return 0;
  1333. }
  1334. static int tiocgwinsz(struct tty_struct *tty, struct winsize * arg)
  1335. {
  1336. if (copy_to_user(arg, &tty->winsize, sizeof(*arg)))
  1337. return -EFAULT;
  1338. return 0;
  1339. }
  1340. static int tiocswinsz(struct tty_struct *tty, struct tty_struct *real_tty,
  1341. struct winsize * arg)
  1342. {
  1343. struct winsize tmp_ws;
  1344. if (copy_from_user(&tmp_ws, arg, sizeof(*arg)))
  1345. return -EFAULT;
  1346. if (!memcmp(&tmp_ws, &tty->winsize, sizeof(*arg)))
  1347. return 0;
  1348. if (tty->pgrp > 0)
  1349. kill_pg(tty->pgrp, SIGWINCH, 1);
  1350. if ((real_tty->pgrp != tty->pgrp) && (real_tty->pgrp > 0))
  1351. kill_pg(real_tty->pgrp, SIGWINCH, 1);
  1352. tty->winsize = tmp_ws;
  1353. real_tty->winsize = tmp_ws;
  1354. return 0;
  1355. }
  1356. static int tioccons(struct inode *inode,
  1357. struct tty_struct *tty, struct tty_struct *real_tty)
  1358. {
  1359. if (inode->i_rdev == SYSCONS_DEV ||
  1360.     inode->i_rdev == CONSOLE_DEV) {
  1361. if (!suser())
  1362. return -EPERM;
  1363. redirect = NULL;
  1364. return 0;
  1365. }
  1366. if (redirect)
  1367. return -EBUSY;
  1368. redirect = real_tty;
  1369. return 0;
  1370. }
  1371. static int fionbio(struct file *file, int *arg)
  1372. {
  1373. int nonblock;
  1374. if (get_user(nonblock, arg))
  1375. return -EFAULT;
  1376. if (nonblock)
  1377. file->f_flags |= O_NONBLOCK;
  1378. else
  1379. file->f_flags &= ~O_NONBLOCK;
  1380. return 0;
  1381. }
  1382. static int tiocsctty(struct tty_struct *tty, int arg)
  1383. {
  1384. if (current->leader &&
  1385.     (current->session == tty->session))
  1386. return 0;
  1387. /*
  1388.  * The process must be a session leader and
  1389.  * not have a controlling tty already.
  1390.  */
  1391. if (!current->leader || current->tty)
  1392. return -EPERM;
  1393. if (tty->session > 0) {
  1394. /*
  1395.  * This tty is already the controlling
  1396.  * tty for another session group!
  1397.  */
  1398. if ((arg == 1) && suser()) {
  1399. /*
  1400.  * Steal it away
  1401.  */
  1402. struct task_struct *p;
  1403. read_lock(&tasklist_lock);
  1404. for_each_task(p)
  1405. if (p->tty == tty)
  1406. p->tty = NULL;
  1407. read_unlock(&tasklist_lock);
  1408. } else
  1409. return -EPERM;
  1410. }
  1411. task_lock(current);
  1412. current->tty = tty;
  1413. task_unlock(current);
  1414. current->tty_old_pgrp = 0;
  1415. tty->session = current->session;
  1416. tty->pgrp = current->pgrp;
  1417. return 0;
  1418. }
  1419. static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t *arg)
  1420. {
  1421. /*
  1422.  * (tty == real_tty) is a cheap way of
  1423.  * testing if the tty is NOT a master pty.
  1424.  */
  1425. if (tty == real_tty && current->tty != real_tty)
  1426. return -ENOTTY;
  1427. return put_user(real_tty->pgrp, arg);
  1428. }
  1429. static int tiocspgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t *arg)
  1430. {
  1431. pid_t pgrp;
  1432. int retval = tty_check_change(real_tty);
  1433. if (retval == -EIO)
  1434. return -ENOTTY;
  1435. if (retval)
  1436. return retval;
  1437. if (!current->tty ||
  1438.     (current->tty != real_tty) ||
  1439.     (real_tty->session != current->session))
  1440. return -ENOTTY;
  1441. if (get_user(pgrp, (pid_t *) arg))
  1442. return -EFAULT;
  1443. if (pgrp < 0)
  1444. return -EINVAL;
  1445. if (session_of_pgrp(pgrp) != current->session)
  1446. return -EPERM;
  1447. real_tty->pgrp = pgrp;
  1448. return 0;
  1449. }
  1450. static int tiocgsid(struct tty_struct *tty, struct tty_struct *real_tty, pid_t *arg)
  1451. {
  1452. /*
  1453.  * (tty == real_tty) is a cheap way of
  1454.  * testing if the tty is NOT a master pty.
  1455. */
  1456. if (tty == real_tty && current->tty != real_tty)
  1457. return -ENOTTY;
  1458. if (real_tty->session <= 0)
  1459. return -ENOTTY;
  1460. return put_user(real_tty->session, arg);
  1461. }
  1462. static int tiocttygstruct(struct tty_struct *tty, struct tty_struct *arg)
  1463. {
  1464. if (copy_to_user(arg, tty, sizeof(*arg)))
  1465. return -EFAULT;
  1466. return 0;
  1467. }
  1468. static int tiocsetd(struct tty_struct *tty, int *arg)
  1469. {
  1470. int ldisc;
  1471. if (get_user(ldisc, arg))
  1472. return -EFAULT;
  1473. return tty_set_ldisc(tty, ldisc);
  1474. }
  1475. static int send_break(struct tty_struct *tty, int duration)
  1476. {
  1477. set_current_state(TASK_INTERRUPTIBLE);
  1478. tty->driver.break_ctl(tty, -1);
  1479. if (!signal_pending(current))
  1480. schedule_timeout(duration);
  1481. tty->driver.break_ctl(tty, 0);
  1482. if (signal_pending(current))
  1483. return -EINTR;
  1484. return 0;
  1485. }
  1486. static int tty_generic_brk(struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg)
  1487. {
  1488. if (cmd == TCSBRK && arg) 
  1489. {
  1490. /* tcdrain case */
  1491. int retval = tty_check_change(tty);
  1492. if (retval)
  1493. return retval;
  1494. tty_wait_until_sent(tty, 0);
  1495. if (signal_pending(current))
  1496. return -EINTR;
  1497. }
  1498. return 0;
  1499. }
  1500. /*
  1501.  * Split this up, as gcc can choke on it otherwise..
  1502.  */
  1503. int tty_ioctl(struct inode * inode, struct file * file,
  1504.       unsigned int cmd, unsigned long arg)
  1505. {
  1506. struct tty_struct *tty, *real_tty;
  1507. int retval;
  1508. tty = (struct tty_struct *)file->private_data;
  1509. if (tty_paranoia_check(tty, inode->i_rdev, "tty_ioctl"))
  1510. return -EINVAL;
  1511. real_tty = tty;
  1512. if (tty->driver.type == TTY_DRIVER_TYPE_PTY &&
  1513.     tty->driver.subtype == PTY_TYPE_MASTER)
  1514. real_tty = tty->link;
  1515. /*
  1516.  * Break handling by driver
  1517.  */
  1518. if (!tty->driver.break_ctl) {
  1519. switch(cmd) {
  1520. case TIOCSBRK:
  1521. case TIOCCBRK:
  1522. if (tty->driver.ioctl)
  1523. return tty->driver.ioctl(tty, file, cmd, arg);
  1524. return -EINVAL;
  1525. /* These two ioctl's always return success; even if */
  1526. /* the driver doesn't support them. */
  1527. case TCSBRK:
  1528. case TCSBRKP:
  1529. retval = -ENOIOCTLCMD;
  1530. if (tty->driver.ioctl)
  1531. retval = tty->driver.ioctl(tty, file, cmd, arg);
  1532. /* Not driver handled */
  1533. if (retval == -ENOIOCTLCMD)
  1534. retval = tty_generic_brk(tty, file, cmd, arg);
  1535. return retval;
  1536. }
  1537. }
  1538. /*
  1539.  * Factor out some common prep work
  1540.  */
  1541. switch (cmd) {
  1542. case TIOCSETD:
  1543. case TIOCSBRK:
  1544. case TIOCCBRK:
  1545. case TCSBRK:
  1546. case TCSBRKP:
  1547. retval = tty_check_change(tty);
  1548. if (retval)
  1549. return retval;
  1550. if (cmd != TIOCCBRK) {
  1551. tty_wait_until_sent(tty, 0);
  1552. if (signal_pending(current))
  1553. return -EINTR;
  1554. }
  1555. break;
  1556. }
  1557. switch (cmd) {
  1558. case TIOCSTI:
  1559. return tiocsti(tty, (char *)arg);
  1560. case TIOCGWINSZ:
  1561. return tiocgwinsz(tty, (struct winsize *) arg);
  1562. case TIOCSWINSZ:
  1563. return tiocswinsz(tty, real_tty, (struct winsize *) arg);
  1564. case TIOCCONS:
  1565. return tioccons(inode, tty, real_tty);
  1566. case FIONBIO:
  1567. return fionbio(file, (int *) arg);
  1568. case TIOCEXCL:
  1569. set_bit(TTY_EXCLUSIVE, &tty->flags);
  1570. return 0;
  1571. case TIOCNXCL:
  1572. clear_bit(TTY_EXCLUSIVE, &tty->flags);
  1573. return 0;
  1574. case TIOCNOTTY:
  1575. if (current->tty != tty)
  1576. return -ENOTTY;
  1577. if (current->leader)
  1578. disassociate_ctty(0);
  1579. task_lock(current);
  1580. current->tty = NULL;
  1581. task_unlock(current);
  1582. return 0;
  1583. case TIOCSCTTY:
  1584. return tiocsctty(tty, arg);
  1585. case TIOCGPGRP:
  1586. return tiocgpgrp(tty, real_tty, (pid_t *) arg);
  1587. case TIOCSPGRP:
  1588. return tiocspgrp(tty, real_tty, (pid_t *) arg);
  1589. case TIOCGSID:
  1590. return tiocgsid(tty, real_tty, (pid_t *) arg);
  1591. case TIOCGETD:
  1592. return put_user(tty->ldisc.num, (int *) arg);
  1593. case TIOCSETD:
  1594. return tiocsetd(tty, (int *) arg);
  1595. #ifdef CONFIG_VT
  1596. case TIOCLINUX:
  1597. return tioclinux(tty, arg);
  1598. #endif
  1599. case TIOCTTYGSTRUCT:
  1600. return tiocttygstruct(tty, (struct tty_struct *) arg);
  1601. /*
  1602.  * Break handling
  1603.  */
  1604. case TIOCSBRK: /* Turn break on, unconditionally */
  1605. tty->driver.break_ctl(tty, -1);
  1606. return 0;
  1607. case TIOCCBRK: /* Turn break off, unconditionally */
  1608. tty->driver.break_ctl(tty, 0);
  1609. return 0;
  1610. case TCSBRK:   /* SVID version: non-zero arg --> no break */
  1611. /*
  1612.  * XXX is the above comment correct, or the
  1613.  * code below correct?  Is this ioctl used at
  1614.  * all by anyone?
  1615.  */
  1616. if (!arg)
  1617. return send_break(tty, HZ/4);
  1618. return 0;
  1619. case TCSBRKP: /* support for POSIX tcsendbreak() */
  1620. return send_break(tty, arg ? arg*(HZ/10) : HZ/4);
  1621. }
  1622. if (tty->driver.ioctl) {
  1623. int retval = (tty->driver.ioctl)(tty, file, cmd, arg);
  1624. if (retval != -ENOIOCTLCMD)
  1625. return retval;
  1626. }
  1627. if (tty->ldisc.ioctl) {
  1628. int retval = (tty->ldisc.ioctl)(tty, file, cmd, arg);
  1629. if (retval != -ENOIOCTLCMD)
  1630. return retval;
  1631. }
  1632. return -EINVAL;
  1633. }
  1634. /*
  1635.  * This implements the "Secure Attention Key" ---  the idea is to
  1636.  * prevent trojan horses by killing all processes associated with this
  1637.  * tty when the user hits the "Secure Attention Key".  Required for
  1638.  * super-paranoid applications --- see the Orange Book for more details.
  1639.  * 
  1640.  * This code could be nicer; ideally it should send a HUP, wait a few
  1641.  * seconds, then send a INT, and then a KILL signal.  But you then
  1642.  * have to coordinate with the init process, since all processes associated
  1643.  * with the current tty must be dead before the new getty is allowed
  1644.  * to spawn.
  1645.  *
  1646.  * Now, if it would be correct ;-/ The current code has a nasty hole -
  1647.  * it doesn't catch files in flight. We may send the descriptor to ourselves
  1648.  * via AF_UNIX socket, close it and later fetch from socket. FIXME.
  1649.  *
  1650.  * Nasty bug: do_SAK is being called in interrupt context.  This can
  1651.  * deadlock.  We punt it up to process context.  AKPM - 16Mar2001
  1652.  */
  1653. static void __do_SAK(void *arg)
  1654. {
  1655. #ifdef TTY_SOFT_SAK
  1656. tty_hangup(tty);
  1657. #else
  1658. struct tty_struct *tty = arg;
  1659. struct task_struct *p;
  1660. int session;
  1661. int i;
  1662. struct file *filp;
  1663. if (!tty)
  1664. return;
  1665. session  = tty->session;
  1666. if (tty->ldisc.flush_buffer)
  1667. tty->ldisc.flush_buffer(tty);
  1668. if (tty->driver.flush_buffer)
  1669. tty->driver.flush_buffer(tty);
  1670. read_lock(&tasklist_lock);
  1671. for_each_task(p) {
  1672. if ((p->tty == tty) ||
  1673.     ((session > 0) && (p->session == session))) {
  1674. send_sig(SIGKILL, p, 1);
  1675. continue;
  1676. }
  1677. task_lock(p);
  1678. if (p->files) {
  1679. read_lock(&p->files->file_lock);
  1680. for (i=0; i < p->files->max_fds; i++) {
  1681. filp = fcheck_files(p->files, i);
  1682. if (filp && (filp->f_op == &tty_fops) &&
  1683.     (filp->private_data == tty)) {
  1684. send_sig(SIGKILL, p, 1);
  1685. break;
  1686. }
  1687. }
  1688. read_unlock(&p->files->file_lock);
  1689. }
  1690. task_unlock(p);
  1691. }
  1692. read_unlock(&tasklist_lock);
  1693. #endif
  1694. }
  1695. /*
  1696.  * The tq handling here is a little racy - tty->SAK_tq may already be queued.
  1697.  * But there's no mechanism to fix that without futzing with tqueue_lock.
  1698.  * Fortunately we don't need to worry, because if ->SAK_tq is already queued,
  1699.  * the values which we write to it will be identical to the values which it
  1700.  * already has. --akpm
  1701.  */
  1702. void do_SAK(struct tty_struct *tty)
  1703. {
  1704. if (!tty)
  1705. return;
  1706. PREPARE_TQUEUE(&tty->SAK_tq, __do_SAK, tty);
  1707. schedule_task(&tty->SAK_tq);
  1708. }
  1709. /*
  1710.  * This routine is called out of the software interrupt to flush data
  1711.  * from the flip buffer to the line discipline.
  1712.  */
  1713. static void flush_to_ldisc(void *private_)
  1714. {
  1715. struct tty_struct *tty = (struct tty_struct *) private_;
  1716. unsigned char *cp;
  1717. char *fp;
  1718. int count;
  1719. unsigned long flags;
  1720. if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
  1721. queue_task(&tty->flip.tqueue, &tq_timer);
  1722. return;
  1723. }
  1724. if (tty->flip.buf_num) {
  1725. cp = tty->flip.char_buf + TTY_FLIPBUF_SIZE;
  1726. fp = tty->flip.flag_buf + TTY_FLIPBUF_SIZE;
  1727. tty->flip.buf_num = 0;
  1728. save_flags(flags); cli();
  1729. tty->flip.char_buf_ptr = tty->flip.char_buf;
  1730. tty->flip.flag_buf_ptr = tty->flip.flag_buf;
  1731. } else {
  1732. cp = tty->flip.char_buf;
  1733. fp = tty->flip.flag_buf;
  1734. tty->flip.buf_num = 1;
  1735. save_flags(flags); cli();
  1736. tty->flip.char_buf_ptr = tty->flip.char_buf + TTY_FLIPBUF_SIZE;
  1737. tty->flip.flag_buf_ptr = tty->flip.flag_buf + TTY_FLIPBUF_SIZE;
  1738. }
  1739. count = tty->flip.count;
  1740. tty->flip.count = 0;
  1741. restore_flags(flags);
  1742. tty->ldisc.receive_buf(tty, cp, fp, count);
  1743. }
  1744. /*
  1745.  * Routine which returns the baud rate of the tty
  1746.  *
  1747.  * Note that the baud_table needs to be kept in sync with the
  1748.  * include/asm/termbits.h file.
  1749.  */
  1750. static int baud_table[] = {
  1751. 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
  1752. 9600, 19200, 38400, 57600, 115200, 230400, 460800,
  1753. #ifdef __sparc__
  1754. 76800, 153600, 307200, 614400, 921600
  1755. #else
  1756. 500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000,
  1757. 2500000, 3000000, 3500000, 4000000
  1758. #endif
  1759. };
  1760. static int n_baud_table = sizeof(baud_table)/sizeof(int);
  1761. int tty_get_baud_rate(struct tty_struct *tty)
  1762. {
  1763. unsigned int cflag, i;
  1764. cflag = tty->termios->c_cflag;
  1765. i = cflag & CBAUD;
  1766. if (i & CBAUDEX) {
  1767. i &= ~CBAUDEX;
  1768. if (i < 1 || i+15 >= n_baud_table) 
  1769. tty->termios->c_cflag &= ~CBAUDEX;
  1770. else
  1771. i += 15;
  1772. }
  1773. if (i==15 && tty->alt_speed) {
  1774. if (!tty->warned) {
  1775. printk(KERN_WARNING "Use of setserial/setrocket to "
  1776.     "set SPD_* flags is deprecatedn");
  1777. tty->warned = 1;
  1778. }
  1779. return(tty->alt_speed);
  1780. }
  1781. return baud_table[i];
  1782. }
  1783. void tty_flip_buffer_push(struct tty_struct *tty)
  1784. {
  1785. if (tty->low_latency)
  1786. flush_to_ldisc((void *) tty);
  1787. else
  1788. queue_task(&tty->flip.tqueue, &tq_timer);
  1789. }
  1790. /*
  1791.  * This subroutine initializes a tty structure.
  1792.  */
  1793. static void initialize_tty_struct(struct tty_struct *tty)
  1794. {
  1795. memset(tty, 0, sizeof(struct tty_struct));
  1796. tty->magic = TTY_MAGIC;
  1797. tty->ldisc = ldiscs[N_TTY];
  1798. tty->pgrp = -1;
  1799. tty->flip.char_buf_ptr = tty->flip.char_buf;
  1800. tty->flip.flag_buf_ptr = tty->flip.flag_buf;
  1801. tty->flip.tqueue.routine = flush_to_ldisc;
  1802. tty->flip.tqueue.data = tty;
  1803. init_MUTEX(&tty->flip.pty_sem);
  1804. init_waitqueue_head(&tty->write_wait);
  1805. init_waitqueue_head(&tty->read_wait);
  1806. tty->tq_hangup.routine = do_tty_hangup;
  1807. tty->tq_hangup.data = tty;
  1808. sema_init(&tty->atomic_read, 1);
  1809. sema_init(&tty->atomic_write, 1);
  1810. spin_lock_init(&tty->read_lock);
  1811. INIT_LIST_HEAD(&tty->tty_files);
  1812. INIT_TQUEUE(&tty->SAK_tq, 0, 0);
  1813. }
  1814. /*
  1815.  * The default put_char routine if the driver did not define one.
  1816.  */
  1817. void tty_default_put_char(struct tty_struct *tty, unsigned char ch)
  1818. {
  1819. tty->driver.write(tty, 0, &ch, 1);
  1820. }
  1821. /*
  1822.  * Register a tty device described by <driver>, with minor number <minor>.
  1823.  */
  1824. void tty_register_devfs (struct tty_driver *driver, unsigned int flags, unsigned minor)
  1825. {
  1826. #ifdef CONFIG_DEVFS_FS
  1827. umode_t mode = S_IFCHR | S_IRUSR | S_IWUSR;
  1828. kdev_t device = MKDEV (driver->major, minor);
  1829. int idx = minor - driver->minor_start;
  1830. char buf[32];
  1831. switch (device) {
  1832. case TTY_DEV:
  1833. case PTMX_DEV:
  1834. mode |= S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
  1835. break;
  1836. default:
  1837. if (driver->major == PTY_MASTER_MAJOR)
  1838. mode |= S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
  1839. break;
  1840. }
  1841. if ( (minor <  driver->minor_start) || 
  1842.      (minor >= driver->minor_start + driver->num) ) {
  1843. printk(KERN_ERR "Attempt to register invalid minor number "
  1844.        "with devfs (%d:%d).n", (int)driver->major,(int)minor);
  1845. return;
  1846. }
  1847. #  ifdef CONFIG_UNIX98_PTYS
  1848. if ( (driver->major >= UNIX98_PTY_SLAVE_MAJOR) &&
  1849.      (driver->major < UNIX98_PTY_SLAVE_MAJOR + UNIX98_NR_MAJORS) )
  1850. flags |= DEVFS_FL_CURRENT_OWNER;
  1851. #  endif
  1852. sprintf(buf, driver->name, idx + driver->name_base);
  1853. devfs_register (NULL, buf, flags | DEVFS_FL_DEFAULT,
  1854. driver->major, minor, mode, &tty_fops, NULL);
  1855. #endif /* CONFIG_DEVFS_FS */
  1856. }
  1857. void tty_unregister_devfs (struct tty_driver *driver, unsigned minor)
  1858. {
  1859. #ifdef CONFIG_DEVFS_FS
  1860. void * handle;
  1861. int idx = minor - driver->minor_start;
  1862. char buf[32];
  1863. sprintf(buf, driver->name, idx + driver->name_base);
  1864. handle = devfs_find_handle (NULL, buf, driver->major, minor,
  1865.     DEVFS_SPECIAL_CHR, 0);
  1866. devfs_unregister (handle);
  1867. #endif /* CONFIG_DEVFS_FS */
  1868. }
  1869. EXPORT_SYMBOL(tty_register_devfs);
  1870. EXPORT_SYMBOL(tty_unregister_devfs);
  1871. /*
  1872.  * Called by a tty driver to register itself.
  1873.  */
  1874. int tty_register_driver(struct tty_driver *driver)
  1875. {
  1876. int error;
  1877.         int i;
  1878. if (driver->flags & TTY_DRIVER_INSTALLED)
  1879. return 0;
  1880. error = devfs_register_chrdev(driver->major, driver->name, &tty_fops);
  1881. if (error < 0)
  1882. return error;
  1883. else if(driver->major == 0)
  1884. driver->major = error;
  1885. if (!driver->put_char)
  1886. driver->put_char = tty_default_put_char;
  1887. driver->prev = 0;
  1888. driver->next = tty_drivers;
  1889. if (tty_drivers) tty_drivers->prev = driver;
  1890. tty_drivers = driver;
  1891. if ( !(driver->flags & TTY_DRIVER_NO_DEVFS) ) {
  1892. for(i = 0; i < driver->num; i++)
  1893.     tty_register_devfs(driver, 0, driver->minor_start + i);
  1894. }
  1895. proc_tty_register_driver(driver);
  1896. return error;
  1897. }
  1898. /*
  1899.  * Called by a tty driver to unregister itself.
  1900.  */
  1901. int tty_unregister_driver(struct tty_driver *driver)
  1902. {
  1903. int retval;
  1904. struct tty_driver *p;
  1905. int i, found = 0;
  1906. struct termios *tp;
  1907. const char *othername = NULL;
  1908. if (*driver->refcount)
  1909. return -EBUSY;
  1910. for (p = tty_drivers; p; p = p->next) {
  1911. if (p == driver)
  1912. found++;
  1913. else if (p->major == driver->major)
  1914. othername = p->name;
  1915. }
  1916. if (!found)
  1917. return -ENOENT;
  1918. if (othername == NULL) {
  1919. retval = devfs_unregister_chrdev(driver->major, driver->name);
  1920. if (retval)
  1921. return retval;
  1922. } else
  1923. devfs_register_chrdev(driver->major, othername, &tty_fops);
  1924. if (driver->prev)
  1925. driver->prev->next = driver->next;
  1926. else
  1927. tty_drivers = driver->next;
  1928. if (driver->next)
  1929. driver->next->prev = driver->prev;
  1930. /*
  1931.  * Free the termios and termios_locked structures because
  1932.  * we don't want to get memory leaks when modular tty
  1933.  * drivers are removed from the kernel.
  1934.  */
  1935. for (i = 0; i < driver->num; i++) {
  1936. tp = driver->termios[i];
  1937. if (tp) {
  1938. driver->termios[i] = NULL;
  1939. kfree(tp);
  1940. }
  1941. tp = driver->termios_locked[i];
  1942. if (tp) {
  1943. driver->termios_locked[i] = NULL;
  1944. kfree(tp);
  1945. }
  1946. tty_unregister_devfs(driver, driver->minor_start + i);
  1947. }
  1948. proc_tty_unregister_driver(driver);
  1949. return 0;
  1950. }
  1951. /*
  1952.  * Initialize the console device. This is called *early*, so
  1953.  * we can't necessarily depend on lots of kernel help here.
  1954.  * Just do some early initializations, and do the complex setup
  1955.  * later.
  1956.  */
  1957. void __init console_init(void)
  1958. {
  1959. /* Setup the default TTY line discipline. */
  1960. memset(ldiscs, 0, sizeof(ldiscs));
  1961. (void) tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY);
  1962. /*
  1963.  * Set up the standard termios.  Individual tty drivers may 
  1964.  * deviate from this; this is used as a template.
  1965.  */
  1966. memset(&tty_std_termios, 0, sizeof(struct termios));
  1967. memcpy(tty_std_termios.c_cc, INIT_C_CC, NCCS);
  1968. tty_std_termios.c_iflag = ICRNL | IXON;
  1969. tty_std_termios.c_oflag = OPOST | ONLCR;
  1970. tty_std_termios.c_cflag = B38400 | CS8 | CREAD | HUPCL;
  1971. tty_std_termios.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK |
  1972. ECHOCTL | ECHOKE | IEXTEN;
  1973. /*
  1974.  * set up the console device so that later boot sequences can 
  1975.  * inform about problems etc..
  1976.  */
  1977. #ifdef CONFIG_EARLY_PRINTK
  1978. disable_early_printk(); 
  1979. #endif
  1980. #ifdef CONFIG_VT
  1981. con_init();
  1982. #endif
  1983. #ifdef CONFIG_AU1000_SERIAL_CONSOLE
  1984. au1000_serial_console_init();
  1985. #endif
  1986. #ifdef CONFIG_SERIAL_CONSOLE
  1987. #if (defined(CONFIG_8xx) || defined(CONFIG_8260))
  1988. console_8xx_init();
  1989. #elif defined(CONFIG_MAC_SERIAL) && defined(CONFIG_SERIAL)
  1990. if (_machine == _MACH_Pmac)
  1991.   mac_scc_console_init();
  1992. else
  1993. serial_console_init();
  1994. #elif defined(CONFIG_MAC_SERIAL)
  1995.   mac_scc_console_init();
  1996. #elif defined(CONFIG_PARISC)
  1997. pdc_console_init();
  1998. #elif defined(CONFIG_SERIAL)
  1999. serial_console_init();
  2000. #endif /* CONFIG_8xx */
  2001. #ifdef CONFIG_SGI_SERIAL
  2002. sgi_serial_console_init();
  2003. #endif
  2004. #if defined(CONFIG_MVME162_SCC) || defined(CONFIG_BVME6000_SCC) || defined(CONFIG_MVME147_SCC)
  2005. vme_scc_console_init();
  2006. #endif
  2007. #if defined(CONFIG_SERIAL167)
  2008. serial167_console_init();
  2009. #endif
  2010. #if defined(CONFIG_SH_SCI)
  2011. sci_console_init();
  2012. #endif
  2013. #endif
  2014. #ifdef CONFIG_TN3270_CONSOLE
  2015. tub3270_con_init();
  2016. #endif
  2017. #ifdef CONFIG_TN3215
  2018. con3215_init();
  2019. #endif
  2020. #ifdef CONFIG_HWC
  2021.         hwc_console_init();
  2022. #endif
  2023. #ifdef CONFIG_STDIO_CONSOLE
  2024. stdio_console_init();
  2025. #endif
  2026. #ifdef CONFIG_SERIAL_21285_CONSOLE
  2027. rs285_console_init();
  2028. #endif
  2029. #ifdef CONFIG_SERIAL_SA1100_CONSOLE
  2030. sa1100_rs_console_init();
  2031. #endif
  2032. #ifdef CONFIG_ARC_CONSOLE
  2033. arc_console_init();
  2034. #endif
  2035. #ifdef CONFIG_SERIAL_AMBA_CONSOLE
  2036. ambauart_console_init();
  2037. #endif
  2038. #ifdef CONFIG_SERIAL_TX3912_CONSOLE
  2039. tx3912_console_init();
  2040. #endif
  2041. #ifdef CONFIG_TXX927_SERIAL_CONSOLE
  2042. txx927_console_init();
  2043. #endif
  2044. #ifdef CONFIG_SIBYTE_SB1250_DUART_CONSOLE
  2045. sb1250_serial_console_init();
  2046. #endif
  2047. }
  2048. static struct tty_driver dev_tty_driver, dev_syscons_driver;
  2049. #ifdef CONFIG_UNIX98_PTYS
  2050. static struct tty_driver dev_ptmx_driver;
  2051. #endif
  2052. #ifdef CONFIG_VT
  2053. static struct tty_driver dev_console_driver;
  2054. #endif
  2055. /*
  2056.  * Ok, now we can initialize the rest of the tty devices and can count
  2057.  * on memory allocations, interrupts etc..
  2058.  */
  2059. void __init tty_init(void)
  2060. {
  2061. /*
  2062.  * dev_tty_driver and dev_console_driver are actually magic
  2063.  * devices which get redirected at open time.  Nevertheless,
  2064.  * we register them so that register_chrdev is called
  2065.  * appropriately.
  2066.  */
  2067. memset(&dev_tty_driver, 0, sizeof(struct tty_driver));
  2068. dev_tty_driver.magic = TTY_DRIVER_MAGIC;
  2069. dev_tty_driver.driver_name = "/dev/tty";
  2070. dev_tty_driver.name = dev_tty_driver.driver_name + 5;
  2071. dev_tty_driver.name_base = 0;
  2072. dev_tty_driver.major = TTYAUX_MAJOR;
  2073. dev_tty_driver.minor_start = 0;
  2074. dev_tty_driver.num = 1;
  2075. dev_tty_driver.type = TTY_DRIVER_TYPE_SYSTEM;
  2076. dev_tty_driver.subtype = SYSTEM_TYPE_TTY;
  2077. if (tty_register_driver(&dev_tty_driver))
  2078. panic("Couldn't register /dev/tty drivern");
  2079. dev_syscons_driver = dev_tty_driver;
  2080. dev_syscons_driver.driver_name = "/dev/console";
  2081. dev_syscons_driver.name = dev_syscons_driver.driver_name + 5;
  2082. dev_syscons_driver.major = TTYAUX_MAJOR;
  2083. dev_syscons_driver.minor_start = 1;
  2084. dev_syscons_driver.type = TTY_DRIVER_TYPE_SYSTEM;
  2085. dev_syscons_driver.subtype = SYSTEM_TYPE_SYSCONS;
  2086. if (tty_register_driver(&dev_syscons_driver))
  2087. panic("Couldn't register /dev/console drivern");
  2088. /* console calls tty_register_driver() before kmalloc() works.
  2089.  * Thus, we can't devfs_register() then.  Do so now, instead. 
  2090.  */
  2091. #ifdef CONFIG_VT
  2092. con_init_devfs();
  2093. #endif
  2094. #ifdef CONFIG_UNIX98_PTYS
  2095. dev_ptmx_driver = dev_tty_driver;
  2096. dev_ptmx_driver.driver_name = "/dev/ptmx";
  2097. dev_ptmx_driver.name = dev_ptmx_driver.driver_name + 5;
  2098. dev_ptmx_driver.major= MAJOR(PTMX_DEV);
  2099. dev_ptmx_driver.minor_start = MINOR(PTMX_DEV);
  2100. dev_ptmx_driver.type = TTY_DRIVER_TYPE_SYSTEM;
  2101. dev_ptmx_driver.subtype = SYSTEM_TYPE_SYSPTMX;
  2102. if (tty_register_driver(&dev_ptmx_driver))
  2103. panic("Couldn't register /dev/ptmx drivern");
  2104. #endif
  2105. #ifdef CONFIG_VT
  2106. dev_console_driver = dev_tty_driver;
  2107. dev_console_driver.driver_name = "/dev/vc/0";
  2108. dev_console_driver.name = dev_console_driver.driver_name + 5;
  2109. dev_console_driver.major = TTY_MAJOR;
  2110. dev_console_driver.type = TTY_DRIVER_TYPE_SYSTEM;
  2111. dev_console_driver.subtype = SYSTEM_TYPE_CONSOLE;
  2112. if (tty_register_driver(&dev_console_driver))
  2113. panic("Couldn't register /dev/tty0 drivern");
  2114. kbd_init();
  2115. #endif
  2116. #ifdef CONFIG_ESPSERIAL  /* init ESP before rs, so rs doesn't see the port */
  2117. espserial_init();
  2118. #endif
  2119. #if defined(CONFIG_MVME162_SCC) || defined(CONFIG_BVME6000_SCC) || defined(CONFIG_MVME147_SCC)
  2120. vme_scc_init();
  2121. #endif
  2122. #ifdef CONFIG_SERIAL_TX3912
  2123. tx3912_rs_init();
  2124. #endif
  2125. #ifdef CONFIG_ROCKETPORT
  2126. rp_init();
  2127. #endif
  2128. #ifdef CONFIG_SERIAL167
  2129. serial167_init();
  2130. #endif
  2131. #ifdef CONFIG_CYCLADES
  2132. cy_init();
  2133. #endif
  2134. #ifdef CONFIG_STALLION
  2135. stl_init();
  2136. #endif
  2137. #ifdef CONFIG_ISTALLION
  2138. stli_init();
  2139. #endif
  2140. #ifdef CONFIG_DIGI
  2141. pcxe_init();
  2142. #endif
  2143. #ifdef CONFIG_DIGIEPCA
  2144. pc_init();
  2145. #endif
  2146. #ifdef CONFIG_SPECIALIX
  2147. specialix_init();
  2148. #endif
  2149. #if (defined(CONFIG_8xx) || defined(CONFIG_8260))
  2150. rs_8xx_init();
  2151. #endif /* CONFIG_8xx */
  2152. pty_init();
  2153. #ifdef CONFIG_MOXA_SMARTIO
  2154. mxser_init();
  2155. #endif
  2156. #ifdef CONFIG_MOXA_INTELLIO
  2157. moxa_init();
  2158. #endif
  2159. #ifdef CONFIG_VT
  2160. vcs_init();
  2161. #endif
  2162. #ifdef CONFIG_TN3270
  2163. tub3270_init();
  2164. #endif
  2165. #ifdef CONFIG_TN3215
  2166. tty3215_init();
  2167. #endif
  2168. #ifdef CONFIG_HWC
  2169. hwc_tty_init();
  2170. #endif
  2171. #ifdef CONFIG_A2232
  2172. a2232board_init();
  2173. #endif
  2174. }