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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * decserial.c: Serial port driver for IOASIC DECstations.
  3.  *
  4.  * Derived from drivers/sbus/char/sunserial.c by Paul Mackerras.
  5.  * Derived from drivers/macintosh/macserial.c by Harald Koerfgen.
  6.  *
  7.  * DECstation changes
  8.  * Copyright (C) 1998-2000 Harald Koerfgen
  9.  * Copyright (C) 2000,2001 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
  10.  *
  11.  * For the rest of the code the original Copyright applies:
  12.  * Copyright (C) 1996 Paul Mackerras (Paul.Mackerras@cs.anu.edu.au)
  13.  * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
  14.  *
  15.  *
  16.  * Note: for IOASIC systems the wiring is as follows:
  17.  *
  18.  * mouse/keyboard:
  19.  * DIN-7 MJ-4  signal        SCC
  20.  * 2     1     TxD       <-  A.TxD
  21.  * 3     4     RxD       ->  A.RxD
  22.  *
  23.  * EIA-232/EIA-423:
  24.  * DB-25 MMJ-6 signal        SCC
  25.  * 2     2     TxD       <-  B.TxD
  26.  * 3     5     RxD       ->  B.RxD
  27.  * 4           RTS       <- ~A.RTS
  28.  * 5           CTS       -> ~B.CTS
  29.  * 6     6     DSR       -> ~A.SYNC
  30.  * 8           CD        -> ~B.DCD
  31.  * 12          DSRS(DCE) -> ~A.CTS  (*)
  32.  * 15          TxC       ->  B.TxC
  33.  * 17          RxC       ->  B.RxC
  34.  * 20    1     DTR       <- ~A.DTR
  35.  * 22          RI        -> ~A.DCD
  36.  * 23          DSRS(DTE) <- ~B.RTS
  37.  *
  38.  * (*) EIA-232 defines the signal at this pin to be SCD, while DSRS(DCE)
  39.  *     is shared with DSRS(DTE) at pin 23.
  40.  */
  41. #include <linux/config.h>
  42. #include <linux/version.h>
  43. #include <linux/errno.h>
  44. #include <linux/signal.h>
  45. #include <linux/sched.h>
  46. #include <linux/timer.h>
  47. #include <linux/interrupt.h>
  48. #include <linux/tty.h>
  49. #include <linux/tty_flip.h>
  50. #include <linux/major.h>
  51. #include <linux/string.h>
  52. #include <linux/fcntl.h>
  53. #include <linux/mm.h>
  54. #include <linux/kernel.h>
  55. #include <linux/delay.h>
  56. #include <linux/init.h>
  57. #include <linux/ioport.h>
  58. #ifdef CONFIG_SERIAL_CONSOLE
  59. #include <linux/console.h>
  60. #endif
  61. #include <asm/io.h>
  62. #include <asm/pgtable.h>
  63. #include <asm/irq.h>
  64. #include <asm/system.h>
  65. #include <asm/segment.h>
  66. #include <asm/bitops.h>
  67. #include <asm/uaccess.h>
  68. #include <asm/wbflush.h>
  69. #include <asm/bootinfo.h>
  70. #ifdef CONFIG_DECSTATION
  71. #include <asm/dec/interrupts.h>
  72. #include <asm/dec/machtype.h>
  73. #include <asm/dec/tc.h>
  74. #include <asm/dec/ioasic_addrs.h>
  75. #endif
  76. #ifdef CONFIG_BAGET_MIPS
  77. #include <asm/baget/baget.h>
  78. unsigned long system_base;
  79. #endif
  80. #ifdef CONFIG_KGDB
  81. #include <asm/kgdb.h>
  82. #endif
  83. #ifdef CONFIG_MAGIC_SYSRQ
  84. #include <linux/sysrq.h>
  85. #endif
  86. #include "zs.h"
  87. /*
  88.  * It would be nice to dynamically allocate everything that
  89.  * depends on NUM_SERIAL, so we could support any number of
  90.  * Z8530s, but for now...
  91.  */
  92. #define NUM_SERIAL 2 /* Max number of ZS chips supported */
  93. #define NUM_CHANNELS (NUM_SERIAL * 2) /* 2 channels per chip */
  94. #define CHANNEL_A_NR  (zs_parms->channel_a_offset > zs_parms->channel_b_offset)
  95.                                         /* Number of channel A in the chip */ 
  96. #define ZS_CHAN_IO_SIZE 8
  97. #define ZS_CLOCK        7372800  /* Z8530 RTxC input clock rate */
  98. #define RECOVERY_DELAY  udelay(2)
  99. struct zs_parms {
  100. unsigned long scc0;
  101. unsigned long scc1;
  102. int channel_a_offset;
  103. int channel_b_offset;
  104. int irq;
  105. int clock;
  106. };
  107. static struct zs_parms *zs_parms;
  108. #ifdef CONFIG_DECSTATION
  109. static struct zs_parms ds_parms = {
  110. scc0 : SCC0,
  111. scc1 : SCC1,
  112. channel_a_offset : 1,
  113. channel_b_offset : 9,
  114. irq : SERIAL,
  115. clock : ZS_CLOCK
  116. };
  117. #endif
  118. #ifdef CONFIG_BAGET_MIPS
  119. static struct zs_parms baget_parms = {
  120. scc0 : UNI_SCC0,
  121. scc1 : UNI_SCC1,
  122. channel_a_offset : 9,
  123. channel_b_offset : 1,
  124. irq : BAGET_SCC_IRQ,
  125. clock : 14745000
  126. };
  127. #endif
  128. #ifdef CONFIG_DECSTATION
  129. #define DS_BUS_PRESENT (IOASIC)
  130. #else
  131. #define DS_BUS_PRESENT 0
  132. #endif
  133. #ifdef CONFIG_BAGET_MIPS
  134. #define BAGET_BUS_PRESENT (mips_machtype == MACH_BAGET202)
  135. #else
  136. #define BAGET_BUS_PRESENT 0
  137. #endif
  138. #define BUS_PRESENT (DS_BUS_PRESENT || BAGET_BUS_PRESENT)
  139. struct dec_zschannel zs_channels[NUM_CHANNELS];
  140. struct dec_serial zs_soft[NUM_CHANNELS];
  141. int zs_channels_found;
  142. struct dec_serial *zs_chain; /* list of all channels */
  143. struct tty_struct zs_ttys[NUM_CHANNELS];
  144. #ifdef CONFIG_SERIAL_CONSOLE
  145. static struct console sercons;
  146. #endif
  147. #if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) 
  148.     && !defined(MODULE)
  149. static unsigned long break_pressed; /* break, really ... */
  150. #endif
  151. static unsigned char zs_init_regs[16] __initdata = {
  152. 0,                           /* write 0 */
  153. 0,      /* write 1 */
  154. 0xf0,                        /* write 2 */
  155. (Rx8),                       /* write 3 */
  156. (X16CLK | SB1),              /* write 4 */
  157. (Tx8),                       /* write 5 */
  158. 0, 0, 0,                     /* write 6, 7, 8 */
  159. (VIS),                       /* write 9 */
  160. (NRZ),                       /* write 10 */
  161. (TCBR | RCBR),               /* write 11 */
  162. 0, 0,                        /* BRG time constant, write 12 + 13 */
  163. (BRSRC | BRENABL),           /* write 14 */
  164. 0       /* write 15 */
  165. };
  166. DECLARE_TASK_QUEUE(tq_zs_serial);
  167. struct tty_driver serial_driver, callout_driver;
  168. static int serial_refcount;
  169. /* serial subtype definitions */
  170. #define SERIAL_TYPE_NORMAL 1
  171. #define SERIAL_TYPE_CALLOUT 2
  172. /* number of characters left in xmit buffer before we ask for more */
  173. #define WAKEUP_CHARS 256
  174. /*
  175.  * Debugging.
  176.  */
  177. #undef SERIAL_DEBUG_INTR
  178. #undef SERIAL_DEBUG_OPEN
  179. #undef SERIAL_DEBUG_FLOW
  180. #undef SERIAL_DEBUG_THROTTLE
  181. #undef SERIAL_PARANOIA_CHECK
  182. #undef ZS_DEBUG_REGS
  183. #ifdef SERIAL_DEBUG_THROTTLE
  184. #define _tty_name(tty,buf) tty_name(tty,buf)
  185. #endif
  186. #define RS_STROBE_TIME 10
  187. #define RS_ISR_PASS_LIMIT 256
  188. #define _INLINE_ inline
  189. static void probe_sccs(void);
  190. static void change_speed(struct dec_serial *info);
  191. static void rs_wait_until_sent(struct tty_struct *tty, int timeout);
  192. static struct tty_struct *serial_table[NUM_CHANNELS];
  193. static struct termios *serial_termios[NUM_CHANNELS];
  194. static struct termios *serial_termios_locked[NUM_CHANNELS];
  195. #ifndef MIN
  196. #define MIN(a,b) ((a) < (b) ? (a) : (b))
  197. #endif
  198. /*
  199.  * tmp_buf is used as a temporary buffer by serial_write.  We need to
  200.  * lock it in case the copy_from_user blocks while swapping in a page,
  201.  * and some other program tries to do a serial write at the same time.
  202.  * Since the lock will only come under contention when the system is
  203.  * swapping and available memory is low, it makes sense to share one
  204.  * buffer across all the serial ports, since it significantly saves
  205.  * memory if large numbers of serial ports are open.
  206.  */
  207. static unsigned char tmp_buf[4096]; /* This is cheating */
  208. static DECLARE_MUTEX(tmp_buf_sem);
  209. static inline int serial_paranoia_check(struct dec_serial *info,
  210. dev_t device, const char *routine)
  211. {
  212. #ifdef SERIAL_PARANOIA_CHECK
  213. static const char *badmagic =
  214. "Warning: bad magic number for serial struct (%d, %d) in %sn";
  215. static const char *badinfo =
  216. "Warning: null mac_serial for (%d, %d) in %sn";
  217. if (!info) {
  218. printk(badinfo, MAJOR(device), MINOR(device), routine);
  219. return 1;
  220. }
  221. if (info->magic != SERIAL_MAGIC) {
  222. printk(badmagic, MAJOR(device), MINOR(device), routine);
  223. return 1;
  224. }
  225. #endif
  226. return 0;
  227. }
  228. /*
  229.  * This is used to figure out the divisor speeds and the timeouts
  230.  */
  231. static int baud_table[] = {
  232. 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
  233. 9600, 19200, 38400, 57600, 115200, 0 };
  234. /* 
  235.  * Reading and writing Z8530 registers.
  236.  */
  237. static inline unsigned char read_zsreg(struct dec_zschannel *channel,
  238.        unsigned char reg)
  239. {
  240. unsigned char retval;
  241. if (reg != 0) {
  242. *channel->control = reg & 0xf;
  243. wbflush(); RECOVERY_DELAY;
  244. }
  245. retval = *channel->control;
  246. RECOVERY_DELAY;
  247. return retval;
  248. }
  249. static inline void write_zsreg(struct dec_zschannel *channel,
  250.        unsigned char reg, unsigned char value)
  251. {
  252. if (reg != 0) {
  253. *channel->control = reg & 0xf;
  254. wbflush(); RECOVERY_DELAY;
  255. }
  256. *channel->control = value;
  257. wbflush(); RECOVERY_DELAY;
  258. return;
  259. }
  260. static inline unsigned char read_zsdata(struct dec_zschannel *channel)
  261. {
  262. unsigned char retval;
  263. retval = *channel->data;
  264. RECOVERY_DELAY;
  265. return retval;
  266. }
  267. static inline void write_zsdata(struct dec_zschannel *channel,
  268. unsigned char value)
  269. {
  270. *channel->data = value;
  271. wbflush(); RECOVERY_DELAY;
  272. return;
  273. }
  274. static inline void load_zsregs(struct dec_zschannel *channel,
  275.        unsigned char *regs)
  276. {
  277. /* ZS_CLEARERR(channel);
  278. ZS_CLEARFIFO(channel); */
  279. /* Load 'em up */
  280. write_zsreg(channel, R4, regs[R4]);
  281. write_zsreg(channel, R3, regs[R3] & ~RxENABLE);
  282. write_zsreg(channel, R5, regs[R5] & ~TxENAB);
  283. write_zsreg(channel, R9, regs[R9]);
  284. write_zsreg(channel, R1, regs[R1]);
  285. write_zsreg(channel, R2, regs[R2]);
  286. write_zsreg(channel, R10, regs[R10]);
  287. write_zsreg(channel, R11, regs[R11]);
  288. write_zsreg(channel, R12, regs[R12]);
  289. write_zsreg(channel, R13, regs[R13]);
  290. write_zsreg(channel, R14, regs[R14]);
  291. write_zsreg(channel, R15, regs[R15]);
  292. write_zsreg(channel, R3, regs[R3]);
  293. write_zsreg(channel, R5, regs[R5]);
  294. return;
  295. }
  296. /* Sets or clears DTR/RTS on the requested line */
  297. static inline void zs_rtsdtr(struct dec_serial *info, int which, int set)
  298. {
  299.         unsigned long flags;
  300. save_flags(flags); cli();
  301. if (info->zs_channel != info->zs_chan_a) {
  302. if (set) {
  303. info->zs_chan_a->curregs[5] |= (which & (RTS | DTR));
  304. } else {
  305. info->zs_chan_a->curregs[5] &= ~(which & (RTS | DTR));
  306. }
  307. write_zsreg(info->zs_chan_a, 5, info->zs_chan_a->curregs[5]);
  308. }
  309. restore_flags(flags);
  310. }
  311. /* Utility routines for the Zilog */
  312. static inline int get_zsbaud(struct dec_serial *ss)
  313. {
  314. struct dec_zschannel *channel = ss->zs_channel;
  315. int brg;
  316. /* The baud rate is split up between two 8-bit registers in
  317.  * what is termed 'BRG time constant' format in my docs for
  318.  * the chip, it is a function of the clk rate the chip is
  319.  * receiving which happens to be constant.
  320.  */
  321. brg = (read_zsreg(channel, 13) << 8);
  322. brg |= read_zsreg(channel, 12);
  323. return BRG_TO_BPS(brg, (zs_parms->clock/(ss->clk_divisor)));
  324. }
  325. /* On receive, this clears errors and the receiver interrupts */
  326. static inline void rs_recv_clear(struct dec_zschannel *zsc)
  327. {
  328. write_zsreg(zsc, 0, ERR_RES);
  329. write_zsreg(zsc, 0, RES_H_IUS); /* XXX this is unnecessary */
  330. }
  331. /*
  332.  * ----------------------------------------------------------------------
  333.  *
  334.  * Here starts the interrupt handling routines.  All of the following
  335.  * subroutines are declared as inline and are folded into
  336.  * rs_interrupt().  They were separated out for readability's sake.
  337.  *
  338.  *  - Ted Ts'o (tytso@mit.edu), 7-Mar-93
  339.  * -----------------------------------------------------------------------
  340.  */
  341. static int tty_break; /* Set whenever BREAK condition is detected.  */
  342. /*
  343.  * This routine is used by the interrupt handler to schedule
  344.  * processing in the software interrupt portion of the driver.
  345.  */
  346. static _INLINE_ void rs_sched_event(struct dec_serial *info,
  347.   int event)
  348. {
  349. info->event |= 1 << event;
  350. queue_task(&info->tqueue, &tq_zs_serial);
  351. mark_bh(SERIAL_BH);
  352. }
  353. static _INLINE_ void receive_chars(struct dec_serial *info,
  354.    struct pt_regs *regs)
  355. {
  356. struct tty_struct *tty = info->tty;
  357. unsigned char ch, stat, flag;
  358. while ((read_zsreg(info->zs_channel, R0) & Rx_CH_AV) != 0) {
  359. stat = read_zsreg(info->zs_channel, R1);
  360. ch = read_zsdata(info->zs_channel);
  361. if (!tty && !info->hook && !info->hook->rx_char)
  362. continue;
  363. if (tty_break) {
  364. tty_break = 0;
  365. #if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) && !defined(MODULE)
  366. if (info->line == sercons.index) {
  367. if (!break_pressed) {
  368. break_pressed = jiffies;
  369. goto ignore_char;
  370. }
  371. break_pressed = 0;
  372. }
  373. #endif
  374. flag = TTY_BREAK;
  375. if (info->flags & ZILOG_SAK)
  376. do_SAK(tty);
  377. } else {
  378. if (stat & Rx_OVR) {
  379. flag = TTY_OVERRUN;
  380. } else if (stat & FRM_ERR) {
  381. flag = TTY_FRAME;
  382. } else if (stat & PAR_ERR) {
  383. flag = TTY_PARITY;
  384. } else
  385. flag = 0;
  386. if (flag)
  387. /* reset the error indication */
  388. write_zsreg(info->zs_channel, R0, ERR_RES);
  389. }
  390. #if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) && !defined(MODULE)
  391. if (break_pressed && info->line == sercons.index) {
  392. if (ch != 0 &&
  393.     time_before(jiffies, break_pressed + HZ*5)) {
  394. handle_sysrq(ch, regs, NULL, NULL);
  395. break_pressed = 0;
  396. goto ignore_char;
  397. }
  398. break_pressed = 0;
  399. }
  400. #endif
  401. if (info->hook && info->hook->rx_char) {
  402. (*info->hook->rx_char)(ch, flag);
  403. return;
  404.    }
  405. if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
  406. static int flip_buf_ovf;
  407. ++flip_buf_ovf;
  408. continue;
  409. }
  410. tty->flip.count++;
  411. {
  412. static int flip_max_cnt;
  413. if (flip_max_cnt < tty->flip.count)
  414. flip_max_cnt = tty->flip.count;
  415. }
  416. *tty->flip.flag_buf_ptr++ = flag;
  417. *tty->flip.char_buf_ptr++ = ch;
  418. ignore_char:
  419. }
  420. if (tty)
  421. tty_flip_buffer_push(tty);
  422. }
  423. static void transmit_chars(struct dec_serial *info)
  424. {
  425. if ((read_zsreg(info->zs_channel, R0) & Tx_BUF_EMP) == 0)
  426. return;
  427. info->tx_active = 0;
  428. if (info->x_char) {
  429. /* Send next char */
  430. write_zsdata(info->zs_channel, info->x_char);
  431. info->x_char = 0;
  432. info->tx_active = 1;
  433. return;
  434. }
  435. if ((info->xmit_cnt <= 0) || (info->tty && info->tty->stopped)
  436.     || info->tx_stopped) {
  437. write_zsreg(info->zs_channel, R0, RES_Tx_P);
  438. return;
  439. }
  440. /* Send char */
  441. write_zsdata(info->zs_channel, info->xmit_buf[info->xmit_tail++]);
  442. info->xmit_tail = info->xmit_tail & (SERIAL_XMIT_SIZE-1);
  443. info->xmit_cnt--;
  444. info->tx_active = 1;
  445. if (info->xmit_cnt < WAKEUP_CHARS)
  446. rs_sched_event(info, RS_EVENT_WRITE_WAKEUP);
  447. }
  448. static _INLINE_ void status_handle(struct dec_serial *info)
  449. {
  450. unsigned char stat;
  451. /* Get status from Read Register 0 */
  452. stat = read_zsreg(info->zs_channel, R0);
  453. if (stat & BRK_ABRT) {
  454. #ifdef SERIAL_DEBUG_INTR
  455. printk("handling break....");
  456. #endif
  457. tty_break = 1;
  458. }
  459. if (info->zs_channel != info->zs_chan_a) {
  460. /* FIXEM: Check for DCD transitions */
  461. if (((stat ^ info->read_reg_zero) & DCD) != 0
  462.     && info->tty && !C_CLOCAL(info->tty)) {
  463. if (stat & DCD) {
  464. wake_up_interruptible(&info->open_wait);
  465. } else if (!(info->flags & ZILOG_CALLOUT_ACTIVE)) {
  466. tty_hangup(info->tty);
  467. }
  468. }
  469. /* Check for CTS transitions */
  470. if (info->tty && C_CRTSCTS(info->tty)) {
  471. if ((stat & CTS) != 0) {
  472. if (info->tx_stopped) {
  473. info->tx_stopped = 0;
  474. if (!info->tx_active)
  475. transmit_chars(info);
  476. }
  477. } else {
  478. info->tx_stopped = 1;
  479. }
  480. }
  481. }
  482. /* Clear status condition... */
  483. write_zsreg(info->zs_channel, R0, RES_EXT_INT);
  484. info->read_reg_zero = stat;
  485. }
  486. /*
  487.  * This is the serial driver's generic interrupt routine
  488.  */
  489. void rs_interrupt(int irq, void *dev_id, struct pt_regs * regs)
  490. {
  491. struct dec_serial *info = (struct dec_serial *) dev_id;
  492. unsigned char zs_intreg;
  493. int shift;
  494. /* NOTE: The read register 3, which holds the irq status,
  495.  *       does so for both channels on each chip.  Although
  496.  *       the status value itself must be read from the A
  497.  *       channel and is only valid when read from channel A.
  498.  *       Yes... broken hardware...
  499.  */
  500. #define CHAN_IRQMASK (CHBRxIP | CHBTxIP | CHBEXT)
  501. if (info->zs_chan_a == info->zs_channel)
  502. shift = 3; /* Channel A */
  503. else
  504. shift = 0; /* Channel B */
  505. for (;;) {
  506. zs_intreg = read_zsreg(info->zs_chan_a, R3) >> shift; 
  507. if ((zs_intreg & CHAN_IRQMASK) == 0)
  508. break;
  509. if (zs_intreg & CHBRxIP) {
  510. receive_chars(info, regs);
  511. }
  512. if (zs_intreg & CHBTxIP) {
  513. transmit_chars(info);
  514. }
  515. if (zs_intreg & CHBEXT) {
  516. status_handle(info);
  517. }
  518. }
  519. /* Why do we need this ? */
  520. write_zsreg(info->zs_channel, 0, RES_H_IUS);
  521. }
  522. #ifdef ZS_DEBUG_REGS
  523. void zs_dump (void) {
  524. int i, j;
  525. for (i = 0; i < zs_channels_found; i++) {
  526. struct dec_zschannel *ch = &zs_channels[i]; 
  527. if ((long)ch->control == UNI_IO_BASE+UNI_SCC1A_CTRL) {
  528. for (j = 0; j < 15; j++) {
  529. printk("W%d = 0x%xt", 
  530.        j, (int)ch->curregs[j]);
  531. }
  532. for (j = 0; j < 15; j++) {
  533. printk("R%d = 0x%xt", 
  534.        j, (int)read_zsreg(ch,j));
  535. }
  536. printk("nn");
  537. }
  538. }
  539. }
  540. #endif
  541. /*
  542.  * -------------------------------------------------------------------
  543.  * Here ends the serial interrupt routines.
  544.  * -------------------------------------------------------------------
  545.  */
  546. /*
  547.  * ------------------------------------------------------------
  548.  * rs_stop() and rs_start()
  549.  *
  550.  * This routines are called before setting or resetting tty->stopped.
  551.  * ------------------------------------------------------------
  552.  */
  553. static void rs_stop(struct tty_struct *tty)
  554. {
  555. struct dec_serial *info = (struct dec_serial *)tty->driver_data;
  556. unsigned long flags;
  557. if (serial_paranoia_check(info, tty->device, "rs_stop"))
  558. return;
  559. #if 1
  560. save_flags(flags); cli();
  561. if (info->zs_channel->curregs[5] & TxENAB) {
  562. info->zs_channel->curregs[5] &= ~TxENAB;
  563. write_zsreg(info->zs_channel, 5, info->zs_channel->curregs[5]);
  564. }
  565. restore_flags(flags);
  566. #endif
  567. }
  568. static void rs_start(struct tty_struct *tty)
  569. {
  570. struct dec_serial *info = (struct dec_serial *)tty->driver_data;
  571. unsigned long flags;
  572. if (serial_paranoia_check(info, tty->device, "rs_start"))
  573. return;
  574. save_flags(flags); cli();
  575. #if 1
  576. if (info->xmit_cnt && info->xmit_buf && !(info->zs_channel->curregs[5] & TxENAB)) {
  577. info->zs_channel->curregs[5] |= TxENAB;
  578. write_zsreg(info->zs_channel, 5, info->zs_channel->curregs[5]);
  579. }
  580. #else
  581. if (info->xmit_cnt && info->xmit_buf && !info->tx_active) {
  582. transmit_chars(info);
  583. }
  584. #endif
  585. restore_flags(flags);
  586. }
  587. /*
  588.  * This routine is used to handle the "bottom half" processing for the
  589.  * serial driver, known also the "software interrupt" processing.
  590.  * This processing is done at the kernel interrupt level, after the
  591.  * rs_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON.  This
  592.  * is where time-consuming activities which can not be done in the
  593.  * interrupt driver proper are done; the interrupt driver schedules
  594.  * them using rs_sched_event(), and they get done here.
  595.  */
  596. static void do_serial_bh(void)
  597. {
  598. run_task_queue(&tq_zs_serial);
  599. }
  600. static void do_softint(void *private_)
  601. {
  602. struct dec_serial *info = (struct dec_serial *) private_;
  603. struct tty_struct *tty;
  604. tty = info->tty;
  605. if (!tty)
  606. return;
  607. if (test_and_clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event)) {
  608. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  609.     tty->ldisc.write_wakeup)
  610. (tty->ldisc.write_wakeup)(tty);
  611. wake_up_interruptible(&tty->write_wait);
  612. }
  613. }
  614. int zs_startup(struct dec_serial * info)
  615. {
  616. unsigned long flags;
  617. if (info->flags & ZILOG_INITIALIZED)
  618. return 0;
  619. if (!info->xmit_buf) {
  620. info->xmit_buf = (unsigned char *) get_free_page(GFP_KERNEL);
  621. if (!info->xmit_buf)
  622. return -ENOMEM;
  623. }
  624. save_flags(flags); cli();
  625. #ifdef SERIAL_DEBUG_OPEN
  626. printk("starting up ttyS%02d (irq %d)...", info->line, info->irq);
  627. #endif
  628. /*
  629.  * Clear the receive FIFO.
  630.  */
  631. ZS_CLEARFIFO(info->zs_channel);
  632. info->xmit_fifo_size = 1;
  633. /*
  634.  * Clear the interrupt registers.
  635.  */
  636. write_zsreg(info->zs_channel, 0, ERR_RES);
  637. write_zsreg(info->zs_channel, 0, RES_H_IUS);
  638. /*
  639.  * Turn on RTS and DTR.
  640.  */
  641. zs_rtsdtr(info, RTS | DTR, 1);
  642. /*
  643.  * Finally, enable sequencing and interrupts
  644.  */
  645. info->zs_channel->curregs[1] = (info->zs_channel->curregs[1] & ~0x18) | (EXT_INT_ENAB | INT_ALL_Rx | TxINT_ENAB);
  646. info->zs_channel->curregs[3] |= (RxENABLE | Rx8);
  647. info->zs_channel->curregs[5] |= (TxENAB | Tx8);
  648. info->zs_channel->curregs[15] |= (DCDIE | CTSIE | TxUIE | BRKIE);
  649. info->zs_channel->curregs[9] |= (VIS | MIE);
  650. write_zsreg(info->zs_channel, 1, info->zs_channel->curregs[1]);
  651. write_zsreg(info->zs_channel, 3, info->zs_channel->curregs[3]);
  652. write_zsreg(info->zs_channel, 5, info->zs_channel->curregs[5]);
  653. write_zsreg(info->zs_channel, 15, info->zs_channel->curregs[15]);
  654. write_zsreg(info->zs_channel, 9, info->zs_channel->curregs[9]);
  655. /*
  656.  * And clear the interrupt registers again for luck.
  657.  */
  658. write_zsreg(info->zs_channel, 0, ERR_RES);
  659. write_zsreg(info->zs_channel, 0, RES_H_IUS);
  660. if (info->tty)
  661. clear_bit(TTY_IO_ERROR, &info->tty->flags);
  662. info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
  663. /*
  664.  * Set the speed of the serial port
  665.  */
  666. change_speed(info);
  667. /* Save the current value of RR0 */
  668. info->read_reg_zero = read_zsreg(info->zs_channel, 0);
  669. info->flags |= ZILOG_INITIALIZED;
  670. restore_flags(flags);
  671. return 0;
  672. }
  673. /*
  674.  * This routine will shutdown a serial port; interrupts are disabled, and
  675.  * DTR is dropped if the hangup on close termio flag is on.
  676.  */
  677. static void shutdown(struct dec_serial * info)
  678. {
  679. unsigned long flags;
  680. if (!(info->flags & ZILOG_INITIALIZED))
  681. return;
  682. #ifdef SERIAL_DEBUG_OPEN
  683. printk("Shutting down serial port %d (irq %d)....", info->line,
  684.        info->irq);
  685. #endif
  686. save_flags(flags); cli(); /* Disable interrupts */
  687. if (info->xmit_buf) {
  688. free_page((unsigned long) info->xmit_buf);
  689. info->xmit_buf = 0;
  690. }
  691. info->zs_channel->curregs[1] = 0;
  692. write_zsreg(info->zs_channel, 1, info->zs_channel->curregs[1]); /* no interrupts */
  693. info->zs_channel->curregs[3] &= ~RxENABLE;
  694. write_zsreg(info->zs_channel, 3, info->zs_channel->curregs[3]);
  695. info->zs_channel->curregs[5] &= ~TxENAB;
  696. write_zsreg(info->zs_channel, 5, info->zs_channel->curregs[5]);
  697. if (!info->tty || C_HUPCL(info->tty)) {
  698. zs_rtsdtr(info, RTS | DTR, 0);
  699. }
  700. if (info->tty)
  701. set_bit(TTY_IO_ERROR, &info->tty->flags);
  702. info->flags &= ~ZILOG_INITIALIZED;
  703. restore_flags(flags);
  704. }
  705. /*
  706.  * This routine is called to set the UART divisor registers to match
  707.  * the specified baud rate for a serial port.
  708.  */
  709. static void change_speed(struct dec_serial *info)
  710. {
  711. unsigned cflag;
  712. int i;
  713. int brg, bits;
  714. unsigned long flags;
  715. if (!info->hook) {
  716. if (!info->tty || !info->tty->termios)
  717. return;
  718. cflag = info->tty->termios->c_cflag;
  719. if (!info->port)
  720. return;
  721. } else {
  722. cflag = info->hook->cflags;
  723. }
  724. i = cflag & CBAUD;
  725. if (i & CBAUDEX) {
  726. i &= ~CBAUDEX;
  727. if (i < 1 || i > 2) {
  728. if (!info->hook)
  729. info->tty->termios->c_cflag &= ~CBAUDEX;
  730. else
  731. info->hook->cflags &= ~CBAUDEX;
  732. } else
  733. i += 15;
  734. }
  735. save_flags(flags); cli();
  736. info->zs_baud = baud_table[i];
  737. info->clk_divisor = 16;
  738. if (info->zs_baud) {
  739. info->zs_channel->curregs[4] = X16CLK;
  740. brg = BPS_TO_BRG(info->zs_baud, zs_parms->clock/info->clk_divisor);
  741. info->zs_channel->curregs[12] = (brg & 255);
  742. info->zs_channel->curregs[13] = ((brg >> 8) & 255);
  743. zs_rtsdtr(info, DTR, 1); 
  744. } else {
  745. zs_rtsdtr(info, RTS | DTR, 0);
  746. return;
  747. }
  748. /* byte size and parity */
  749. info->zs_channel->curregs[3] &= ~RxNBITS_MASK;
  750. info->zs_channel->curregs[5] &= ~TxNBITS_MASK;
  751. switch (cflag & CSIZE) {
  752. case CS5:
  753. bits = 7;
  754. info->zs_channel->curregs[3] |= Rx5;
  755. info->zs_channel->curregs[5] |= Tx5;
  756. break;
  757. case CS6:
  758. bits = 8;
  759. info->zs_channel->curregs[3] |= Rx6;
  760. info->zs_channel->curregs[5] |= Tx6;
  761. break;
  762. case CS7:
  763. bits = 9;
  764. info->zs_channel->curregs[3] |= Rx7;
  765. info->zs_channel->curregs[5] |= Tx7;
  766. break;
  767. case CS8:
  768. default: /* defaults to 8 bits */
  769. bits = 10;
  770. info->zs_channel->curregs[3] |= Rx8;
  771. info->zs_channel->curregs[5] |= Tx8;
  772. break;
  773. }
  774. info->timeout = ((info->xmit_fifo_size*HZ*bits) / info->zs_baud);
  775.         info->timeout += HZ/50;         /* Add .02 seconds of slop */
  776. info->zs_channel->curregs[4] &= ~(SB_MASK | PAR_ENA | PAR_EVEN);
  777. if (cflag & CSTOPB) {
  778. info->zs_channel->curregs[4] |= SB2;
  779. } else {
  780. info->zs_channel->curregs[4] |= SB1;
  781. }
  782. if (cflag & PARENB) {
  783. info->zs_channel->curregs[4] |= PAR_ENA;
  784. }
  785. if (!(cflag & PARODD)) {
  786. info->zs_channel->curregs[4] |= PAR_EVEN;
  787. }
  788. if (!(cflag & CLOCAL)) {
  789. if (!(info->zs_channel->curregs[15] & DCDIE))
  790. info->read_reg_zero = read_zsreg(info->zs_channel, 0);
  791. info->zs_channel->curregs[15] |= DCDIE;
  792. } else
  793. info->zs_channel->curregs[15] &= ~DCDIE;
  794. if (cflag & CRTSCTS) {
  795. info->zs_channel->curregs[15] |= CTSIE;
  796. if ((read_zsreg(info->zs_channel, 0) & CTS) == 0)
  797. info->tx_stopped = 1;
  798. } else {
  799. info->zs_channel->curregs[15] &= ~CTSIE;
  800. info->tx_stopped = 0;
  801. }
  802. /* Load up the new values */
  803. load_zsregs(info->zs_channel, info->zs_channel->curregs);
  804. restore_flags(flags);
  805. }
  806. static void rs_flush_chars(struct tty_struct *tty)
  807. {
  808. struct dec_serial *info = (struct dec_serial *)tty->driver_data;
  809. unsigned long flags;
  810. if (serial_paranoia_check(info, tty->device, "rs_flush_chars"))
  811. return;
  812. if (info->xmit_cnt <= 0 || tty->stopped || info->tx_stopped ||
  813.     !info->xmit_buf)
  814. return;
  815. /* Enable transmitter */
  816. save_flags(flags); cli();
  817. transmit_chars(info);
  818. restore_flags(flags);
  819. }
  820. static int rs_write(struct tty_struct * tty, int from_user,
  821.     const unsigned char *buf, int count)
  822. {
  823. int c, total = 0;
  824. struct dec_serial *info = (struct dec_serial *)tty->driver_data;
  825. unsigned long flags;
  826. if (serial_paranoia_check(info, tty->device, "rs_write"))
  827. return 0;
  828. if (!tty || !info->xmit_buf)
  829. return 0;
  830. save_flags(flags);
  831. while (1) {
  832. cli();
  833. c = MIN(count, MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,
  834.    SERIAL_XMIT_SIZE - info->xmit_head));
  835. if (c <= 0)
  836. break;
  837. if (from_user) {
  838. down(&tmp_buf_sem);
  839. copy_from_user(tmp_buf, buf, c);
  840. c = MIN(c, MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,
  841.        SERIAL_XMIT_SIZE - info->xmit_head));
  842. memcpy(info->xmit_buf + info->xmit_head, tmp_buf, c);
  843. up(&tmp_buf_sem);
  844. } else
  845. memcpy(info->xmit_buf + info->xmit_head, buf, c);
  846. info->xmit_head = (info->xmit_head + c) & (SERIAL_XMIT_SIZE-1);
  847. info->xmit_cnt += c;
  848. restore_flags(flags);
  849. buf += c;
  850. count -= c;
  851. total += c;
  852. }
  853. if (info->xmit_cnt && !tty->stopped && !info->tx_stopped
  854.     && !info->tx_active)
  855. transmit_chars(info);
  856. restore_flags(flags);
  857. return total;
  858. }
  859. static int rs_write_room(struct tty_struct *tty)
  860. {
  861. struct dec_serial *info = (struct dec_serial *)tty->driver_data;
  862. int ret;
  863. if (serial_paranoia_check(info, tty->device, "rs_write_room"))
  864. return 0;
  865. ret = SERIAL_XMIT_SIZE - info->xmit_cnt - 1;
  866. if (ret < 0)
  867. ret = 0;
  868. return ret;
  869. }
  870. static int rs_chars_in_buffer(struct tty_struct *tty)
  871. {
  872. struct dec_serial *info = (struct dec_serial *)tty->driver_data;
  873. if (serial_paranoia_check(info, tty->device, "rs_chars_in_buffer"))
  874. return 0;
  875. return info->xmit_cnt;
  876. }
  877. static void rs_flush_buffer(struct tty_struct *tty)
  878. {
  879. struct dec_serial *info = (struct dec_serial *)tty->driver_data;
  880. if (serial_paranoia_check(info, tty->device, "rs_flush_buffer"))
  881. return;
  882. cli();
  883. info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
  884. sti();
  885. wake_up_interruptible(&tty->write_wait);
  886. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  887.     tty->ldisc.write_wakeup)
  888. (tty->ldisc.write_wakeup)(tty);
  889. }
  890. /*
  891.  * ------------------------------------------------------------
  892.  * rs_throttle()
  893.  * 
  894.  * This routine is called by the upper-layer tty layer to signal that
  895.  * incoming characters should be throttled.
  896.  * ------------------------------------------------------------
  897.  */
  898. static void rs_throttle(struct tty_struct * tty)
  899. {
  900. struct dec_serial *info = (struct dec_serial *)tty->driver_data;
  901. unsigned long flags;
  902. #ifdef SERIAL_DEBUG_THROTTLE
  903. char buf[64];
  904. printk("throttle %s: %d....n", _tty_name(tty, buf),
  905.        tty->ldisc.chars_in_buffer(tty));
  906. #endif
  907. if (serial_paranoia_check(info, tty->device, "rs_throttle"))
  908. return;
  909. if (I_IXOFF(tty)) {
  910. save_flags(flags); cli();
  911. info->x_char = STOP_CHAR(tty);
  912. if (!info->tx_active)
  913. transmit_chars(info);
  914. restore_flags(flags);
  915. }
  916. if (C_CRTSCTS(tty)) {
  917. zs_rtsdtr(info, RTS, 0);
  918. }
  919. }
  920. static void rs_unthrottle(struct tty_struct * tty)
  921. {
  922. struct dec_serial *info = (struct dec_serial *)tty->driver_data;
  923. unsigned long flags;
  924. #ifdef SERIAL_DEBUG_THROTTLE
  925. char buf[64];
  926. printk("unthrottle %s: %d....n", _tty_name(tty, buf),
  927.        tty->ldisc.chars_in_buffer(tty));
  928. #endif
  929. if (serial_paranoia_check(info, tty->device, "rs_unthrottle"))
  930. return;
  931. if (I_IXOFF(tty)) {
  932. save_flags(flags); cli();
  933. if (info->x_char)
  934. info->x_char = 0;
  935. else {
  936. info->x_char = START_CHAR(tty);
  937. if (!info->tx_active)
  938. transmit_chars(info);
  939. }
  940. restore_flags(flags);
  941. }
  942. if (C_CRTSCTS(tty)) {
  943. zs_rtsdtr(info, RTS, 1);
  944. }
  945. }
  946. /*
  947.  * ------------------------------------------------------------
  948.  * rs_ioctl() and friends
  949.  * ------------------------------------------------------------
  950.  */
  951. static int get_serial_info(struct dec_serial * info,
  952.    struct serial_struct * retinfo)
  953. {
  954. struct serial_struct tmp;
  955. if (!retinfo)
  956. return -EFAULT;
  957. memset(&tmp, 0, sizeof(tmp));
  958. tmp.type = info->type;
  959. tmp.line = info->line;
  960. tmp.port = info->port;
  961. tmp.irq = info->irq;
  962. tmp.flags = info->flags;
  963. tmp.baud_base = info->baud_base;
  964. tmp.close_delay = info->close_delay;
  965. tmp.closing_wait = info->closing_wait;
  966. tmp.custom_divisor = info->custom_divisor;
  967. return copy_to_user(retinfo,&tmp,sizeof(*retinfo));
  968. }
  969. static int set_serial_info(struct dec_serial * info,
  970.    struct serial_struct * new_info)
  971. {
  972. struct serial_struct new_serial;
  973. struct dec_serial old_info;
  974. int  retval = 0;
  975. if (!new_info)
  976. return -EFAULT;
  977. copy_from_user(&new_serial,new_info,sizeof(new_serial));
  978. old_info = *info;
  979. if (!capable(CAP_SYS_ADMIN)) {
  980. if ((new_serial.baud_base != info->baud_base) ||
  981.     (new_serial.type != info->type) ||
  982.     (new_serial.close_delay != info->close_delay) ||
  983.     ((new_serial.flags & ~ZILOG_USR_MASK) !=
  984.      (info->flags & ~ZILOG_USR_MASK)))
  985. return -EPERM;
  986. info->flags = ((info->flags & ~ZILOG_USR_MASK) |
  987.        (new_serial.flags & ZILOG_USR_MASK));
  988. info->custom_divisor = new_serial.custom_divisor;
  989. goto check_and_exit;
  990. }
  991. if (info->count > 1)
  992. return -EBUSY;
  993. /*
  994.  * OK, past this point, all the error checking has been done.
  995.  * At this point, we start making changes.....
  996.  */
  997. info->baud_base = new_serial.baud_base;
  998. info->flags = ((info->flags & ~ZILOG_FLAGS) |
  999. (new_serial.flags & ZILOG_FLAGS));
  1000. info->type = new_serial.type;
  1001. info->close_delay = new_serial.close_delay;
  1002. info->closing_wait = new_serial.closing_wait;
  1003. check_and_exit:
  1004. retval = zs_startup(info);
  1005. return retval;
  1006. }
  1007. /*
  1008.  * get_lsr_info - get line status register info
  1009.  *
  1010.  * Purpose: Let user call ioctl() to get info when the UART physically
  1011.  *      is emptied.  On bus types like RS485, the transmitter must
  1012.  *      release the bus after transmitting. This must be done when
  1013.  *      the transmit shift register is empty, not be done when the
  1014.  *      transmit holding register is empty.  This functionality
  1015.  *      allows an RS485 driver to be written in user space. 
  1016.  */
  1017. static int get_lsr_info(struct dec_serial * info, unsigned int *value)
  1018. {
  1019. unsigned char status;
  1020. cli();
  1021. status = read_zsreg(info->zs_channel, 0);
  1022. sti();
  1023. put_user(status,value);
  1024. return 0;
  1025. }
  1026. static int get_modem_info(struct dec_serial *info, unsigned int *value)
  1027. {
  1028. unsigned char control, status_a, status_b;
  1029. unsigned int result;
  1030. if (info->zs_channel == info->zs_chan_a)
  1031. result = 0;
  1032. else {
  1033. cli();
  1034. control = info->zs_chan_a->curregs[5];
  1035. status_a = read_zsreg(info->zs_chan_a, 0);
  1036. status_b = read_zsreg(info->zs_channel, 0);
  1037. sti();
  1038. result =  ((control  & RTS) ? TIOCM_RTS: 0)
  1039. | ((control  & DTR) ? TIOCM_DTR: 0)
  1040. | ((status_b & DCD) ? TIOCM_CAR: 0)
  1041. | ((status_a & DCD) ? TIOCM_RNG: 0)
  1042. | ((status_a & SYNC_HUNT) ? TIOCM_DSR: 0)
  1043. | ((status_b & CTS) ? TIOCM_CTS: 0);
  1044. }
  1045. put_user(result, value);
  1046. return 0;
  1047. }
  1048. static int set_modem_info(struct dec_serial *info, unsigned int cmd,
  1049.   unsigned int *value)
  1050. {
  1051. int error;
  1052. unsigned int arg, bits;
  1053. error = verify_area(VERIFY_READ, value, sizeof(int));
  1054. if (error)
  1055. return error;
  1056. if (info->zs_channel == info->zs_chan_a)
  1057. return 0;
  1058. get_user(arg, value);
  1059. bits = (arg & TIOCM_RTS? RTS: 0) + (arg & TIOCM_DTR? DTR: 0);
  1060. cli();
  1061. switch (cmd) {
  1062. case TIOCMBIS:
  1063. info->zs_chan_a->curregs[5] |= bits;
  1064. break;
  1065. case TIOCMBIC:
  1066. info->zs_chan_a->curregs[5] &= ~bits;
  1067. break;
  1068. case TIOCMSET:
  1069. info->zs_chan_a->curregs[5] = 
  1070. (info->zs_chan_a->curregs[5] & ~(DTR | RTS)) | bits;
  1071. break;
  1072. default:
  1073. sti();
  1074. return -EINVAL;
  1075. }
  1076. write_zsreg(info->zs_chan_a, 5, info->zs_chan_a->curregs[5]);
  1077. sti();
  1078. return 0;
  1079. }
  1080. /*
  1081.  * rs_break - turn transmit break condition on/off
  1082.  */
  1083. static void rs_break(struct tty_struct *tty, int break_state)
  1084. {
  1085. struct dec_serial *info = (struct dec_serial *) tty->driver_data;
  1086. unsigned long flags;
  1087. if (serial_paranoia_check(info, tty->device, "rs_break"))
  1088. return;
  1089. if (!info->port)
  1090. return;
  1091. save_flags(flags); cli();
  1092. if (break_state == -1)
  1093. info->zs_channel->curregs[5] |= SND_BRK;
  1094. else
  1095. info->zs_channel->curregs[5] &= ~SND_BRK;
  1096. write_zsreg(info->zs_channel, 5, info->zs_channel->curregs[5]);
  1097. restore_flags(flags);
  1098. }
  1099. static int rs_ioctl(struct tty_struct *tty, struct file * file,
  1100.     unsigned int cmd, unsigned long arg)
  1101. {
  1102. int error;
  1103. struct dec_serial * info = (struct dec_serial *)tty->driver_data;
  1104. if (info->hook)
  1105. return -ENODEV;
  1106. if (serial_paranoia_check(info, tty->device, "rs_ioctl"))
  1107. return -ENODEV;
  1108. if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
  1109.     (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGWILD)  &&
  1110.     (cmd != TIOCSERSWILD) && (cmd != TIOCSERGSTRUCT)) {
  1111. if (tty->flags & (1 << TTY_IO_ERROR))
  1112.     return -EIO;
  1113. }
  1114. switch (cmd) {
  1115. case TIOCMGET:
  1116. error = verify_area(VERIFY_WRITE, (void *) arg,
  1117. sizeof(unsigned int));
  1118. if (error)
  1119. return error;
  1120. return get_modem_info(info, (unsigned int *) arg);
  1121. case TIOCMBIS:
  1122. case TIOCMBIC:
  1123. case TIOCMSET:
  1124. return set_modem_info(info, cmd, (unsigned int *) arg);
  1125. case TIOCGSERIAL:
  1126. error = verify_area(VERIFY_WRITE, (void *) arg,
  1127. sizeof(struct serial_struct));
  1128. if (error)
  1129. return error;
  1130. return get_serial_info(info,
  1131.        (struct serial_struct *) arg);
  1132. case TIOCSSERIAL:
  1133. return set_serial_info(info,
  1134.        (struct serial_struct *) arg);
  1135. case TIOCSERGETLSR: /* Get line status register */
  1136. error = verify_area(VERIFY_WRITE, (void *) arg,
  1137. sizeof(unsigned int));
  1138. if (error)
  1139. return error;
  1140. else
  1141.     return get_lsr_info(info, (unsigned int *) arg);
  1142. case TIOCSERGSTRUCT:
  1143. error = verify_area(VERIFY_WRITE, (void *) arg,
  1144. sizeof(struct dec_serial));
  1145. if (error)
  1146. return error;
  1147. copy_from_user((struct dec_serial *) arg,
  1148.        info, sizeof(struct dec_serial));
  1149. return 0;
  1150. default:
  1151. return -ENOIOCTLCMD;
  1152. }
  1153. return 0;
  1154. }
  1155. static void rs_set_termios(struct tty_struct *tty, struct termios *old_termios)
  1156. {
  1157. struct dec_serial *info = (struct dec_serial *)tty->driver_data;
  1158. int was_stopped;
  1159. if (tty->termios->c_cflag == old_termios->c_cflag)
  1160. return;
  1161. was_stopped = info->tx_stopped;
  1162. change_speed(info);
  1163. if (was_stopped && !info->tx_stopped)
  1164. rs_start(tty);
  1165. }
  1166. /*
  1167.  * ------------------------------------------------------------
  1168.  * rs_close()
  1169.  * 
  1170.  * This routine is called when the serial port gets closed.
  1171.  * Wait for the last remaining data to be sent.
  1172.  * ------------------------------------------------------------
  1173.  */
  1174. static void rs_close(struct tty_struct *tty, struct file * filp)
  1175. {
  1176. struct dec_serial * info = (struct dec_serial *)tty->driver_data;
  1177. unsigned long flags;
  1178. if (!info || serial_paranoia_check(info, tty->device, "rs_close"))
  1179. return;
  1180. save_flags(flags); cli();
  1181. if (tty_hung_up_p(filp)) {
  1182. restore_flags(flags);
  1183. return;
  1184. }
  1185. #ifdef SERIAL_DEBUG_OPEN
  1186. printk("rs_close ttyS%02d, count = %dn", info->line, info->count);
  1187. #endif
  1188. if ((tty->count == 1) && (info->count != 1)) {
  1189. /*
  1190.  * Uh, oh.  tty->count is 1, which means that the tty
  1191.  * structure will be freed.  Info->count should always
  1192.  * be one in these conditions.  If it's greater than
  1193.  * one, we've got real problems, since it means the
  1194.  * serial port won't be shutdown.
  1195.  */
  1196. printk("rs_close: bad serial port count; tty->count is 1, "
  1197.        "info->count is %dn", info->count);
  1198. info->count = 1;
  1199. }
  1200. if (--info->count < 0) {
  1201. printk("rs_close: bad serial port count for ttyS%02d: %dn",
  1202.        info->line, info->count);
  1203. info->count = 0;
  1204. }
  1205. if (info->count) {
  1206. restore_flags(flags);
  1207. return;
  1208. }
  1209. info->flags |= ZILOG_CLOSING;
  1210. /*
  1211.  * Save the termios structure, since this port may have
  1212.  * separate termios for callout and dialin.
  1213.  */
  1214. if (info->flags & ZILOG_NORMAL_ACTIVE)
  1215. info->normal_termios = *tty->termios;
  1216. if (info->flags & ZILOG_CALLOUT_ACTIVE)
  1217. info->callout_termios = *tty->termios;
  1218. /*
  1219.  * Now we wait for the transmit buffer to clear; and we notify 
  1220.  * the line discipline to only process XON/XOFF characters.
  1221.  */
  1222. tty->closing = 1;
  1223. if (info->closing_wait != ZILOG_CLOSING_WAIT_NONE)
  1224. tty_wait_until_sent(tty, info->closing_wait);
  1225. /*
  1226.  * At this point we stop accepting input.  To do this, we
  1227.  * disable the receiver and receive interrupts.
  1228.  */
  1229. info->zs_channel->curregs[3] &= ~RxENABLE;
  1230. write_zsreg(info->zs_channel, 3, info->zs_channel->curregs[3]);
  1231. info->zs_channel->curregs[1] = 0; /* disable any rx ints */
  1232. write_zsreg(info->zs_channel, 1, info->zs_channel->curregs[1]);
  1233. ZS_CLEARFIFO(info->zs_channel);
  1234. if (info->flags & ZILOG_INITIALIZED) {
  1235. /*
  1236.  * Before we drop DTR, make sure the SCC transmitter
  1237.  * has completely drained.
  1238.  */
  1239. rs_wait_until_sent(tty, info->timeout);
  1240. }
  1241. shutdown(info);
  1242. if (tty->driver.flush_buffer)
  1243. tty->driver.flush_buffer(tty);
  1244. if (tty->ldisc.flush_buffer)
  1245. tty->ldisc.flush_buffer(tty);
  1246. tty->closing = 0;
  1247. info->event = 0;
  1248. info->tty = 0;
  1249. if (info->blocked_open) {
  1250. if (info->close_delay) {
  1251. current->state = TASK_INTERRUPTIBLE;
  1252. schedule_timeout(info->close_delay);
  1253. }
  1254. wake_up_interruptible(&info->open_wait);
  1255. }
  1256. info->flags &= ~(ZILOG_NORMAL_ACTIVE|ZILOG_CALLOUT_ACTIVE|
  1257.  ZILOG_CLOSING);
  1258. wake_up_interruptible(&info->close_wait);
  1259. restore_flags(flags);
  1260. }
  1261. /*
  1262.  * rs_wait_until_sent() --- wait until the transmitter is empty
  1263.  */
  1264. static void rs_wait_until_sent(struct tty_struct *tty, int timeout)
  1265. {
  1266. struct dec_serial *info = (struct dec_serial *) tty->driver_data;
  1267. unsigned long orig_jiffies, char_time;
  1268. if (serial_paranoia_check(info, tty->device, "rs_wait_until_sent"))
  1269. return;
  1270. orig_jiffies = jiffies;
  1271. /*
  1272.  * Set the check interval to be 1/5 of the estimated time to
  1273.  * send a single character, and make it at least 1.  The check
  1274.  * interval should also be less than the timeout.
  1275.  */
  1276. char_time = (info->timeout - HZ/50) / info->xmit_fifo_size;
  1277. char_time = char_time / 5;
  1278. if (char_time == 0)
  1279. char_time = 1;
  1280. if (timeout)
  1281. char_time = MIN(char_time, timeout);
  1282. while ((read_zsreg(info->zs_channel, 1) & Tx_BUF_EMP) == 0) {
  1283. current->state = TASK_INTERRUPTIBLE;
  1284. schedule_timeout(char_time);
  1285. if (signal_pending(current))
  1286. break;
  1287. if (timeout && ((orig_jiffies + timeout) < jiffies))
  1288. break;
  1289. }
  1290. current->state = TASK_RUNNING;
  1291. }
  1292. /*
  1293.  * rs_hangup() --- called by tty_hangup() when a hangup is signaled.
  1294.  */
  1295. void rs_hangup(struct tty_struct *tty)
  1296. {
  1297. struct dec_serial * info = (struct dec_serial *)tty->driver_data;
  1298. if (serial_paranoia_check(info, tty->device, "rs_hangup"))
  1299. return;
  1300. rs_flush_buffer(tty);
  1301. shutdown(info);
  1302. info->event = 0;
  1303. info->count = 0;
  1304. info->flags &= ~(ZILOG_NORMAL_ACTIVE|ZILOG_CALLOUT_ACTIVE);
  1305. info->tty = 0;
  1306. wake_up_interruptible(&info->open_wait);
  1307. }
  1308. /*
  1309.  * ------------------------------------------------------------
  1310.  * rs_open() and friends
  1311.  * ------------------------------------------------------------
  1312.  */
  1313. static int block_til_ready(struct tty_struct *tty, struct file * filp,
  1314.    struct dec_serial *info)
  1315. {
  1316. DECLARE_WAITQUEUE(wait, current);
  1317. int retval;
  1318. int do_clocal = 0;
  1319. /*
  1320.  * If the device is in the middle of being closed, then block
  1321.  * until it's done, and then try again.
  1322.  */
  1323. if (info->flags & ZILOG_CLOSING) {
  1324. interruptible_sleep_on(&info->close_wait);
  1325. #ifdef SERIAL_DO_RESTART
  1326. return ((info->flags & ZILOG_HUP_NOTIFY) ?
  1327. -EAGAIN : -ERESTARTSYS);
  1328. #else
  1329. return -EAGAIN;
  1330. #endif
  1331. }
  1332. /*
  1333.  * If this is a callout device, then just make sure the normal
  1334.  * device isn't being used.
  1335.  */
  1336. if (tty->driver.subtype == SERIAL_TYPE_CALLOUT) {
  1337. if (info->flags & ZILOG_NORMAL_ACTIVE)
  1338. return -EBUSY;
  1339. if ((info->flags & ZILOG_CALLOUT_ACTIVE) &&
  1340.     (info->flags & ZILOG_SESSION_LOCKOUT) &&
  1341.     (info->session != current->session))
  1342.     return -EBUSY;
  1343. if ((info->flags & ZILOG_CALLOUT_ACTIVE) &&
  1344.     (info->flags & ZILOG_PGRP_LOCKOUT) &&
  1345.     (info->pgrp != current->pgrp))
  1346.     return -EBUSY;
  1347. info->flags |= ZILOG_CALLOUT_ACTIVE;
  1348. return 0;
  1349. }
  1350. /*
  1351.  * If non-blocking mode is set, or the port is not enabled,
  1352.  * then make the check up front and then exit.
  1353.  */
  1354. if ((filp->f_flags & O_NONBLOCK) ||
  1355.     (tty->flags & (1 << TTY_IO_ERROR))) {
  1356. if (info->flags & ZILOG_CALLOUT_ACTIVE)
  1357. return -EBUSY;
  1358. info->flags |= ZILOG_NORMAL_ACTIVE;
  1359. return 0;
  1360. }
  1361. if (info->flags & ZILOG_CALLOUT_ACTIVE) {
  1362. if (info->normal_termios.c_cflag & CLOCAL)
  1363. do_clocal = 1;
  1364. } else {
  1365. if (tty->termios->c_cflag & CLOCAL)
  1366. do_clocal = 1;
  1367. }
  1368. /*
  1369.  * Block waiting for the carrier detect and the line to become
  1370.  * free (i.e., not in use by the callout).  While we are in
  1371.  * this loop, info->count is dropped by one, so that
  1372.  * rs_close() knows when to free things.  We restore it upon
  1373.  * exit, either normal or abnormal.
  1374.  */
  1375. retval = 0;
  1376. add_wait_queue(&info->open_wait, &wait);
  1377. #ifdef SERIAL_DEBUG_OPEN
  1378. printk("block_til_ready before block: ttyS%02d, count = %dn",
  1379.        info->line, info->count);
  1380. #endif
  1381. cli();
  1382. if (!tty_hung_up_p(filp)) 
  1383. info->count--;
  1384. sti();
  1385. info->blocked_open++;
  1386. while (1) {
  1387. cli();
  1388. if (!(info->flags & ZILOG_CALLOUT_ACTIVE) &&
  1389.     (tty->termios->c_cflag & CBAUD))
  1390. zs_rtsdtr(info, RTS | DTR, 1);
  1391. sti();
  1392. set_current_state(TASK_INTERRUPTIBLE);
  1393. if (tty_hung_up_p(filp) ||
  1394.     !(info->flags & ZILOG_INITIALIZED)) {
  1395. #ifdef SERIAL_DO_RESTART
  1396. if (info->flags & ZILOG_HUP_NOTIFY)
  1397. retval = -EAGAIN;
  1398. else
  1399. retval = -ERESTARTSYS;
  1400. #else
  1401. retval = -EAGAIN;
  1402. #endif
  1403. break;
  1404. }
  1405. if (!(info->flags & ZILOG_CALLOUT_ACTIVE) &&
  1406.     !(info->flags & ZILOG_CLOSING) &&
  1407.     (do_clocal || (read_zsreg(info->zs_channel, 0) & DCD)))
  1408. break;
  1409. if (signal_pending(current)) {
  1410. retval = -ERESTARTSYS;
  1411. break;
  1412. }
  1413. #ifdef SERIAL_DEBUG_OPEN
  1414. printk("block_til_ready blocking: ttyS%02d, count = %dn",
  1415.        info->line, info->count);
  1416. #endif
  1417. schedule();
  1418. }
  1419. current->state = TASK_RUNNING;
  1420. remove_wait_queue(&info->open_wait, &wait);
  1421. if (!tty_hung_up_p(filp))
  1422. info->count++;
  1423. info->blocked_open--;
  1424. #ifdef SERIAL_DEBUG_OPEN
  1425. printk("block_til_ready after blocking: ttyS%02d, count = %dn",
  1426.        info->line, info->count);
  1427. #endif
  1428. if (retval)
  1429. return retval;
  1430. info->flags |= ZILOG_NORMAL_ACTIVE;
  1431. return 0;
  1432. }
  1433. /*
  1434.  * This routine is called whenever a serial port is opened.  It
  1435.  * enables interrupts for a serial port, linking in its ZILOG structure into
  1436.  * the IRQ chain.   It also performs the serial-specific
  1437.  * initialization for the tty structure.
  1438.  */
  1439. int rs_open(struct tty_struct *tty, struct file * filp)
  1440. {
  1441. struct dec_serial *info;
  1442. int  retval, line;
  1443. line = MINOR(tty->device) - tty->driver.minor_start;
  1444. if ((line < 0) || (line >= zs_channels_found))
  1445. return -ENODEV;
  1446. info = zs_soft + line;
  1447. if (info->hook)
  1448. return -ENODEV;
  1449. if (serial_paranoia_check(info, tty->device, "rs_open"))
  1450. return -ENODEV;
  1451. #ifdef SERIAL_DEBUG_OPEN
  1452. printk("rs_open %s%d, count = %dn", tty->driver.name, info->line,
  1453.        info->count);
  1454. #endif
  1455. info->count++;
  1456. tty->driver_data = info;
  1457. info->tty = tty;
  1458. /*
  1459.  * If the port is the middle of closing, bail out now
  1460.  */
  1461. if (tty_hung_up_p(filp) ||
  1462.     (info->flags & ZILOG_CLOSING)) {
  1463. if (info->flags & ZILOG_CLOSING)
  1464. interruptible_sleep_on(&info->close_wait);
  1465. #ifdef SERIAL_DO_RESTART
  1466. return ((info->flags & ZILOG_HUP_NOTIFY) ?
  1467. -EAGAIN : -ERESTARTSYS);
  1468. #else
  1469. return -EAGAIN;
  1470. #endif
  1471. }
  1472. /*
  1473.  * Start up serial port
  1474.  */
  1475. retval = zs_startup(info);
  1476. if (retval)
  1477. return retval;
  1478. retval = block_til_ready(tty, filp, info);
  1479. if (retval) {
  1480. #ifdef SERIAL_DEBUG_OPEN
  1481. printk("rs_open returning after block_til_ready with %dn",
  1482.        retval);
  1483. #endif
  1484. return retval;
  1485. }
  1486. if ((info->count == 1) && (info->flags & ZILOG_SPLIT_TERMIOS)) {
  1487. if (tty->driver.subtype == SERIAL_TYPE_NORMAL)
  1488. *tty->termios = info->normal_termios;
  1489. else 
  1490. *tty->termios = info->callout_termios;
  1491. change_speed(info);
  1492. }
  1493. #ifdef CONFIG_SERIAL_CONSOLE
  1494. if (sercons.cflag && sercons.index == line) {
  1495. tty->termios->c_cflag = sercons.cflag;
  1496. sercons.cflag = 0;
  1497. change_speed(info);
  1498. }
  1499. #endif
  1500. info->session = current->session;
  1501. info->pgrp = current->pgrp;
  1502. #ifdef SERIAL_DEBUG_OPEN
  1503. printk("rs_open ttyS%02d successful...", info->line);
  1504. #endif
  1505. /* tty->low_latency = 1; */
  1506. return 0;
  1507. }
  1508. /* Finally, routines used to initialize the serial driver. */
  1509. static void __init show_serial_version(void)
  1510. {
  1511. printk("DECstation Z8530 serial driver version 0.05n");
  1512. }
  1513. /*  Initialize Z8530s zs_channels
  1514.  */
  1515. static void __init probe_sccs(void)
  1516. {
  1517. struct dec_serial **pp;
  1518. int i, n, n_chips = 0, n_channels, chip, channel;
  1519. /*
  1520.  * did we get here by accident?
  1521.  */
  1522. if(!BUS_PRESENT) {
  1523. printk("Not on JUNKIO machine, skipping probe_sccsn");
  1524. return;
  1525. }
  1526. /*
  1527.  * When serial console is activated, tc_init has not been called yet
  1528.  * and system_base is undefined. Unfortunately we have to hardcode
  1529.  * system_base for this case :-(. HK
  1530.  */
  1531. switch(mips_machtype) {
  1532. #ifdef CONFIG_DECSTATION
  1533. case MACH_DS5000_2X0:
  1534. system_base = 0xbf800000;
  1535. n_chips = 2;
  1536. zs_parms = &ds_parms;
  1537. break;
  1538. case MACH_DS5000_1XX:
  1539. system_base = 0xbc000000;
  1540. n_chips = 2;
  1541. zs_parms = &ds_parms;
  1542. break;
  1543. case MACH_DS5000_XX:
  1544. system_base = 0xbc000000;
  1545. n_chips = 1;
  1546. zs_parms = &ds_parms;
  1547. break;
  1548. #endif
  1549. #ifdef CONFIG_BAGET_MIPS
  1550. case MACH_BAGET202:
  1551. system_base = UNI_IO_BASE;
  1552. n_chips = 2;
  1553. zs_parms = &baget_parms;
  1554. zs_init_regs[2] = 0x8;
  1555. break;
  1556. #endif
  1557. default:
  1558. panic("zs: unsupported bus");
  1559. }
  1560. if (!zs_parms)
  1561. panic("zs: uninitialized parms");
  1562. pp = &zs_chain;
  1563. n_channels = 0;
  1564. for (chip = 0; chip < n_chips; chip++) {
  1565. for (channel = 0; channel <= 1; channel++) {
  1566. /*
  1567.  * The sccs reside on the high byte of the 16 bit IOBUS
  1568.  */
  1569. zs_channels[n_channels].control = 
  1570. (volatile unsigned char *)system_base + 
  1571.   (0 == chip ? zs_parms->scc0 : zs_parms->scc1) + 
  1572.   (0 == channel ? zs_parms->channel_a_offset : 
  1573.                   zs_parms->channel_b_offset);
  1574. zs_channels[n_channels].data = 
  1575. zs_channels[n_channels].control + 4;
  1576. #ifndef CONFIG_SERIAL_CONSOLE
  1577. /*
  1578.  * We're called early and memory managment isn't up, yet.
  1579.  * Thus check_region would fail.
  1580.  */
  1581. if (check_region((unsigned long)
  1582.  zs_channels[n_channels].control,
  1583.  ZS_CHAN_IO_SIZE) < 0) {
  1584. panic("SCC I/O region is not free");
  1585. }
  1586. request_region((unsigned long)
  1587.        zs_channels[n_channels].control,
  1588.        ZS_CHAN_IO_SIZE, "SCC");
  1589. #endif
  1590. zs_soft[n_channels].zs_channel = &zs_channels[n_channels];
  1591. zs_soft[n_channels].irq = zs_parms->irq;
  1592. /* 
  1593.  *  Identification of channel A. Location of channel A
  1594.                          *  inside chip depends on mapping of internal address
  1595.  *  the chip decodes channels by.
  1596.  *  CHANNEL_A_NR returns either 0 (in case of 
  1597.  *  DECstations) or 1 (in case of Baget).
  1598.  */
  1599. if (CHANNEL_A_NR == channel)
  1600. zs_soft[n_channels].zs_chan_a = 
  1601.     &zs_channels[n_channels+1-2*CHANNEL_A_NR];
  1602. else
  1603. zs_soft[n_channels].zs_chan_a = 
  1604.     &zs_channels[n_channels];
  1605. *pp = &zs_soft[n_channels];
  1606. pp = &zs_soft[n_channels].zs_next;
  1607. n_channels++;
  1608. }
  1609. }
  1610. *pp = 0;
  1611. zs_channels_found = n_channels;
  1612. for (n = 0; n < zs_channels_found; n++) {
  1613. for (i = 0; i < 16; i++) {
  1614. zs_soft[n].zs_channel->curregs[i] = zs_init_regs[i];
  1615. }
  1616. }
  1617. /* save_and_cli(flags);
  1618. for (n = 0; n < zs_channels_found; n++) {
  1619. if (((int)zs_channels[n].control & 0xf) == 1) {
  1620. write_zsreg(zs_soft[n].zs_chan_a, R9, FHWRES);
  1621. mdelay(10);
  1622. write_zsreg(zs_soft[n].zs_chan_a, R9, 0);
  1623. }
  1624. load_zsregs(zs_soft[n].zs_channel, zs_soft[n].zs_channel->curregs);
  1625. restore_flags(flags); */
  1626. }
  1627. /* zs_init inits the driver */
  1628. int __init zs_init(void)
  1629. {
  1630. int channel, i;
  1631. unsigned long flags;
  1632. struct dec_serial *info;
  1633. if(!BUS_PRESENT)
  1634. return -ENODEV;
  1635. /* Setup base handler, and timer table. */
  1636. init_bh(SERIAL_BH, do_serial_bh);
  1637. /* Find out how many Z8530 SCCs we have */
  1638. if (zs_chain == 0)
  1639. probe_sccs();
  1640. show_serial_version();
  1641. /* Initialize the tty_driver structure */
  1642. /* Not all of this is exactly right for us. */
  1643. memset(&serial_driver, 0, sizeof(struct tty_driver));
  1644. serial_driver.magic = TTY_DRIVER_MAGIC;
  1645. #if (LINUX_VERSION_CODE > 0x2032D && defined(CONFIG_DEVFS_FS))
  1646. serial_driver.name = "tts/%d";
  1647. #else
  1648. serial_driver.name = "ttyS";
  1649. #endif
  1650. serial_driver.major = TTY_MAJOR;
  1651. serial_driver.minor_start = 64;
  1652. serial_driver.num = zs_channels_found;
  1653. serial_driver.type = TTY_DRIVER_TYPE_SERIAL;
  1654. serial_driver.subtype = SERIAL_TYPE_NORMAL;
  1655. serial_driver.init_termios = tty_std_termios;
  1656. serial_driver.init_termios.c_cflag =
  1657. B9600 | CS8 | CREAD | HUPCL | CLOCAL;
  1658. serial_driver.flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS;
  1659. serial_driver.refcount = &serial_refcount;
  1660. serial_driver.table = serial_table;
  1661. serial_driver.termios = serial_termios;
  1662. serial_driver.termios_locked = serial_termios_locked;
  1663. serial_driver.open = rs_open;
  1664. serial_driver.close = rs_close;
  1665. serial_driver.write = rs_write;
  1666. serial_driver.flush_chars = rs_flush_chars;
  1667. serial_driver.write_room = rs_write_room;
  1668. serial_driver.chars_in_buffer = rs_chars_in_buffer;
  1669. serial_driver.flush_buffer = rs_flush_buffer;
  1670. serial_driver.ioctl = rs_ioctl;
  1671. serial_driver.throttle = rs_throttle;
  1672. serial_driver.unthrottle = rs_unthrottle;
  1673. serial_driver.set_termios = rs_set_termios;
  1674. serial_driver.stop = rs_stop;
  1675. serial_driver.start = rs_start;
  1676. serial_driver.hangup = rs_hangup;
  1677. serial_driver.break_ctl = rs_break;
  1678. serial_driver.wait_until_sent = rs_wait_until_sent;
  1679. /*
  1680.  * The callout device is just like normal device except for
  1681.  * major number and the subtype code.
  1682.  */
  1683. callout_driver = serial_driver;
  1684. #if (LINUX_VERSION_CODE > 0x2032D && defined(CONFIG_DEVFS_FS))
  1685. callout_driver.name = "cua/%d";
  1686. #else
  1687. callout_driver.name = "cua";
  1688. #endif
  1689. callout_driver.major = TTYAUX_MAJOR;
  1690. callout_driver.subtype = SERIAL_TYPE_CALLOUT;
  1691. if (tty_register_driver(&serial_driver))
  1692. panic("Couldn't register serial drivern");
  1693. if (tty_register_driver(&callout_driver))
  1694. panic("Couldn't register callout drivern");
  1695. save_flags(flags); cli();
  1696. for (channel = 0; channel < zs_channels_found; ++channel) {
  1697. if (zs_soft[channel].hook &&
  1698.     zs_soft[channel].hook->init_channel)
  1699. (*zs_soft[channel].hook->init_channel)
  1700. (&zs_soft[channel]);
  1701. zs_soft[channel].clk_divisor = 16;
  1702. zs_soft[channel].zs_baud = get_zsbaud(&zs_soft[channel]);
  1703. if (request_irq(zs_parms->irq, rs_interrupt, SA_SHIRQ,
  1704. "SCC", &zs_soft[channel]))
  1705. printk(KERN_ERR "decserial: can't get irq %dn",
  1706.        zs_parms->irq);
  1707. }
  1708. for (info = zs_chain, i = 0; info; info = info->zs_next, i++)
  1709. {
  1710. if (info->hook && info->hook->init_info) {
  1711. (*info->hook->init_info)(info);
  1712. continue;
  1713. }
  1714. info->magic = SERIAL_MAGIC;
  1715. info->port = (int) info->zs_channel->control;
  1716. info->line = i;
  1717. info->tty = 0;
  1718. info->custom_divisor = 16;
  1719. info->close_delay = 50;
  1720. info->closing_wait = 3000;
  1721. info->x_char = 0;
  1722. info->event = 0;
  1723. info->count = 0;
  1724. info->blocked_open = 0;
  1725. info->tqueue.routine = do_softint;
  1726. info->tqueue.data = info;
  1727. info->callout_termios = callout_driver.init_termios;
  1728. info->normal_termios = serial_driver.init_termios;
  1729. init_waitqueue_head(&info->open_wait);
  1730. init_waitqueue_head(&info->close_wait);
  1731. printk("ttyS%02d at 0x%08x (irq = %d)", info->line, 
  1732.        info->port, info->irq);
  1733. printk(" is a Z85C30 SCCn");
  1734. tty_register_devfs(&serial_driver, 0,
  1735.    serial_driver.minor_start + info->line);
  1736. tty_register_devfs(&callout_driver, 0,
  1737.    callout_driver.minor_start + info->line);
  1738. }
  1739. restore_flags(flags);
  1740. return 0;
  1741. }
  1742. /*
  1743.  * register_serial and unregister_serial allows for serial ports to be
  1744.  * configured at run-time, to support PCMCIA modems.
  1745.  */
  1746. /* PowerMac: Unused at this time, just here to make things link. */
  1747. int register_serial(struct serial_struct *req)
  1748. {
  1749. return -1;
  1750. }
  1751. void unregister_serial(int line)
  1752. {
  1753. return;
  1754. }
  1755. /*
  1756.  * polling I/O routines
  1757.  */
  1758. static int
  1759. zs_poll_tx_char(struct dec_serial *info, unsigned char ch)
  1760. {
  1761. struct dec_zschannel *chan = info->zs_channel;
  1762. int    ret;
  1763. if(chan) {
  1764. int loops = 10000;
  1765. // int nine = read_zsreg(chan, R9);
  1766. RECOVERY_DELAY;
  1767. //         write_zsreg(chan, R9, nine & ~MIE);
  1768.                 wbflush();
  1769. RECOVERY_DELAY;
  1770.          while (!(*(chan->control) & Tx_BUF_EMP) && --loops)
  1771.          RECOVERY_DELAY;
  1772.                 if (loops) {
  1773.                         ret = 0;
  1774.                  *(chan->data) = ch;
  1775.                  wbflush();
  1776. RECOVERY_DELAY;
  1777.                 } else
  1778.                         ret = -EAGAIN;
  1779. //         write_zsreg(chan, R9, nine);
  1780.                 wbflush();
  1781. RECOVERY_DELAY;
  1782.                 return ret;
  1783.         }
  1784. return -ENODEV;
  1785. }
  1786. static int
  1787. zs_poll_rx_char(struct dec_serial *info)
  1788. {
  1789.         struct dec_zschannel *chan = info->zs_channel;
  1790.         int    ret;
  1791. if(chan) {
  1792.                 int loops = 10000;
  1793.                 while((read_zsreg(chan, 0) & Rx_CH_AV) == 0)
  1794.         loops--;
  1795.                 if (loops)
  1796.                         ret = read_zsdata(chan);
  1797.                 else
  1798.                         ret = -EAGAIN;
  1799.                 return ret;
  1800.         } else
  1801.                 return -ENODEV;
  1802. }
  1803. unsigned int register_zs_hook(unsigned int channel, struct zs_hook *hook)
  1804. {
  1805. struct dec_serial *info = &zs_soft[channel];
  1806. if (info->hook) {
  1807. printk(__FUNCTION__": line %d has already a hook registeredn", channel);
  1808. return 0;
  1809. } else {
  1810. info->hook = hook;
  1811. if (zs_chain == 0)
  1812. probe_sccs();
  1813. if (!(info->flags & ZILOG_INITIALIZED))
  1814. zs_startup(info);
  1815. hook->poll_rx_char = zs_poll_rx_char;
  1816. hook->poll_tx_char = zs_poll_tx_char;
  1817. return 1;
  1818. }
  1819. }
  1820. unsigned int unregister_zs_hook(unsigned int channel)
  1821. {
  1822. struct dec_serial *info = &zs_soft[channel];
  1823.         if (info->hook) {
  1824.                 info->hook = NULL;
  1825.                 return 1;
  1826.         } else {
  1827.                 printk(__FUNCTION__": trying to unregister hook on line %d,"
  1828.                        " but none is registeredn", channel);
  1829.                 return 0;
  1830.         }
  1831. }
  1832. /*
  1833.  * ------------------------------------------------------------
  1834.  * Serial console driver
  1835.  * ------------------------------------------------------------
  1836.  */
  1837. #ifdef CONFIG_SERIAL_CONSOLE
  1838. /*
  1839.  * Print a string to the serial port trying not to disturb
  1840.  * any possible real use of the port...
  1841.  */
  1842. static void serial_console_write(struct console *co, const char *s,
  1843.  unsigned count)
  1844. {
  1845. struct dec_serial *info;
  1846. int i;
  1847. info = zs_soft + co->index;
  1848. for (i = 0; i < count; i++, s++) {
  1849. if(*s == 'n')
  1850. zs_poll_tx_char(info, 'r');
  1851. zs_poll_tx_char(info, *s);
  1852. }
  1853. }
  1854. /*
  1855.  * Receive character from the serial port
  1856.  */
  1857. static int serial_console_wait_key(struct console *co)
  1858. {
  1859. struct dec_serial *info;
  1860.         info = zs_soft + co->index;
  1861.         return zs_poll_rx_char(info);
  1862. }
  1863. static kdev_t serial_console_device(struct console *c)
  1864. {
  1865. return MKDEV(TTY_MAJOR, 64 + c->index);
  1866. }
  1867. /*
  1868.  * Setup initial baud/bits/parity. We do two things here:
  1869.  * - construct a cflag setting for the first rs_open()
  1870.  * - initialize the serial port
  1871.  * Return non-zero if we didn't find a serial port.
  1872.  */
  1873. static int __init serial_console_setup(struct console *co, char *options)
  1874. {
  1875. struct dec_serial *info;
  1876. int baud = 9600;
  1877. int bits = 8;
  1878. int parity = 'n';
  1879. int cflag = CREAD | HUPCL | CLOCAL;
  1880. char *s;
  1881. unsigned long flags;
  1882. if(!BUS_PRESENT)
  1883. return -ENODEV;
  1884. info = zs_soft + co->index;
  1885. if (zs_chain == 0)
  1886. probe_sccs();
  1887. info->is_cons = 1;
  1888. if (options) {
  1889. baud = simple_strtoul(options, NULL, 10);
  1890. s = options;
  1891. while(*s >= '0' && *s <= '9')
  1892. s++;
  1893. if (*s)
  1894. parity = *s++;
  1895. if (*s)
  1896. bits   = *s - '0';
  1897. }
  1898. /*
  1899.  * Now construct a cflag setting.
  1900.  */
  1901. switch(baud) {
  1902. case 1200:
  1903. cflag |= B1200;
  1904. break;
  1905. case 2400:
  1906. cflag |= B2400;
  1907. break;
  1908. case 4800:
  1909. cflag |= B4800;
  1910. break;
  1911. case 19200:
  1912. cflag |= B19200;
  1913. break;
  1914. case 38400:
  1915. cflag |= B38400;
  1916. break;
  1917. case 57600:
  1918. cflag |= B57600;
  1919. break;
  1920. case 115200:
  1921. cflag |= B115200;
  1922. break;
  1923. case 9600:
  1924. default:
  1925. cflag |= B9600;
  1926. break;
  1927. }
  1928. switch(bits) {
  1929. case 7:
  1930. cflag |= CS7;
  1931. break;
  1932. default:
  1933. case 8:
  1934. cflag |= CS8;
  1935. break;
  1936. }
  1937. switch(parity) {
  1938. case 'o': case 'O':
  1939. cflag |= PARODD;
  1940. break;
  1941. case 'e': case 'E':
  1942. cflag |= PARENB;
  1943. break;
  1944. }
  1945. co->cflag = cflag;
  1946. #if 1 
  1947. save_and_cli(flags);
  1948. /*
  1949.  * Turn on RTS and DTR.
  1950.  */
  1951. zs_rtsdtr(info, RTS | DTR, 1);
  1952. /*
  1953.  * Finally, enable sequencing
  1954.  */
  1955. info->zs_channel->curregs[3] |= (RxENABLE | Rx8);
  1956. info->zs_channel->curregs[5] |= (TxENAB | Tx8);
  1957. info->zs_channel->curregs[9] |= (VIS);
  1958. write_zsreg(info->zs_channel, 3, info->zs_channel->curregs[3]);
  1959. write_zsreg(info->zs_channel, 5, info->zs_channel->curregs[5]);
  1960. write_zsreg(info->zs_channel, 9, info->zs_channel->curregs[9]);
  1961. /*
  1962.  * Clear the interrupt registers.
  1963.  */
  1964. write_zsreg(info->zs_channel, 0, ERR_RES);
  1965. write_zsreg(info->zs_channel, 0, RES_H_IUS);
  1966. /*
  1967.  * Set the speed of the serial port
  1968.  */
  1969. change_speed(info);
  1970. /* Save the current value of RR0 */
  1971. info->read_reg_zero = read_zsreg(info->zs_channel, 0);
  1972. zs_soft[co->index].clk_divisor = 16;
  1973. zs_soft[co->index].zs_baud = get_zsbaud(&zs_soft[co->index]);
  1974. restore_flags(flags);
  1975. #endif
  1976. return 0;
  1977. }
  1978. static struct console sercons = {
  1979. name: "ttyS",
  1980. write: serial_console_write,
  1981. device: serial_console_device,
  1982. wait_key: serial_console_wait_key,
  1983. setup: serial_console_setup,
  1984. flags: CON_PRINTBUFFER,
  1985. index: -1,
  1986. };
  1987. /*
  1988.  * Register console.
  1989.  */
  1990. void __init zs_serial_console_init(void)
  1991. {
  1992. register_console(&sercons);
  1993. }
  1994. #endif /* ifdef CONFIG_SERIAL_CONSOLE */
  1995. #ifdef CONFIG_KGDB
  1996. struct dec_zschannel *zs_kgdbchan;
  1997. static unsigned char scc_inittab[] = {
  1998. 9,  0x80, /* reset A side (CHRA) */
  1999. 13, 0, /* set baud rate divisor */
  2000. 12, 1,
  2001. 14, 1, /* baud rate gen enable, src=rtxc (BRENABL) */
  2002. 11, 0x50, /* clocks = br gen (RCBR | TCBR) */
  2003. 5,  0x6a, /* tx 8 bits, assert RTS (Tx8 | TxENAB | RTS) */
  2004. 4,  0x44, /* x16 clock, 1 stop (SB1 | X16CLK)*/
  2005. 3,  0xc1, /* rx enable, 8 bits (RxENABLE | Rx8)*/
  2006. };
  2007. /* These are for receiving and sending characters under the kgdb
  2008.  * source level kernel debugger.
  2009.  */
  2010. void putDebugChar(char kgdb_char)
  2011. {
  2012. struct dec_zschannel *chan = zs_kgdbchan;
  2013. while ((read_zsreg(chan, 0) & Tx_BUF_EMP) == 0)
  2014. RECOVERY_DELAY;
  2015. write_zsdata(chan, kgdb_char);
  2016. }
  2017. char getDebugChar(void)
  2018. {
  2019. struct dec_zschannel *chan = zs_kgdbchan;
  2020. while((read_zsreg(chan, 0) & Rx_CH_AV) == 0)
  2021. eieio(); /*barrier();*/
  2022. return read_zsdata(chan);
  2023. }
  2024. void kgdb_interruptible(int yes)
  2025. {
  2026. struct dec_zschannel *chan = zs_kgdbchan;
  2027. int one, nine;
  2028. nine = read_zsreg(chan, 9);
  2029. if (yes == 1) {
  2030. one = EXT_INT_ENAB|INT_ALL_Rx;
  2031. nine |= MIE;
  2032. printk("turning serial ints onn");
  2033. } else {
  2034. one = RxINT_DISAB;
  2035. nine &= ~MIE;
  2036. printk("turning serial ints offn");
  2037. }
  2038. write_zsreg(chan, 1, one);
  2039. write_zsreg(chan, 9, nine);
  2040. }
  2041. static int kgdbhook_init_channel(struct dec_serial* info) 
  2042. {
  2043. return 0;
  2044. }
  2045. static void kgdbhook_init_info(struct dec_serial* info)
  2046. {
  2047. }
  2048. static void kgdbhook_rx_char(struct dec_serial* info, 
  2049.      unsigned char ch, unsigned char stat)
  2050. {
  2051. if (ch == 0x03 || ch == '$')
  2052. breakpoint();
  2053. if (stat & (Rx_OVR|FRM_ERR|PAR_ERR))
  2054. write_zsreg(info->zs_channel, 0, ERR_RES);
  2055. }
  2056. /* This sets up the serial port we're using, and turns on
  2057.  * interrupts for that channel, so kgdb is usable once we're done.
  2058.  */
  2059. static inline void kgdb_chaninit(struct dec_zschannel *ms, int intson, int bps)
  2060. {
  2061. int brg;
  2062. int i, x;
  2063. volatile char *sccc = ms->control;
  2064. brg = BPS_TO_BRG(bps, zs_parms->clock/16);
  2065. printk("setting bps on kgdb line to %d [brg=%x]n", bps, brg);
  2066. for (i = 20000; i != 0; --i) {
  2067. x = *sccc; eieio();
  2068. }
  2069. for (i = 0; i < sizeof(scc_inittab); ++i) {
  2070. write_zsreg(ms, scc_inittab[i], scc_inittab[i+1]);
  2071. i++;
  2072. }
  2073. }
  2074. /* This is called at boot time to prime the kgdb serial debugging
  2075.  * serial line.  The 'tty_num' argument is 0 for /dev/ttya and 1
  2076.  * for /dev/ttyb which is determined in setup_arch() from the
  2077.  * boot command line flags.
  2078.  */
  2079. struct zs_hook zs_kgdbhook = {
  2080. init_channel : kgdbhook_init_channel,
  2081. init_info    : kgdbhook_init_info,
  2082. cflags       : B38400|CS8|CLOCAL,
  2083. rx_char      : kgdbhook_rx_char,
  2084. }
  2085. void __init zs_kgdb_hook(int tty_num)
  2086. {
  2087. /* Find out how many Z8530 SCCs we have */
  2088. if (zs_chain == 0)
  2089. probe_sccs();
  2090. zs_soft[tty_num].zs_channel = &zs_channels[tty_num];
  2091. zs_kgdbchan = zs_soft[tty_num].zs_channel;
  2092. zs_soft[tty_num].change_needed = 0;
  2093. zs_soft[tty_num].clk_divisor = 16;
  2094. zs_soft[tty_num].zs_baud = 38400;
  2095.   zs_soft[tty_num].hook = &zs_kgdbhook; /* This runs kgdb */
  2096. /* Turn on transmitter/receiver at 8-bits/char */
  2097.         kgdb_chaninit(zs_soft[tty_num].zs_channel, 1, 38400);
  2098. printk("KGDB: on channel %d initializedn", tty_num);
  2099. set_debug_traps(); /* init stub */
  2100. }
  2101. #endif /* ifdef CONFIG_KGDB */