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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id: sab82532.c,v 1.65 2001/10/13 08:27:50 davem Exp $
  2.  * sab82532.c: ASYNC Driver for the SIEMENS SAB82532 DUSCC.
  3.  *
  4.  * Copyright (C) 1997  Eddie C. Dost  (ecd@skynet.be)
  5.  *
  6.  * Rewrote buffer handling to use CIRC(Circular Buffer) macros.
  7.  *   Maxim Krasnyanskiy <maxk@qualcomm.com>
  8.  *
  9.  * Fixed to use tty_get_baud_rate, and to allow for arbitrary baud
  10.  * rates to be programmed into the UART.  Also eliminated a lot of
  11.  * duplicated code in the console setup.
  12.  *   Theodore Ts'o <tytso@mit.edu>, 2001-Oct-12
  13.  */
  14. #include <linux/config.h>
  15. #include <linux/module.h>
  16. #include <linux/errno.h>
  17. #include <linux/signal.h>
  18. #include <linux/sched.h>
  19. #include <linux/timer.h>
  20. #include <linux/interrupt.h>
  21. #include <linux/tty.h>
  22. #include <linux/tty_flip.h>
  23. #include <linux/serial.h>
  24. #include <linux/serialP.h>
  25. #include <linux/serial_reg.h>
  26. #include <linux/console.h>
  27. #include <linux/major.h>
  28. #include <linux/string.h>
  29. #include <linux/fcntl.h>
  30. #include <linux/ptrace.h>
  31. #include <linux/ioport.h>
  32. #include <linux/mm.h>
  33. #include <linux/slab.h>
  34. #include <linux/init.h>
  35. #include <linux/delay.h>
  36. #include <asm/sab82532.h>
  37. #include <asm/uaccess.h>
  38. #include <asm/ebus.h>
  39. #include <asm/irq.h>
  40. #include "sunserial.h"
  41. static DECLARE_TASK_QUEUE(tq_serial);
  42. /* This is (one of many) a special gross hack to allow SU and
  43.  * SAB serials to co-exist on the same machine. -DaveM
  44.  */
  45. #undef SERIAL_BH
  46. #define SERIAL_BH AURORA_BH
  47. static struct tty_driver serial_driver, callout_driver;
  48. static int sab82532_refcount;
  49. /* number of characters left in xmit buffer before we ask for more */
  50. #define WAKEUP_CHARS 256
  51. #undef SERIAL_PARANOIA_CHECK
  52. #define SERIAL_DO_RESTART
  53. /* Set of debugging defines */
  54. #undef SERIAL_DEBUG_OPEN
  55. #undef SERIAL_DEBUG_FLOW
  56. #undef SERIAL_DEBUG_MODEM
  57. #undef SERIAL_DEBUG_WAIT_UNTIL_SENT
  58. #undef SERIAL_DEBUG_SEND_BREAK
  59. #undef SERIAL_DEBUG_INTR
  60. #undef SERIAL_DEBUG_FIFO
  61. #define SERIAL_DEBUG_OVERFLOW 1
  62. /* Trace things on serial device, useful for console debugging: */
  63. #undef SERIAL_LOG_DEVICE
  64. #ifdef SERIAL_LOG_DEVICE
  65. static void dprint_init(int tty);
  66. #endif
  67. static void change_speed(struct sab82532 *info);
  68. static void sab82532_wait_until_sent(struct tty_struct *tty, int timeout);
  69. /*
  70.  * This assumes you have a 29.4912 MHz clock for your UART.
  71.  */
  72. #define BASE_BAUD ( 29491200 / 16 )
  73. static struct sab82532 *sab82532_chain = 0;
  74. static struct tty_struct *sab82532_table[NR_PORTS];
  75. static struct termios *sab82532_termios[NR_PORTS];
  76. static struct termios *sab82532_termios_locked[NR_PORTS];
  77. #ifdef MODULE
  78. #undef CONFIG_SERIAL_CONSOLE
  79. #endif
  80. #ifdef CONFIG_SERIAL_CONSOLE
  81. extern int serial_console;
  82. static struct console sab82532_console;
  83. static int sab82532_console_init(void);
  84. static void batten_down_hatches(struct sab82532 *info);
  85. #endif
  86. #ifndef MIN
  87. #define MIN(a,b) ((a) < (b) ? (a) : (b))
  88. #endif
  89. static char *sab82532_version[16] = {
  90. "V1.0", "V2.0", "V3.2", "V(0x03)",
  91. "V(0x04)", "V(0x05)", "V(0x06)", "V(0x07)",
  92. "V(0x08)", "V(0x09)", "V(0x0a)", "V(0x0b)",
  93. "V(0x0c)", "V(0x0d)", "V(0x0e)", "V(0x0f)"
  94. };
  95. static char serial_version[16];
  96. /*
  97.  * tmp_buf is used as a temporary buffer by sab82532_write.  We need to
  98.  * lock it in case the copy_from_user blocks while swapping in a page,
  99.  * and some other program tries to do a serial write at the same time.
  100.  * Since the lock will only come under contention when the system is
  101.  * swapping and available memory is low, it makes sense to share one
  102.  * buffer across all the serial ports, since it significantly saves
  103.  * memory if large numbers of serial ports are open.
  104.  */
  105. static unsigned char *tmp_buf = 0;
  106. static DECLARE_MUTEX(tmp_buf_sem);
  107. static inline int serial_paranoia_check(struct sab82532 *info,
  108. kdev_t device, const char *routine)
  109. {
  110. #ifdef SERIAL_PARANOIA_CHECK
  111. static const char *badmagic =
  112. "Warning: bad magic number for serial struct (%s) in %sn";
  113. static const char *badinfo =
  114. "Warning: null sab82532 for (%s) in %sn";
  115. if (!info) {
  116. printk(badinfo, kdevname(device), routine);
  117. return 1;
  118. }
  119. if (info->magic != SERIAL_MAGIC) {
  120. printk(badmagic, kdevname(device), routine);
  121. return 1;
  122. }
  123. #endif
  124. return 0;
  125. }
  126. /*
  127.  * This is used to figure out the divisor speeds.
  128.  *
  129.  * The formula is:    Baud = BASE_BAUD / ((N + 1) * (1 << M)),
  130.  *
  131.  * with               0 <= N < 64 and 0 <= M < 16
  132.  * 
  133.  * 12-Oct-2001 - Replaced table driven approach with code written by
  134.  * Theodore Ts'o <tytso@alum.mit.edu> which exactly replicates the
  135.  * table.  (Modulo bugs for the 307200 and 61440 baud rates, which
  136.  * were clearly incorrectly calculated in the original table.  This is
  137.  * why tables filled with magic constants are evil.)
  138.  */
  139. static void calc_ebrg(int baud, int *n_ret, int *m_ret)
  140. {
  141. int n, m;
  142. if (baud == 0) {
  143. *n_ret = 0;
  144. *m_ret = 0;
  145. return;
  146. }
  147.      
  148. /*
  149.  * We scale numbers by 10 so that we get better accuracy
  150.  * without having to use floating point.  Here we increment m
  151.  * until n is within the valid range.
  152.  */
  153. n = (BASE_BAUD*10) / baud;
  154. m = 0;
  155. while (n >= 640) {
  156. n = n / 2;
  157. m++;
  158. }
  159. n = (n+5) / 10;
  160. /*
  161.  * We try very hard to avoid speeds with M == 0 since they may
  162.  * not work correctly for XTAL frequences above 10 MHz.
  163.  */
  164. if ((m == 0) && ((n & 1) == 0)) {
  165. n = n / 2;
  166. m++;
  167. }
  168. *n_ret = n - 1;
  169. *m_ret = m;
  170. }
  171. #define SAB82532_MAX_TEC_TIMEOUT 200000 /* 1 character time (at 50 baud) */
  172. #define SAB82532_MAX_CEC_TIMEOUT  50000 /* 2.5 TX CLKs (at 50 baud) */
  173. static __inline__ void sab82532_tec_wait(struct sab82532 *info)
  174. {
  175. int timeout = info->tec_timeout;
  176. while ((readb(&info->regs->r.star) & SAB82532_STAR_TEC) && --timeout)
  177. udelay(1);
  178. }
  179. static __inline__ void sab82532_cec_wait(struct sab82532 *info)
  180. {
  181. int timeout = info->cec_timeout;
  182. while ((readb(&info->regs->r.star) & SAB82532_STAR_CEC) && --timeout)
  183. udelay(1);
  184. }
  185. static __inline__ void sab82532_start_tx(struct sab82532 *info)
  186. {
  187. unsigned long flags;
  188. int i;
  189. save_flags(flags); cli();
  190. if (info->xmit.head == info->xmit.tail)
  191. goto out;
  192. if (!test_bit(SAB82532_XPR, &info->irqflags))
  193. goto out;
  194. info->interrupt_mask1 &= ~(SAB82532_IMR1_ALLS);
  195. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  196. clear_bit(SAB82532_ALLS, &info->irqflags);
  197. clear_bit(SAB82532_XPR, &info->irqflags);
  198. for (i = 0; i < info->xmit_fifo_size; i++) {
  199. writeb(info->xmit.buf[info->xmit.tail],
  200.        &info->regs->w.xfifo[i]);
  201. info->xmit.tail = (info->xmit.tail + 1) & (SERIAL_XMIT_SIZE-1);
  202. info->icount.tx++;
  203. if (info->xmit.head == info->xmit.tail)
  204. break;
  205. }
  206. /* Issue a Transmit Frame command. */
  207. sab82532_cec_wait(info);
  208. writeb(SAB82532_CMDR_XF, &info->regs->w.cmdr);
  209. out:
  210. restore_flags(flags);
  211. }
  212. /*
  213.  * ------------------------------------------------------------
  214.  * sab82532_stop() and sab82532_start()
  215.  *
  216.  * This routines are called before setting or resetting tty->stopped.
  217.  * They enable or disable transmitter interrupts, as necessary.
  218.  * ------------------------------------------------------------
  219.  */
  220. static void sab82532_stop(struct tty_struct *tty)
  221. {
  222. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  223. unsigned long flags;
  224. if (serial_paranoia_check(info, tty->device, "sab82532_stop"))
  225. return;
  226. save_flags(flags); cli();
  227. info->interrupt_mask1 |= SAB82532_IMR1_XPR;
  228. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  229. restore_flags(flags);
  230. }
  231. static void sab82532_start(struct tty_struct *tty)
  232. {
  233. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  234. unsigned long flags;
  235. if (serial_paranoia_check(info, tty->device, "sab82532_start"))
  236. return;
  237. save_flags(flags); cli();
  238. info->interrupt_mask1 &= ~(SAB82532_IMR1_XPR);
  239. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  240. sab82532_start_tx(info);
  241. restore_flags(flags);
  242. }
  243. /*
  244.  * ----------------------------------------------------------------------
  245.  *
  246.  * Here starts the interrupt handling routines.  All of the following
  247.  * subroutines are declared as inline and are folded into
  248.  * sab82532_interrupt().  They were separated out for readability's sake.
  249.  *
  250.  * Note: sab82532_interrupt() is a "fast" interrupt, which means that it
  251.  * runs with interrupts turned off.  People who may want to modify
  252.  * sab82532_interrupt() should try to keep the interrupt handler as fast as
  253.  * possible.  After you are done making modifications, it is not a bad
  254.  * idea to do:
  255.  * 
  256.  * gcc -S -DKERNEL -Wall -Wstrict-prototypes -O6 -fomit-frame-pointer serial.c
  257.  *
  258.  * and look at the resulting assemble code in serial.s.
  259.  *
  260.  *  - Ted Ts'o (tytso@mit.edu), 7-Mar-93
  261.  * -----------------------------------------------------------------------
  262.  */
  263. /*
  264.  * This routine is used by the interrupt handler to schedule
  265.  * processing in the software interrupt portion of the driver.
  266.  */
  267. static void sab82532_sched_event(struct sab82532 *info, int event)
  268. {
  269. info->event |= 1 << event;
  270. queue_task(&info->tqueue, &tq_serial);
  271. mark_bh(SERIAL_BH);
  272. }
  273. static void receive_chars(struct sab82532 *info,
  274.   union sab82532_irq_status *stat)
  275. {
  276. struct tty_struct *tty = info->tty;
  277. unsigned char buf[32];
  278. unsigned char status;
  279. int free_fifo = 0;
  280. int i, count = 0;
  281. /* Read number of BYTES (Character + Status) available. */
  282. if (stat->sreg.isr0 & SAB82532_ISR0_RPF) {
  283. count = info->recv_fifo_size;
  284. free_fifo++;
  285. }
  286. if (stat->sreg.isr0 & SAB82532_ISR0_TCD) {
  287. count = readb(&info->regs->r.rbcl) & (info->recv_fifo_size - 1);
  288. free_fifo++;
  289. }
  290. /* Issue a FIFO read command in case we where idle. */
  291. if (stat->sreg.isr0 & SAB82532_ISR0_TIME) {
  292. sab82532_cec_wait(info);
  293. writeb(SAB82532_CMDR_RFRD, &info->regs->w.cmdr);
  294. return;
  295. }
  296. if (stat->sreg.isr0 & SAB82532_ISR0_RFO) {
  297. #ifdef SERIAL_DEBUG_OVERFLOW
  298. printk("sab82532: receive_chars: RFO");
  299. #endif
  300. free_fifo++;
  301. }
  302. /* Read the FIFO. */
  303. for (i = 0; i < count; i++)
  304. buf[i] = readb(&info->regs->r.rfifo[i]);
  305. /* Issue Receive Message Complete command. */
  306. if (free_fifo) {
  307. sab82532_cec_wait(info);
  308. writeb(SAB82532_CMDR_RMC, &info->regs->w.cmdr);
  309. }
  310. if (!tty)
  311. return;
  312. for (i = 0; i < count; ) {
  313. if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
  314. #ifdef SERIAL_DEBUG_OVERFLOW
  315. printk("sab82532: receive_chars: tty overrunn");
  316. #endif
  317. info->icount.buf_overrun++;
  318. break;
  319. }
  320. tty->flip.count++;
  321. *tty->flip.char_buf_ptr++ = buf[i++];
  322. status = buf[i++];
  323. info->icount.rx++;
  324. #ifdef SERIAL_DEBUG_INTR
  325.                 printk("DR%02x:%02x...", (unsigned char)*(tty->flip.char_buf_ptr - 1), status);
  326. #endif
  327. if (status & SAB82532_RSTAT_PE) {
  328. *tty->flip.flag_buf_ptr++ = TTY_PARITY;
  329. info->icount.parity++;
  330. } else if (status & SAB82532_RSTAT_FE) {
  331. *tty->flip.flag_buf_ptr++ = TTY_FRAME;
  332. info->icount.frame++;
  333. }
  334. else
  335. *tty->flip.flag_buf_ptr++ = TTY_NORMAL;
  336. }
  337. queue_task(&tty->flip.tqueue, &tq_timer);
  338. }
  339. static void transmit_chars(struct sab82532 *info,
  340.    union sab82532_irq_status *stat)
  341. {
  342. int i;
  343. if (stat->sreg.isr1 & SAB82532_ISR1_ALLS) {
  344. info->interrupt_mask1 |= SAB82532_IMR1_ALLS;
  345. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  346. set_bit(SAB82532_ALLS, &info->irqflags);
  347. }
  348. if (!(stat->sreg.isr1 & SAB82532_ISR1_XPR))
  349. return;
  350. if (!(readb(&info->regs->r.star) & SAB82532_STAR_XFW)) {
  351. #ifdef SERIAL_DEBUG_FIFO
  352. printk("%s: XPR, but no XFW (?)n", __FUNCTION__);
  353. #endif
  354. return;
  355. }
  356. set_bit(SAB82532_XPR, &info->irqflags);
  357. if (!info->tty) {
  358. info->interrupt_mask1 |= SAB82532_IMR1_XPR;
  359. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  360. return;
  361. }
  362. if ((info->xmit.head == info->xmit.tail) ||
  363.     info->tty->stopped || info->tty->hw_stopped) {
  364. info->interrupt_mask1 |= SAB82532_IMR1_XPR;
  365. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  366. return;
  367. }
  368. info->interrupt_mask1 &= ~(SAB82532_IMR1_ALLS);
  369. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  370. clear_bit(SAB82532_ALLS, &info->irqflags);
  371. /* Stuff 32 bytes into Transmit FIFO. */
  372. clear_bit(SAB82532_XPR, &info->irqflags);
  373. for (i = 0; i < info->xmit_fifo_size; i++) {
  374. writeb(info->xmit.buf[info->xmit.tail],
  375.        &info->regs->w.xfifo[i]);
  376. info->xmit.tail = (info->xmit.tail + 1) & (SERIAL_XMIT_SIZE-1);
  377. info->icount.tx++;
  378. if (info->xmit.head == info->xmit.tail)
  379. break;
  380. }
  381. /* Issue a Transmit Frame command. */
  382. sab82532_cec_wait(info);
  383. writeb(SAB82532_CMDR_XF, &info->regs->w.cmdr);
  384. if (CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE) < WAKEUP_CHARS)
  385. sab82532_sched_event(info, RS_EVENT_WRITE_WAKEUP);
  386. #ifdef SERIAL_DEBUG_INTR
  387. printk("THRE...");
  388. #endif
  389. }
  390. static void check_status(struct sab82532 *info,
  391.  union sab82532_irq_status *stat)
  392. {
  393. struct tty_struct *tty = info->tty;
  394. int modem_change = 0;
  395. if (stat->sreg.isr1 & SAB82532_ISR1_BRK) {
  396. #ifdef CONFIG_SERIAL_CONSOLE
  397. if (info->is_console) {
  398. batten_down_hatches(info);
  399. return;
  400. }
  401. #endif
  402. if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
  403. info->icount.buf_overrun++;
  404. goto check_modem;
  405. }
  406. tty->flip.count++;
  407. *tty->flip.flag_buf_ptr++ = TTY_PARITY;
  408. *tty->flip.char_buf_ptr++ = 0;
  409. info->icount.brk++;
  410. }
  411. if (!tty)
  412. return;
  413. if (stat->sreg.isr0 & SAB82532_ISR0_RFO) {
  414. if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
  415. info->icount.buf_overrun++;
  416. goto check_modem;
  417. }
  418. tty->flip.count++;
  419. *tty->flip.flag_buf_ptr++ = TTY_PARITY;
  420. *tty->flip.char_buf_ptr++ = 0;
  421. info->icount.overrun++;
  422. }
  423. check_modem:
  424. if (stat->sreg.isr0 & SAB82532_ISR0_CDSC) {
  425. info->dcd = (readb(&info->regs->r.vstr) & SAB82532_VSTR_CD) ? 0 : 1;
  426. info->icount.dcd++;
  427. modem_change++;
  428. #ifdef SERIAL_DEBUG_MODEM
  429. printk("DCD change: %dn", info->icount.dcd);
  430. #endif
  431. }
  432. if (stat->sreg.isr1 & SAB82532_ISR1_CSC) {
  433. info->cts = readb(&info->regs->r.star) & SAB82532_STAR_CTS;
  434. info->icount.cts++;
  435. modem_change++;
  436. #ifdef SERIAL_DEBUG_MODEM
  437. printk("CTS change: %d, CTS %sn", info->icount.cts, info->cts ? "on" : "off");
  438. #endif
  439. }
  440. if ((readb(&info->regs->r.pvr) & info->pvr_dsr_bit) ^ info->dsr) {
  441. info->dsr = (readb(&info->regs->r.pvr) & info->pvr_dsr_bit) ? 0 : 1;
  442. info->icount.dsr++;
  443. modem_change++;
  444. #ifdef SERIAL_DEBUG_MODEM
  445. printk("DSR change: %dn", info->icount.dsr);
  446. #endif
  447. }
  448. if (modem_change)
  449. wake_up_interruptible(&info->delta_msr_wait);
  450. if ((info->flags & ASYNC_CHECK_CD) &&
  451.     (stat->sreg.isr0 & SAB82532_ISR0_CDSC)) {
  452. #if (defined(SERIAL_DEBUG_OPEN) || defined(SERIAL_DEBUG_INTR))
  453. printk("ttys%d CD now %s...", info->line,
  454.        (info->dcd) ? "on" : "off");
  455. #endif
  456. if (info->dcd)
  457. wake_up_interruptible(&info->open_wait);
  458. else if (!((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  459.    (info->flags & ASYNC_CALLOUT_NOHUP))) {
  460. #ifdef SERIAL_DEBUG_OPEN
  461. printk("scheduling hangup...");
  462. #endif
  463. MOD_INC_USE_COUNT;
  464. if (schedule_task(&info->tqueue_hangup) == 0)
  465. MOD_DEC_USE_COUNT;
  466. }
  467. }
  468. if (info->flags & ASYNC_CTS_FLOW) {
  469. if (info->tty->hw_stopped) {
  470. if (info->cts) {
  471. #if (defined(SERIAL_DEBUG_INTR) || defined(SERIAL_DEBUG_FLOW))
  472. printk("CTS tx start...");
  473. #endif
  474. info->tty->hw_stopped = 0;
  475. sab82532_sched_event(info,
  476.      RS_EVENT_WRITE_WAKEUP);
  477. info->interrupt_mask1 &= ~(SAB82532_IMR1_XPR);
  478. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  479. sab82532_start_tx(info);
  480. }
  481. } else {
  482. if (!(info->cts)) {
  483. #if (defined(SERIAL_DEBUG_INTR) || defined(SERIAL_DEBUG_FLOW))
  484. printk("CTS tx stop...");
  485. #endif
  486. info->tty->hw_stopped = 1;
  487. }
  488. }
  489. }
  490. }
  491. /*
  492.  * This is the serial driver's generic interrupt routine
  493.  */
  494. static void sab82532_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  495. {
  496. struct sab82532 *info = dev_id;
  497. union sab82532_irq_status status;
  498. #ifdef SERIAL_DEBUG_INTR
  499. printk("sab82532_interrupt(%d)...", irq);
  500. #endif
  501. status.stat = 0;
  502. if (readb(&info->regs->r.gis) & SAB82532_GIS_ISA0)
  503. status.sreg.isr0 = readb(&info->regs->r.isr0);
  504. if (readb(&info->regs->r.gis) & SAB82532_GIS_ISA1)
  505. status.sreg.isr1 = readb(&info->regs->r.isr1);
  506. #ifdef SERIAL_DEBUG_INTR
  507. printk("%d<%02x.%02x>", info->line,
  508.        status.sreg.isr0, status.sreg.isr1);
  509. #endif
  510. if (!status.stat)
  511. goto next;
  512. if (status.sreg.isr0 & (SAB82532_ISR0_TCD | SAB82532_ISR0_TIME |
  513. SAB82532_ISR0_RFO | SAB82532_ISR0_RPF))
  514. receive_chars(info, &status);
  515. if ((status.sreg.isr0 & SAB82532_ISR0_CDSC) ||
  516.     (status.sreg.isr1 & (SAB82532_ISR1_BRK | SAB82532_ISR1_CSC)))
  517. check_status(info, &status);
  518. if (status.sreg.isr1 & (SAB82532_ISR1_ALLS | SAB82532_ISR1_XPR))
  519. transmit_chars(info, &status);
  520. next:
  521. info = info->next;
  522. status.stat = 0;
  523. if (readb(&info->regs->r.gis) & SAB82532_GIS_ISB0)
  524. status.sreg.isr0 = readb(&info->regs->r.isr0);
  525. if (readb(&info->regs->r.gis) & SAB82532_GIS_ISB1)
  526. status.sreg.isr1 = readb(&info->regs->r.isr1);
  527. #ifdef SERIAL_DEBUG_INTR
  528. printk("%d<%02x.%02x>", info->line,
  529.        status.sreg.isr0, status.sreg.isr1);
  530. #endif
  531. if (!status.stat)
  532. goto done;
  533. if (status.sreg.isr0 & (SAB82532_ISR0_TCD | SAB82532_ISR0_TIME |
  534. SAB82532_ISR0_RFO | SAB82532_ISR0_RPF))
  535. receive_chars(info, &status);
  536. if ((status.sreg.isr0 & SAB82532_ISR0_CDSC) ||
  537.     (status.sreg.isr1 & (SAB82532_ISR1_BRK | SAB82532_ISR1_CSC)))
  538. check_status(info, &status);
  539. if (status.sreg.isr1 & (SAB82532_ISR1_ALLS | SAB82532_ISR1_XPR))
  540. transmit_chars(info, &status);
  541. done:
  542. ;
  543. #ifdef SERIAL_DEBUG_INTR
  544. printk("end.n");
  545. #endif
  546. }
  547. /*
  548.  * -------------------------------------------------------------------
  549.  * Here ends the serial interrupt routines.
  550.  * -------------------------------------------------------------------
  551.  */
  552. /*
  553.  * This routine is used to handle the "bottom half" processing for the
  554.  * serial driver, known also the "software interrupt" processing.
  555.  * This processing is done at the kernel interrupt level, after the
  556.  * sab82532_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON.  This
  557.  * is where time-consuming activities which can not be done in the
  558.  * interrupt driver proper are done; the interrupt driver schedules
  559.  * them using sab82532_sched_event(), and they get done here.
  560.  */
  561. static void do_serial_bh(void)
  562. {
  563. run_task_queue(&tq_serial);
  564. }
  565. static void do_softint(void *private_)
  566. {
  567. struct sab82532 *info = (struct sab82532 *)private_;
  568. struct tty_struct *tty;
  569. tty = info->tty;
  570. if (!tty)
  571. return;
  572. if (test_and_clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event)) {
  573. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  574.     tty->ldisc.write_wakeup)
  575. (tty->ldisc.write_wakeup)(tty);
  576. wake_up_interruptible(&tty->write_wait);
  577. }
  578. }
  579. /*
  580.  * This routine is called from the scheduler tqueue when the interrupt
  581.  * routine has signalled that a hangup has occurred.  The path of
  582.  * hangup processing is:
  583.  *
  584.  *  serial interrupt routine -> (scheduler tqueue) ->
  585.  *  do_serial_hangup() -> tty->hangup() -> sab82532_hangup()
  586.  * 
  587.  */
  588. static void do_serial_hangup(void *private_)
  589. {
  590. struct sab82532 *info = (struct sab82532 *) private_;
  591. struct tty_struct *tty;
  592. tty = info->tty;
  593. if (tty)
  594. tty_hangup(tty);
  595. MOD_DEC_USE_COUNT;
  596. }
  597. static void
  598. sab82532_init_line(struct sab82532 *info)
  599. {
  600. unsigned char stat, tmp;
  601. /*
  602.  * Wait for any commands or immediate characters
  603.  */
  604. sab82532_cec_wait(info);
  605. sab82532_tec_wait(info);
  606. /*
  607.  * Clear the FIFO buffers.
  608.  */
  609. writeb(SAB82532_CMDR_RRES, &info->regs->w.cmdr);
  610. sab82532_cec_wait(info);
  611. writeb(SAB82532_CMDR_XRES, &info->regs->w.cmdr);
  612. /*
  613.  * Clear the interrupt registers.
  614.  */
  615. stat = readb(&info->regs->r.isr0);
  616. stat = readb(&info->regs->r.isr1);
  617. /*
  618.  * Now, initialize the UART 
  619.  */
  620. writeb(0, &info->regs->w.ccr0); /* power-down */
  621. writeb(SAB82532_CCR0_MCE | SAB82532_CCR0_SC_NRZ |
  622.        SAB82532_CCR0_SM_ASYNC, &info->regs->w.ccr0);
  623. writeb(SAB82532_CCR1_ODS | SAB82532_CCR1_BCR | 7, &info->regs->w.ccr1);
  624. writeb(SAB82532_CCR2_BDF | SAB82532_CCR2_SSEL |
  625.        SAB82532_CCR2_TOE, &info->regs->w.ccr2);
  626. writeb(0, &info->regs->w.ccr3);
  627. writeb(SAB82532_CCR4_MCK4 | SAB82532_CCR4_EBRG, &info->regs->w.ccr4);
  628. writeb(SAB82532_MODE_RTS | SAB82532_MODE_FCTS |
  629.        SAB82532_MODE_RAC, &info->regs->w.mode);
  630. writeb(SAB82532_RFC_DPS | SAB82532_RFC_RFDF, &info->regs->w.rfc);
  631. switch (info->recv_fifo_size) {
  632. case 1:
  633. tmp = readb(&info->regs->w.rfc);
  634. tmp |= SAB82532_RFC_RFTH_1;
  635. writeb(tmp, &info->regs->w.rfc);
  636. break;
  637. case 4:
  638. tmp = readb(&info->regs->w.rfc);
  639. tmp |= SAB82532_RFC_RFTH_4;
  640. writeb(tmp, &info->regs->w.rfc);
  641. break;
  642. case 16:
  643. tmp = readb(&info->regs->w.rfc);
  644. tmp |= SAB82532_RFC_RFTH_16;
  645. writeb(tmp, &info->regs->w.rfc);
  646. break;
  647. default:
  648. info->recv_fifo_size = 32;
  649. /* fall through */
  650. case 32:
  651. tmp = readb(&info->regs->w.rfc);
  652. tmp |= SAB82532_RFC_RFTH_32;
  653. writeb(tmp, &info->regs->w.rfc);
  654. break;
  655. }
  656. tmp = readb(&info->regs->rw.ccr0);
  657. tmp |= SAB82532_CCR0_PU; /* power-up */
  658. writeb(tmp, &info->regs->rw.ccr0);
  659. }
  660. static int startup(struct sab82532 *info)
  661. {
  662. unsigned long flags;
  663. unsigned long page;
  664. int retval = 0;
  665. page = get_free_page(GFP_KERNEL);
  666. if (!page)
  667. return -ENOMEM;
  668. save_flags(flags); cli();
  669. if (info->flags & ASYNC_INITIALIZED) {
  670. free_page(page);
  671. goto errout;
  672. }
  673. if (!info->regs) {
  674. if (info->tty)
  675. set_bit(TTY_IO_ERROR, &info->tty->flags);
  676. free_page(page);
  677. retval = -ENODEV;
  678. goto errout;
  679. }
  680. if (info->xmit.buf)
  681. free_page(page);
  682. else
  683. info->xmit.buf = (unsigned char *)page;
  684. #ifdef SERIAL_DEBUG_OPEN
  685. printk("starting up serial port %d...", info->line);
  686. #endif
  687. /*
  688.  * Initialize the Hardware
  689.  */
  690. sab82532_init_line(info);
  691. if (info->tty->termios->c_cflag & CBAUD) {
  692. u8 tmp;
  693. tmp = readb(&info->regs->rw.mode);
  694. tmp &= ~(SAB82532_MODE_FRTS);
  695. tmp |= SAB82532_MODE_RTS;
  696. writeb(tmp, &info->regs->rw.mode);
  697. tmp = readb(&info->regs->rw.pvr);
  698. tmp &= ~(info->pvr_dtr_bit);
  699. writeb(tmp, &info->regs->rw.pvr);
  700. }
  701. /*
  702.  * Finally, enable interrupts
  703.  */
  704. info->interrupt_mask0 = SAB82532_IMR0_PERR | SAB82532_IMR0_FERR |
  705. SAB82532_IMR0_PLLA;
  706. writeb(info->interrupt_mask0, &info->regs->w.imr0);
  707. info->interrupt_mask1 = SAB82532_IMR1_BRKT | SAB82532_IMR1_ALLS |
  708. SAB82532_IMR1_XOFF | SAB82532_IMR1_TIN |
  709. SAB82532_IMR1_CSC | SAB82532_IMR1_XON |
  710. SAB82532_IMR1_XPR;
  711. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  712. set_bit(SAB82532_ALLS, &info->irqflags);
  713. if (info->tty)
  714. clear_bit(TTY_IO_ERROR, &info->tty->flags);
  715. info->xmit.head = info->xmit.tail = 0;
  716. set_bit(SAB82532_XPR, &info->irqflags);
  717. /*
  718.  * and set the speed of the serial port
  719.  */
  720. change_speed(info);
  721. info->flags |= ASYNC_INITIALIZED;
  722. restore_flags(flags);
  723. return 0;
  724. errout:
  725. restore_flags(flags);
  726. return retval;
  727. }
  728. /*
  729.  * This routine will shutdown a serial port; interrupts are disabled, and
  730.  * DTR is dropped if the hangup on close termio flag is on.
  731.  */
  732. static void shutdown(struct sab82532 *info)
  733. {
  734. unsigned long flags;
  735. u8 tmp;
  736. if (!(info->flags & ASYNC_INITIALIZED))
  737. return;
  738. #ifdef SERIAL_DEBUG_OPEN
  739. printk("Shutting down serial port %d...", info->line);
  740. #endif
  741. save_flags(flags); cli(); /* Disable interrupts */
  742. /*
  743.  * clear delta_msr_wait queue to avoid mem leaks: we may free the irq
  744.  * here so the queue might never be waken up
  745.  */
  746. wake_up_interruptible(&info->delta_msr_wait);
  747. if (info->xmit.buf) {
  748. free_page((unsigned long)info->xmit.buf);
  749. info->xmit.buf = 0;
  750. }
  751. #ifdef CONFIG_SERIAL_CONSOLE
  752. if (info->is_console) {
  753. info->interrupt_mask0 = SAB82532_IMR0_PERR | SAB82532_IMR0_FERR |
  754. SAB82532_IMR0_PLLA | SAB82532_IMR0_CDSC;
  755. writeb(info->interrupt_mask0, &info->regs->w.imr0);
  756. info->interrupt_mask1 = SAB82532_IMR1_BRKT | SAB82532_IMR1_ALLS |
  757. SAB82532_IMR1_XOFF | SAB82532_IMR1_TIN |
  758. SAB82532_IMR1_CSC | SAB82532_IMR1_XON |
  759. SAB82532_IMR1_XPR;
  760. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  761. if (info->tty)
  762. set_bit(TTY_IO_ERROR, &info->tty->flags);
  763. info->flags &= ~ASYNC_INITIALIZED;
  764. restore_flags(flags);
  765. return;
  766. }
  767. #endif
  768. /* Disable Interrupts */
  769. info->interrupt_mask0 = 0xff;
  770. writeb(info->interrupt_mask0, &info->regs->w.imr0);
  771. info->interrupt_mask1 = 0xff;
  772. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  773. if (!info->tty || (info->tty->termios->c_cflag & HUPCL)) {
  774. tmp = readb(&info->regs->r.mode);
  775. tmp |= (SAB82532_MODE_FRTS | SAB82532_MODE_RTS);
  776. writeb(tmp, &info->regs->rw.mode);
  777. writeb(readb(&info->regs->rw.pvr) | info->pvr_dtr_bit,
  778.        &info->regs->rw.pvr);
  779. }
  780. /* Disable break condition */
  781. tmp = readb(&info->regs->rw.dafo);
  782. tmp &= ~(SAB82532_DAFO_XBRK);
  783. writeb(tmp, &info->regs->rw.dafo);
  784. /* Disable Receiver */
  785. tmp = readb(&info->regs->rw.mode);
  786. tmp &= ~(SAB82532_MODE_RAC);
  787. writeb(tmp, &info->regs->rw.mode);
  788. /* Power Down */
  789. tmp = readb(&info->regs->rw.ccr0);
  790. tmp &= ~(SAB82532_CCR0_PU);
  791. writeb(tmp, &info->regs->rw.ccr0);
  792. if (info->tty)
  793. set_bit(TTY_IO_ERROR, &info->tty->flags);
  794. info->flags &= ~ASYNC_INITIALIZED;
  795. restore_flags(flags);
  796. }
  797. /*
  798.  * This routine is called to set the UART divisor registers to match
  799.  * the specified baud rate for a serial port.
  800.  */
  801. static void change_speed(struct sab82532 *info)
  802. {
  803. unsigned long flags;
  804. unsigned int ebrg;
  805. tcflag_t cflag;
  806. unsigned char dafo;
  807. int bits, n, m;
  808. if (!info->tty || !info->tty->termios)
  809. return;
  810. cflag = info->tty->termios->c_cflag;
  811. /* Byte size and parity */
  812. switch (cflag & CSIZE) {
  813.       case CS5: dafo = SAB82532_DAFO_CHL5; bits = 7; break;
  814.       case CS6: dafo = SAB82532_DAFO_CHL6; bits = 8; break;
  815.       case CS7: dafo = SAB82532_DAFO_CHL7; bits = 9; break;
  816.       case CS8: dafo = SAB82532_DAFO_CHL8; bits = 10; break;
  817.       /* Never happens, but GCC is too dumb to figure it out */
  818.       default:  dafo = SAB82532_DAFO_CHL5; bits = 7; break;
  819. }
  820. if (cflag & CSTOPB) {
  821. dafo |= SAB82532_DAFO_STOP;
  822. bits++;
  823. }
  824. if (cflag & PARENB) {
  825. dafo |= SAB82532_DAFO_PARE;
  826. bits++;
  827. }
  828. if (cflag & PARODD) {
  829. #ifdef CMSPAR
  830. if (cflag & CMSPAR)
  831. dafo |= SAB82532_DAFO_PAR_MARK;
  832. else
  833. #endif
  834. dafo |= SAB82532_DAFO_PAR_ODD;
  835. } else {
  836. #ifdef CMSPAR
  837. if (cflag & CMSPAR)
  838. dafo |= SAB82532_DAFO_PAR_SPACE;
  839. else
  840. #endif
  841. dafo |= SAB82532_DAFO_PAR_EVEN;
  842. }
  843. /* Determine EBRG values based on baud rate */
  844. info->baud = tty_get_baud_rate(info->tty);
  845. calc_ebrg(info->baud, &n, &m);
  846. ebrg = n | (m << 6);
  847. if (info->baud) {
  848. info->timeout = (info->xmit_fifo_size * HZ * bits) / info->baud;
  849. info->tec_timeout = (10 * 1000000) / info->baud;
  850. info->cec_timeout = info->tec_timeout >> 2;
  851. } else {
  852. info->timeout = 0;
  853. info->tec_timeout = SAB82532_MAX_TEC_TIMEOUT;
  854. info->cec_timeout = SAB82532_MAX_CEC_TIMEOUT;
  855. }
  856. info->timeout += HZ / 50; /* Add .02 seconds of slop */
  857. /* CTS flow control flags */
  858. if (cflag & CRTSCTS)
  859. info->flags |= ASYNC_CTS_FLOW;
  860. else
  861. info->flags &= ~(ASYNC_CTS_FLOW);
  862. if (cflag & CLOCAL)
  863. info->flags &= ~(ASYNC_CHECK_CD);
  864. else
  865. info->flags |= ASYNC_CHECK_CD;
  866. if (info->tty)
  867. info->tty->hw_stopped = 0;
  868. /*
  869.  * Set up parity check flag
  870.  * XXX: not implemented, yet.
  871.  */
  872. #define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
  873. /*
  874.  * Characters to ignore
  875.  * XXX: not implemented, yet.
  876.  */
  877. /*
  878.  * !!! ignore all characters if CREAD is not set
  879.  * XXX: not implemented, yet.
  880.  */
  881. if ((cflag & CREAD) == 0)
  882. info->ignore_status_mask |= SAB82532_ISR0_RPF |
  883.     SAB82532_ISR0_TCD |
  884.     SAB82532_ISR0_TIME;
  885. save_flags(flags); cli();
  886. sab82532_cec_wait(info);
  887. sab82532_tec_wait(info);
  888. writeb(dafo, &info->regs->w.dafo);
  889. writeb(ebrg & 0xff, &info->regs->w.bgr);
  890. writeb(readb(&info->regs->rw.ccr2) & ~(0xc0), &info->regs->rw.ccr2);
  891. writeb(readb(&info->regs->rw.ccr2) | ((ebrg >> 2) & 0xc0), &info->regs->rw.ccr2);
  892. if (info->flags & ASYNC_CTS_FLOW) {
  893. writeb(readb(&info->regs->rw.mode) & ~(SAB82532_MODE_RTS), &info->regs->rw.mode);
  894. writeb(readb(&info->regs->rw.mode) | SAB82532_MODE_FRTS, &info->regs->rw.mode);
  895. writeb(readb(&info->regs->rw.mode) & ~(SAB82532_MODE_FCTS), &info->regs->rw.mode);
  896. info->interrupt_mask1 &= ~(SAB82532_IMR1_CSC);
  897. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  898. } else {
  899. writeb(readb(&info->regs->rw.mode) | SAB82532_MODE_RTS, &info->regs->rw.mode);
  900. writeb(readb(&info->regs->rw.mode) & ~(SAB82532_MODE_FRTS), &info->regs->rw.mode);
  901. writeb(readb(&info->regs->rw.mode) | SAB82532_MODE_FCTS, &info->regs->rw.mode);
  902. info->interrupt_mask1 |= SAB82532_IMR1_CSC;
  903. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  904. }
  905. writeb(readb(&info->regs->rw.mode) | SAB82532_MODE_RAC, &info->regs->rw.mode);
  906. restore_flags(flags);
  907. }
  908. static void sab82532_put_char(struct tty_struct *tty, unsigned char ch)
  909. {
  910. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  911. unsigned long flags;
  912. if (serial_paranoia_check(info, tty->device, "sab82532_put_char"))
  913. return;
  914. if (!tty || !info->xmit.buf)
  915. return;
  916. save_flags(flags); cli();
  917. if (!CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE)) {
  918. restore_flags(flags);
  919. return;
  920. }
  921. info->xmit.buf[info->xmit.head] = ch;
  922. info->xmit.head = (info->xmit.head + 1) & (SERIAL_XMIT_SIZE-1);
  923. restore_flags(flags);
  924. }
  925. static void sab82532_flush_chars(struct tty_struct *tty)
  926. {
  927. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  928. unsigned long flags;
  929. if (serial_paranoia_check(info, tty->device, "sab82532_flush_chars"))
  930. return;
  931. if ((info->xmit.head == info->xmit.tail) ||
  932.     tty->stopped || tty->hw_stopped || !info->xmit.buf)
  933. return;
  934. save_flags(flags); cli();
  935. info->interrupt_mask1 &= ~(SAB82532_IMR1_XPR);
  936. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  937. sab82532_start_tx(info);
  938. restore_flags(flags);
  939. }
  940. static int sab82532_write(struct tty_struct * tty, int from_user,
  941.   const unsigned char *buf, int count)
  942. {
  943. int c, ret = 0;
  944. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  945. unsigned long flags;
  946. if (serial_paranoia_check(info, tty->device, "sab82532_write"))
  947. return 0;
  948. if (!tty || !info->xmit.buf || !tmp_buf)
  949. return 0;
  950.     
  951. save_flags(flags);
  952. if (from_user) {
  953. down(&tmp_buf_sem);
  954. while (1) {
  955. int c1;
  956. c = CIRC_SPACE_TO_END(info->xmit.head,
  957.       info->xmit.tail,
  958.       SERIAL_XMIT_SIZE);
  959. if (count < c)
  960. c = count;
  961. if (c <= 0)
  962. break;
  963. c -= copy_from_user(tmp_buf, buf, c);
  964. if (!c) {
  965. if (!ret)
  966. ret = -EFAULT;
  967. break;
  968. }
  969. cli();
  970. c1 = CIRC_SPACE_TO_END(info->xmit.head,
  971.        info->xmit.tail,
  972.        SERIAL_XMIT_SIZE);
  973. if (c1 < c)
  974. c = c1;
  975. memcpy(info->xmit.buf + info->xmit.head, tmp_buf, c);
  976. info->xmit.head = (info->xmit.head + c) & (SERIAL_XMIT_SIZE-1);
  977. restore_flags(flags);
  978. buf += c;
  979. count -= c;
  980. ret += c;
  981. }
  982. up(&tmp_buf_sem);
  983. } else {
  984. cli();
  985. while (1) {
  986. c = CIRC_SPACE_TO_END(info->xmit.head,
  987.       info->xmit.tail,
  988.       SERIAL_XMIT_SIZE);
  989. if (count < c)
  990. c = count;
  991. if (c <= 0)
  992. break;
  993. memcpy(info->xmit.buf + info->xmit.head, buf, c);
  994. info->xmit.head = (info->xmit.head + c) & (SERIAL_XMIT_SIZE-1);
  995. buf += c;
  996. count -= c;
  997. ret += c;
  998. }
  999. restore_flags(flags);
  1000. }
  1001. if ((info->xmit.head != info->xmit.tail) &&
  1002.     !tty->stopped && !tty->hw_stopped) {
  1003. info->interrupt_mask1 &= ~(SAB82532_IMR1_XPR);
  1004. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  1005. sab82532_start_tx(info);
  1006. }
  1007. restore_flags(flags);
  1008. return ret;
  1009. }
  1010. static int sab82532_write_room(struct tty_struct *tty)
  1011. {
  1012. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  1013. if (serial_paranoia_check(info, tty->device, "sab82532_write_room"))
  1014. return 0;
  1015. return CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
  1016. }
  1017. static int sab82532_chars_in_buffer(struct tty_struct *tty)
  1018. {
  1019. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  1020. if (serial_paranoia_check(info, tty->device, "sab82532_chars_in_buffer"))
  1021. return 0;
  1022. return CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
  1023. }
  1024. static void sab82532_flush_buffer(struct tty_struct *tty)
  1025. {
  1026. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  1027. unsigned long flags;
  1028. if (serial_paranoia_check(info, tty->device, "sab82532_flush_buffer"))
  1029. return;
  1030. save_flags(flags); cli();
  1031. info->xmit.head = info->xmit.tail = 0;
  1032. restore_flags(flags);
  1033. wake_up_interruptible(&tty->write_wait);
  1034. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  1035.     tty->ldisc.write_wakeup)
  1036. (tty->ldisc.write_wakeup)(tty);
  1037. }
  1038. /*
  1039.  * This function is used to send a high-priority XON/XOFF character to
  1040.  * the device
  1041.  */
  1042. static void sab82532_send_xchar(struct tty_struct *tty, char ch)
  1043. {
  1044. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  1045. unsigned long flags;
  1046. if (serial_paranoia_check(info, tty->device, "sab82532_send_xchar"))
  1047. return;
  1048. save_flags(flags); cli();
  1049. sab82532_tec_wait(info);
  1050. writeb(ch, &info->regs->w.tic);
  1051. restore_flags(flags);
  1052. }
  1053. /*
  1054.  * ------------------------------------------------------------
  1055.  * sab82532_throttle()
  1056.  * 
  1057.  * This routine is called by the upper-layer tty layer to signal that
  1058.  * incoming characters should be throttled.
  1059.  * ------------------------------------------------------------
  1060.  */
  1061. static void sab82532_throttle(struct tty_struct * tty)
  1062. {
  1063. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  1064. #ifdef SERIAL_DEBUG_THROTTLE
  1065. char buf[64];
  1066. printk("throttle %s: %d....n", _tty_name(tty, buf),
  1067.        tty->ldisc.chars_in_buffer(tty));
  1068. #endif
  1069. if (serial_paranoia_check(info, tty->device, "sab82532_throttle"))
  1070. return;
  1071. if (I_IXOFF(tty))
  1072. sab82532_send_xchar(tty, STOP_CHAR(tty));
  1073. if (tty->termios->c_cflag & CRTSCTS) {
  1074. u8 mode = readb(&info->regs->r.mode);
  1075. mode &= ~(SAB82532_MODE_FRTS | SAB82532_MODE_RTS);
  1076. writeb(mode, &info->regs->w.mode);
  1077. }
  1078. }
  1079. static void sab82532_unthrottle(struct tty_struct * tty)
  1080. {
  1081. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  1082. #ifdef SERIAL_DEBUG_THROTTLE
  1083. char buf[64];
  1084. printk("unthrottle %s: %d....n", _tty_name(tty, buf),
  1085.        tty->ldisc.chars_in_buffer(tty));
  1086. #endif
  1087. if (serial_paranoia_check(info, tty->device, "sab82532_unthrottle"))
  1088. return;
  1089. if (I_IXOFF(tty)) {
  1090. if (info->x_char)
  1091. info->x_char = 0;
  1092. else
  1093. sab82532_send_xchar(tty, START_CHAR(tty));
  1094. }
  1095. if (tty->termios->c_cflag & CRTSCTS) {
  1096. u8 mode = readb(&info->regs->r.mode);
  1097. mode &= ~(SAB82532_MODE_RTS);
  1098. mode |= SAB82532_MODE_FRTS;
  1099. writeb(mode, &info->regs->w.mode);
  1100. }
  1101. }
  1102. /*
  1103.  * ------------------------------------------------------------
  1104.  * sab82532_ioctl() and friends
  1105.  * ------------------------------------------------------------
  1106.  */
  1107. static int get_serial_info(struct sab82532 *info,
  1108.    struct serial_struct *retinfo)
  1109. {
  1110. struct serial_struct tmp;
  1111.    
  1112. if (!retinfo)
  1113. return -EFAULT;
  1114. memset(&tmp, 0, sizeof(tmp));
  1115. tmp.type = info->type;
  1116. tmp.line = info->line;
  1117. tmp.port = (unsigned long)info->regs;
  1118. tmp.irq = info->irq;
  1119. tmp.flags = info->flags;
  1120. tmp.xmit_fifo_size = info->xmit_fifo_size;
  1121. tmp.baud_base = info->baud_base;
  1122. tmp.close_delay = info->close_delay;
  1123. tmp.closing_wait = info->closing_wait;
  1124. tmp.custom_divisor = info->custom_divisor;
  1125. tmp.hub6 = 0;
  1126. if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
  1127. return -EFAULT;
  1128. return 0;
  1129. }
  1130. static int set_serial_info(struct sab82532 *info,
  1131.    struct serial_struct *new_info)
  1132. {
  1133. return 0;
  1134. }
  1135. /*
  1136.  * get_lsr_info - get line status register info
  1137.  *
  1138.  * Purpose: Let user call ioctl() to get info when the UART physically
  1139.  *      is emptied.  On bus types like RS485, the transmitter must
  1140.  *      release the bus after transmitting. This must be done when
  1141.  *      the transmit shift register is empty, not be done when the
  1142.  *      transmit holding register is empty.  This functionality
  1143.  *      allows an RS485 driver to be written in user space. 
  1144.  */
  1145. static int get_lsr_info(struct sab82532 * info, unsigned int *value)
  1146. {
  1147. unsigned int result;
  1148. result = (!info->xmit.buf && test_bit(SAB82532_ALLS, &info->irqflags))
  1149. ? TIOCSER_TEMT : 0;
  1150. return put_user(result, value);
  1151. }
  1152. static int get_modem_info(struct sab82532 * info, unsigned int *value)
  1153. {
  1154. unsigned int result;
  1155. result =  ((readb(&info->regs->r.mode) & SAB82532_MODE_RTS) ? 
  1156.     ((readb(&info->regs->r.mode) & SAB82532_MODE_FRTS) ? 0 : TIOCM_RTS)
  1157.     : TIOCM_RTS)
  1158. | ((readb(&info->regs->r.pvr) & info->pvr_dtr_bit) ? 0 : TIOCM_DTR)
  1159. | ((readb(&info->regs->r.vstr) & SAB82532_VSTR_CD) ? 0 : TIOCM_CAR)
  1160. | ((readb(&info->regs->r.pvr) & info->pvr_dsr_bit) ? 0 : TIOCM_DSR)
  1161. | ((readb(&info->regs->r.star) & SAB82532_STAR_CTS) ? TIOCM_CTS : 0);
  1162. return put_user(result,value);
  1163. }
  1164. static int set_modem_info(struct sab82532 * info, unsigned int cmd,
  1165.   unsigned int *value)
  1166. {
  1167. unsigned int arg;
  1168. if (get_user(arg, value))
  1169. return -EFAULT;
  1170. switch (cmd) {
  1171. case TIOCMBIS: 
  1172. if (arg & TIOCM_RTS) {
  1173. writeb(readb(&info->regs->rw.mode) & ~(SAB82532_MODE_FRTS), &info->regs->rw.mode);
  1174. writeb(readb(&info->regs->rw.mode) | SAB82532_MODE_RTS, &info->regs->rw.mode);
  1175. }
  1176. if (arg & TIOCM_DTR) {
  1177. writeb(readb(&info->regs->rw.pvr) & ~(info->pvr_dtr_bit), &info->regs->rw.pvr);
  1178. }
  1179. break;
  1180. case TIOCMBIC:
  1181. if (arg & TIOCM_RTS) {
  1182. writeb(readb(&info->regs->rw.mode) | SAB82532_MODE_FRTS, &info->regs->rw.mode);
  1183. writeb(readb(&info->regs->rw.mode) | SAB82532_MODE_RTS, &info->regs->rw.mode);
  1184. }
  1185. if (arg & TIOCM_DTR) {
  1186. writeb(readb(&info->regs->rw.pvr) | info->pvr_dtr_bit, &info->regs->rw.pvr);
  1187. }
  1188. break;
  1189. case TIOCMSET:
  1190. if (arg & TIOCM_RTS) {
  1191. writeb(readb(&info->regs->rw.mode) & ~(SAB82532_MODE_FRTS), &info->regs->rw.mode);
  1192. writeb(readb(&info->regs->rw.mode) | SAB82532_MODE_RTS, &info->regs->rw.mode);
  1193. } else {
  1194. writeb(readb(&info->regs->rw.mode) | SAB82532_MODE_FRTS, &info->regs->rw.mode);
  1195. writeb(readb(&info->regs->rw.mode) | SAB82532_MODE_RTS, &info->regs->rw.mode);
  1196. }
  1197. if (arg & TIOCM_DTR) {
  1198. writeb(readb(&info->regs->rw.pvr) & ~(info->pvr_dtr_bit), &info->regs->rw.pvr);
  1199. } else {
  1200. writeb(readb(&info->regs->rw.pvr) | info->pvr_dtr_bit, &info->regs->rw.pvr);
  1201. }
  1202. break;
  1203. default:
  1204. return -EINVAL;
  1205. }
  1206. return 0;
  1207. }
  1208. /*
  1209.  * This routine sends a break character out the serial port.
  1210.  */
  1211. static void sab82532_break(struct tty_struct *tty, int break_state)
  1212. {
  1213. struct sab82532 * info = (struct sab82532 *)tty->driver_data;
  1214. unsigned long flags;
  1215. if (serial_paranoia_check(info, tty->device, "sab82532_break"))
  1216. return;
  1217. if (!info->regs)
  1218. return;
  1219. #ifdef SERIAL_DEBUG_SEND_BREAK
  1220. printk("sab82532_break(%d) jiff=%lu...", break_state, jiffies);
  1221. #endif
  1222. save_flags(flags); cli();
  1223. if (break_state == -1)
  1224. writeb(readb(&info->regs->rw.dafo) | SAB82532_DAFO_XBRK, &info->regs->rw.dafo);
  1225. else
  1226. writeb(readb(&info->regs->rw.dafo) & ~(SAB82532_DAFO_XBRK), &info->regs->rw.dafo);
  1227. restore_flags(flags);
  1228. }
  1229. static int sab82532_ioctl(struct tty_struct *tty, struct file * file,
  1230.     unsigned int cmd, unsigned long arg)
  1231. {
  1232. struct sab82532 * info = (struct sab82532 *)tty->driver_data;
  1233. struct async_icount cprev, cnow; /* kernel counter temps */
  1234. struct serial_icounter_struct *p_cuser; /* user space */
  1235. if (serial_paranoia_check(info, tty->device, "sab82532_ioctl"))
  1236. return -ENODEV;
  1237. if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
  1238.     (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGWILD)  &&
  1239.     (cmd != TIOCSERSWILD) && (cmd != TIOCSERGSTRUCT) &&
  1240.     (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) {
  1241. if (tty->flags & (1 << TTY_IO_ERROR))
  1242.     return -EIO;
  1243. }
  1244. switch (cmd) {
  1245. case TIOCGSOFTCAR:
  1246. return put_user(C_CLOCAL(tty) ? 1 : 0, (int *) arg);
  1247. case TIOCSSOFTCAR:
  1248. if (get_user(arg, (unsigned int *) arg))
  1249. return -EFAULT;
  1250. tty->termios->c_cflag =
  1251. ((tty->termios->c_cflag & ~CLOCAL) |
  1252.  (arg ? CLOCAL : 0));
  1253. return 0;
  1254. case TIOCMGET:
  1255. return get_modem_info(info, (unsigned int *) arg);
  1256. case TIOCMBIS:
  1257. case TIOCMBIC:
  1258. case TIOCMSET:
  1259. return set_modem_info(info, cmd, (unsigned int *) arg);
  1260. case TIOCGSERIAL:
  1261. return get_serial_info(info,
  1262.        (struct serial_struct *) arg);
  1263. case TIOCSSERIAL:
  1264. return set_serial_info(info,
  1265.        (struct serial_struct *) arg);
  1266. case TIOCSERGETLSR: /* Get line status register */
  1267. return get_lsr_info(info, (unsigned int *) arg);
  1268. case TIOCSERGSTRUCT:
  1269. if (copy_to_user((struct sab82532 *) arg,
  1270.  info, sizeof(struct sab82532)))
  1271. return -EFAULT;
  1272. return 0;
  1273. /*
  1274.  * Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change
  1275.  * - mask passed in arg for lines of interest
  1276.    *   (use |'ed TIOCM_RNG/DSR/CD/CTS for masking)
  1277.  * Caller should use TIOCGICOUNT to see which one it was
  1278.  */
  1279.  case TIOCMIWAIT:
  1280. cli();
  1281. /* note the counters on entry */
  1282. cprev = info->icount;
  1283. sti();
  1284. while (1) {
  1285. interruptible_sleep_on(&info->delta_msr_wait);
  1286. /* see if a signal did it */
  1287. if (signal_pending(current))
  1288. return -ERESTARTSYS;
  1289. cli();
  1290. cnow = info->icount; /* atomic copy */
  1291. sti();
  1292. if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && 
  1293.     cnow.dcd == cprev.dcd && cnow.cts == cprev.cts)
  1294. return -EIO; /* no change => error */
  1295. if ( ((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
  1296.      ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
  1297.      ((arg & TIOCM_CD)  && (cnow.dcd != cprev.dcd)) ||
  1298.      ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts)) ) {
  1299. return 0;
  1300. }
  1301. cprev = cnow;
  1302. }
  1303. /* NOTREACHED */
  1304. /* 
  1305.  * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
  1306.  * Return: write counters to the user passed counter struct
  1307.  * NB: both 1->0 and 0->1 transitions are counted except for
  1308.  *     RI where only 0->1 is counted.
  1309.  */
  1310. case TIOCGICOUNT:
  1311. cli();
  1312. cnow = info->icount;
  1313. sti();
  1314. p_cuser = (struct serial_icounter_struct *) arg;
  1315. if (put_user(cnow.cts, &p_cuser->cts) ||
  1316.     put_user(cnow.dsr, &p_cuser->dsr) ||
  1317.     put_user(cnow.rng, &p_cuser->rng) ||
  1318.     put_user(cnow.dcd, &p_cuser->dcd))
  1319. return -EFAULT;
  1320. return 0;
  1321. default:
  1322. return -ENOIOCTLCMD;
  1323. }
  1324. return 0;
  1325. }
  1326. static void sab82532_set_termios(struct tty_struct *tty,
  1327.  struct termios *old_termios)
  1328. {
  1329. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  1330. if (   (tty->termios->c_cflag == old_termios->c_cflag)
  1331.     && (   RELEVANT_IFLAG(tty->termios->c_iflag) 
  1332. == RELEVANT_IFLAG(old_termios->c_iflag)))
  1333.   return;
  1334. change_speed(info);
  1335. /* Handle transition to B0 status */
  1336. if ((old_termios->c_cflag & CBAUD) &&
  1337.     !(tty->termios->c_cflag & CBAUD)) {
  1338. writeb(readb(&info->regs->w.mode) | SAB82532_MODE_FRTS, &info->regs->w.mode);
  1339. writeb(readb(&info->regs->w.mode) | SAB82532_MODE_RTS, &info->regs->w.mode);
  1340. writeb(readb(&info->regs->w.pvr) | info->pvr_dtr_bit, &info->regs->w.pvr);
  1341. }
  1342. /* Handle transition away from B0 status */
  1343. if (!(old_termios->c_cflag & CBAUD) &&
  1344.     (tty->termios->c_cflag & CBAUD)) {
  1345. writeb(readb(&info->regs->w.pvr) & ~(info->pvr_dtr_bit), &info->regs->w.pvr);
  1346. if (tty->termios->c_cflag & CRTSCTS) {
  1347. writeb(readb(&info->regs->w.mode) & ~(SAB82532_MODE_RTS), &info->regs->w.mode);
  1348. writeb(readb(&info->regs->w.mode) | SAB82532_MODE_FRTS, &info->regs->w.mode);
  1349. } else if (test_bit(TTY_THROTTLED, &tty->flags)) {
  1350. writeb(readb(&info->regs->w.mode) & ~(SAB82532_MODE_FRTS | SAB82532_MODE_RTS), &info->regs->w.mode);
  1351. } else {
  1352. writeb(readb(&info->regs->w.mode) & ~(SAB82532_MODE_FRTS), &info->regs->w.mode);
  1353. writeb(readb(&info->regs->w.mode) | SAB82532_MODE_RTS, &info->regs->w.mode);
  1354. }
  1355. }
  1356. /* Handle turning off CRTSCTS */
  1357. if ((old_termios->c_cflag & CRTSCTS) &&
  1358.     !(tty->termios->c_cflag & CRTSCTS)) {
  1359. tty->hw_stopped = 0;
  1360. sab82532_start(tty);
  1361. }
  1362. }
  1363. /*
  1364.  * ------------------------------------------------------------
  1365.  * sab82532_close()
  1366.  * 
  1367.  * This routine is called when the serial port gets closed.  First, we
  1368.  * wait for the last remaining data to be sent.  Then, we unlink its
  1369.  * async structure from the interrupt chain if necessary, and we free
  1370.  * that IRQ if nothing is left in the chain.
  1371.  * ------------------------------------------------------------
  1372.  */
  1373. static void sab82532_close(struct tty_struct *tty, struct file * filp)
  1374. {
  1375. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  1376. unsigned long flags;
  1377. if (!info || serial_paranoia_check(info, tty->device, "sab82532_close"))
  1378. return;
  1379. save_flags(flags); cli();
  1380. if (tty_hung_up_p(filp)) {
  1381. MOD_DEC_USE_COUNT;
  1382. restore_flags(flags);
  1383. return;
  1384. }
  1385. #ifdef SERIAL_DEBUG_OPEN
  1386. printk("sab82532_close ttys%d, count = %dn", info->line, info->count);
  1387. #endif
  1388. if ((tty->count == 1) && (info->count != 1)) {
  1389. /*
  1390.  * Uh, oh.  tty->count is 1, which means that the tty
  1391.  * structure will be freed.  info->count should always
  1392.  * be one in these conditions.  If it's greater than
  1393.  * one, we've got real problems, since it means the
  1394.  * serial port won't be shutdown.
  1395.  */
  1396. printk("sab82532_close: bad serial port count; tty->count is 1,"
  1397.        " info->count is %dn", info->count);
  1398. info->count = 1;
  1399. }
  1400. if (--info->count < 0) {
  1401. printk("sab82532_close: bad serial port count for ttys%d: %dn",
  1402.        info->line, info->count);
  1403. info->count = 0;
  1404. }
  1405. if (info->count) {
  1406. MOD_DEC_USE_COUNT;
  1407. restore_flags(flags);
  1408. return;
  1409. }
  1410. info->flags |= ASYNC_CLOSING;
  1411. /*
  1412.  * Save the termios structure, since this port may have
  1413.  * separate termios for callout and dialin.
  1414.  */
  1415. if (info->flags & ASYNC_NORMAL_ACTIVE)
  1416. info->normal_termios = *tty->termios;
  1417. if (info->flags & ASYNC_CALLOUT_ACTIVE)
  1418. info->callout_termios = *tty->termios;
  1419. /*
  1420.  * Now we wait for the transmit buffer to clear; and we notify 
  1421.  * the line discipline to only process XON/XOFF characters.
  1422.  */
  1423. tty->closing = 1;
  1424. if (info->closing_wait != ASYNC_CLOSING_WAIT_NONE)
  1425. tty_wait_until_sent(tty, info->closing_wait);
  1426. /*
  1427.  * At this point we stop accepting input.  To do this, we
  1428.  * disable the receive line status interrupts, and turn off
  1429.  * the receiver.
  1430.  */
  1431. info->interrupt_mask0 |= SAB82532_IMR0_TCD;
  1432. writeb(info->interrupt_mask0, &info->regs->w.imr0);
  1433. if (info->flags & ASYNC_INITIALIZED) {
  1434. /*
  1435.  * Before we drop DTR, make sure the UART transmitter
  1436.  * has completely drained; this is especially
  1437.  * important if there is a transmit FIFO!
  1438.  */
  1439. sab82532_wait_until_sent(tty, info->timeout);
  1440. }
  1441. shutdown(info);
  1442. if (tty->driver.flush_buffer)
  1443. tty->driver.flush_buffer(tty);
  1444. if (tty->ldisc.flush_buffer)
  1445. tty->ldisc.flush_buffer(tty);
  1446. tty->closing = 0;
  1447. info->event = 0;
  1448. info->tty = 0;
  1449. if (info->blocked_open) {
  1450. if (info->close_delay) {
  1451. current->state = TASK_INTERRUPTIBLE;
  1452. schedule_timeout(info->close_delay);
  1453. }
  1454. wake_up_interruptible(&info->open_wait);
  1455. }
  1456. info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE|
  1457.  ASYNC_CLOSING);
  1458. wake_up_interruptible(&info->close_wait);
  1459. MOD_DEC_USE_COUNT;
  1460. restore_flags(flags);
  1461. }
  1462. /*
  1463.  * sab82532_wait_until_sent() --- wait until the transmitter is empty
  1464.  */
  1465. static void sab82532_wait_until_sent(struct tty_struct *tty, int timeout)
  1466. {
  1467. struct sab82532 *info = (struct sab82532 *)tty->driver_data;
  1468. unsigned long orig_jiffies, char_time;
  1469. if (serial_paranoia_check(info,tty->device,"sab82532_wait_until_sent"))
  1470. return;
  1471. /*
  1472.  * Set the check interval to be 1/5 of the estimated time to
  1473.  * send a single character, and make it at least 1.  The check
  1474.  * interval should also be less than the timeout.
  1475.  * 
  1476.  * Note: we have to use pretty tight timings here to satisfy
  1477.  * the NIST-PCTS.
  1478.  */
  1479. char_time = (info->timeout - HZ/50) / info->xmit_fifo_size;
  1480. char_time = char_time / 5;
  1481. if (char_time == 0)
  1482. char_time = 1;
  1483. if (timeout)
  1484.   char_time = MIN(char_time, timeout);
  1485. #ifdef SERIAL_DEBUG_WAIT_UNTIL_SENT
  1486. printk("In sab82532_wait_until_sent(%d) check=%lu "
  1487.        "xmit_cnt = %ld, alls = %d (jiff=%lu)...n",
  1488.        timeout, char_time,
  1489.        CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE),
  1490.        test_bit(SAB82532_ALLS, &info->irqflags), jiffies);
  1491. #endif
  1492. orig_jiffies = jiffies;
  1493. while ((info->xmit.head != info->xmit.tail) ||
  1494.        !test_bit(SAB82532_ALLS, &info->irqflags)) {
  1495. current->state = TASK_INTERRUPTIBLE;
  1496. schedule_timeout(char_time);
  1497. if (signal_pending(current))
  1498. break;
  1499. if (timeout && time_after(jiffies, orig_jiffies + timeout))
  1500. break;
  1501. }
  1502. #ifdef SERIAL_DEBUG_WAIT_UNTIL_SENT
  1503. printk("xmit_cnt = %ld, alls = %d (jiff=%lu)...donen",
  1504.        CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE),
  1505.        test_bit(SAB82532_ALLS, &info->irqflags), jiffies);
  1506. #endif
  1507. }
  1508. /*
  1509.  * sab82532_hangup() --- called by tty_hangup() when a hangup is signaled.
  1510.  */
  1511. static void sab82532_hangup(struct tty_struct *tty)
  1512. {
  1513. struct sab82532 * info = (struct sab82532 *)tty->driver_data;
  1514. if (serial_paranoia_check(info, tty->device, "sab82532_hangup"))
  1515. return;
  1516. #ifdef CONFIG_SERIAL_CONSOLE
  1517. if (info->is_console)
  1518. return;
  1519. #endif
  1520. sab82532_flush_buffer(tty);
  1521. shutdown(info);
  1522. info->event = 0;
  1523. info->count = 0;
  1524. info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE);
  1525. info->tty = 0;
  1526. wake_up_interruptible(&info->open_wait);
  1527. }
  1528. /*
  1529.  * ------------------------------------------------------------
  1530.  * sab82532_open() and friends
  1531.  * ------------------------------------------------------------
  1532.  */
  1533. static int block_til_ready(struct tty_struct *tty, struct file * filp,
  1534.    struct sab82532 *info)
  1535. {
  1536. DECLARE_WAITQUEUE(wait, current);
  1537. int retval;
  1538. int do_clocal = 0;
  1539. /*
  1540.  * If the device is in the middle of being closed, then block
  1541.  * until it's done, and then try again.
  1542.  */
  1543. if (tty_hung_up_p(filp) ||
  1544.     (info->flags & ASYNC_CLOSING)) {
  1545. if (info->flags & ASYNC_CLOSING)
  1546. interruptible_sleep_on(&info->close_wait);
  1547. #ifdef SERIAL_DO_RESTART
  1548. if (info->flags & ASYNC_HUP_NOTIFY)
  1549. return -EAGAIN;
  1550. else
  1551. return -ERESTARTSYS;
  1552. #else
  1553. return -EAGAIN;
  1554. #endif
  1555. }
  1556. /*
  1557.  * If this is a callout device, then just make sure the normal
  1558.  * device isn't being used.
  1559.  */
  1560. if (tty->driver.subtype == SERIAL_TYPE_CALLOUT) {
  1561. if (info->flags & ASYNC_NORMAL_ACTIVE)
  1562. return -EBUSY;
  1563. if ((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1564.     (info->flags & ASYNC_SESSION_LOCKOUT) &&
  1565.     (info->session != current->session))
  1566.     return -EBUSY;
  1567. if ((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1568.     (info->flags & ASYNC_PGRP_LOCKOUT) &&
  1569.     (info->pgrp != current->pgrp))
  1570.     return -EBUSY;
  1571. info->flags |= ASYNC_CALLOUT_ACTIVE;
  1572. return 0;
  1573. }
  1574. /*
  1575.  * If non-blocking mode is set, or the port is not enabled,
  1576.  * then make the check up front and then exit.
  1577.  */
  1578. if ((filp->f_flags & O_NONBLOCK) ||
  1579.     (tty->flags & (1 << TTY_IO_ERROR))) {
  1580. if (info->flags & ASYNC_CALLOUT_ACTIVE)
  1581. return -EBUSY;
  1582. info->flags |= ASYNC_NORMAL_ACTIVE;
  1583. return 0;
  1584. }
  1585. if (info->flags & ASYNC_CALLOUT_ACTIVE) {
  1586. if (info->normal_termios.c_cflag & CLOCAL)
  1587. do_clocal = 1;
  1588. } else {
  1589. if (tty->termios->c_cflag & CLOCAL)
  1590. do_clocal = 1;
  1591. }
  1592. /*
  1593.  * Block waiting for the carrier detect and the line to become
  1594.  * free (i.e., not in use by the callout).  While we are in
  1595.  * this loop, info->count is dropped by one, so that
  1596.  * sab82532_close() knows when to free things.  We restore it upon
  1597.  * exit, either normal or abnormal.
  1598.  */
  1599. retval = 0;
  1600. add_wait_queue(&info->open_wait, &wait);
  1601. #ifdef SERIAL_DEBUG_OPEN
  1602. printk("block_til_ready before block: ttyS%d, count = %dn",
  1603.        info->line, info->count);
  1604. #endif
  1605. cli();
  1606. if (!tty_hung_up_p(filp)) 
  1607. info->count--;
  1608. sti();
  1609. info->blocked_open++;
  1610. while (1) {
  1611. cli();
  1612. if (!(info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1613.     (tty->termios->c_cflag & CBAUD)) {
  1614. writeb(readb(&info->regs->rw.pvr) & ~(info->pvr_dtr_bit), &info->regs->rw.pvr);
  1615. writeb(readb(&info->regs->rw.mode) | SAB82532_MODE_FRTS, &info->regs->rw.mode);
  1616. writeb(readb(&info->regs->rw.mode) & ~(SAB82532_MODE_RTS), &info->regs->rw.mode);
  1617. }
  1618. sti();
  1619. set_current_state(TASK_INTERRUPTIBLE);
  1620. if (tty_hung_up_p(filp) ||
  1621.     !(info->flags & ASYNC_INITIALIZED)) {
  1622. #ifdef SERIAL_DO_RESTART
  1623. if (info->flags & ASYNC_HUP_NOTIFY)
  1624. retval = -EAGAIN;
  1625. else
  1626. retval = -ERESTARTSYS;
  1627. #else
  1628. retval = -EAGAIN;
  1629. #endif
  1630. break;
  1631. }
  1632. if (!(info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1633.     !(info->flags & ASYNC_CLOSING) &&
  1634.     (do_clocal || !(readb(&info->regs->r.vstr) & SAB82532_VSTR_CD)))
  1635. break;
  1636. if (signal_pending(current)) {
  1637. retval = -ERESTARTSYS;
  1638. break;
  1639. }
  1640. #ifdef SERIAL_DEBUG_OPEN
  1641. printk("block_til_ready blocking: ttyS%d, count = %d, flags = %x, clocal = %d, vstr = %02xn",
  1642.        info->line, info->count, info->flags, do_clocal, readb(&info->regs->r.vstr));
  1643. #endif
  1644. schedule();
  1645. }
  1646. current->state = TASK_RUNNING;
  1647. remove_wait_queue(&info->open_wait, &wait);
  1648. if (!tty_hung_up_p(filp))
  1649. info->count++;
  1650. info->blocked_open--;
  1651. #ifdef SERIAL_DEBUG_OPEN
  1652. printk("block_til_ready after blocking: ttys%d, count = %dn",
  1653.        info->line, info->count);
  1654. #endif
  1655. if (retval)
  1656. return retval;
  1657. info->flags |= ASYNC_NORMAL_ACTIVE;
  1658. return 0;
  1659. }
  1660. /*
  1661.  * This routine is called whenever a serial port is opened.  It
  1662.  * enables interrupts for a serial port, linking in its async structure into
  1663.  * the IRQ chain.   It also performs the serial-specific
  1664.  * initialization for the tty structure.
  1665.  */
  1666. static int sab82532_open(struct tty_struct *tty, struct file * filp)
  1667. {
  1668. struct sab82532 *info = sab82532_chain;
  1669. int retval, line;
  1670. unsigned long page;
  1671. #ifdef SERIAL_DEBUG_OPEN
  1672. printk("sab82532_open: count = %dn", info->count);
  1673. #endif
  1674. line = MINOR(tty->device) - tty->driver.minor_start;
  1675. if ((line < 0) || (line >= NR_PORTS))
  1676. return -ENODEV;
  1677. while (info) {
  1678. if (info->line == line)
  1679. break;
  1680. info = info->next;
  1681. }
  1682. if (!info) {
  1683. printk("sab82532_open: can't find info for line %dn",
  1684.        line);
  1685. return -ENODEV;
  1686. }
  1687. if (serial_paranoia_check(info, tty->device, "sab82532_open"))
  1688. return -ENODEV;
  1689. #ifdef SERIAL_DEBUG_OPEN
  1690. printk("sab82532_open %s%d, count = %dn", tty->driver.name, info->line,
  1691.        info->count);
  1692. #endif
  1693. if (!tmp_buf) {
  1694. page = get_free_page(GFP_KERNEL);
  1695. if (!page)
  1696. return -ENOMEM;
  1697. if (tmp_buf)
  1698. free_page(page);
  1699. else
  1700. tmp_buf = (unsigned char *) page;
  1701. }
  1702. info->count++;
  1703. tty->driver_data = info;
  1704. info->tty = tty;
  1705. /*
  1706.  * If the port is in the middle of closing, bail out now.
  1707.  */
  1708. if (tty_hung_up_p(filp) ||
  1709.     (info->flags & ASYNC_CLOSING)) {
  1710. if (info->flags & ASYNC_CLOSING)
  1711. interruptible_sleep_on(&info->close_wait);
  1712. #ifdef SERIAL_DO_RESTART
  1713. return ((info->flags & ASYNC_HUP_NOTIFY) ?
  1714. -EAGAIN : -ERESTARTSYS);
  1715. #else
  1716. return -EAGAIN;
  1717. #endif
  1718. }
  1719. /*
  1720.  * Start up serial port
  1721.  */
  1722. retval = startup(info);
  1723. if (retval)
  1724. return retval;
  1725. MOD_INC_USE_COUNT;
  1726. retval = block_til_ready(tty, filp, info);
  1727. if (retval) {
  1728. #ifdef SERIAL_DEBUG_OPEN
  1729. printk("sab82532_open returning after block_til_ready with %dn",
  1730.        retval);
  1731. #endif
  1732. return retval;
  1733. }
  1734. if ((info->count == 1) &&
  1735.     (info->flags & ASYNC_SPLIT_TERMIOS)) {
  1736. if (tty->driver.subtype == SERIAL_TYPE_NORMAL)
  1737. *tty->termios = info->normal_termios;
  1738. else 
  1739. *tty->termios = info->callout_termios;
  1740. change_speed(info);
  1741. }
  1742. #ifdef CONFIG_SERIAL_CONSOLE
  1743. if (sab82532_console.cflag && sab82532_console.index == line) {
  1744. tty->termios->c_cflag = sab82532_console.cflag;
  1745. sab82532_console.cflag = 0;
  1746. change_speed(info);
  1747. }
  1748. #endif
  1749. info->session = current->session;
  1750. info->pgrp = current->pgrp;
  1751. #ifdef SERIAL_DEBUG_OPEN
  1752. printk("sab82532_open ttys%d successful... count %d", info->line, info->count);
  1753. #endif
  1754. return 0;
  1755. }
  1756. /*
  1757.  * /proc fs routines....
  1758.  */
  1759. static __inline__ int
  1760. line_info(char *buf, struct sab82532 *info)
  1761. {
  1762. unsigned long flags;
  1763. char stat_buf[30];
  1764. int ret;
  1765. ret = sprintf(buf, "%u: uart:SAB82532 ", info->line);
  1766. switch (info->type) {
  1767. case 0:
  1768. ret += sprintf(buf+ret, "V1.0 ");
  1769. break;
  1770. case 1:
  1771. ret += sprintf(buf+ret, "V2.0 ");
  1772. break;
  1773. case 2:
  1774. ret += sprintf(buf+ret, "V3.2 ");
  1775. break;
  1776. default:
  1777. ret += sprintf(buf+ret, "V?.? ");
  1778. break;
  1779. }
  1780. ret += sprintf(buf+ret, "port:%lX irq:%s",
  1781.        (unsigned long)info->regs, __irq_itoa(info->irq));
  1782. if (!info->regs) {
  1783. ret += sprintf(buf+ret, "n");
  1784. return ret;
  1785. }
  1786. /*
  1787.  * Figure out the current RS-232 lines
  1788.  */
  1789. stat_buf[0] = 0;
  1790. stat_buf[1] = 0;
  1791. save_flags(flags); cli();
  1792. if (readb(&info->regs->r.mode) & SAB82532_MODE_RTS) {
  1793. if (!(readb(&info->regs->r.mode) & SAB82532_MODE_FRTS))
  1794. strcat(stat_buf, "|RTS");
  1795. } else {
  1796. strcat(stat_buf, "|RTS");
  1797. }
  1798. if (readb(&info->regs->r.star) & SAB82532_STAR_CTS)
  1799. strcat(stat_buf, "|CTS");
  1800. if (!(readb(&info->regs->r.pvr) & info->pvr_dtr_bit))
  1801. strcat(stat_buf, "|DTR");
  1802. if (!(readb(&info->regs->r.pvr) & info->pvr_dsr_bit))
  1803. strcat(stat_buf, "|DSR");
  1804. if (!(readb(&info->regs->r.vstr) & SAB82532_VSTR_CD))
  1805. strcat(stat_buf, "|CD");
  1806. restore_flags(flags);
  1807. if (info->baud)
  1808. ret += sprintf(buf+ret, " baud:%u", info->baud);
  1809. ret += sprintf(buf+ret, " tx:%u rx:%u",
  1810.        info->icount.tx, info->icount.rx);
  1811. if (info->icount.frame)
  1812. ret += sprintf(buf+ret, " fe:%u", info->icount.frame);
  1813. if (info->icount.parity)
  1814. ret += sprintf(buf+ret, " pe:%u", info->icount.parity);
  1815. if (info->icount.brk)
  1816. ret += sprintf(buf+ret, " brk:%u", info->icount.brk);
  1817. if (info->icount.overrun)
  1818. ret += sprintf(buf+ret, " oe:%u", info->icount.overrun);
  1819. /*
  1820.  * Last thing is the RS-232 status lines.
  1821.  */
  1822. ret += sprintf(buf+ret, " %sn", stat_buf + 1);
  1823. return ret;
  1824. }
  1825. int sab82532_read_proc(char *page, char **start, off_t off, int count,
  1826.        int *eof, void *data)
  1827. {
  1828. struct sab82532 *info = sab82532_chain;
  1829. off_t begin = 0;
  1830. int len = 0;
  1831. len += sprintf(page, "serinfo:1.0 driver:%sn", serial_version);
  1832. for (info = sab82532_chain; info && len < 4000; info = info->next) {
  1833. len += line_info(page + len, info);
  1834. if (len+begin > off+count)
  1835. goto done;
  1836. if (len+begin < off) {
  1837. begin += len;
  1838. len = 0;
  1839. }
  1840. }
  1841. *eof = 1;
  1842. done:
  1843. if (off >= len+begin)
  1844. return 0;
  1845. *start = page + (off-begin);
  1846. return ((count < begin+len-off) ? count : begin+len-off);
  1847. }
  1848. /*
  1849.  * ---------------------------------------------------------------------
  1850.  * sab82532_init() and friends
  1851.  *
  1852.  * sab82532_init() is called at boot-time to initialize the serial driver.
  1853.  * ---------------------------------------------------------------------
  1854.  */
  1855. static int __init get_sab82532(unsigned long *memory_start)
  1856. {
  1857. struct linux_ebus *ebus;
  1858. struct linux_ebus_device *edev = 0;
  1859. struct sab82532 *sab;
  1860. unsigned long regs, offset;
  1861. int i;
  1862. for_each_ebus(ebus) {
  1863. for_each_ebusdev(edev, ebus) {
  1864. if (!strcmp(edev->prom_name, "se"))
  1865. goto ebus_done;
  1866. if (!strcmp(edev->prom_name, "serial")) {
  1867. char compat[32];
  1868. int clen;
  1869. /* On RIO this can be an SE, check it.  We could
  1870.  * just check ebus->is_rio, but this is more portable.
  1871.  */
  1872. clen = prom_getproperty(edev->prom_node, "compatible",
  1873. compat, sizeof(compat));
  1874. if (clen > 0) {
  1875. if (strncmp(compat, "sab82532", 8) == 0) {
  1876. /* Yep. */
  1877. goto ebus_done;
  1878. }
  1879. }
  1880. }
  1881. }
  1882. }
  1883. ebus_done:
  1884. if (!edev)
  1885. return -ENODEV;
  1886. regs = edev->resource[0].start;
  1887. offset = sizeof(union sab82532_async_regs);
  1888. for (i = 0; i < 2; i++) {
  1889. if (memory_start) {
  1890. *memory_start = (*memory_start + 7) & ~(7);
  1891. sab = (struct sab82532 *)*memory_start;
  1892. *memory_start += sizeof(struct sab82532);
  1893. } else {
  1894. sab = (struct sab82532 *)kmalloc(sizeof(struct sab82532),
  1895.  GFP_KERNEL);
  1896. if (!sab) {
  1897. printk("sab82532: can't alloc sab structn");
  1898. break;
  1899. }
  1900. }
  1901. memset(sab, 0, sizeof(struct sab82532));
  1902. sab->regs = ioremap(regs + offset, sizeof(union sab82532_async_regs));
  1903. sab->irq = edev->irqs[0];
  1904. sab->line = 1 - i;
  1905. sab->xmit_fifo_size = 32;
  1906. sab->recv_fifo_size = 32;
  1907. writeb(SAB82532_IPC_IC_ACT_LOW, &sab->regs->w.ipc);
  1908. sab->next = sab82532_chain;
  1909. sab82532_chain = sab;
  1910. offset -= sizeof(union sab82532_async_regs);
  1911. }
  1912. return 0;
  1913. }
  1914. #ifndef MODULE
  1915. static void __init sab82532_kgdb_hook(int line)
  1916. {
  1917. prom_printf("sab82532: kgdb support is not implemented, yetn");
  1918. prom_halt();
  1919. }
  1920. #endif
  1921. static inline void __init show_serial_version(void)
  1922. {
  1923. char *revision = "$Revision: 1.65 $";
  1924. char *version, *p;
  1925. version = strchr(revision, ' ');
  1926. strcpy(serial_version, ++version);
  1927. p = strchr(serial_version, ' ');
  1928. *p = '';
  1929. printk("SAB82532 serial driver version %sn", serial_version);
  1930. }
  1931. extern int su_num_ports;
  1932. /*
  1933.  * The serial driver boot-time initialization code!
  1934.  */
  1935. int __init sab82532_init(void)
  1936. {
  1937. struct sab82532 *info;
  1938. int i;
  1939. if (!sab82532_chain)
  1940. get_sab82532(0);
  1941. if (!sab82532_chain)
  1942. return -ENODEV;
  1943. init_bh(SERIAL_BH, do_serial_bh);
  1944. show_serial_version();
  1945. /* Initialize the tty_driver structure */
  1946. memset(&serial_driver, 0, sizeof(struct tty_driver));
  1947. serial_driver.magic = TTY_DRIVER_MAGIC;
  1948. serial_driver.driver_name = "serial";
  1949. #ifdef CONFIG_DEVFS_FS
  1950. serial_driver.name = "tts/%d";
  1951. #else
  1952. serial_driver.name = "ttyS";
  1953. #endif
  1954. serial_driver.major = TTY_MAJOR;
  1955. serial_driver.minor_start = 64 + su_num_ports;
  1956. serial_driver.num = NR_PORTS;
  1957. serial_driver.type = TTY_DRIVER_TYPE_SERIAL;
  1958. serial_driver.subtype = SERIAL_TYPE_NORMAL;
  1959. serial_driver.init_termios = tty_std_termios;
  1960. serial_driver.init_termios.c_cflag =
  1961. B9600 | CS8 | CREAD | HUPCL | CLOCAL;
  1962. serial_driver.flags = TTY_DRIVER_REAL_RAW;
  1963. serial_driver.refcount = &sab82532_refcount;
  1964. serial_driver.table = sab82532_table;
  1965. serial_driver.termios = sab82532_termios;
  1966. serial_driver.termios_locked = sab82532_termios_locked;
  1967. serial_driver.open = sab82532_open;
  1968. serial_driver.close = sab82532_close;
  1969. serial_driver.write = sab82532_write;
  1970. serial_driver.put_char = sab82532_put_char;
  1971. serial_driver.flush_chars = sab82532_flush_chars;
  1972. serial_driver.write_room = sab82532_write_room;
  1973. serial_driver.chars_in_buffer = sab82532_chars_in_buffer;
  1974. serial_driver.flush_buffer = sab82532_flush_buffer;
  1975. serial_driver.ioctl = sab82532_ioctl;
  1976. serial_driver.throttle = sab82532_throttle;
  1977. serial_driver.unthrottle = sab82532_unthrottle;
  1978. serial_driver.send_xchar = sab82532_send_xchar;
  1979. serial_driver.set_termios = sab82532_set_termios;
  1980. serial_driver.stop = sab82532_stop;
  1981. serial_driver.start = sab82532_start;
  1982. serial_driver.hangup = sab82532_hangup;
  1983. serial_driver.break_ctl = sab82532_break;
  1984. serial_driver.wait_until_sent = sab82532_wait_until_sent;
  1985. serial_driver.read_proc = sab82532_read_proc;
  1986. /*
  1987.  * The callout device is just like normal device except for
  1988.  * major number and the subtype code.
  1989.  */
  1990. callout_driver = serial_driver;
  1991. #ifdef CONFIG_DEVFS_FS
  1992. callout_driver.name = "cua/%d";
  1993. #else
  1994. callout_driver.name = "cua";
  1995. #endif
  1996. callout_driver.major = TTYAUX_MAJOR;
  1997. callout_driver.subtype = SERIAL_TYPE_CALLOUT;
  1998. callout_driver.read_proc = 0;
  1999. callout_driver.proc_entry = 0;
  2000. if (tty_register_driver(&serial_driver))
  2001. panic("Couldn't register serial drivern");
  2002. if (tty_register_driver(&callout_driver))
  2003. panic("Couldn't register callout drivern");
  2004. for (info = sab82532_chain, i = 0; info; info = info->next, i++) {
  2005. info->magic = SERIAL_MAGIC;
  2006. info->type = readb(&info->regs->r.vstr) & 0x0f;
  2007. writeb(~((1 << 1) | (1 << 2) | (1 << 4)), &info->regs->w.pcr);
  2008. writeb(0xff, &info->regs->w.pim);
  2009. if (info->line == 0) {
  2010. info->pvr_dsr_bit = (1 << 0);
  2011. info->pvr_dtr_bit = (1 << 1);
  2012. } else {
  2013. info->pvr_dsr_bit = (1 << 3);
  2014. info->pvr_dtr_bit = (1 << 2);
  2015. }
  2016. writeb((1 << 1) | (1 << 2) | (1 << 4), &info->regs->w.pvr);
  2017. writeb(readb(&info->regs->rw.mode) | SAB82532_MODE_FRTS, &info->regs->rw.mode);
  2018. writeb(readb(&info->regs->rw.mode) | SAB82532_MODE_RTS, &info->regs->rw.mode);
  2019. info->custom_divisor = 16;
  2020. info->close_delay = 5*HZ/10;
  2021. info->closing_wait = 30*HZ;
  2022. info->tec_timeout = SAB82532_MAX_TEC_TIMEOUT;
  2023. info->cec_timeout = SAB82532_MAX_CEC_TIMEOUT;
  2024. info->x_char = 0;
  2025. info->event = 0;
  2026. info->blocked_open = 0;
  2027. info->tqueue.routine = do_softint;
  2028. info->tqueue.data = info;
  2029. info->tqueue_hangup.routine = do_serial_hangup;
  2030. info->tqueue_hangup.data = info;
  2031. info->callout_termios = callout_driver.init_termios;
  2032. info->normal_termios = serial_driver.init_termios;
  2033. init_waitqueue_head(&info->open_wait);
  2034. init_waitqueue_head(&info->close_wait);
  2035. init_waitqueue_head(&info->delta_msr_wait);
  2036. info->icount.cts = info->icount.dsr = 
  2037. info->icount.rng = info->icount.dcd = 0;
  2038. info->icount.rx = info->icount.tx = 0;
  2039. info->icount.frame = info->icount.parity = 0;
  2040. info->icount.overrun = info->icount.brk = 0;
  2041. if (!(info->line & 0x01)) {
  2042. if (request_irq(info->irq, sab82532_interrupt, SA_SHIRQ,
  2043. "serial(sab82532)", info)) {
  2044. printk("sab82532: can't get IRQ %xn",
  2045.        info->irq);
  2046. panic("sab82532 initialization failed");
  2047. }
  2048. }
  2049. printk(KERN_INFO
  2050.        "ttyS%02d at 0x%lx (irq = %s) is a SAB82532 %sn",
  2051.        info->line + su_num_ports, (unsigned long)info->regs,
  2052.        __irq_itoa(info->irq), sab82532_version[info->type]);
  2053. }
  2054. #ifdef SERIAL_LOG_DEVICE
  2055. dprint_init(SERIAL_LOG_DEVICE);
  2056. #endif
  2057. return 0;
  2058. }
  2059. int __init sab82532_probe(void)
  2060. {
  2061. int node, enode, snode;
  2062. char model[32];
  2063. int len;
  2064.         node = prom_getchild(prom_root_node);
  2065. node = prom_searchsiblings(node, "pci");
  2066. /*
  2067.  * Check for SUNW,sabre on Ultra 5/10/AXi.
  2068.  */
  2069. len = prom_getproperty(node, "model", model, sizeof(model));
  2070. if ((len > 0) && !strncmp(model, "SUNW,sabre", len)) {
  2071.          node = prom_getchild(node);
  2072. node = prom_searchsiblings(node, "pci");
  2073. }
  2074. /*
  2075.  * For each PCI bus...
  2076.  */
  2077. while (node) {
  2078. enode = prom_getchild(node);
  2079. enode = prom_searchsiblings(enode, "ebus");
  2080. /*
  2081.  * For each EBus on this PCI...
  2082.  */
  2083. while (enode) {
  2084. int child;
  2085. child = prom_getchild(enode);
  2086. snode = prom_searchsiblings(child, "se");
  2087. if (snode)
  2088. goto found;
  2089. snode = prom_searchsiblings(child, "serial");
  2090. if (snode) {
  2091. char compat[32];
  2092. int clen;
  2093. clen = prom_getproperty(snode, "compatible",
  2094. compat, sizeof(compat));
  2095. if (clen > 0) {
  2096. if (strncmp(compat, "sab82532", 8) == 0)
  2097. goto found;
  2098. }
  2099. }
  2100. enode = prom_getsibling(enode);
  2101. enode = prom_searchsiblings(enode, "ebus");
  2102. }
  2103. node = prom_getsibling(node);
  2104. node = prom_searchsiblings(node, "pci");
  2105. }
  2106. return -ENODEV;
  2107. found:
  2108. #ifdef CONFIG_SERIAL_CONSOLE
  2109. sunserial_setinitfunc(sab82532_console_init);
  2110. #endif
  2111. #ifndef MODULE
  2112. sunserial_setinitfunc(sab82532_init);
  2113. rs_ops.rs_kgdb_hook = sab82532_kgdb_hook;
  2114. #endif
  2115. return 0;
  2116. }
  2117. #ifdef MODULE
  2118. MODULE_LICENSE("GPL");
  2119. int init_module(void)
  2120. {
  2121. if (get_sab82532(0))
  2122. return -ENODEV;
  2123. return sab82532_init();
  2124. }
  2125. void cleanup_module(void) 
  2126. {
  2127. struct sab82532 *sab;
  2128. unsigned long flags;
  2129. int e1, e2;
  2130. /* printk("Unloading %s: version %sn", serial_name, serial_version); */
  2131. save_flags(flags);
  2132. cli();
  2133.         remove_bh(SERIAL_BH);
  2134. if ((e1 = tty_unregister_driver(&serial_driver)))
  2135. printk("SERIAL: failed to unregister serial driver (%d)n",
  2136.        e1);
  2137. if ((e2 = tty_unregister_driver(&callout_driver)))
  2138. printk("SERIAL: failed to unregister callout driver (%d)n", 
  2139.        e2);
  2140. restore_flags(flags);
  2141. if (tmp_buf) {
  2142. free_page((unsigned long) tmp_buf);
  2143. tmp_buf = NULL;
  2144. }
  2145. for (sab = sab82532_chain; sab; sab = sab->next) {
  2146. if (!(sab->line & 0x01))
  2147. free_irq(sab->irq, sab);
  2148. iounmap(sab->regs);
  2149. }
  2150. }
  2151. #endif /* MODULE */
  2152. #ifdef CONFIG_SERIAL_CONSOLE
  2153. static void
  2154. batten_down_hatches(struct sab82532 *info)
  2155. {
  2156. unsigned char saved_rfc, tmp;
  2157. if (!stop_a_enabled)
  2158. return;
  2159. /* If we are doing kadb, we call the debugger
  2160.  * else we just drop into the boot monitor.
  2161.  * Note that we must flush the user windows
  2162.  * first before giving up control.
  2163.  */
  2164. printk("n");
  2165. flush_user_windows();
  2166. /*
  2167.  * Set FIFO to single character mode.
  2168.  */
  2169. saved_rfc = readb(&info->regs->r.rfc);
  2170. tmp = readb(&info->regs->rw.rfc);
  2171. tmp &= ~(SAB82532_RFC_RFDF);
  2172. writeb(tmp, &info->regs->rw.rfc);
  2173. sab82532_cec_wait(info);
  2174. writeb(SAB82532_CMDR_RRES, &info->regs->w.cmdr);
  2175. #ifndef __sparc_v9__
  2176. if ((((unsigned long)linux_dbvec) >= DEBUG_FIRSTVADDR) &&
  2177.     (((unsigned long)linux_dbvec) <= DEBUG_LASTVADDR))
  2178. sp_enter_debugger();
  2179. else
  2180. #endif
  2181. prom_cmdline();
  2182. /*
  2183.  * Reset FIFO to character + status mode.
  2184.  */
  2185. writeb(saved_rfc, &info->regs->w.rfc);
  2186. sab82532_cec_wait(info);
  2187. writeb(SAB82532_CMDR_RRES, &info->regs->w.cmdr);
  2188. }
  2189. static __inline__ void
  2190. sab82532_console_putchar(struct sab82532 *info, char c)
  2191. {
  2192. unsigned long flags;
  2193. save_flags(flags); cli();
  2194. sab82532_tec_wait(info);
  2195. writeb(c, &info->regs->w.tic);
  2196. restore_flags(flags);
  2197. }
  2198. static void
  2199. sab82532_console_write(struct console *con, const char *s, unsigned n)
  2200. {
  2201. struct sab82532 *info;
  2202. int i;
  2203. info = sab82532_chain;
  2204. for (i = con->index; i; i--) {
  2205. info = info->next;
  2206. if (!info)
  2207. return;
  2208. }
  2209. for (i = 0; i < n; i++) {
  2210. if (*s == 'n')
  2211. sab82532_console_putchar(info, 'r');
  2212. sab82532_console_putchar(info, *s++);
  2213. }
  2214. sab82532_tec_wait(info);
  2215. }
  2216. static kdev_t
  2217. sab82532_console_device(struct console *con)
  2218. {
  2219. return MKDEV(TTY_MAJOR, 64 + con->index);
  2220. }
  2221. static int
  2222. sab82532_console_setup(struct console *con, char *options)
  2223. {
  2224. static struct tty_struct c_tty;
  2225. static struct termios c_termios;
  2226. struct sab82532 *info;
  2227. tcflag_t cflag;
  2228. int i;
  2229. info = sab82532_chain;
  2230. for (i = con->index; i; i--) {
  2231. info = info->next;
  2232. if (!info)
  2233. return -ENODEV;
  2234. }
  2235. info->is_console = 1;
  2236. /*
  2237.  * Initialize the hardware
  2238.  */
  2239. sab82532_init_line(info);
  2240. /*
  2241.  * Finally, enable interrupts
  2242.  */
  2243. info->interrupt_mask0 = SAB82532_IMR0_PERR | SAB82532_IMR0_FERR |
  2244. SAB82532_IMR0_PLLA | SAB82532_IMR0_CDSC;
  2245. writeb(info->interrupt_mask0, &info->regs->w.imr0);
  2246. info->interrupt_mask1 = SAB82532_IMR1_BRKT | SAB82532_IMR1_ALLS |
  2247. SAB82532_IMR1_XOFF | SAB82532_IMR1_TIN |
  2248. SAB82532_IMR1_CSC | SAB82532_IMR1_XON |
  2249. SAB82532_IMR1_XPR;
  2250. writeb(info->interrupt_mask1, &info->regs->w.imr1);
  2251. printk("Console: ttyS%d (SAB82532)n", info->line);
  2252. sunserial_console_termios(con);
  2253. cflag = con->cflag;
  2254. /*
  2255.  * Fake up the tty and tty->termios structures so we can use
  2256.  * change_speed (and eliminate a lot of duplicate code).
  2257.  */
  2258. if (!info->tty) {
  2259. memset(&c_tty, 0, sizeof(c_tty));
  2260. info->tty = &c_tty;
  2261. }
  2262. if (!info->tty->termios) {
  2263. memset(&c_termios, 0, sizeof(c_termios));
  2264. info->tty->termios = &c_termios;
  2265. }
  2266. info->tty->termios->c_cflag = con->cflag;
  2267. change_speed(info);
  2268. /* Now take out the pointers to static structures if necessary */
  2269. if (info->tty->termios == &c_termios)
  2270. info->tty->termios = 0;
  2271. if (info->tty == &c_tty)
  2272. info->tty = 0;
  2273. return 0;
  2274. }
  2275. static struct console sab82532_console = {
  2276. name: "ttyS",
  2277. write: sab82532_console_write,
  2278. device: sab82532_console_device,
  2279. setup: sab82532_console_setup,
  2280. flags: CON_PRINTBUFFER,
  2281. index: -1,
  2282. };
  2283. int __init sab82532_console_init(void)
  2284. {
  2285. extern int con_is_present(void);
  2286. extern int su_console_registered;
  2287. if (con_is_present() || su_console_registered)
  2288. return 0;
  2289. if (!sab82532_chain) {
  2290. prom_printf("sab82532_console_setup: can't get SAB82532 chain");
  2291. prom_halt();
  2292. }
  2293. sab82532_console.index = serial_console - 1;
  2294. register_console(&sab82532_console);
  2295. return 0;
  2296. }
  2297. #ifdef SERIAL_LOG_DEVICE
  2298. static int serial_log_device = 0;
  2299. static void
  2300. dprint_init(int tty)
  2301. {
  2302. serial_console = tty + 1;
  2303. sab82532_console.index = tty;
  2304. sab82532_console_setup(&sab82532_console, "");
  2305. serial_console = 0;
  2306. serial_log_device = tty + 1;
  2307. }
  2308. int
  2309. dprintf(const char *fmt, ...)
  2310. {
  2311. static char buffer[4096];
  2312. va_list args;
  2313. int i;
  2314. if (!serial_log_device)
  2315. return 0;
  2316. va_start(args, fmt);
  2317. i = vsprintf(buffer, fmt, args);
  2318. va_end(args);
  2319. sab82532_console.write(&sab82532_console, buffer, i);
  2320. return i;
  2321. }
  2322. #endif /* SERIAL_LOG_DEVICE */
  2323. #endif /* CONFIG_SERIAL_CONSOLE */