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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *
  3.  * BRIEF MODULE DESCRIPTION
  4.  * Au1000 serial port driver.
  5.  *
  6.  * Copyright 2001 MontaVista Software Inc.
  7.  * Author: MontaVista Software, Inc.
  8.  *          ppopov@mvista.com or source@mvista.com
  9.  *
  10.  *  Derived almost entirely from drivers/char/serial.c:
  11.  *
  12.  *  Copyright (C) 1991, 1992  Linus Torvalds
  13.  *  Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997,
  14.  *  1998, 1999  Theodore Ts'o
  15.  *
  16.  *  This program is free software; you can redistribute  it and/or modify it
  17.  *  under  the terms of  the GNU General  Public License as published by the
  18.  *  Free Software Foundation;  either version 2 of the  License, or (at your
  19.  *  option) any later version.
  20.  *
  21.  *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
  22.  *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
  23.  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
  24.  *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
  25.  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  26.  *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
  27.  *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  28.  *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
  29.  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  30.  *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31.  *
  32.  *  You should have received a copy of the  GNU General Public License along
  33.  *  with this program; if not, write  to the Free Software Foundation, Inc.,
  34.  *  675 Mass Ave, Cambridge, MA 02139, USA.
  35.  */
  36. static char *serial_version = "1.01";
  37. static char *serial_revdate = "2001-02-08";
  38. #include <linux/config.h>
  39. #include <linux/version.h>
  40. #undef SERIAL_PARANOIA_CHECK
  41. #define CONFIG_SERIAL_NOPAUSE_IO
  42. #define SERIAL_DO_RESTART
  43. /* Set of debugging defines */
  44. #undef SERIAL_DEBUG_INTR
  45. #undef SERIAL_DEBUG_OPEN
  46. #undef SERIAL_DEBUG_FLOW
  47. #undef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT
  48. #undef SERIAL_DEBUG_PCI
  49. #undef SERIAL_DEBUG_AUTOCONF
  50. #ifdef MODULE
  51. #undef CONFIG_AU1000_SERIAL_CONSOLE
  52. #endif
  53. #define CONFIG_SERIAL_RSA
  54. #define RS_STROBE_TIME (10*HZ)
  55. #define RS_ISR_PASS_LIMIT 256
  56. /*
  57.  * End of serial driver configuration section.
  58.  */
  59. #include <linux/module.h>
  60. #include <linux/types.h>
  61. #ifdef LOCAL_HEADERS
  62. #include "serial_local.h"
  63. #else
  64. #include <linux/serial.h>
  65. #include <linux/serialP.h>
  66. #include <asm/au1000.h>
  67. #include <asm/serial.h>
  68. #define LOCAL_VERSTRING ""
  69. #endif
  70. #include <linux/errno.h>
  71. #include <linux/signal.h>
  72. #include <linux/sched.h>
  73. #include <linux/timer.h>
  74. #include <linux/interrupt.h>
  75. #include <linux/tty.h>
  76. #include <linux/tty_flip.h>
  77. #include <linux/major.h>
  78. #include <linux/string.h>
  79. #include <linux/fcntl.h>
  80. #include <linux/ptrace.h>
  81. #include <linux/ioport.h>
  82. #include <linux/mm.h>
  83. #include <linux/slab.h>
  84. #include <linux/init.h>
  85. #include <asm/uaccess.h>
  86. #include <linux/delay.h>
  87. #ifdef CONFIG_AU1000_SERIAL_CONSOLE
  88. #include <linux/console.h>
  89. #endif
  90. #ifdef CONFIG_MAGIC_SYSRQ
  91. #include <linux/sysrq.h>
  92. #endif
  93. #include <asm/system.h>
  94. #include <asm/io.h>
  95. #include <asm/irq.h>
  96. #include <asm/bitops.h>
  97. #ifdef CONFIG_MAC_SERIAL
  98. #define SERIAL_DEV_OFFSET 2
  99. #else
  100. #define SERIAL_DEV_OFFSET 0
  101. #endif
  102. #ifdef SERIAL_INLINE
  103. #define _INLINE_ inline
  104. #else
  105. #define _INLINE_
  106. #endif
  107. static char *serial_name = "Serial driver";
  108. static DECLARE_TASK_QUEUE(tq_serial);
  109. static struct tty_driver serial_driver, callout_driver;
  110. static int serial_refcount;
  111. static struct timer_list serial_timer;
  112. extern unsigned long get_au1000_uart_baud_base(void);
  113. /* serial subtype definitions */
  114. #ifndef SERIAL_TYPE_NORMAL
  115. #define SERIAL_TYPE_NORMAL 1
  116. #define SERIAL_TYPE_CALLOUT 2
  117. #endif
  118. /* number of characters left in xmit buffer before we ask for more */
  119. #define WAKEUP_CHARS 256
  120. /*
  121.  * IRQ_timeout - How long the timeout should be for each IRQ
  122.  *  should be after the IRQ has been active.
  123.  */
  124. static struct async_struct *IRQ_ports[NR_IRQS];
  125. static int IRQ_timeout[NR_IRQS];
  126. #ifdef CONFIG_AU1000_SERIAL_CONSOLE
  127. static struct console sercons;
  128. static int lsr_break_flag;
  129. #endif
  130. #if defined(CONFIG_AU1000_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
  131. static unsigned long break_pressed; /* break, really ... */
  132. #endif
  133. static void autoconfig(struct serial_state * state);
  134. static void change_speed(struct async_struct *info, struct termios *old);
  135. static void rs_wait_until_sent(struct tty_struct *tty, int timeout);
  136. /*
  137.  * Here we define the default xmit fifo size used for each type of
  138.  * UART
  139.  */
  140. static struct serial_uart_config uart_config[] = {
  141. { "unknown", 1, 0 },
  142. { "8250", 1, 0 },
  143. { "16450", 1, 0 },
  144. { "16550", 1, 0 },
  145. { 0, 0}
  146. };
  147. static struct serial_state rs_table[RS_TABLE_SIZE] = {
  148. SERIAL_PORT_DFNS /* Defined in serial.h */
  149. };
  150. #define NR_PORTS (sizeof(rs_table)/sizeof(struct serial_state))
  151. #ifndef PREPARE_FUNC
  152. #define PREPARE_FUNC(dev)  (dev->prepare)
  153. #define ACTIVATE_FUNC(dev)  (dev->activate)
  154. #define DEACTIVATE_FUNC(dev)  (dev->deactivate)
  155. #endif
  156. #define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8)
  157. static struct tty_struct *serial_table[NR_PORTS];
  158. static struct termios *serial_termios[NR_PORTS];
  159. static struct termios *serial_termios_locked[NR_PORTS];
  160. #if defined(MODULE) && defined(SERIAL_DEBUG_MCOUNT)
  161. #define DBG_CNT(s) printk("(%s): [%x] refc=%d, serc=%d, ttyc=%d -> %sn", 
  162.  kdevname(tty->device), (info->flags), serial_refcount,info->count,tty->count,s)
  163. #else
  164. #define DBG_CNT(s)
  165. #endif
  166. /*
  167.  * tmp_buf is used as a temporary buffer by serial_write.  We need to
  168.  * lock it in case the copy_from_user blocks while swapping in a page,
  169.  * and some other program tries to do a serial write at the same time.
  170.  * Since the lock will only come under contention when the system is
  171.  * swapping and available memory is low, it makes sense to share one
  172.  * buffer across all the serial ports, since it significantly saves
  173.  * memory if large numbers of serial ports are open.
  174.  */
  175. static unsigned char *tmp_buf;
  176. #ifdef DECLARE_MUTEX
  177. static DECLARE_MUTEX(tmp_buf_sem);
  178. #else
  179. static struct semaphore tmp_buf_sem = MUTEX;
  180. #endif
  181. static inline int serial_paranoia_check(struct async_struct *info,
  182. kdev_t device, const char *routine)
  183. {
  184. #ifdef SERIAL_PARANOIA_CHECK
  185. static const char *badmagic =
  186. "Warning: bad magic number for serial struct (%s) in %sn";
  187. static const char *badinfo =
  188. "Warning: null async_struct for (%s) in %sn";
  189. if (!info) {
  190. printk(badinfo, kdevname(device), routine);
  191. return 1;
  192. }
  193. if (info->magic != SERIAL_MAGIC) {
  194. printk(badmagic, kdevname(device), routine);
  195. return 1;
  196. }
  197. #endif
  198. return 0;
  199. }
  200. static _INLINE_ unsigned int serial_in(struct async_struct *info, int offset)
  201. {
  202. return (au_readl(info->port+offset) & 0xffff);
  203. }
  204. static _INLINE_ void serial_out(struct async_struct *info, int offset, int value)
  205. {
  206. au_writel(value & 0xffff, info->port+offset);
  207. }
  208. /*
  209.  * We used to support using pause I/O for certain machines.  We
  210.  * haven't supported this for a while, but just in case it's badly
  211.  * needed for certain old 386 machines, I've left these #define's
  212.  * in....
  213.  */
  214. #define serial_inp(info, offset) serial_in(info, offset)
  215. #define serial_outp(info, offset, value) serial_out(info, offset, value)
  216. /*
  217.  * ------------------------------------------------------------
  218.  * rs_stop() and rs_start()
  219.  *
  220.  * This routines are called before setting or resetting tty->stopped.
  221.  * They enable or disable transmitter interrupts, as necessary.
  222.  * ------------------------------------------------------------
  223.  */
  224. static void rs_stop(struct tty_struct *tty)
  225. {
  226. struct async_struct *info = (struct async_struct *)tty->driver_data;
  227. unsigned long flags;
  228. if (serial_paranoia_check(info, tty->device, "rs_stop"))
  229. return;
  230. save_flags(flags); cli();
  231. if (info->IER & UART_IER_THRI) {
  232. info->IER &= ~UART_IER_THRI;
  233. serial_out(info, UART_IER, info->IER);
  234. }
  235. restore_flags(flags);
  236. }
  237. static void rs_start(struct tty_struct *tty)
  238. {
  239. struct async_struct *info = (struct async_struct *)tty->driver_data;
  240. unsigned long flags;
  241. if (serial_paranoia_check(info, tty->device, "rs_start"))
  242. return;
  243. save_flags(flags); cli();
  244. if (info->xmit.head != info->xmit.tail
  245.     && info->xmit.buf
  246.     && !(info->IER & UART_IER_THRI)) {
  247. info->IER |= UART_IER_THRI;
  248. serial_out(info, UART_IER, info->IER);
  249. }
  250. restore_flags(flags);
  251. }
  252. /*
  253.  * ----------------------------------------------------------------------
  254.  *
  255.  * Here starts the interrupt handling routines.  All of the following
  256.  * subroutines are declared as inline and are folded into
  257.  * rs_interrupt().  They were separated out for readability's sake.
  258.  *
  259.  * Note: rs_interrupt() is a "fast" interrupt, which means that it
  260.  * runs with interrupts turned off.  People who may want to modify
  261.  * rs_interrupt() should try to keep the interrupt handler as fast as
  262.  * possible.  After you are done making modifications, it is not a bad
  263.  * idea to do:
  264.  *
  265.  * gcc -S -DKERNEL -Wall -Wstrict-prototypes -O6 -fomit-frame-pointer serial.c
  266.  *
  267.  * and look at the resulting assemble code in serial.s.
  268.  *
  269.  *  - Ted Ts'o (tytso@mit.edu), 7-Mar-93
  270.  * -----------------------------------------------------------------------
  271.  */
  272. /*
  273.  * This routine is used by the interrupt handler to schedule
  274.  * processing in the software interrupt portion of the driver.
  275.  */
  276. static _INLINE_ void rs_sched_event(struct async_struct *info,
  277.   int event)
  278. {
  279. info->event |= 1 << event;
  280. queue_task(&info->tqueue, &tq_serial);
  281. mark_bh(SERIAL_BH);
  282. }
  283. static _INLINE_ void receive_chars(struct async_struct *info,
  284.  int *status, struct pt_regs * regs)
  285. {
  286. struct tty_struct *tty = info->tty;
  287. unsigned char ch;
  288. int ignored = 0;
  289. struct async_icount *icount;
  290. icount = &info->state->icount;
  291. do {
  292. ch = serial_inp(info, UART_RX);
  293. if (tty->flip.count >= TTY_FLIPBUF_SIZE)
  294. goto ignore_char;
  295. *tty->flip.char_buf_ptr = ch;
  296. icount->rx++;
  297. #ifdef SERIAL_DEBUG_INTR
  298. printk("DR%02x:%02x...", ch, *status);
  299. #endif
  300. *tty->flip.flag_buf_ptr = 0;
  301. if (*status & (UART_LSR_BI | UART_LSR_PE |
  302.        UART_LSR_FE | UART_LSR_OE)) {
  303. /*
  304.  * For statistics only
  305.  */
  306. if (*status & UART_LSR_BI) {
  307. *status &= ~(UART_LSR_FE | UART_LSR_PE);
  308. icount->brk++;
  309. /*
  310.  * We do the SysRQ and SAK checking
  311.  * here because otherwise the break
  312.  * may get masked by ignore_status_mask
  313.  * or read_status_mask.
  314.  */
  315. #if defined(CONFIG_AU1000_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
  316. if (info->line == sercons.index) {
  317. if (!break_pressed) {
  318. break_pressed = jiffies;
  319. goto ignore_char;
  320. }
  321. break_pressed = 0;
  322. }
  323. #endif
  324. if (info->flags & ASYNC_SAK)
  325. do_SAK(tty);
  326. } else if (*status & UART_LSR_PE)
  327. icount->parity++;
  328. else if (*status & UART_LSR_FE)
  329. icount->frame++;
  330. if (*status & UART_LSR_OE)
  331. icount->overrun++;
  332. /*
  333.  * Now check to see if character should be
  334.  * ignored, and mask off conditions which
  335.  * should be ignored.
  336.  */
  337. if (*status & info->ignore_status_mask) {
  338. if (++ignored > 100)
  339. break;
  340. goto ignore_char;
  341. }
  342. *status &= info->read_status_mask;
  343. #ifdef CONFIG_AU1000_SERIAL_CONSOLE
  344. if (info->line == sercons.index) {
  345. /* Recover the break flag from console xmit */
  346. *status |= lsr_break_flag;
  347. lsr_break_flag = 0;
  348. }
  349. #endif
  350. if (*status & (UART_LSR_BI)) {
  351. #ifdef SERIAL_DEBUG_INTR
  352. printk("handling break....");
  353. #endif
  354. *tty->flip.flag_buf_ptr = TTY_BREAK;
  355. } else if (*status & UART_LSR_PE)
  356. *tty->flip.flag_buf_ptr = TTY_PARITY;
  357. else if (*status & UART_LSR_FE)
  358. *tty->flip.flag_buf_ptr = TTY_FRAME;
  359. if (*status & UART_LSR_OE) {
  360. /*
  361.  * Overrun is special, since it's
  362.  * reported immediately, and doesn't
  363.  * affect the current character
  364.  */
  365. tty->flip.count++;
  366. tty->flip.flag_buf_ptr++;
  367. tty->flip.char_buf_ptr++;
  368. *tty->flip.flag_buf_ptr = TTY_OVERRUN;
  369. if (tty->flip.count >= TTY_FLIPBUF_SIZE)
  370. goto ignore_char;
  371. }
  372. }
  373. #if defined(CONFIG_AU1000_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
  374. if (break_pressed && info->line == sercons.index) {
  375. if (ch != 0 &&
  376.     time_before(jiffies, break_pressed + HZ*5)) {
  377. handle_sysrq(ch, regs, NULL, NULL);
  378. break_pressed = 0;
  379. goto ignore_char;
  380. }
  381. break_pressed = 0;
  382. }
  383. #endif
  384. tty->flip.flag_buf_ptr++;
  385. tty->flip.char_buf_ptr++;
  386. tty->flip.count++;
  387. ignore_char:
  388. *status = serial_inp(info, UART_LSR);
  389. } while (*status & UART_LSR_DR);
  390. tty_flip_buffer_push(tty);
  391. }
  392. static _INLINE_ void transmit_chars(struct async_struct *info, int *intr_done)
  393. {
  394. int count;
  395. if (info->x_char) {
  396. serial_outp(info, UART_TX, info->x_char);
  397. info->state->icount.tx++;
  398. info->x_char = 0;
  399. if (intr_done)
  400. *intr_done = 0;
  401. return;
  402. }
  403. if (info->xmit.head == info->xmit.tail
  404.     || info->tty->stopped
  405.     || info->tty->hw_stopped) {
  406. info->IER &= ~UART_IER_THRI;
  407. serial_out(info, UART_IER, info->IER);
  408. return;
  409. }
  410. count = info->xmit_fifo_size;
  411. do {
  412. serial_out(info, UART_TX, info->xmit.buf[info->xmit.tail]);
  413. info->xmit.tail = (info->xmit.tail + 1) & (SERIAL_XMIT_SIZE-1);
  414. info->state->icount.tx++;
  415. if (info->xmit.head == info->xmit.tail)
  416. break;
  417. } while (--count > 0);
  418. if (CIRC_CNT(info->xmit.head,
  419.      info->xmit.tail,
  420.      SERIAL_XMIT_SIZE) < WAKEUP_CHARS)
  421. rs_sched_event(info, RS_EVENT_WRITE_WAKEUP);
  422. #ifdef SERIAL_DEBUG_INTR
  423. printk("THRE...");
  424. #endif
  425. if (intr_done)
  426. *intr_done = 0;
  427. if (info->xmit.head == info->xmit.tail) {
  428. info->IER &= ~UART_IER_THRI;
  429. serial_out(info, UART_IER, info->IER);
  430. }
  431. }
  432. static _INLINE_ void check_modem_status(struct async_struct *info)
  433. {
  434. int status;
  435. struct async_icount *icount;
  436. status = serial_in(info, UART_MSR);
  437. if (status & UART_MSR_ANY_DELTA) {
  438. icount = &info->state->icount;
  439. /* update input line counters */
  440. if (status & UART_MSR_TERI)
  441. icount->rng++;
  442. if (status & UART_MSR_DDSR)
  443. icount->dsr++;
  444. if (status & UART_MSR_DDCD) {
  445. icount->dcd++;
  446. #ifdef CONFIG_HARD_PPS
  447. if ((info->flags & ASYNC_HARDPPS_CD) &&
  448.     (status & UART_MSR_DCD))
  449. hardpps();
  450. #endif
  451. }
  452. if (status & UART_MSR_DCTS)
  453. icount->cts++;
  454. wake_up_interruptible(&info->delta_msr_wait);
  455. }
  456. if ((info->flags & ASYNC_CHECK_CD) && (status & UART_MSR_DDCD)) {
  457. #if (defined(SERIAL_DEBUG_OPEN) || defined(SERIAL_DEBUG_INTR))
  458. printk("ttys%d CD now %s...", info->line,
  459.        (status & UART_MSR_DCD) ? "on" : "off");
  460. #endif
  461. if (status & UART_MSR_DCD)
  462. wake_up_interruptible(&info->open_wait);
  463. else if (!((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  464.    (info->flags & ASYNC_CALLOUT_NOHUP))) {
  465. #ifdef SERIAL_DEBUG_OPEN
  466. printk("doing serial hangup...");
  467. #endif
  468. if (info->tty)
  469. tty_hangup(info->tty);
  470. }
  471. }
  472. if (info->flags & ASYNC_CTS_FLOW) {
  473. if (info->tty->hw_stopped) {
  474. if (status & UART_MSR_CTS) {
  475. #if (defined(SERIAL_DEBUG_INTR) || defined(SERIAL_DEBUG_FLOW))
  476. printk("CTS tx start...");
  477. #endif
  478. info->tty->hw_stopped = 0;
  479. info->IER |= UART_IER_THRI;
  480. serial_out(info, UART_IER, info->IER);
  481. rs_sched_event(info, RS_EVENT_WRITE_WAKEUP);
  482. return;
  483. }
  484. } else {
  485. if (!(status & UART_MSR_CTS)) {
  486. #if (defined(SERIAL_DEBUG_INTR) || defined(SERIAL_DEBUG_FLOW))
  487. printk("CTS tx stop...");
  488. #endif
  489. info->tty->hw_stopped = 1;
  490. info->IER &= ~UART_IER_THRI;
  491. serial_out(info, UART_IER, info->IER);
  492. }
  493. }
  494. }
  495. }
  496. /*
  497.  * This is the serial driver's interrupt routine for a single port
  498.  */
  499. static void rs_interrupt_single(int irq, void *dev_id, struct pt_regs * regs)
  500. {
  501. int status;
  502. int pass_counter = 0;
  503. struct async_struct * info;
  504. #ifdef SERIAL_DEBUG_INTR
  505. printk("rs_interrupt_single(%d)...", irq);
  506. #endif
  507. info = IRQ_ports[irq];
  508. if (!info || !info->tty)
  509. return;
  510. do {
  511. status = serial_inp(info, UART_LSR);
  512. #ifdef SERIAL_DEBUG_INTR
  513. printk("status = %x...", status);
  514. #endif
  515. if (status & UART_LSR_DR)
  516. receive_chars(info, &status, regs);
  517. check_modem_status(info);
  518. if (status & UART_LSR_THRE)
  519. transmit_chars(info, 0);
  520. if (pass_counter++ > RS_ISR_PASS_LIMIT) {
  521. #if 0
  522. printk("rs_single loop break.n");
  523. #endif
  524. break;
  525. }
  526. } while (!(serial_in(info, UART_IIR) & UART_IIR_NO_INT));
  527. info->last_active = jiffies;
  528. #ifdef SERIAL_DEBUG_INTR
  529. printk("end.n");
  530. #endif
  531. }
  532. /*
  533.  * -------------------------------------------------------------------
  534.  * Here ends the serial interrupt routines.
  535.  * -------------------------------------------------------------------
  536.  */
  537. /*
  538.  * This routine is used to handle the "bottom half" processing for the
  539.  * serial driver, known also the "software interrupt" processing.
  540.  * This processing is done at the kernel interrupt level, after the
  541.  * rs_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON.  This
  542.  * is where time-consuming activities which can not be done in the
  543.  * interrupt driver proper are done; the interrupt driver schedules
  544.  * them using rs_sched_event(), and they get done here.
  545.  */
  546. static void do_serial_bh(void)
  547. {
  548. run_task_queue(&tq_serial);
  549. }
  550. static void do_softint(void *private_)
  551. {
  552. struct async_struct *info = (struct async_struct *) private_;
  553. struct tty_struct *tty;
  554. tty = info->tty;
  555. if (!tty)
  556. return;
  557. if (test_and_clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event)) {
  558. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  559.     tty->ldisc.write_wakeup)
  560. (tty->ldisc.write_wakeup)(tty);
  561. wake_up_interruptible(&tty->write_wait);
  562. #ifdef SERIAL_HAVE_POLL_WAIT
  563. wake_up_interruptible(&tty->poll_wait);
  564. #endif
  565. }
  566. }
  567. /*
  568.  * This subroutine is called when the RS_TIMER goes off.  It is used
  569.  * by the serial driver to handle ports that do not have an interrupt
  570.  * (irq=0).  This doesn't work very well for 16450's, but gives barely
  571.  * passable results for a 16550A.  (Although at the expense of much
  572.  * CPU overhead).
  573.  */
  574. static void rs_timer(unsigned long dummy)
  575. {
  576. static unsigned long last_strobe;
  577. struct async_struct *info;
  578. unsigned int i;
  579. unsigned long flags;
  580. if ((jiffies - last_strobe) >= RS_STROBE_TIME) {
  581. for (i=0; i < NR_IRQS; i++) {
  582. info = IRQ_ports[i];
  583. if (!info)
  584. continue;
  585. save_flags(flags); cli();
  586. rs_interrupt_single(i, NULL, NULL);
  587. restore_flags(flags);
  588. }
  589. }
  590. last_strobe = jiffies;
  591. mod_timer(&serial_timer, jiffies + RS_STROBE_TIME);
  592. #if 0
  593. if (IRQ_ports[0]) {
  594. save_flags(flags); cli();
  595. rs_interrupt_single(0, NULL, NULL);
  596. restore_flags(flags);
  597. mod_timer(&serial_timer, jiffies + IRQ_timeout[0]);
  598. }
  599. #endif
  600. }
  601. /*
  602.  * ---------------------------------------------------------------
  603.  * Low level utility subroutines for the serial driver:  routines to
  604.  * figure out the appropriate timeout for an interrupt chain, routines
  605.  * to initialize and startup a serial port, and routines to shutdown a
  606.  * serial port.  Useful stuff like that.
  607.  * ---------------------------------------------------------------
  608.  */
  609. /*
  610.  * This routine figures out the correct timeout for a particular IRQ.
  611.  * It uses the smallest timeout of all of the serial ports in a
  612.  * particular interrupt chain.  Now only used for IRQ 0....
  613.  */
  614. static void figure_IRQ_timeout(int irq)
  615. {
  616. struct async_struct *info;
  617. int timeout = 60*HZ; /* 60 seconds === a long time :-) */
  618. info = IRQ_ports[irq];
  619. if (!info) {
  620. IRQ_timeout[irq] = 60*HZ;
  621. return;
  622. }
  623. while (info) {
  624. if (info->timeout < timeout)
  625. timeout = info->timeout;
  626. info = info->next_port;
  627. }
  628. if (!irq)
  629. timeout = timeout / 2;
  630. IRQ_timeout[irq] = (timeout > 3) ? timeout-2 : 1;
  631. }
  632. static int startup(struct async_struct * info)
  633. {
  634. unsigned long flags;
  635. int retval=0;
  636. void (*handler)(int, void *, struct pt_regs *);
  637. struct serial_state *state= info->state;
  638. unsigned long page;
  639. page = get_zeroed_page(GFP_KERNEL);
  640. if (!page)
  641. return -ENOMEM;
  642. save_flags(flags); cli();
  643. if (info->flags & ASYNC_INITIALIZED) {
  644. free_page(page);
  645. goto errout;
  646. }
  647. if (!CONFIGURED_SERIAL_PORT(state) || !state->type) {
  648. if (info->tty)
  649. set_bit(TTY_IO_ERROR, &info->tty->flags);
  650. free_page(page);
  651. goto errout;
  652. }
  653. if (info->xmit.buf)
  654. free_page(page);
  655. else
  656. info->xmit.buf = (unsigned char *) page;
  657. if (au_readl(UART_MOD_CNTRL + state->port) != 0x3) {
  658. au_writel(3, UART_MOD_CNTRL + state->port);
  659. au_sync_delay(10);
  660. }
  661. #ifdef SERIAL_DEBUG_OPEN
  662. printk("starting up ttys%d (irq %d)...", info->line, state->irq);
  663. #endif
  664. /*
  665.  * Clear the FIFO buffers and disable them
  666.  * (they will be reenabled in change_speed())
  667.  */
  668. if (uart_config[state->type].flags & UART_CLEAR_FIFO) {
  669. serial_outp(info, UART_FCR, UART_FCR_ENABLE_FIFO);
  670. serial_outp(info, UART_FCR, (UART_FCR_ENABLE_FIFO |
  671.      UART_FCR_CLEAR_RCVR |
  672.      UART_FCR_CLEAR_XMIT));
  673. serial_outp(info, UART_FCR, 0);
  674. }
  675. /*
  676.  * Clear the interrupt registers.
  677.  */
  678. (void) serial_inp(info, UART_LSR);
  679. (void) serial_inp(info, UART_RX);
  680. (void) serial_inp(info, UART_IIR);
  681. (void) serial_inp(info, UART_MSR);
  682. /*
  683.  * At this point there's no way the LSR could still be 0xFF;
  684.  * if it is, then bail out, because there's likely no UART
  685.  * here.
  686.  */
  687. if (!(info->flags & ASYNC_BUGGY_UART) &&
  688.     (serial_inp(info, UART_LSR) == 0xff)) {
  689. printk("LSR safety check engaged!n");
  690. if (capable(CAP_SYS_ADMIN)) {
  691. if (info->tty)
  692. set_bit(TTY_IO_ERROR, &info->tty->flags);
  693. } else
  694. retval = -ENODEV;
  695. goto errout;
  696. }
  697. /*
  698.  * Allocate the IRQ if necessary
  699.  */
  700. #if 0
  701. /* au1000, uart0 irq is 0 */
  702. if (state->irq && (!IRQ_ports[state->irq] || !IRQ_ports[state->irq]->next_port)) {
  703. #endif
  704. if ((!IRQ_ports[state->irq] || !IRQ_ports[state->irq]->next_port)) {
  705. if (IRQ_ports[state->irq]) {
  706. retval = -EBUSY;
  707. goto errout;
  708. } else
  709. handler = rs_interrupt_single;
  710. retval = request_irq(state->irq, handler, SA_SHIRQ,
  711.      "serial", &IRQ_ports[state->irq]);
  712. if (retval) {
  713. if (capable(CAP_SYS_ADMIN)) {
  714. if (info->tty)
  715. set_bit(TTY_IO_ERROR,
  716. &info->tty->flags);
  717. retval = 0;
  718. }
  719. goto errout;
  720. }
  721. }
  722. /*
  723.  * Insert serial port into IRQ chain.
  724.  */
  725. info->prev_port = 0;
  726. info->next_port = IRQ_ports[state->irq];
  727. if (info->next_port)
  728. info->next_port->prev_port = info;
  729. IRQ_ports[state->irq] = info;
  730. figure_IRQ_timeout(state->irq);
  731. /*
  732.  * Now, initialize the UART
  733.  */
  734. serial_outp(info, UART_LCR, UART_LCR_WLEN8);
  735. info->MCR = 0;
  736. if (info->tty->termios->c_cflag & CBAUD)
  737. info->MCR = UART_MCR_DTR | UART_MCR_RTS;
  738. {
  739. if (state->irq != 0)
  740. info->MCR |= UART_MCR_OUT2;
  741. }
  742. info->MCR |= ALPHA_KLUDGE_MCR;  /* Don't ask */
  743. serial_outp(info, UART_MCR, info->MCR);
  744. /*
  745.  * Finally, enable interrupts
  746.  */
  747. info->IER = UART_IER_MSI | UART_IER_RLSI | UART_IER_RDI;
  748. serial_outp(info, UART_IER, info->IER); /* enable interrupts */
  749. /*
  750.  * And clear the interrupt registers again for luck.
  751.  */
  752. (void)serial_inp(info, UART_LSR);
  753. (void)serial_inp(info, UART_RX);
  754. (void)serial_inp(info, UART_IIR);
  755. (void)serial_inp(info, UART_MSR);
  756. if (info->tty)
  757. clear_bit(TTY_IO_ERROR, &info->tty->flags);
  758. info->xmit.head = info->xmit.tail = 0;
  759. /*
  760.  * Set up serial timers...
  761.  */
  762. mod_timer(&serial_timer, jiffies + 2*HZ/100);
  763. /*
  764.  * Set up the tty->alt_speed kludge
  765.  */
  766. if (info->tty) {
  767. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
  768. info->tty->alt_speed = 57600;
  769. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
  770. info->tty->alt_speed = 115200;
  771. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)
  772. info->tty->alt_speed = 230400;
  773. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
  774. info->tty->alt_speed = 460800;
  775. }
  776. /*
  777.  * and set the speed of the serial port
  778.  */
  779. change_speed(info, 0);
  780. info->flags |= ASYNC_INITIALIZED;
  781. restore_flags(flags);
  782. return 0;
  783. errout:
  784. restore_flags(flags);
  785. return retval;
  786. }
  787. /*
  788.  * This routine will shutdown a serial port; interrupts are disabled, and
  789.  * DTR is dropped if the hangup on close termio flag is on.
  790.  */
  791. static void shutdown(struct async_struct * info)
  792. {
  793. unsigned long flags;
  794. struct serial_state *state;
  795. int retval;
  796. if (!(info->flags & ASYNC_INITIALIZED))
  797. return;
  798. state = info->state;
  799. #ifdef SERIAL_DEBUG_OPEN
  800. printk("Shutting down serial port %d (irq %d)....", info->line,
  801.        state->irq);
  802. #endif
  803. save_flags(flags); cli(); /* Disable interrupts */
  804. /*
  805.  * clear delta_msr_wait queue to avoid mem leaks: we may free the irq
  806.  * here so the queue might never be waken up
  807.  */
  808. wake_up_interruptible(&info->delta_msr_wait);
  809. /*
  810.  * First unlink the serial port from the IRQ chain...
  811.  */
  812. if (info->next_port)
  813. info->next_port->prev_port = info->prev_port;
  814. if (info->prev_port)
  815. info->prev_port->next_port = info->next_port;
  816. else
  817. IRQ_ports[state->irq] = info->next_port;
  818. figure_IRQ_timeout(state->irq);
  819. /*
  820.  * Free the IRQ, if necessary
  821.  */
  822. // if (state->irq && (!IRQ_ports[state->irq] ||
  823. if ((!IRQ_ports[state->irq] ||
  824.   !IRQ_ports[state->irq]->next_port)) {
  825. if (IRQ_ports[state->irq]) {
  826. free_irq(state->irq, &IRQ_ports[state->irq]);
  827. retval = request_irq(state->irq, rs_interrupt_single,
  828.      SA_SHIRQ, "serial",
  829.      &IRQ_ports[state->irq]);
  830. if (retval)
  831. printk("serial shutdown: request_irq: error %d"
  832.        "  Couldn't reacquire IRQ.n", retval);
  833. } else
  834. free_irq(state->irq, &IRQ_ports[state->irq]);
  835. }
  836. if (info->xmit.buf) {
  837. unsigned long pg = (unsigned long) info->xmit.buf;
  838. info->xmit.buf = 0;
  839. free_page(pg);
  840. }
  841. info->IER = 0;
  842. serial_outp(info, UART_IER, 0x00); /* disable all intrs */
  843. info->MCR &= ~UART_MCR_OUT2;
  844. info->MCR |= ALPHA_KLUDGE_MCR;  /* Don't ask */
  845. /* disable break condition */
  846. serial_out(info, UART_LCR, serial_inp(info, UART_LCR) & ~UART_LCR_SBC);
  847. if (!info->tty || (info->tty->termios->c_cflag & HUPCL))
  848. info->MCR &= ~(UART_MCR_DTR|UART_MCR_RTS);
  849. serial_outp(info, UART_MCR, info->MCR);
  850. /* disable FIFO's */
  851. serial_outp(info, UART_FCR, (UART_FCR_ENABLE_FIFO |
  852.      UART_FCR_CLEAR_RCVR |
  853.      UART_FCR_CLEAR_XMIT));
  854. serial_outp(info, UART_FCR, 0);
  855. (void)serial_in(info, UART_RX);    /* read data port to reset things */
  856. if (info->tty)
  857. set_bit(TTY_IO_ERROR, &info->tty->flags);
  858. info->flags &= ~ASYNC_INITIALIZED;
  859. #ifndef CONFIG_REMOTE_DEBUG
  860. au_writel(0, UART_MOD_CNTRL + state->port);
  861. au_sync_delay(10);
  862. #endif
  863. restore_flags(flags);
  864. }
  865. /*
  866.  * This routine is called to set the UART divisor registers to match
  867.  * the specified baud rate for a serial port.
  868.  */
  869. static void change_speed(struct async_struct *info,
  870.  struct termios *old_termios)
  871. {
  872. int quot = 0, baud_base, baud;
  873. unsigned cflag, cval, fcr = 0;
  874. int bits;
  875. unsigned long flags;
  876. if (!info->tty || !info->tty->termios)
  877. return;
  878. cflag = info->tty->termios->c_cflag;
  879. if (!CONFIGURED_SERIAL_PORT(info))
  880. return;
  881. /* byte size and parity */
  882. switch (cflag & CSIZE) {
  883.       case CS5: cval = 0x00; bits = 7; break;
  884.       case CS6: cval = 0x01; bits = 8; break;
  885.       case CS7: cval = 0x02; bits = 9; break;
  886.       case CS8: cval = 0x03; bits = 10; break;
  887.       /* Never happens, but GCC is too dumb to figure it out */
  888.       default:  cval = 0x00; bits = 7; break;
  889.       }
  890. if (cflag & CSTOPB) {
  891. cval |= 0x04;
  892. bits++;
  893. }
  894. if (cflag & PARENB) {
  895. cval |= UART_LCR_PARITY;
  896. bits++;
  897. }
  898. if (!(cflag & PARODD))
  899. cval |= UART_LCR_EPAR;
  900. #ifdef CMSPAR
  901. if (cflag & CMSPAR)
  902. cval |= UART_LCR_SPAR;
  903. #endif
  904. /* Determine divisor based on baud rate */
  905. baud = tty_get_baud_rate(info->tty);
  906. if (!baud) {
  907. baud = 9600; /* B0 transition handled in rs_set_termios */
  908. }
  909. baud_base = get_au1000_uart_baud_base();
  910. //if (baud == 38400 &&
  911. if (((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST)) {
  912. quot = info->state->custom_divisor;
  913. }
  914. else {
  915. if (baud == 134)
  916. /* Special case since 134 is really 134.5 */
  917. quot = (2*baud_base / 269);
  918. else if (baud)
  919. quot = baud_base / baud;
  920. }
  921. /* If the quotient is zero refuse the change */
  922. if (!quot && old_termios) {
  923. info->tty->termios->c_cflag &= ~CBAUD;
  924. info->tty->termios->c_cflag |= (old_termios->c_cflag & CBAUD);
  925. baud = tty_get_baud_rate(info->tty);
  926. if (!baud)
  927. baud = 9600;
  928. if (baud == 38400 &&
  929.     ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST))
  930. quot = info->state->custom_divisor;
  931. else {
  932. if (baud == 134)
  933. /* Special case since 134 is really 134.5 */
  934. quot = (2*baud_base / 269);
  935. else if (baud)
  936. quot = baud_base / baud;
  937. }
  938. }
  939. /* As a last resort, if the quotient is zero, default to 9600 bps */
  940. if (!quot)
  941. quot = baud_base / 9600;
  942. info->quot = quot;
  943. info->timeout = ((info->xmit_fifo_size*HZ*bits*quot) / baud_base);
  944. info->timeout += HZ/50; /* Add .02 seconds of slop */
  945. /* Set up FIFO's */
  946. if (uart_config[info->state->type].flags & UART_USE_FIFO) {
  947. if ((info->state->baud_base / quot) < 2400)
  948. fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIGGER_1;
  949. else
  950. fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIGGER_8;
  951. }
  952. /* CTS flow control flag and modem status interrupts */
  953. info->IER &= ~UART_IER_MSI;
  954. if (info->flags & ASYNC_HARDPPS_CD)
  955. info->IER |= UART_IER_MSI;
  956. if (cflag & CRTSCTS) {
  957. info->flags |= ASYNC_CTS_FLOW;
  958. info->IER |= UART_IER_MSI;
  959. } else
  960. info->flags &= ~ASYNC_CTS_FLOW;
  961. if (cflag & CLOCAL)
  962. info->flags &= ~ASYNC_CHECK_CD;
  963. else {
  964. info->flags |= ASYNC_CHECK_CD;
  965. info->IER |= UART_IER_MSI;
  966. }
  967. serial_out(info, UART_IER, info->IER);
  968. /*
  969.  * Set up parity check flag
  970.  */
  971. #define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
  972. info->read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
  973. if (I_INPCK(info->tty))
  974. info->read_status_mask |= UART_LSR_FE | UART_LSR_PE;
  975. if (I_BRKINT(info->tty) || I_PARMRK(info->tty))
  976. info->read_status_mask |= UART_LSR_BI;
  977. /*
  978.  * Characters to ignore
  979.  */
  980. info->ignore_status_mask = 0;
  981. if (I_IGNPAR(info->tty))
  982. info->ignore_status_mask |= UART_LSR_PE | UART_LSR_FE;
  983. if (I_IGNBRK(info->tty)) {
  984. info->ignore_status_mask |= UART_LSR_BI;
  985. /*
  986.  * If we're ignore parity and break indicators, ignore
  987.  * overruns too.  (For real raw support).
  988.  */
  989. if (I_IGNPAR(info->tty))
  990. info->ignore_status_mask |= UART_LSR_OE;
  991. }
  992. /*
  993.  * !!! ignore all characters if CREAD is not set
  994.  */
  995. if ((cflag & CREAD) == 0)
  996. info->ignore_status_mask |= UART_LSR_DR;
  997. save_flags(flags); cli();
  998. serial_outp(info, UART_CLK, quot & 0xffff);
  999. serial_outp(info, UART_LCR, cval);
  1000. info->LCR = cval; /* Save LCR */
  1001. restore_flags(flags);
  1002. }
  1003. static void rs_put_char(struct tty_struct *tty, unsigned char ch)
  1004. {
  1005. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1006. unsigned long flags;
  1007. if (serial_paranoia_check(info, tty->device, "rs_put_char"))
  1008. return;
  1009. if (!tty || !info->xmit.buf)
  1010. return;
  1011. save_flags(flags); cli();
  1012. if (CIRC_SPACE(info->xmit.head,
  1013.        info->xmit.tail,
  1014.        SERIAL_XMIT_SIZE) == 0) {
  1015. restore_flags(flags);
  1016. return;
  1017. }
  1018. info->xmit.buf[info->xmit.head] = ch;
  1019. info->xmit.head = (info->xmit.head + 1) & (SERIAL_XMIT_SIZE-1);
  1020. restore_flags(flags);
  1021. }
  1022. static void rs_flush_chars(struct tty_struct *tty)
  1023. {
  1024. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1025. unsigned long flags;
  1026. if (serial_paranoia_check(info, tty->device, "rs_flush_chars"))
  1027. return;
  1028. if (info->xmit.head == info->xmit.tail
  1029.     || tty->stopped
  1030.     || tty->hw_stopped
  1031.     || !info->xmit.buf)
  1032. return;
  1033. save_flags(flags); cli();
  1034. info->IER |= UART_IER_THRI;
  1035. serial_out(info, UART_IER, info->IER);
  1036. restore_flags(flags);
  1037. }
  1038. static int rs_write(struct tty_struct * tty, int from_user,
  1039.     const unsigned char *buf, int count)
  1040. {
  1041. int c, ret = 0;
  1042. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1043. unsigned long flags;
  1044. if (serial_paranoia_check(info, tty->device, "rs_write"))
  1045. return 0;
  1046. if (!tty || !info->xmit.buf || !tmp_buf)
  1047. return 0;
  1048. save_flags(flags);
  1049. if (from_user) {
  1050. down(&tmp_buf_sem);
  1051. while (1) {
  1052. int c1;
  1053. c = CIRC_SPACE_TO_END(info->xmit.head,
  1054.       info->xmit.tail,
  1055.       SERIAL_XMIT_SIZE);
  1056. if (count < c)
  1057. c = count;
  1058. if (c <= 0)
  1059. break;
  1060. c -= copy_from_user(tmp_buf, buf, c);
  1061. if (!c) {
  1062. if (!ret)
  1063. ret = -EFAULT;
  1064. break;
  1065. }
  1066. cli();
  1067. c1 = CIRC_SPACE_TO_END(info->xmit.head,
  1068.        info->xmit.tail,
  1069.        SERIAL_XMIT_SIZE);
  1070. if (c1 < c)
  1071. c = c1;
  1072. memcpy(info->xmit.buf + info->xmit.head, tmp_buf, c);
  1073. info->xmit.head = ((info->xmit.head + c) &
  1074.    (SERIAL_XMIT_SIZE-1));
  1075. restore_flags(flags);
  1076. buf += c;
  1077. count -= c;
  1078. ret += c;
  1079. }
  1080. up(&tmp_buf_sem);
  1081. } else {
  1082. cli();
  1083. while (1) {
  1084. c = CIRC_SPACE_TO_END(info->xmit.head,
  1085.       info->xmit.tail,
  1086.       SERIAL_XMIT_SIZE);
  1087. if (count < c)
  1088. c = count;
  1089. if (c <= 0) {
  1090. break;
  1091. }
  1092. memcpy(info->xmit.buf + info->xmit.head, buf, c);
  1093. info->xmit.head = ((info->xmit.head + c) &
  1094.    (SERIAL_XMIT_SIZE-1));
  1095. buf += c;
  1096. count -= c;
  1097. ret += c;
  1098. }
  1099. restore_flags(flags);
  1100. }
  1101. if (info->xmit.head != info->xmit.tail
  1102.     && !tty->stopped
  1103.     && !tty->hw_stopped
  1104.     && !(info->IER & UART_IER_THRI)) {
  1105. info->IER |= UART_IER_THRI;
  1106. serial_out(info, UART_IER, info->IER);
  1107. }
  1108. return ret;
  1109. }
  1110. static int rs_write_room(struct tty_struct *tty)
  1111. {
  1112. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1113. if (serial_paranoia_check(info, tty->device, "rs_write_room"))
  1114. return 0;
  1115. return CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
  1116. }
  1117. static int rs_chars_in_buffer(struct tty_struct *tty)
  1118. {
  1119. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1120. if (serial_paranoia_check(info, tty->device, "rs_chars_in_buffer"))
  1121. return 0;
  1122. return CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
  1123. }
  1124. static void rs_flush_buffer(struct tty_struct *tty)
  1125. {
  1126. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1127. unsigned long flags;
  1128. if (serial_paranoia_check(info, tty->device, "rs_flush_buffer"))
  1129. return;
  1130. save_flags(flags); cli();
  1131. info->xmit.head = info->xmit.tail = 0;
  1132. restore_flags(flags);
  1133. wake_up_interruptible(&tty->write_wait);
  1134. #ifdef SERIAL_HAVE_POLL_WAIT
  1135. wake_up_interruptible(&tty->poll_wait);
  1136. #endif
  1137. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  1138.     tty->ldisc.write_wakeup)
  1139. (tty->ldisc.write_wakeup)(tty);
  1140. }
  1141. /*
  1142.  * This function is used to send a high-priority XON/XOFF character to
  1143.  * the device
  1144.  */
  1145. static void rs_send_xchar(struct tty_struct *tty, char ch)
  1146. {
  1147. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1148. if (serial_paranoia_check(info, tty->device, "rs_send_char"))
  1149. return;
  1150. info->x_char = ch;
  1151. if (ch) {
  1152. /* Make sure transmit interrupts are on */
  1153. info->IER |= UART_IER_THRI;
  1154. serial_out(info, UART_IER, info->IER);
  1155. }
  1156. }
  1157. /*
  1158.  * ------------------------------------------------------------
  1159.  * rs_throttle()
  1160.  *
  1161.  * This routine is called by the upper-layer tty layer to signal that
  1162.  * incoming characters should be throttled.
  1163.  * ------------------------------------------------------------
  1164.  */
  1165. static void rs_throttle(struct tty_struct * tty)
  1166. {
  1167. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1168. unsigned long flags;
  1169. #ifdef SERIAL_DEBUG_THROTTLE
  1170. char buf[64];
  1171. printk("throttle %s: %d....n", tty_name(tty, buf),
  1172.        tty->ldisc.chars_in_buffer(tty));
  1173. #endif
  1174. if (serial_paranoia_check(info, tty->device, "rs_throttle"))
  1175. return;
  1176. if (I_IXOFF(tty))
  1177. rs_send_xchar(tty, STOP_CHAR(tty));
  1178. if (tty->termios->c_cflag & CRTSCTS)
  1179. info->MCR &= ~UART_MCR_RTS;
  1180. save_flags(flags); cli();
  1181. serial_out(info, UART_MCR, info->MCR);
  1182. restore_flags(flags);
  1183. }
  1184. static void rs_unthrottle(struct tty_struct * tty)
  1185. {
  1186. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1187. unsigned long flags;
  1188. #ifdef SERIAL_DEBUG_THROTTLE
  1189. char buf[64];
  1190. printk("unthrottle %s: %d....n", tty_name(tty, buf),
  1191.        tty->ldisc.chars_in_buffer(tty));
  1192. #endif
  1193. if (serial_paranoia_check(info, tty->device, "rs_unthrottle"))
  1194. return;
  1195. if (I_IXOFF(tty)) {
  1196. if (info->x_char)
  1197. info->x_char = 0;
  1198. else
  1199. rs_send_xchar(tty, START_CHAR(tty));
  1200. }
  1201. if (tty->termios->c_cflag & CRTSCTS)
  1202. info->MCR |= UART_MCR_RTS;
  1203. save_flags(flags); cli();
  1204. serial_out(info, UART_MCR, info->MCR);
  1205. restore_flags(flags);
  1206. }
  1207. /*
  1208.  * ------------------------------------------------------------
  1209.  * rs_ioctl() and friends
  1210.  * ------------------------------------------------------------
  1211.  */
  1212. static int get_serial_info(struct async_struct * info,
  1213.    struct serial_struct * retinfo)
  1214. {
  1215. struct serial_struct tmp;
  1216. struct serial_state *state = info->state;
  1217. if (!retinfo)
  1218. return -EFAULT;
  1219. memset(&tmp, 0, sizeof(tmp));
  1220. tmp.type = state->type;
  1221. tmp.line = state->line;
  1222. tmp.port = state->port;
  1223. if (HIGH_BITS_OFFSET)
  1224. tmp.port_high = state->port >> HIGH_BITS_OFFSET;
  1225. else
  1226. tmp.port_high = 0;
  1227. tmp.irq = state->irq;
  1228. tmp.flags = state->flags;
  1229. tmp.xmit_fifo_size = state->xmit_fifo_size;
  1230. tmp.baud_base = state->baud_base;
  1231. tmp.close_delay = state->close_delay;
  1232. tmp.closing_wait = state->closing_wait;
  1233. tmp.custom_divisor = state->custom_divisor;
  1234. tmp.hub6 = state->hub6;
  1235. tmp.io_type = state->io_type;
  1236. if (copy_to_user(retinfo,&tmp,sizeof(*retinfo)))
  1237. return -EFAULT;
  1238. return 0;
  1239. }
  1240. static int set_serial_info(struct async_struct * info,
  1241.    struct serial_struct * new_info)
  1242. {
  1243. struct serial_struct new_serial;
  1244.   struct serial_state old_state, *state;
  1245. unsigned int i,change_irq,change_port;
  1246. int  retval = 0;
  1247. unsigned long new_port;
  1248. if (copy_from_user(&new_serial,new_info,sizeof(new_serial)))
  1249. return -EFAULT;
  1250. state = info->state;
  1251. old_state = *state;
  1252. new_port = new_serial.port;
  1253. if (HIGH_BITS_OFFSET)
  1254. new_port += (unsigned long) new_serial.port_high << HIGH_BITS_OFFSET;
  1255. change_irq = new_serial.irq != state->irq;
  1256. change_port = (new_port != ((int) state->port)) ||
  1257. (new_serial.hub6 != state->hub6);
  1258. if (!capable(CAP_SYS_ADMIN)) {
  1259. if (change_irq || change_port ||
  1260.     (new_serial.baud_base != state->baud_base) ||
  1261.     (new_serial.type != state->type) ||
  1262.     (new_serial.close_delay != state->close_delay) ||
  1263.     (new_serial.xmit_fifo_size != state->xmit_fifo_size) ||
  1264.     ((new_serial.flags & ~ASYNC_USR_MASK) !=
  1265.      (state->flags & ~ASYNC_USR_MASK)))
  1266. return -EPERM;
  1267. state->flags = ((state->flags & ~ASYNC_USR_MASK) |
  1268.        (new_serial.flags & ASYNC_USR_MASK));
  1269. info->flags = ((info->flags & ~ASYNC_USR_MASK) |
  1270.        (new_serial.flags & ASYNC_USR_MASK));
  1271. state->custom_divisor = new_serial.custom_divisor;
  1272. goto check_and_exit;
  1273. }
  1274. new_serial.irq = irq_cannonicalize(new_serial.irq);
  1275. if ((new_serial.irq >= NR_IRQS) || (new_serial.irq < 0) ||
  1276.     (new_serial.baud_base < 9600)|| (new_serial.type < PORT_UNKNOWN) ||
  1277.     (new_serial.type > PORT_MAX) || (new_serial.type == PORT_CIRRUS) ||
  1278.     (new_serial.type == PORT_STARTECH)) {
  1279. return -EINVAL;
  1280. }
  1281. if ((new_serial.type != state->type) ||
  1282.     (new_serial.xmit_fifo_size <= 0))
  1283. new_serial.xmit_fifo_size =
  1284. uart_config[new_serial.type].dfl_xmit_fifo_size;
  1285. /* Make sure address is not already in use */
  1286. if (new_serial.type) {
  1287. for (i = 0 ; i < NR_PORTS; i++)
  1288. if ((state != &rs_table[i]) &&
  1289.     (rs_table[i].port == new_port) &&
  1290.     rs_table[i].type)
  1291. return -EADDRINUSE;
  1292. }
  1293. if ((change_port || change_irq) && (state->count > 1))
  1294. return -EBUSY;
  1295. /*
  1296.  * OK, past this point, all the error checking has been done.
  1297.  * At this point, we start making changes.....
  1298.  */
  1299. state->baud_base = new_serial.baud_base;
  1300. state->flags = ((state->flags & ~ASYNC_FLAGS) |
  1301. (new_serial.flags & ASYNC_FLAGS));
  1302. info->flags = ((state->flags & ~ASYNC_INTERNAL_FLAGS) |
  1303.        (info->flags & ASYNC_INTERNAL_FLAGS));
  1304. state->custom_divisor = new_serial.custom_divisor;
  1305. state->close_delay = new_serial.close_delay * HZ/100;
  1306. state->closing_wait = new_serial.closing_wait * HZ/100;
  1307. info->tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
  1308. info->xmit_fifo_size = state->xmit_fifo_size =
  1309. new_serial.xmit_fifo_size;
  1310. if ((state->type != PORT_UNKNOWN) && state->port) {
  1311. release_region(state->port,8);
  1312. }
  1313. state->type = new_serial.type;
  1314. if (change_port || change_irq) {
  1315. /*
  1316.  * We need to shutdown the serial port at the old
  1317.  * port/irq combination.
  1318.  */
  1319. shutdown(info);
  1320. state->irq = new_serial.irq;
  1321. info->port = state->port = new_port;
  1322. info->hub6 = state->hub6 = new_serial.hub6;
  1323. if (info->hub6)
  1324. info->io_type = state->io_type = SERIAL_IO_HUB6;
  1325. else if (info->io_type == SERIAL_IO_HUB6)
  1326. info->io_type = state->io_type = SERIAL_IO_PORT;
  1327. }
  1328. if ((state->type != PORT_UNKNOWN) && state->port) {
  1329. request_region(state->port,8,"serial(set)");
  1330. }
  1331. check_and_exit:
  1332. if (!state->port || !state->type)
  1333. return 0;
  1334. if (info->flags & ASYNC_INITIALIZED) {
  1335. if (((old_state.flags & ASYNC_SPD_MASK) !=
  1336.      (state->flags & ASYNC_SPD_MASK)) ||
  1337.     (old_state.custom_divisor != state->custom_divisor)) {
  1338. if ((state->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
  1339. info->tty->alt_speed = 57600;
  1340. if ((state->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
  1341. info->tty->alt_speed = 115200;
  1342. if ((state->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)
  1343. info->tty->alt_speed = 230400;
  1344. if ((state->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
  1345. info->tty->alt_speed = 460800;
  1346. change_speed(info, 0);
  1347. }
  1348. } else {
  1349. retval = startup(info);
  1350. }
  1351. return retval;
  1352. }
  1353. /*
  1354.  * get_lsr_info - get line status register info
  1355.  *
  1356.  * Purpose: Let user call ioctl() to get info when the UART physically
  1357.  *      is emptied.  On bus types like RS485, the transmitter must
  1358.  *      release the bus after transmitting. This must be done when
  1359.  *      the transmit shift register is empty, not be done when the
  1360.  *      transmit holding register is empty.  This functionality
  1361.  *      allows an RS485 driver to be written in user space.
  1362.  */
  1363. static int get_lsr_info(struct async_struct * info, unsigned int *value)
  1364. {
  1365. unsigned char status;
  1366. unsigned int result;
  1367. unsigned long flags;
  1368. save_flags(flags); cli();
  1369. status = serial_in(info, UART_LSR);
  1370. restore_flags(flags);
  1371. result = ((status & UART_LSR_TEMT) ? TIOCSER_TEMT : 0);
  1372. /*
  1373.  * If we're about to load something into the transmit
  1374.  * register, we'll pretend the transmitter isn't empty to
  1375.  * avoid a race condition (depending on when the transmit
  1376.  * interrupt happens).
  1377.  */
  1378. if (info->x_char ||
  1379.     ((CIRC_CNT(info->xmit.head, info->xmit.tail,
  1380.        SERIAL_XMIT_SIZE) > 0) &&
  1381.      !info->tty->stopped && !info->tty->hw_stopped))
  1382. result &= TIOCSER_TEMT;
  1383. if (copy_to_user(value, &result, sizeof(int)))
  1384. return -EFAULT;
  1385. return 0;
  1386. }
  1387. static int get_modem_info(struct async_struct * info, unsigned int *value)
  1388. {
  1389. unsigned char control, status;
  1390. unsigned int result;
  1391. unsigned long flags;
  1392. control = info->MCR;
  1393. save_flags(flags); cli();
  1394. status = serial_in(info, UART_MSR);
  1395. restore_flags(flags);
  1396. result =  ((control & UART_MCR_RTS) ? TIOCM_RTS : 0)
  1397. | ((control & UART_MCR_DTR) ? TIOCM_DTR : 0)
  1398. #ifdef TIOCM_OUT1
  1399. | ((control & UART_MCR_OUT1) ? TIOCM_OUT1 : 0)
  1400. | ((control & UART_MCR_OUT2) ? TIOCM_OUT2 : 0)
  1401. #endif
  1402. | ((status  & UART_MSR_DCD) ? TIOCM_CAR : 0)
  1403. | ((status  & UART_MSR_RI) ? TIOCM_RNG : 0)
  1404. | ((status  & UART_MSR_DSR) ? TIOCM_DSR : 0)
  1405. | ((status  & UART_MSR_CTS) ? TIOCM_CTS : 0);
  1406. if (copy_to_user(value, &result, sizeof(int)))
  1407. return -EFAULT;
  1408. return 0;
  1409. }
  1410. static int set_modem_info(struct async_struct * info, unsigned int cmd,
  1411.   unsigned int *value)
  1412. {
  1413. unsigned int arg;
  1414. unsigned long flags;
  1415. if (copy_from_user(&arg, value, sizeof(int)))
  1416. return -EFAULT;
  1417. switch (cmd) {
  1418. case TIOCMBIS:
  1419. if (arg & TIOCM_RTS)
  1420. info->MCR |= UART_MCR_RTS;
  1421. if (arg & TIOCM_DTR)
  1422. info->MCR |= UART_MCR_DTR;
  1423. #ifdef TIOCM_OUT1
  1424. if (arg & TIOCM_OUT1)
  1425. info->MCR |= UART_MCR_OUT1;
  1426. if (arg & TIOCM_OUT2)
  1427. info->MCR |= UART_MCR_OUT2;
  1428. #endif
  1429. if (arg & TIOCM_LOOP)
  1430. info->MCR |= UART_MCR_LOOP;
  1431. break;
  1432. case TIOCMBIC:
  1433. if (arg & TIOCM_RTS)
  1434. info->MCR &= ~UART_MCR_RTS;
  1435. if (arg & TIOCM_DTR)
  1436. info->MCR &= ~UART_MCR_DTR;
  1437. #ifdef TIOCM_OUT1
  1438. if (arg & TIOCM_OUT1)
  1439. info->MCR &= ~UART_MCR_OUT1;
  1440. if (arg & TIOCM_OUT2)
  1441. info->MCR &= ~UART_MCR_OUT2;
  1442. #endif
  1443. if (arg & TIOCM_LOOP)
  1444. info->MCR &= ~UART_MCR_LOOP;
  1445. break;
  1446. case TIOCMSET:
  1447. info->MCR = ((info->MCR & ~(UART_MCR_RTS |
  1448. #ifdef TIOCM_OUT1
  1449.     UART_MCR_OUT1 |
  1450.     UART_MCR_OUT2 |
  1451. #endif
  1452.     UART_MCR_LOOP |
  1453.     UART_MCR_DTR))
  1454.      | ((arg & TIOCM_RTS) ? UART_MCR_RTS : 0)
  1455. #ifdef TIOCM_OUT1
  1456.      | ((arg & TIOCM_OUT1) ? UART_MCR_OUT1 : 0)
  1457.      | ((arg & TIOCM_OUT2) ? UART_MCR_OUT2 : 0)
  1458. #endif
  1459.      | ((arg & TIOCM_LOOP) ? UART_MCR_LOOP : 0)
  1460.      | ((arg & TIOCM_DTR) ? UART_MCR_DTR : 0));
  1461. break;
  1462. default:
  1463. return -EINVAL;
  1464. }
  1465. save_flags(flags); cli();
  1466. info->MCR |= ALPHA_KLUDGE_MCR;  /* Don't ask */
  1467. serial_out(info, UART_MCR, info->MCR);
  1468. restore_flags(flags);
  1469. return 0;
  1470. }
  1471. static int do_autoconfig(struct async_struct * info)
  1472. {
  1473. int retval;
  1474. if (!capable(CAP_SYS_ADMIN))
  1475. return -EPERM;
  1476. if (info->state->count > 1)
  1477. return -EBUSY;
  1478. shutdown(info);
  1479. autoconfig(info->state);
  1480. retval = startup(info);
  1481. if (retval)
  1482. return retval;
  1483. return 0;
  1484. }
  1485. /*
  1486.  * rs_break() --- routine which turns the break handling on or off
  1487.  */
  1488. static void rs_break(struct tty_struct *tty, int break_state)
  1489. {
  1490. struct async_struct * info = (struct async_struct *)tty->driver_data;
  1491. unsigned long flags;
  1492. if (serial_paranoia_check(info, tty->device, "rs_break"))
  1493. return;
  1494. if (!CONFIGURED_SERIAL_PORT(info))
  1495. return;
  1496. save_flags(flags); cli();
  1497. if (break_state == -1)
  1498. info->LCR |= UART_LCR_SBC;
  1499. else
  1500. info->LCR &= ~UART_LCR_SBC;
  1501. serial_out(info, UART_LCR, info->LCR);
  1502. restore_flags(flags);
  1503. }
  1504. static int rs_ioctl(struct tty_struct *tty, struct file * file,
  1505.     unsigned int cmd, unsigned long arg)
  1506. {
  1507. struct async_struct * info = (struct async_struct *)tty->driver_data;
  1508. struct async_icount cprev, cnow; /* kernel counter temps */
  1509. struct serial_icounter_struct icount;
  1510. unsigned long flags;
  1511. if (serial_paranoia_check(info, tty->device, "rs_ioctl"))
  1512. return -ENODEV;
  1513. if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
  1514.     (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) &&
  1515.     (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) {
  1516. if (tty->flags & (1 << TTY_IO_ERROR))
  1517.     return -EIO;
  1518. }
  1519. switch (cmd) {
  1520. case TIOCMGET:
  1521. return get_modem_info(info, (unsigned int *) arg);
  1522. case TIOCMBIS:
  1523. case TIOCMBIC:
  1524. case TIOCMSET:
  1525. return set_modem_info(info, cmd, (unsigned int *) arg);
  1526. case TIOCGSERIAL:
  1527. return get_serial_info(info,
  1528.        (struct serial_struct *) arg);
  1529. case TIOCSSERIAL:
  1530. return set_serial_info(info,
  1531.        (struct serial_struct *) arg);
  1532. case TIOCSERCONFIG:
  1533. return do_autoconfig(info);
  1534. case TIOCSERGETLSR: /* Get line status register */
  1535. return get_lsr_info(info, (unsigned int *) arg);
  1536. case TIOCSERGSTRUCT:
  1537. if (copy_to_user((struct async_struct *) arg,
  1538.  info, sizeof(struct async_struct)))
  1539. return -EFAULT;
  1540. return 0;
  1541. /*
  1542.  * Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change
  1543.  * - mask passed in arg for lines of interest
  1544.    *   (use |'ed TIOCM_RNG/DSR/CD/CTS for masking)
  1545.  * Caller should use TIOCGICOUNT to see which one it was
  1546.  */
  1547. case TIOCMIWAIT:
  1548. save_flags(flags); cli();
  1549. /* note the counters on entry */
  1550. cprev = info->state->icount;
  1551. restore_flags(flags);
  1552. /* Force modem status interrupts on */
  1553. info->IER |= UART_IER_MSI;
  1554. serial_out(info, UART_IER, info->IER);
  1555. while (1) {
  1556. interruptible_sleep_on(&info->delta_msr_wait);
  1557. /* see if a signal did it */
  1558. if (signal_pending(current))
  1559. return -ERESTARTSYS;
  1560. save_flags(flags); cli();
  1561. cnow = info->state->icount; /* atomic copy */
  1562. restore_flags(flags);
  1563. if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr &&
  1564.     cnow.dcd == cprev.dcd && cnow.cts == cprev.cts)
  1565. return -EIO; /* no change => error */
  1566. if ( ((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
  1567.      ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
  1568.      ((arg & TIOCM_CD)  && (cnow.dcd != cprev.dcd)) ||
  1569.      ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts)) ) {
  1570. return 0;
  1571. }
  1572. cprev = cnow;
  1573. }
  1574. /* NOTREACHED */
  1575. /*
  1576.  * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
  1577.  * Return: write counters to the user passed counter struct
  1578.  * NB: both 1->0 and 0->1 transitions are counted except for
  1579.  *     RI where only 0->1 is counted.
  1580.  */
  1581. case TIOCGICOUNT:
  1582. save_flags(flags); cli();
  1583. cnow = info->state->icount;
  1584. restore_flags(flags);
  1585. icount.cts = cnow.cts;
  1586. icount.dsr = cnow.dsr;
  1587. icount.rng = cnow.rng;
  1588. icount.dcd = cnow.dcd;
  1589. icount.rx = cnow.rx;
  1590. icount.tx = cnow.tx;
  1591. icount.frame = cnow.frame;
  1592. icount.overrun = cnow.overrun;
  1593. icount.parity = cnow.parity;
  1594. icount.brk = cnow.brk;
  1595. icount.buf_overrun = cnow.buf_overrun;
  1596. if (copy_to_user((void *)arg, &icount, sizeof(icount)))
  1597. return -EFAULT;
  1598. return 0;
  1599. case TIOCSERGWILD:
  1600. case TIOCSERSWILD:
  1601. /* "setserial -W" is called in Debian boot */
  1602. printk ("TIOCSER?WILD ioctl obsolete, ignored.n");
  1603. return 0;
  1604. default:
  1605. return -ENOIOCTLCMD;
  1606. }
  1607. return 0;
  1608. }
  1609. static void rs_set_termios(struct tty_struct *tty, struct termios *old_termios)
  1610. {
  1611. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1612. unsigned long flags;
  1613. unsigned int cflag = tty->termios->c_cflag;
  1614. if (   (cflag == old_termios->c_cflag)
  1615.     && (   RELEVANT_IFLAG(tty->termios->c_iflag)
  1616. == RELEVANT_IFLAG(old_termios->c_iflag)))
  1617.   return;
  1618. change_speed(info, old_termios);
  1619. /* Handle transition to B0 status */
  1620. if ((old_termios->c_cflag & CBAUD) &&
  1621.     !(cflag & CBAUD)) {
  1622. info->MCR &= ~(UART_MCR_DTR|UART_MCR_RTS);
  1623. save_flags(flags); cli();
  1624. serial_out(info, UART_MCR, info->MCR);
  1625. restore_flags(flags);
  1626. }
  1627. /* Handle transition away from B0 status */
  1628. if (!(old_termios->c_cflag & CBAUD) &&
  1629.     (cflag & CBAUD)) {
  1630. info->MCR |= UART_MCR_DTR;
  1631. if (!(tty->termios->c_cflag & CRTSCTS) ||
  1632.     !test_bit(TTY_THROTTLED, &tty->flags)) {
  1633. info->MCR |= UART_MCR_RTS;
  1634. }
  1635. save_flags(flags); cli();
  1636. serial_out(info, UART_MCR, info->MCR);
  1637. restore_flags(flags);
  1638. }
  1639. /* Handle turning off CRTSCTS */
  1640. if ((old_termios->c_cflag & CRTSCTS) &&
  1641.     !(tty->termios->c_cflag & CRTSCTS)) {
  1642. tty->hw_stopped = 0;
  1643. rs_start(tty);
  1644. }
  1645. }
  1646. /*
  1647.  * ------------------------------------------------------------
  1648.  * rs_close()
  1649.  *
  1650.  * This routine is called when the serial port gets closed.  First, we
  1651.  * wait for the last remaining data to be sent.  Then, we unlink its
  1652.  * async structure from the interrupt chain if necessary, and we free
  1653.  * that IRQ if nothing is left in the chain.
  1654.  * ------------------------------------------------------------
  1655.  */
  1656. static void rs_close(struct tty_struct *tty, struct file * filp)
  1657. {
  1658. struct async_struct * info = (struct async_struct *)tty->driver_data;
  1659. struct serial_state *state;
  1660. unsigned long flags;
  1661. if (!info || serial_paranoia_check(info, tty->device, "rs_close"))
  1662. return;
  1663. state = info->state;
  1664. save_flags(flags); cli();
  1665. if (tty_hung_up_p(filp)) {
  1666. DBG_CNT("before DEC-hung");
  1667. MOD_DEC_USE_COUNT;
  1668. restore_flags(flags);
  1669. return;
  1670. }
  1671. #ifdef SERIAL_DEBUG_OPEN
  1672. printk("rs_close ttys%d, count = %dn", info->line, state->count);
  1673. #endif
  1674. if ((tty->count == 1) && (state->count != 1)) {
  1675. /*
  1676.  * Uh, oh.  tty->count is 1, which means that the tty
  1677.  * structure will be freed.  state->count should always
  1678.  * be one in these conditions.  If it's greater than
  1679.  * one, we've got real problems, since it means the
  1680.  * serial port won't be shutdown.
  1681.  */
  1682. printk("rs_close: bad serial port count; tty->count is 1, "
  1683.        "state->count is %dn", state->count);
  1684. state->count = 1;
  1685. }
  1686. if (--state->count < 0) {
  1687. printk("rs_close: bad serial port count for ttys%d: %dn",
  1688.        info->line, state->count);
  1689. state->count = 0;
  1690. }
  1691. if (state->count) {
  1692. DBG_CNT("before DEC-2");
  1693. MOD_DEC_USE_COUNT;
  1694. restore_flags(flags);
  1695. return;
  1696. }
  1697. info->flags |= ASYNC_CLOSING;
  1698. restore_flags(flags);
  1699. /*
  1700.  * Save the termios structure, since this port may have
  1701.  * separate termios for callout and dialin.
  1702.  */
  1703. if (info->flags & ASYNC_NORMAL_ACTIVE)
  1704. info->state->normal_termios = *tty->termios;
  1705. if (info->flags & ASYNC_CALLOUT_ACTIVE)
  1706. info->state->callout_termios = *tty->termios;
  1707. /*
  1708.  * Now we wait for the transmit buffer to clear; and we notify
  1709.  * the line discipline to only process XON/XOFF characters.
  1710.  */
  1711. tty->closing = 1;
  1712. if (info->closing_wait != ASYNC_CLOSING_WAIT_NONE)
  1713. tty_wait_until_sent(tty, info->closing_wait);
  1714. /*
  1715.  * At this point we stop accepting input.  To do this, we
  1716.  * disable the receive line status interrupts, and tell the
  1717.  * interrupt driver to stop checking the data ready bit in the
  1718.  * line status register.
  1719.  */
  1720. info->IER &= ~UART_IER_RLSI;
  1721. info->read_status_mask &= ~UART_LSR_DR;
  1722. if (info->flags & ASYNC_INITIALIZED) {
  1723. serial_out(info, UART_IER, info->IER);
  1724. /*
  1725.  * Before we drop DTR, make sure the UART transmitter
  1726.  * has completely drained; this is especially
  1727.  * important if there is a transmit FIFO!
  1728.  */
  1729. rs_wait_until_sent(tty, info->timeout);
  1730. }
  1731. shutdown(info);
  1732. if (tty->driver.flush_buffer)
  1733. tty->driver.flush_buffer(tty);
  1734. if (tty->ldisc.flush_buffer)
  1735. tty->ldisc.flush_buffer(tty);
  1736. tty->closing = 0;
  1737. info->event = 0;
  1738. info->tty = 0;
  1739. if (info->blocked_open) {
  1740. if (info->close_delay) {
  1741. set_current_state(TASK_INTERRUPTIBLE);
  1742. schedule_timeout(info->close_delay);
  1743. }
  1744. wake_up_interruptible(&info->open_wait);
  1745. }
  1746. info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE|
  1747.  ASYNC_CLOSING);
  1748. wake_up_interruptible(&info->close_wait);
  1749. MOD_DEC_USE_COUNT;
  1750. }
  1751. /*
  1752.  * rs_wait_until_sent() --- wait until the transmitter is empty
  1753.  */
  1754. static void rs_wait_until_sent(struct tty_struct *tty, int timeout)
  1755. {
  1756. struct async_struct * info = (struct async_struct *)tty->driver_data;
  1757. unsigned long orig_jiffies, char_time;
  1758. int lsr;
  1759. if (serial_paranoia_check(info, tty->device, "rs_wait_until_sent"))
  1760. return;
  1761. if (info->state->type == PORT_UNKNOWN)
  1762. return;
  1763. if (info->xmit_fifo_size == 0)
  1764. return; /* Just in case.... */
  1765. orig_jiffies = jiffies;
  1766. /*
  1767.  * Set the check interval to be 1/5 of the estimated time to
  1768.  * send a single character, and make it at least 1.  The check
  1769.  * interval should also be less than the timeout.
  1770.  *
  1771.  * Note: we have to use pretty tight timings here to satisfy
  1772.  * the NIST-PCTS.
  1773.  */
  1774. char_time = (info->timeout - HZ/50) / info->xmit_fifo_size;
  1775. char_time = char_time / 5;
  1776. if (char_time == 0)
  1777. char_time = 1;
  1778. if (timeout && timeout < char_time)
  1779. char_time = timeout;
  1780. /*
  1781.  * If the transmitter hasn't cleared in twice the approximate
  1782.  * amount of time to send the entire FIFO, it probably won't
  1783.  * ever clear.  This assumes the UART isn't doing flow
  1784.  * control, which is currently the case.  Hence, if it ever
  1785.  * takes longer than info->timeout, this is probably due to a
  1786.  * UART bug of some kind.  So, we clamp the timeout parameter at
  1787.  * 2*info->timeout.
  1788.  */
  1789. if (!timeout || timeout > 2*info->timeout)
  1790. timeout = 2*info->timeout;
  1791. #ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT
  1792. printk("In rs_wait_until_sent(%d) check=%lu...", timeout, char_time);
  1793. printk("jiff=%lu...", jiffies);
  1794. #endif
  1795. while (!((lsr = serial_inp(info, UART_LSR)) & UART_LSR_TEMT)) {
  1796. #ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT
  1797. printk("lsr = %d (jiff=%lu)...", lsr, jiffies);
  1798. #endif
  1799. set_current_state(TASK_INTERRUPTIBLE);
  1800. schedule_timeout(char_time);
  1801. if (signal_pending(current))
  1802. break;
  1803. if (timeout && time_after(jiffies, orig_jiffies + timeout))
  1804. break;
  1805. }
  1806. set_current_state(TASK_RUNNING);
  1807. #ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT
  1808. printk("lsr = %d (jiff=%lu)...donen", lsr, jiffies);
  1809. #endif
  1810. }
  1811. /*
  1812.  * rs_hangup() --- called by tty_hangup() when a hangup is signaled.
  1813.  */
  1814. static void rs_hangup(struct tty_struct *tty)
  1815. {
  1816. struct async_struct * info = (struct async_struct *)tty->driver_data;
  1817. struct serial_state *state = info->state;
  1818. if (serial_paranoia_check(info, tty->device, "rs_hangup"))
  1819. return;
  1820. state = info->state;
  1821. rs_flush_buffer(tty);
  1822. if (info->flags & ASYNC_CLOSING)
  1823. return;
  1824. shutdown(info);
  1825. info->event = 0;
  1826. state->count = 0;
  1827. info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE);
  1828. info->tty = 0;
  1829. wake_up_interruptible(&info->open_wait);
  1830. }
  1831. /*
  1832.  * ------------------------------------------------------------
  1833.  * rs_open() and friends
  1834.  * ------------------------------------------------------------
  1835.  */
  1836. static int block_til_ready(struct tty_struct *tty, struct file * filp,
  1837.    struct async_struct *info)
  1838. {
  1839. DECLARE_WAITQUEUE(wait, current);
  1840. struct serial_state *state = info->state;
  1841. int retval;
  1842. int do_clocal = 0, extra_count = 0;
  1843. unsigned long flags;
  1844. /*
  1845.  * If the device is in the middle of being closed, then block
  1846.  * until it's done, and then try again.
  1847.  */
  1848. if (tty_hung_up_p(filp) ||
  1849.     (info->flags & ASYNC_CLOSING)) {
  1850. if (info->flags & ASYNC_CLOSING)
  1851. interruptible_sleep_on(&info->close_wait);
  1852. #ifdef SERIAL_DO_RESTART
  1853. return ((info->flags & ASYNC_HUP_NOTIFY) ?
  1854. -EAGAIN : -ERESTARTSYS);
  1855. #else
  1856. return -EAGAIN;
  1857. #endif
  1858. }
  1859. /*
  1860.  * If this is a callout device, then just make sure the normal
  1861.  * device isn't being used.
  1862.  */
  1863. if (tty->driver.subtype == SERIAL_TYPE_CALLOUT) {
  1864. if (info->flags & ASYNC_NORMAL_ACTIVE)
  1865. return -EBUSY;
  1866. if ((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1867.     (info->flags & ASYNC_SESSION_LOCKOUT) &&
  1868.     (info->session != current->session))
  1869.     return -EBUSY;
  1870. if ((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1871.     (info->flags & ASYNC_PGRP_LOCKOUT) &&
  1872.     (info->pgrp != current->pgrp))
  1873.     return -EBUSY;
  1874. info->flags |= ASYNC_CALLOUT_ACTIVE;
  1875. return 0;
  1876. }
  1877. /*
  1878.  * If non-blocking mode is set, or the port is not enabled,
  1879.  * then make the check up front and then exit.
  1880.  */
  1881. if ((filp->f_flags & O_NONBLOCK) ||
  1882.     (tty->flags & (1 << TTY_IO_ERROR))) {
  1883. if (info->flags & ASYNC_CALLOUT_ACTIVE)
  1884. return -EBUSY;
  1885. info->flags |= ASYNC_NORMAL_ACTIVE;
  1886. return 0;
  1887. }
  1888. if (info->flags & ASYNC_CALLOUT_ACTIVE) {
  1889. if (state->normal_termios.c_cflag & CLOCAL)
  1890. do_clocal = 1;
  1891. } else {
  1892. if (tty->termios->c_cflag & CLOCAL)
  1893. do_clocal = 1;
  1894. }
  1895. /*
  1896.  * Block waiting for the carrier detect and the line to become
  1897.  * free (i.e., not in use by the callout).  While we are in
  1898.  * this loop, state->count is dropped by one, so that
  1899.  * rs_close() knows when to free things.  We restore it upon
  1900.  * exit, either normal or abnormal.
  1901.  */
  1902. retval = 0;
  1903. add_wait_queue(&info->open_wait, &wait);
  1904. #ifdef SERIAL_DEBUG_OPEN
  1905. printk("block_til_ready before block: ttys%d, count = %dn",
  1906.        state->line, state->count);
  1907. #endif
  1908. save_flags(flags); cli();
  1909. if (!tty_hung_up_p(filp)) {
  1910. extra_count = 1;
  1911. state->count--;
  1912. }
  1913. restore_flags(flags);
  1914. info->blocked_open++;
  1915. while (1) {
  1916. save_flags(flags); cli();
  1917. if (!(info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1918.     (tty->termios->c_cflag & CBAUD))
  1919. serial_out(info, UART_MCR,
  1920.    serial_inp(info, UART_MCR) |
  1921.    (UART_MCR_DTR | UART_MCR_RTS));
  1922. restore_flags(flags);
  1923. set_current_state(TASK_INTERRUPTIBLE);
  1924. if (tty_hung_up_p(filp) ||
  1925.     !(info->flags & ASYNC_INITIALIZED)) {
  1926. #ifdef SERIAL_DO_RESTART
  1927. if (info->flags & ASYNC_HUP_NOTIFY)
  1928. retval = -EAGAIN;
  1929. else
  1930. retval = -ERESTARTSYS;
  1931. #else
  1932. retval = -EAGAIN;
  1933. #endif
  1934. break;
  1935. }
  1936. if (!(info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1937.     !(info->flags & ASYNC_CLOSING) &&
  1938.     (do_clocal || (serial_in(info, UART_MSR) &
  1939.    UART_MSR_DCD)))
  1940. break;
  1941. if (signal_pending(current)) {
  1942. retval = -ERESTARTSYS;
  1943. break;
  1944. }
  1945. #ifdef SERIAL_DEBUG_OPEN
  1946. printk("block_til_ready blocking: ttys%d, count = %dn",
  1947.        info->line, state->count);
  1948. #endif
  1949. schedule();
  1950. }
  1951. set_current_state(TASK_RUNNING);
  1952. remove_wait_queue(&info->open_wait, &wait);
  1953. if (extra_count)
  1954. state->count++;
  1955. info->blocked_open--;
  1956. #ifdef SERIAL_DEBUG_OPEN
  1957. printk("block_til_ready after blocking: ttys%d, count = %dn",
  1958.        info->line, state->count);
  1959. #endif
  1960. if (retval)
  1961. return retval;
  1962. info->flags |= ASYNC_NORMAL_ACTIVE;
  1963. return 0;
  1964. }
  1965. static int get_async_struct(int line, struct async_struct **ret_info)
  1966. {
  1967. struct async_struct *info;
  1968. struct serial_state *sstate;
  1969. sstate = rs_table + line;
  1970. sstate->count++;
  1971. if (sstate->info) {
  1972. *ret_info = sstate->info;
  1973. return 0;
  1974. }
  1975. info = kmalloc(sizeof(struct async_struct), GFP_KERNEL);
  1976. if (!info) {
  1977. sstate->count--;
  1978. return -ENOMEM;
  1979. }
  1980. memset(info, 0, sizeof(struct async_struct));
  1981. init_waitqueue_head(&info->open_wait);
  1982. init_waitqueue_head(&info->close_wait);
  1983. init_waitqueue_head(&info->delta_msr_wait);
  1984. info->magic = SERIAL_MAGIC;
  1985. info->port = sstate->port;
  1986. info->flags = sstate->flags;
  1987. info->io_type = sstate->io_type;
  1988. info->iomem_base = sstate->iomem_base;
  1989. info->iomem_reg_shift = sstate->iomem_reg_shift;
  1990. info->xmit_fifo_size = sstate->xmit_fifo_size;
  1991. info->line = line;
  1992. info->tqueue.routine = do_softint;
  1993. info->tqueue.data = info;
  1994. info->state = sstate;
  1995. if (sstate->info) {
  1996. kfree(info);
  1997. *ret_info = sstate->info;
  1998. return 0;
  1999. }
  2000. *ret_info = sstate->info = info;
  2001. return 0;
  2002. }
  2003. /*
  2004.  * This routine is called whenever a serial port is opened.  It
  2005.  * enables interrupts for a serial port, linking in its async structure into
  2006.  * the IRQ chain.   It also performs the serial-specific
  2007.  * initialization for the tty structure.
  2008.  */
  2009. static int rs_open(struct tty_struct *tty, struct file * filp)
  2010. {
  2011. struct async_struct *info;
  2012. int  retval, line;
  2013. unsigned long page;
  2014. MOD_INC_USE_COUNT;
  2015. line = MINOR(tty->device) - tty->driver.minor_start;
  2016. if ((line < 0) || (line >= NR_PORTS)) {
  2017. MOD_DEC_USE_COUNT;
  2018. return -ENODEV;
  2019. }
  2020. retval = get_async_struct(line, &info);
  2021. if (retval) {
  2022. MOD_DEC_USE_COUNT;
  2023. return retval;
  2024. }
  2025. tty->driver_data = info;
  2026. info->tty = tty;
  2027. if (serial_paranoia_check(info, tty->device, "rs_open")) {
  2028. MOD_DEC_USE_COUNT;
  2029. return -ENODEV;
  2030. }
  2031. #ifdef SERIAL_DEBUG_OPEN
  2032. printk("rs_open %s%d, count = %dn", tty->driver.name, info->line,
  2033.        info->state->count);
  2034. #endif
  2035. info->tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
  2036. if (!tmp_buf) {
  2037. page = get_zeroed_page(GFP_KERNEL);
  2038. if (!page) {
  2039. MOD_DEC_USE_COUNT;
  2040. return -ENOMEM;
  2041. }
  2042. if (tmp_buf)
  2043. free_page(page);
  2044. else
  2045. tmp_buf = (unsigned char *) page;
  2046. }
  2047. /*
  2048.  * If the port is the middle of closing, bail out now
  2049.  */
  2050. if (tty_hung_up_p(filp) ||
  2051.     (info->flags & ASYNC_CLOSING)) {
  2052. if (info->flags & ASYNC_CLOSING)
  2053. interruptible_sleep_on(&info->close_wait);
  2054. MOD_DEC_USE_COUNT;
  2055. #ifdef SERIAL_DO_RESTART
  2056. return ((info->flags & ASYNC_HUP_NOTIFY) ?
  2057. -EAGAIN : -ERESTARTSYS);
  2058. #else
  2059. return -EAGAIN;
  2060. #endif
  2061. }
  2062. /*
  2063.  * Start up serial port
  2064.  */
  2065. retval = startup(info);
  2066. if (retval) {
  2067. MOD_DEC_USE_COUNT;
  2068. return retval;
  2069. }
  2070. retval = block_til_ready(tty, filp, info);
  2071. if (retval) {
  2072. #ifdef SERIAL_DEBUG_OPEN
  2073. printk("rs_open returning after block_til_ready with %dn",
  2074.        retval);
  2075. #endif
  2076. MOD_DEC_USE_COUNT;
  2077. return retval;
  2078. }
  2079. if ((info->state->count == 1) &&
  2080.     (info->flags & ASYNC_SPLIT_TERMIOS)) {
  2081. if (tty->driver.subtype == SERIAL_TYPE_NORMAL)
  2082. *tty->termios = info->state->normal_termios;
  2083. else
  2084. *tty->termios = info->state->callout_termios;
  2085. change_speed(info, 0);
  2086. }
  2087. #ifdef CONFIG_AU1000_SERIAL_CONSOLE
  2088. if (sercons.cflag && sercons.index == line) {
  2089. tty->termios->c_cflag = sercons.cflag;
  2090. sercons.cflag = 0;
  2091. change_speed(info, 0);
  2092. }
  2093. #endif
  2094. info->session = current->session;
  2095. info->pgrp = current->pgrp;
  2096. #ifdef SERIAL_DEBUG_OPEN
  2097. printk("rs_open ttys%d successful...", info->line);
  2098. #endif
  2099. return 0;
  2100. }
  2101. /*
  2102.  * /proc fs routines....
  2103.  */
  2104. static inline int line_info(char *buf, struct serial_state *state)
  2105. {
  2106. struct async_struct *info = state->info, scr_info;
  2107. char stat_buf[30], control, status;
  2108. int ret;
  2109. unsigned long flags;
  2110. ret = sprintf(buf, "%d: uart:%s port:%lX irq:%d",
  2111.       state->line, uart_config[state->type].name,
  2112.       state->port, state->irq);
  2113. if (!state->port || (state->type == PORT_UNKNOWN)) {
  2114. ret += sprintf(buf+ret, "n");
  2115. return ret;
  2116. }
  2117. /*
  2118.  * Figure out the current RS-232 lines
  2119.  */
  2120. if (!info) {
  2121. info = &scr_info; /* This is just for serial_{in,out} */
  2122. info->magic = SERIAL_MAGIC;
  2123. info->port = state->port;
  2124. info->flags = state->flags;
  2125. info->quot = 0;
  2126. info->tty = 0;
  2127. }
  2128. save_flags(flags); cli();
  2129. status = serial_in(info, UART_MSR);
  2130. control = info != &scr_info ? info->MCR : serial_in(info, UART_MCR);
  2131. restore_flags(flags);
  2132. stat_buf[0] = 0;
  2133. stat_buf[1] = 0;
  2134. if (control & UART_MCR_RTS)
  2135. strcat(stat_buf, "|RTS");
  2136. if (status & UART_MSR_CTS)
  2137. strcat(stat_buf, "|CTS");
  2138. if (control & UART_MCR_DTR)
  2139. strcat(stat_buf, "|DTR");
  2140. if (status & UART_MSR_DSR)
  2141. strcat(stat_buf, "|DSR");
  2142. if (status & UART_MSR_DCD)
  2143. strcat(stat_buf, "|CD");
  2144. if (status & UART_MSR_RI)
  2145. strcat(stat_buf, "|RI");
  2146. if (info->quot) {
  2147. ret += sprintf(buf+ret, " baud:%d",
  2148.        state->baud_base / info->quot);
  2149. }
  2150. ret += sprintf(buf+ret, " tx:%d rx:%d",
  2151.       state->icount.tx, state->icount.rx);
  2152. if (state->icount.frame)
  2153. ret += sprintf(buf+ret, " fe:%d", state->icount.frame);
  2154. if (state->icount.parity)
  2155. ret += sprintf(buf+ret, " pe:%d", state->icount.parity);
  2156. if (state->icount.brk)
  2157. ret += sprintf(buf+ret, " brk:%d", state->icount.brk);
  2158. if (state->icount.overrun)
  2159. ret += sprintf(buf+ret, " oe:%d", state->icount.overrun);
  2160. /*
  2161.  * Last thing is the RS-232 status lines
  2162.  */
  2163. ret += sprintf(buf+ret, " %sn", stat_buf+1);
  2164. return ret;
  2165. }
  2166. int rs_read_proc(char *page, char **start, off_t off, int count,
  2167.  int *eof, void *data)
  2168. {
  2169. int i, len = 0, l;
  2170. off_t begin = 0;
  2171. len += sprintf(page, "serinfo:1.0 driver:%s%s revision:%sn",
  2172.        serial_version, LOCAL_VERSTRING, serial_revdate);
  2173. for (i = 0; i < NR_PORTS && len < 4000; i++) {
  2174. l = line_info(page + len, &rs_table[i]);
  2175. len += l;
  2176. if (len+begin > off+count)
  2177. goto done;
  2178. if (len+begin < off) {
  2179. begin += len;
  2180. len = 0;
  2181. }
  2182. }
  2183. *eof = 1;
  2184. done:
  2185. if (off >= len+begin)
  2186. return 0;
  2187. *start = page + (off-begin);
  2188. return ((count < begin+len-off) ? count : begin+len-off);
  2189. }
  2190. /*
  2191.  * ---------------------------------------------------------------------
  2192.  * rs_init() and friends
  2193.  *
  2194.  * rs_init() is called at boot-time to initialize the serial driver.
  2195.  * ---------------------------------------------------------------------
  2196.  */
  2197. /*
  2198.  * This routine prints out the appropriate serial driver version
  2199.  * number, and identifies which options were configured into this
  2200.  * driver.
  2201.  */
  2202. static char serial_options[] __initdata =
  2203.        " no serial options enabledn";
  2204. #undef SERIAL_OPT
  2205. static _INLINE_ void show_serial_version(void)
  2206. {
  2207.   printk(KERN_INFO "%s version %s%s (%s) with%s", serial_name,
  2208.        serial_version, LOCAL_VERSTRING, serial_revdate,
  2209.        serial_options);
  2210. }
  2211. /*
  2212.  * This routine is called by rs_init() to initialize a specific serial
  2213.  * port.  It determines what type of UART chip this serial port is
  2214.  * using: 8250, 16450, 16550, 16550A.  The important question is
  2215.  * whether or not this UART is a 16550A or not, since this will
  2216.  * determine whether or not we can use its FIFO features or not.
  2217.  */
  2218. static void autoconfig(struct serial_state * state)
  2219. {
  2220. struct async_struct *info, scr_info;
  2221. unsigned long flags;
  2222. #ifdef SERIAL_DEBUG_AUTOCONF
  2223. printk("Testing ttyS%d (0x%04lx, 0x%04x)...n", state->line,
  2224.        state->port, (unsigned) state->iomem_base);
  2225. #endif
  2226. if (!CONFIGURED_SERIAL_PORT(state))
  2227. return;
  2228. if (au_readl(UART_MOD_CNTRL + state->port) != 0x3) {
  2229. au_writel(3, UART_MOD_CNTRL + state->port);
  2230. au_sync_delay(10);
  2231. }
  2232. state->type = PORT_16550;
  2233. info = &scr_info; /* This is just for serial_{in,out} */
  2234. info->magic = SERIAL_MAGIC;
  2235. info->state = state;
  2236. info->port = state->port;
  2237. info->flags = state->flags;
  2238. info->io_type = state->io_type;
  2239. info->iomem_base = state->iomem_base;
  2240. info->iomem_reg_shift = state->iomem_reg_shift;
  2241. save_flags(flags); cli();
  2242. state->xmit_fifo_size = uart_config[state->type].dfl_xmit_fifo_size;
  2243. if (info->port) {
  2244. request_region(info->port,8,"serial(auto)");
  2245. }
  2246. /*
  2247.  * Reset the UART.
  2248.  */
  2249. serial_outp(info, UART_FCR, (UART_FCR_ENABLE_FIFO |
  2250.      UART_FCR_CLEAR_RCVR |
  2251.      UART_FCR_CLEAR_XMIT));
  2252. serial_outp(info, UART_FCR, 0);
  2253. (void)serial_in(info, UART_RX);
  2254. serial_outp(info, UART_IER, 0);
  2255. restore_flags(flags);
  2256. }
  2257. int register_serial(struct serial_struct *req);
  2258. void unregister_serial(int line);
  2259. EXPORT_SYMBOL(register_serial);
  2260. EXPORT_SYMBOL(unregister_serial);
  2261. /*
  2262.  * The serial driver boot-time initialization code!
  2263.  */
  2264. static int __init rs_init(void)
  2265. {
  2266. int i;
  2267. struct serial_state * state;
  2268. init_bh(SERIAL_BH, do_serial_bh);
  2269. init_timer(&serial_timer);
  2270. serial_timer.function = rs_timer;
  2271. mod_timer(&serial_timer, jiffies + RS_STROBE_TIME);
  2272. for (i = 0; i < NR_IRQS; i++) {
  2273. IRQ_ports[i] = 0;
  2274. IRQ_timeout[i] = 0;
  2275. }
  2276. #ifdef CONFIG_AU1000_SERIAL_CONSOLE
  2277. /*
  2278.  * The interrupt of the serial console port
  2279.  * can't be shared.
  2280.  */
  2281. if (sercons.flags & CON_CONSDEV) {
  2282. for(i = 0; i < NR_PORTS; i++)
  2283. if (i != sercons.index &&
  2284.     rs_table[i].irq == rs_table[sercons.index].irq)
  2285. rs_table[i].irq = 0;
  2286. }
  2287. #endif
  2288. show_serial_version();
  2289. /* Initialize the tty_driver structure */
  2290. memset(&serial_driver, 0, sizeof(struct tty_driver));
  2291. serial_driver.magic = TTY_DRIVER_MAGIC;
  2292. serial_driver.driver_name = "serial";
  2293. #if (LINUX_VERSION_CODE > 0x2032D && defined(CONFIG_DEVFS_FS))
  2294. serial_driver.name = "tts/%d";
  2295. #else
  2296. serial_driver.name = "ttyS";
  2297. #endif
  2298. serial_driver.major = TTY_MAJOR;
  2299. serial_driver.minor_start = 64 + SERIAL_DEV_OFFSET;
  2300. serial_driver.num = NR_PORTS;
  2301. serial_driver.type = TTY_DRIVER_TYPE_SERIAL;
  2302. serial_driver.subtype = SERIAL_TYPE_NORMAL;
  2303. serial_driver.init_termios = tty_std_termios;
  2304. serial_driver.init_termios.c_cflag =
  2305. B9600 | CS8 | CREAD | HUPCL | CLOCAL;
  2306. serial_driver.flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS;
  2307. serial_driver.refcount = &serial_refcount;
  2308. serial_driver.table = serial_table;
  2309. serial_driver.termios = serial_termios;
  2310. serial_driver.termios_locked = serial_termios_locked;
  2311. serial_driver.open = rs_open;
  2312. serial_driver.close = rs_close;
  2313. serial_driver.write = rs_write;
  2314. serial_driver.put_char = rs_put_char;
  2315. serial_driver.flush_chars = rs_flush_chars;
  2316. serial_driver.write_room = rs_write_room;
  2317. serial_driver.chars_in_buffer = rs_chars_in_buffer;
  2318. serial_driver.flush_buffer = rs_flush_buffer;
  2319. serial_driver.ioctl = rs_ioctl;
  2320. serial_driver.throttle = rs_throttle;
  2321. serial_driver.unthrottle = rs_unthrottle;
  2322. serial_driver.set_termios = rs_set_termios;
  2323. serial_driver.stop = rs_stop;
  2324. serial_driver.start = rs_start;
  2325. serial_driver.hangup = rs_hangup;
  2326. serial_driver.break_ctl = rs_break;
  2327. serial_driver.send_xchar = rs_send_xchar;
  2328. serial_driver.wait_until_sent = rs_wait_until_sent;
  2329. serial_driver.read_proc = rs_read_proc;
  2330. /*
  2331.  * The callout device is just like normal device except for
  2332.  * major number and the subtype code.
  2333.  */
  2334. callout_driver = serial_driver;
  2335. #if (LINUX_VERSION_CODE > 0x2032D && defined(CONFIG_DEVFS_FS))
  2336. callout_driver.name = "cua/%d";
  2337. #else
  2338. callout_driver.name = "cua";
  2339. #endif
  2340. callout_driver.major = TTYAUX_MAJOR;
  2341. callout_driver.subtype = SERIAL_TYPE_CALLOUT;
  2342. callout_driver.read_proc = 0;
  2343. callout_driver.proc_entry = 0;
  2344. if (tty_register_driver(&serial_driver))
  2345. panic("Couldn't register serial driver");
  2346. if (tty_register_driver(&callout_driver))
  2347. panic("Couldn't register callout driver");
  2348. for (i = 0, state = rs_table; i < NR_PORTS; i++,state++) {
  2349. state->baud_base = get_au1000_uart_baud_base();
  2350. state->magic = SSTATE_MAGIC;
  2351. state->line = i;
  2352. state->type = PORT_UNKNOWN;
  2353. state->custom_divisor = 0;
  2354. state->close_delay = 5*HZ/10;
  2355. state->closing_wait = 30*HZ;
  2356. state->callout_termios = callout_driver.init_termios;
  2357. state->normal_termios = serial_driver.init_termios;
  2358. state->icount.cts = state->icount.dsr =
  2359. state->icount.rng = state->icount.dcd = 0;
  2360. state->icount.rx = state->icount.tx = 0;
  2361. state->icount.frame = state->icount.parity = 0;
  2362. state->icount.overrun = state->icount.brk = 0;
  2363. state->irq = irq_cannonicalize(state->irq);
  2364. if (state->hub6)
  2365. state->io_type = SERIAL_IO_HUB6;
  2366. if (state->port && check_region(state->port,8)) {
  2367. continue;
  2368. }
  2369. if (state->flags & ASYNC_BOOT_AUTOCONF) {
  2370. autoconfig(state);
  2371. }
  2372. }
  2373. for (i = 0, state = rs_table; i < NR_PORTS; i++,state++) {
  2374. if (state->type == PORT_UNKNOWN) {
  2375. continue;
  2376. }
  2377. printk(KERN_INFO "ttyS%02d%s at 0x%04lx (irq = %d) is a %sn",
  2378.        state->line + SERIAL_DEV_OFFSET,
  2379.        (state->flags & ASYNC_FOURPORT) ? " FourPort" : "",
  2380.        state->port, state->irq,
  2381.        uart_config[state->type].name);
  2382. tty_register_devfs(&serial_driver, 0,
  2383.    serial_driver.minor_start + state->line);
  2384. tty_register_devfs(&callout_driver, 0,
  2385.    callout_driver.minor_start + state->line);
  2386. }
  2387. return 0;
  2388. }
  2389. /*
  2390.  * register_serial and unregister_serial allows for 16x50 serial ports to be
  2391.  * configured at run-time, to support PCMCIA modems.
  2392.  */
  2393. /**
  2394.  * register_serial - configure a 16x50 serial port at runtime
  2395.  * @req: request structure
  2396.  *
  2397.  * Configure the serial port specified by the request. If the
  2398.  * port exists and is in use an error is returned. If the port
  2399.  * is not currently in the table it is added.
  2400.  *
  2401.  * The port is then probed and if neccessary the IRQ is autodetected
  2402.  * If this fails an error is returned.
  2403.  *
  2404.  * On success the port is ready to use and the line number is returned.
  2405.  */
  2406. int register_serial(struct serial_struct *req)
  2407. {
  2408. int i;
  2409. unsigned long flags;
  2410. struct serial_state *state;
  2411. struct async_struct *info;
  2412. unsigned long port;
  2413. port = req->port;
  2414. if (HIGH_BITS_OFFSET)
  2415. port += (unsigned long) req->port_high << HIGH_BITS_OFFSET;
  2416. save_flags(flags); cli();
  2417. for (i = 0; i < NR_PORTS; i++) {
  2418. if ((rs_table[i].port == port) &&
  2419.     (rs_table[i].iomem_base == req->iomem_base))
  2420. break;
  2421. }
  2422. if (i == NR_PORTS) {
  2423. for (i = 0; i < NR_PORTS; i++)
  2424. if ((rs_table[i].type == PORT_UNKNOWN) &&
  2425.     (rs_table[i].count == 0))
  2426. break;
  2427. }
  2428. if (i == NR_PORTS) {
  2429. restore_flags(flags);
  2430. return -1;
  2431. }
  2432. state = &rs_table[i];
  2433. if (rs_table[i].count) {
  2434. restore_flags(flags);
  2435. printk("Couldn't configure serial #%d (port=%ld,irq=%d): "
  2436.        "device already openn", i, port, req->irq);
  2437. return -1;
  2438. }
  2439. state->irq = req->irq;
  2440. state->port = port;
  2441. state->flags = req->flags;
  2442. state->io_type = req->io_type;
  2443. state->iomem_base = req->iomem_base;
  2444. state->iomem_reg_shift = req->iomem_reg_shift;
  2445. if (req->baud_base)
  2446. state->baud_base = req->baud_base;
  2447. if ((info = state->info) != NULL) {
  2448. info->port = port;
  2449. info->flags = req->flags;
  2450. info->io_type = req->io_type;
  2451. info->iomem_base = req->iomem_base;
  2452. info->iomem_reg_shift = req->iomem_reg_shift;
  2453. }
  2454. autoconfig(state);
  2455. if (state->type == PORT_UNKNOWN) {
  2456. restore_flags(flags);
  2457. printk("register_serial(): autoconfig failedn");
  2458. return -1;
  2459. }
  2460. restore_flags(flags);
  2461.        printk(KERN_INFO "ttyS%02d at %s 0x%04lx (irq = %d) is a %sn",
  2462.       state->line + SERIAL_DEV_OFFSET,
  2463.       state->iomem_base ? "iomem" : "port",
  2464.       state->iomem_base ? (unsigned long)state->iomem_base :
  2465.       state->port, state->irq, uart_config[state->type].name);
  2466. tty_register_devfs(&serial_driver, 0,
  2467.    serial_driver.minor_start + state->line);
  2468. tty_register_devfs(&callout_driver, 0,
  2469.    callout_driver.minor_start + state->line);
  2470. return state->line + SERIAL_DEV_OFFSET;
  2471. }
  2472. /**
  2473.  * unregister_serial - deconfigure a 16x50 serial port
  2474.  * @line: line to deconfigure
  2475.  *
  2476.  * The port specified is deconfigured and its resources are freed. Any
  2477.  * user of the port is disconnected as if carrier was dropped. Line is
  2478.  * the port number returned by register_serial().
  2479.  */
  2480. void unregister_serial(int line)
  2481. {
  2482. unsigned long flags;
  2483. struct serial_state *state = &rs_table[line];
  2484. save_flags(flags); cli();
  2485. if (state->info && state->info->tty)
  2486. tty_hangup(state->info->tty);
  2487. state->type = PORT_UNKNOWN;
  2488. printk(KERN_INFO "tty%02d unloadedn", state->line);
  2489. /* These will be hidden, because they are devices that will no longer
  2490.  * be available to the system. (ie, PCMCIA modems, once ejected)
  2491.  */
  2492. tty_unregister_devfs(&serial_driver,
  2493.      serial_driver.minor_start + state->line);
  2494. tty_unregister_devfs(&callout_driver,
  2495.      callout_driver.minor_start + state->line);
  2496. restore_flags(flags);
  2497. }
  2498. static void __exit rs_fini(void)
  2499. {
  2500. unsigned long flags;
  2501. int e1, e2;
  2502. int i;
  2503. struct async_struct *info;
  2504. /* printk("Unloading %s: version %sn", serial_name, serial_version); */
  2505. del_timer_sync(&serial_timer);
  2506. save_flags(flags); cli();
  2507.         remove_bh(SERIAL_BH);
  2508. if ((e1 = tty_unregister_driver(&serial_driver)))
  2509. printk("serial: failed to unregister serial driver (%d)n",
  2510.        e1);
  2511. if ((e2 = tty_unregister_driver(&callout_driver)))
  2512. printk("serial: failed to unregister callout driver (%d)n",
  2513.        e2);
  2514. restore_flags(flags);
  2515. for (i = 0; i < NR_PORTS; i++) {
  2516. if ((info = rs_table[i].info)) {
  2517. rs_table[i].info = NULL;
  2518. kfree(info);
  2519. }
  2520. if ((rs_table[i].type != PORT_UNKNOWN) && rs_table[i].port) {
  2521. release_region(rs_table[i].port, 8);
  2522. }
  2523. }
  2524. if (tmp_buf) {
  2525. unsigned long pg = (unsigned long) tmp_buf;
  2526. tmp_buf = NULL;
  2527. free_page(pg);
  2528. }
  2529. }
  2530. module_init(rs_init);
  2531. module_exit(rs_fini);
  2532. MODULE_DESCRIPTION("Au1000 serial driver");
  2533. /*
  2534.  * ------------------------------------------------------------
  2535.  * Serial console driver
  2536.  * ------------------------------------------------------------
  2537.  */
  2538. #ifdef CONFIG_AU1000_SERIAL_CONSOLE
  2539. #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
  2540. static struct async_struct async_sercons;
  2541. /*
  2542.  * Wait for transmitter & holding register to empty
  2543.  */
  2544. static inline void wait_for_xmitr(struct async_struct *info)
  2545. {
  2546. unsigned int status, tmout = 0xffffff;
  2547. do {
  2548. status = serial_in(info, UART_LSR);
  2549. if (status & UART_LSR_BI)
  2550. lsr_break_flag = UART_LSR_BI;
  2551. if (--tmout == 0)
  2552. break;
  2553. } while((status & BOTH_EMPTY) != BOTH_EMPTY);
  2554. }
  2555. /*
  2556.  * Print a string to the serial port trying not to disturb
  2557.  * any possible real use of the port...
  2558.  *
  2559.  * The console_lock must be held when we get here.
  2560.  */
  2561. static void serial_console_write(struct console *co, const char *s,
  2562. unsigned count)
  2563. {
  2564. static struct async_struct *info = &async_sercons;
  2565. int ier;
  2566. unsigned i;
  2567. /*
  2568.  * First save the IER then disable the interrupts
  2569.  */
  2570. ier = serial_in(info, UART_IER);
  2571. serial_out(info, UART_IER, 0x00);
  2572. /*
  2573.  * Now, do each character
  2574.  */
  2575. for (i = 0; i < count; i++, s++) {
  2576. wait_for_xmitr(info);
  2577. /*
  2578.  * Send the character out.
  2579.  * If a LF, also do CR...
  2580.  */
  2581. serial_out(info, UART_TX, *s);
  2582. if (*s == 10) {
  2583. wait_for_xmitr(info);
  2584. serial_out(info, UART_TX, 13);
  2585. }
  2586. }
  2587. /*
  2588.  * Finally, Wait for transmitter & holding register to empty
  2589.  *  and restore the IER
  2590.  */
  2591. wait_for_xmitr(info);
  2592. serial_out(info, UART_IER, ier);
  2593. }
  2594. static kdev_t serial_console_device(struct console *c)
  2595. {
  2596. return MKDEV(TTY_MAJOR, 64 + c->index);
  2597. }
  2598. /*
  2599.  * Setup initial baud/bits/parity. We do two things here:
  2600.  * - construct a cflag setting for the first rs_open()
  2601.  * - initialize the serial port
  2602.  * Return non-zero if we didn't find a serial port.
  2603.  */
  2604. static int __init serial_console_setup(struct console *co, char *options)
  2605. {
  2606. static struct async_struct *info;
  2607. struct serial_state *state;
  2608. unsigned cval;
  2609. int baud = 9600;
  2610. int bits = 8;
  2611. int parity = 'n';
  2612. int cflag = CREAD | HUPCL | CLOCAL;
  2613. int quot = 0;
  2614. char *s;
  2615. if (options) {
  2616. baud = simple_strtoul(options, NULL, 10);
  2617. s = options;
  2618. while(*s >= '0' && *s <= '9')
  2619. s++;
  2620. if (*s) parity = *s++;
  2621. if (*s) bits   = *s - '0';
  2622. }
  2623. /*
  2624.  * Now construct a cflag setting.
  2625.  */
  2626. switch(baud) {
  2627. case 1200:
  2628. cflag |= B1200;
  2629. break;
  2630. case 2400:
  2631. cflag |= B2400;
  2632. break;
  2633. case 4800:
  2634. cflag |= B4800;
  2635. break;
  2636. case 19200:
  2637. cflag |= B19200;
  2638. break;
  2639. case 38400:
  2640. cflag |= B38400;
  2641. break;
  2642. case 57600:
  2643. cflag |= B57600;
  2644. break;
  2645. case 115200:
  2646. cflag |= B115200;
  2647. break;
  2648. case 9600:
  2649. default:
  2650. cflag |= B9600;
  2651. break;
  2652. }
  2653. switch(bits) {
  2654. case 7:
  2655. cflag |= CS7;
  2656. break;
  2657. default:
  2658. case 8:
  2659. cflag |= CS8;
  2660. break;
  2661. }
  2662. switch(parity) {
  2663. case 'o': case 'O':
  2664. cflag |= PARODD;
  2665. break;
  2666. case 'e': case 'E':
  2667. cflag |= PARENB;
  2668. break;
  2669. }
  2670. co->cflag = cflag;
  2671. /*
  2672.  * Divisor, bytesize and parity
  2673.  */
  2674. state = rs_table + co->index;
  2675. info = &async_sercons;
  2676. info->magic = SERIAL_MAGIC;
  2677. info->state = state;
  2678. info->port = state->port;
  2679. info->flags = state->flags;
  2680. info->io_type = state->io_type;
  2681. info->iomem_base = state->iomem_base;
  2682. info->iomem_reg_shift = state->iomem_reg_shift;
  2683. state->baud_base = get_au1000_uart_baud_base();
  2684. quot = state->baud_base / baud;
  2685. cval = cflag & (CSIZE | CSTOPB);
  2686. cval >>= 4;
  2687. if (cflag & PARENB)
  2688. cval |= UART_LCR_PARITY;
  2689. if (!(cflag & PARODD))
  2690. cval |= UART_LCR_EPAR;
  2691. /*
  2692.  * Disable UART interrupts, set DTR and RTS high
  2693.  * and set speed.
  2694.  */
  2695. serial_out(info, UART_CLK, quot & 0xffff);
  2696. serial_out(info, UART_IER, 0);
  2697. serial_out(info, UART_MCR, UART_MCR_DTR | UART_MCR_RTS);
  2698. /*
  2699.  * If we read 0xff from the LSR, there is no UART here.
  2700.  */
  2701. if (serial_in(info, UART_LSR) == 0xff)
  2702. return -1;
  2703. return 0;
  2704. }
  2705. static struct console sercons = {
  2706. name: "ttyS",
  2707. write: serial_console_write,
  2708. device: serial_console_device,
  2709. setup: serial_console_setup,
  2710. flags: CON_PRINTBUFFER,
  2711. index: -1,
  2712. };
  2713. /*
  2714.  * Register console.
  2715.  */
  2716. void __init au1000_serial_console_init(void)
  2717. {
  2718. register_console(&sercons);
  2719. }
  2720. #endif
  2721. /*
  2722.   Local variables:
  2723.   compile-command: "gcc -D__KERNEL__ -I../../include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing -pipe -fno-strength-reduce -march=i586 -DMODULE -DMODVERSIONS -include ../../include/linux/modversions.h   -DEXPORT_SYMTAB -c serial.c"
  2724.   End:
  2725. */