tty_io.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:60k
源码类别:

嵌入式Linux

开发平台:

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