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

嵌入式Linux

开发平台:

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