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

嵌入式Linux

开发平台:

Unix_Linux

  1. /* sgiserial.c: Serial port driver for SGI machines.
  2.  *
  3.  * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com)
  4.  */
  5. /*
  6.  * Note: This driver seems to have been derived from some
  7.  * version of the sbus/char/zs.c driver.  A lot of clean-up
  8.  * and bug fixes seem to have happened to the Sun driver in
  9.  * the intervening time.  As of 21.09.1999, I have merged in
  10.  * ONLY the changes necessary to fix observed functional
  11.  * problems on the Indy.  Someone really ought to do a
  12.  * thorough pass to merge in the rest of the updates.
  13.  * Better still, someone really ought to make it a common
  14.  * code module for both platforms.   kevink@mips.com
  15.  *
  16.  * 20010616 - Klaus Naumann <spock@mgnet.de> : Make serial console work with
  17.  *                                             any speed - not only 9600
  18.  */
  19. #include <linux/config.h> /* for CONFIG_REMOTE_DEBUG */
  20. #include <linux/errno.h>
  21. #include <linux/signal.h>
  22. #include <linux/sched.h>
  23. #include <linux/timer.h>
  24. #include <linux/interrupt.h>
  25. #include <linux/tty.h>
  26. #include <linux/tty_flip.h>
  27. #include <linux/major.h>
  28. #include <linux/string.h>
  29. #include <linux/fcntl.h>
  30. #include <linux/mm.h>
  31. #include <linux/kernel.h>
  32. #include <linux/delay.h>
  33. #include <linux/console.h>
  34. #include <linux/init.h>
  35. #include <asm/io.h>
  36. #include <asm/irq.h>
  37. #include <asm/sgialib.h>
  38. #include <asm/system.h>
  39. #include <asm/bitops.h>
  40. #include <asm/sgi/sgihpc.h>
  41. #include <asm/sgi/sgint23.h>
  42. #include <asm/uaccess.h>
  43. #include "sgiserial.h"
  44. #define NUM_SERIAL 1     /* One chip on board. */
  45. #define NUM_CHANNELS (NUM_SERIAL * 2)
  46. extern wait_queue_head_t keypress_wait;
  47. struct sgi_zslayout *zs_chips[NUM_SERIAL] = { 0, };
  48. struct sgi_zschannel *zs_channels[NUM_CHANNELS] = { 0, 0, };
  49. struct sgi_zschannel *zs_conschan;
  50. struct sgi_zschannel *zs_kgdbchan;
  51. struct sgi_serial zs_soft[NUM_CHANNELS];
  52. struct sgi_serial *zs_chain;  /* IRQ servicing chain */
  53. static int zilog_irq = SGI_SERIAL_IRQ;
  54. /* Console hooks... */
  55. static int zs_cons_chanout;
  56. static int zs_cons_chanin;
  57. struct sgi_serial *zs_consinfo;
  58. static unsigned char kgdb_regs[16] = {
  59. 0, 0, 0,                     /* write 0, 1, 2 */
  60. (Rx8 | RxENABLE),            /* write 3 */
  61. (X16CLK | SB1 | PAR_EVEN),   /* write 4 */
  62. (Tx8 | TxENAB),              /* write 5 */
  63. 0, 0, 0,                     /* write 6, 7, 8 */
  64. (NV),                        /* write 9 */
  65. (NRZ),                       /* write 10 */
  66. (TCBR | RCBR),               /* write 11 */
  67. 0, 0,                        /* BRG time constant, write 12 + 13 */
  68. (BRENABL),                   /* write 14 */
  69. (DCDIE)                      /* write 15 */
  70. };
  71. static unsigned char zscons_regs[16] = {
  72. 0,                           /* write 0 */
  73. (EXT_INT_ENAB | INT_ALL_Rx), /* write 1 */
  74. 0,                           /* write 2 */
  75. (Rx8 | RxENABLE),            /* write 3 */
  76. (X16CLK),                    /* write 4 */
  77. (DTR | Tx8 | TxENAB),        /* write 5 */
  78. 0, 0, 0,                     /* write 6, 7, 8 */
  79. (NV | MIE),                  /* write 9 */
  80. (NRZ),                       /* write 10 */
  81. (TCBR | RCBR),               /* write 11 */
  82. 0, 0,                        /* BRG time constant, write 12 + 13 */
  83. (BRENABL),                   /* write 14 */
  84. (DCDIE | CTSIE | TxUIE | BRKIE) /* write 15 */
  85. };
  86. #define ZS_CLOCK         3672000   /* Zilog input clock rate */
  87. DECLARE_TASK_QUEUE(tq_serial);
  88. struct tty_driver serial_driver, callout_driver;
  89. struct console *sgisercon;
  90. static int serial_refcount;
  91. /* serial subtype definitions */
  92. #define SERIAL_TYPE_NORMAL 1
  93. #define SERIAL_TYPE_CALLOUT 2
  94.   
  95. /* number of characters left in xmit buffer before we ask for more */
  96. #define WAKEUP_CHARS 256
  97. /* Debugging... DEBUG_INTR is bad to use when one of the zs
  98.  * lines is your console ;(
  99.  */
  100. #undef SERIAL_DEBUG_INTR
  101. #undef SERIAL_DEBUG_OPEN
  102. #undef SERIAL_DEBUG_FLOW
  103. #define RS_STROBE_TIME 10
  104. #define RS_ISR_PASS_LIMIT 256
  105. #define _INLINE_ inline
  106. static void change_speed(struct sgi_serial *info);
  107. static struct tty_struct *serial_table[NUM_CHANNELS];
  108. static struct termios *serial_termios[NUM_CHANNELS];
  109. static struct termios *serial_termios_locked[NUM_CHANNELS];
  110. #ifndef MIN
  111. #define MIN(a,b) ((a) < (b) ? (a) : (b))
  112. #endif
  113. /*
  114.  * tmp_buf is used as a temporary buffer by serial_write.  We need to
  115.  * lock it in case the memcpy_fromfs blocks while swapping in a page,
  116.  * and some other program tries to do a serial write at the same time.
  117.  * Since the lock will only come under contention when the system is
  118.  * swapping and available memory is low, it makes sense to share one
  119.  * buffer across all the serial ports, since it significantly saves
  120.  * memory if large numbers of serial ports are open.
  121.  */
  122. static unsigned char tmp_buf[4096]; /* This is cheating */
  123. static DECLARE_MUTEX(tmp_buf_sem);
  124. static inline int serial_paranoia_check(struct sgi_serial *info,
  125. dev_t device, const char *routine)
  126. {
  127. #ifdef SERIAL_PARANOIA_CHECK
  128. static const char *badmagic = KERN_WARNING
  129. "Warning: bad magic number for serial struct (%d, %d) in %sn";
  130. static const char *badinfo = KERN_WARNING
  131. "Warning: null sgi_serial for (%d, %d) in %sn";
  132. if (!info) {
  133. printk(badinfo, MAJOR(device), MINOR(device), routine);
  134. return 1;
  135. }
  136. if (info->magic != SERIAL_MAGIC) {
  137. printk(badmagic, MAJOR(device), MINOR(device), routine);
  138. return 1;
  139. }
  140. #endif
  141. return 0;
  142. }
  143. /*
  144.  * This is used to figure out the divisor speeds and the timeouts
  145.  */
  146. static int baud_table[] = {
  147. 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
  148. 9600, 19200, 38400, 57600, 115200, 0 };
  149. /* 
  150.  * Reading and writing Zilog8530 registers.  The delays are to make this
  151.  * driver work on the Sun4 which needs a settling delay after each chip
  152.  * register access, other machines handle this in hardware via auxiliary
  153.  * flip-flops which implement the settle time we do in software.
  154.  *
  155.  * read_zsreg() and write_zsreg() may get called from rs_kgdb_hook() before
  156.  * interrupts are enabled. Therefore we have to check ioc_iocontrol before we
  157.  * access it.
  158.  */
  159. static inline unsigned char read_zsreg(struct sgi_zschannel *channel,
  160.                                        unsigned char reg)
  161. {
  162. unsigned char retval;
  163. volatile unsigned char junk;
  164. udelay(2);
  165. channel->control = reg;
  166. if (ioc_icontrol)
  167. junk = ioc_icontrol->istat0;
  168. udelay(1);
  169. retval = channel->control;
  170. return retval;
  171. }
  172. static inline void write_zsreg(struct sgi_zschannel *channel,
  173.                                unsigned char reg, unsigned char value)
  174. {
  175. volatile unsigned char junk;
  176. udelay(2);
  177. channel->control = reg;
  178. if (ioc_icontrol)
  179. junk = ioc_icontrol->istat0;
  180. udelay(1);
  181. channel->control = value;
  182. if (ioc_icontrol)
  183. junk = ioc_icontrol->istat0;
  184. return;
  185. }
  186. static inline void load_zsregs(struct sgi_zschannel *channel, unsigned char *regs)
  187. {
  188. ZS_CLEARERR(channel);
  189. ZS_CLEARFIFO(channel);
  190. /* Load 'em up */
  191. write_zsreg(channel, R4, regs[R4]);
  192. write_zsreg(channel, R10, regs[R10]);
  193. write_zsreg(channel, R3, regs[R3] & ~RxENABLE);
  194. write_zsreg(channel, R5, regs[R5] & ~TxENAB);
  195. write_zsreg(channel, R1, regs[R1]);
  196. write_zsreg(channel, R9, regs[R9]);
  197. write_zsreg(channel, R11, regs[R11]);
  198. write_zsreg(channel, R12, regs[R12]);
  199. write_zsreg(channel, R13, regs[R13]);
  200. write_zsreg(channel, R14, regs[R14]);
  201. write_zsreg(channel, R15, regs[R15]);
  202. write_zsreg(channel, R3, regs[R3]);
  203. write_zsreg(channel, R5, regs[R5]);
  204. return;
  205. }
  206. /* Sets or clears DTR/RTS on the requested line */
  207. static inline void zs_rtsdtr(struct sgi_serial *ss, int set)
  208. {
  209. if(set) {
  210. ss->curregs[5] |= (RTS | DTR);
  211. ss->pendregs[5] = ss->curregs[5];
  212. write_zsreg(ss->zs_channel, 5, ss->curregs[5]);
  213. } else {
  214. ss->curregs[5] &= ~(RTS | DTR);
  215. ss->pendregs[5] = ss->curregs[5];
  216. write_zsreg(ss->zs_channel, 5, ss->curregs[5]);
  217. }
  218. return;
  219. }
  220. static inline void kgdb_chaninit(struct sgi_serial *ss, int intson, int bps)
  221. {
  222. int brg;
  223. if(intson) {
  224. kgdb_regs[R1] = INT_ALL_Rx;
  225. kgdb_regs[R9] |= MIE;
  226. } else {
  227. kgdb_regs[R1] = 0;
  228. kgdb_regs[R9] &= ~MIE;
  229. }
  230. brg = BPS_TO_BRG(bps, ZS_CLOCK/ss->clk_divisor);
  231. kgdb_regs[R12] = (brg & 255);
  232. kgdb_regs[R13] = ((brg >> 8) & 255);
  233. load_zsregs(ss->zs_channel, kgdb_regs);
  234. }
  235. /* Utility routines for the Zilog */
  236. static inline int get_zsbaud(struct sgi_serial *ss)
  237. {
  238. struct sgi_zschannel *channel = ss->zs_channel;
  239. int brg;
  240. /* The baud rate is split up between two 8-bit registers in
  241.  * what is termed 'BRG time constant' format in my docs for
  242.  * the chip, it is a function of the clk rate the chip is
  243.  * receiving which happens to be constant.
  244.  */
  245. brg = ((read_zsreg(channel, 13)&0xff) << 8);
  246. brg |= (read_zsreg(channel, 12)&0xff);
  247. return BRG_TO_BPS(brg, (ZS_CLOCK/(ss->clk_divisor)));
  248. }
  249. /*
  250.  * ------------------------------------------------------------
  251.  * rs_stop() and rs_start()
  252.  *
  253.  * This routines are called before setting or resetting tty->stopped.
  254.  * They enable or disable transmitter interrupts, as necessary.
  255.  * ------------------------------------------------------------
  256.  */
  257. static void rs_stop(struct tty_struct *tty)
  258. {
  259. struct sgi_serial *info = (struct sgi_serial *)tty->driver_data;
  260. unsigned long flags;
  261. if (serial_paranoia_check(info, tty->device, "rs_stop"))
  262. return;
  263. save_flags(flags); cli();
  264. if (info->curregs[5] & TxENAB) {
  265. info->curregs[5] &= ~TxENAB;
  266. info->pendregs[5] &= ~TxENAB;
  267. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  268. }
  269. restore_flags(flags);
  270. }
  271. static void rs_start(struct tty_struct *tty)
  272. {
  273. struct sgi_serial *info = (struct sgi_serial *)tty->driver_data;
  274. unsigned long flags;
  275. if (serial_paranoia_check(info, tty->device, "rs_start"))
  276. return;
  277. save_flags(flags); cli();
  278. if (info->xmit_cnt && info->xmit_buf && !(info->curregs[5] & TxENAB)) {
  279. info->curregs[5] |= TxENAB;
  280. info->pendregs[5] = info->curregs[5];
  281. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  282. }
  283. restore_flags(flags);
  284. }
  285. /* Drop into either the boot monitor or kadb upon receiving a break
  286.  * from keyboard/console input.
  287.  */
  288. static void batten_down_hatches(void)
  289. {
  290. ArcEnterInteractiveMode();
  291. #if 0
  292. /* If we are doing kadb, we call the debugger
  293.  * else we just drop into the boot monitor.
  294.  * Note that we must flush the user windows
  295.  * first before giving up control.
  296.  */
  297. printk("n");
  298. if((((unsigned long)linux_dbvec)>=DEBUG_FIRSTVADDR) &&
  299.    (((unsigned long)linux_dbvec)<=DEBUG_LASTVADDR))
  300. sp_enter_debugger();
  301. else
  302. prom_halt();
  303. /* XXX We want to notify the keyboard driver that all
  304.  * XXX keys are in the up state or else weird things
  305.  * XXX happen...
  306.  */
  307. #endif
  308. return;
  309. }
  310. /* On receive, this clears errors and the receiver interrupts */
  311. static inline void rs_recv_clear(struct sgi_zschannel *zsc)
  312. {
  313. volatile unsigned char junk;
  314. udelay(2);
  315. zsc->control = ERR_RES;
  316. junk = ioc_icontrol->istat0;
  317. udelay(2);
  318. zsc->control = RES_H_IUS;
  319. junk = ioc_icontrol->istat0;
  320. }
  321. /*
  322.  * ----------------------------------------------------------------------
  323.  *
  324.  * Here starts the interrupt handling routines.  All of the following
  325.  * subroutines are declared as inline and are folded into
  326.  * rs_interrupt().  They were separated out for readability's sake.
  327.  *
  328.  * Note: rs_interrupt() is a "fast" interrupt, which means that it
  329.  * runs with interrupts turned off.  People who may want to modify
  330.  * rs_interrupt() should try to keep the interrupt handler as fast as
  331.  * possible.  After you are done making modifications, it is not a bad
  332.  * idea to do:
  333.  * 
  334.  * gcc -S -DKERNEL -Wall -Wstrict-prototypes -O6 -fomit-frame-pointer serial.c
  335.  *
  336.  * and look at the resulting assemble code in serial.s.
  337.  *
  338.  *  - Ted Ts'o (tytso@mit.edu), 7-Mar-93
  339.  * -----------------------------------------------------------------------
  340.  */
  341. /*
  342.  * This routine is used by the interrupt handler to schedule
  343.  * processing in the software interrupt portion of the driver.
  344.  */
  345. static _INLINE_ void rs_sched_event(struct sgi_serial *info,
  346.     int event)
  347. {
  348. info->event |= 1 << event;
  349. queue_task(&info->tqueue, &tq_serial);
  350. mark_bh(SERIAL_BH);
  351. }
  352. #ifdef CONFIG_REMOTE_DEBUG
  353. extern void set_async_breakpoint(unsigned int epc);
  354. #endif
  355. static _INLINE_ void receive_chars(struct sgi_serial *info, struct pt_regs *regs)
  356. {
  357. struct tty_struct *tty = info->tty;
  358. volatile unsigned char junk;
  359. unsigned char ch, stat;
  360. udelay(2);
  361. ch = info->zs_channel->data;
  362. junk = ioc_icontrol->istat0;
  363. udelay(2);
  364. stat = read_zsreg(info->zs_channel, R1);
  365. /* If this is the console keyboard, we need to handle
  366.  * L1-A's here.
  367.  */
  368. if(info->is_cons) {
  369. if(ch==0) { /* whee, break received */
  370. batten_down_hatches();
  371. rs_recv_clear(info->zs_channel);
  372. return;
  373. } else if (ch == 1) {
  374. show_state();
  375. return;
  376. } else if (ch == 2) {
  377. show_buffers();
  378. return;
  379. }
  380. /* It is a 'keyboard interrupt' ;-) */
  381. wake_up(&keypress_wait);
  382. }
  383. /* Look for kgdb 'stop' character, consult the gdb documentation
  384.  * for remote target debugging and arch/sparc/kernel/sparc-stub.c
  385.  * to see how all this works.
  386.  */
  387. #ifdef CONFIG_REMOTE_DEBUG
  388. if((info->kgdb_channel) && (ch =='03')) {
  389. set_async_breakpoint(read_32bit_cp0_register(CP0_EPC));
  390. goto clear_and_exit;
  391. }
  392. #endif
  393. if(!tty)
  394. goto clear_and_exit;
  395. if (tty->flip.count >= TTY_FLIPBUF_SIZE)
  396. queue_task(&tty->flip.tqueue, &tq_timer);
  397. tty->flip.count++;
  398. if(stat & PAR_ERR)
  399. *tty->flip.flag_buf_ptr++ = TTY_PARITY;
  400. else if(stat & Rx_OVR)
  401. *tty->flip.flag_buf_ptr++ = TTY_OVERRUN;
  402. else if(stat & CRC_ERR)
  403. *tty->flip.flag_buf_ptr++ = TTY_FRAME;
  404. else
  405. *tty->flip.flag_buf_ptr++ = 0; /* XXX */
  406. *tty->flip.char_buf_ptr++ = ch;
  407. queue_task(&tty->flip.tqueue, &tq_timer);
  408. clear_and_exit:
  409. rs_recv_clear(info->zs_channel);
  410. return;
  411. }
  412. static _INLINE_ void transmit_chars(struct sgi_serial *info)
  413. {
  414. volatile unsigned char junk;
  415. /* P3: In theory we have to test readiness here because a
  416.  * serial console can clog the chip through zs_cons_put_char().
  417.  * David did not do this. I think he relies on 3-chars FIFO in 8530.
  418.  * Let's watch for lost _output_ characters. XXX
  419.  */
  420. /* SGI ADDENDUM: On most SGI machines, the Zilog does possess
  421.  *               a 16 or 17 byte fifo, so no worries. -dm
  422.  */
  423. if (info->x_char) {
  424. /* Send next char */
  425. udelay(2);
  426. info->zs_channel->data = info->x_char;
  427. junk = ioc_icontrol->istat0;
  428. info->x_char = 0;
  429. goto clear_and_return;
  430. }
  431. if((info->xmit_cnt <= 0) || info->tty->stopped) {
  432. /* That's peculiar... */
  433. udelay(2);
  434. info->zs_channel->control = RES_Tx_P;
  435. junk = ioc_icontrol->istat0;
  436. goto clear_and_return;
  437. }
  438. /* Send char */
  439. udelay(2);
  440. info->zs_channel->data = info->xmit_buf[info->xmit_tail++];
  441. junk = ioc_icontrol->istat0;
  442. info->xmit_tail = info->xmit_tail & (SERIAL_XMIT_SIZE-1);
  443. info->xmit_cnt--;
  444. if (info->xmit_cnt < WAKEUP_CHARS)
  445. rs_sched_event(info, RS_EVENT_WRITE_WAKEUP);
  446. if(info->xmit_cnt <= 0) {
  447. udelay(2);
  448. info->zs_channel->control = RES_Tx_P;
  449. junk = ioc_icontrol->istat0;
  450. goto clear_and_return;
  451. }
  452. clear_and_return:
  453. /* Clear interrupt */
  454. udelay(2);
  455. info->zs_channel->control = RES_H_IUS;
  456. junk = ioc_icontrol->istat0;
  457. return;
  458. }
  459. static _INLINE_ void status_handle(struct sgi_serial *info)
  460. {
  461. volatile unsigned char junk;
  462. unsigned char status;
  463. /* Get status from Read Register 0 */
  464. udelay(2);
  465. status = info->zs_channel->control;
  466. junk = ioc_icontrol->istat0;
  467. /* Clear status condition... */
  468. udelay(2);
  469. info->zs_channel->control = RES_EXT_INT;
  470. junk = ioc_icontrol->istat0;
  471. /* Clear the interrupt */
  472. udelay(2);
  473. info->zs_channel->control = RES_H_IUS;
  474. junk = ioc_icontrol->istat0;
  475. #if 0
  476. if(status & DCD) {
  477. if((info->tty->termios->c_cflag & CRTSCTS) &&
  478.    ((info->curregs[3] & AUTO_ENAB)==0)) {
  479. info->curregs[3] |= AUTO_ENAB;
  480. info->pendregs[3] |= AUTO_ENAB;
  481. write_zsreg(info->zs_channel, 3, info->curregs[3]);
  482. }
  483. } else {
  484. if((info->curregs[3] & AUTO_ENAB)) {
  485. info->curregs[3] &= ~AUTO_ENAB;
  486. info->pendregs[3] &= ~AUTO_ENAB;
  487. write_zsreg(info->zs_channel, 3, info->curregs[3]);
  488. }
  489. }
  490. #endif
  491. /* Whee, if this is console input and this is a
  492.  * 'break asserted' status change interrupt, call
  493.  * the boot prom.
  494.  */
  495. if((status & BRK_ABRT) && info->break_abort)
  496. batten_down_hatches();
  497. /* XXX Whee, put in a buffer somewhere, the status information
  498.  * XXX whee whee whee... Where does the information go...
  499.  */
  500. return;
  501. }
  502. /*
  503.  * This is the serial driver's generic interrupt routine
  504.  */
  505. void rs_interrupt(int irq, void *dev_id, struct pt_regs * regs)
  506. {
  507. struct sgi_serial * info = (struct sgi_serial *) dev_id;
  508. unsigned char zs_intreg;
  509. zs_intreg = read_zsreg(info->zs_next->zs_channel, 3);
  510. /* NOTE: The read register 3, which holds the irq status,
  511.  *       does so for both channels on each chip.  Although
  512.  *       the status value itself must be read from the A
  513.  *       channel and is only valid when read from channel A.
  514.  *       Yes... broken hardware...
  515.  */
  516. #define CHAN_A_IRQMASK (CHARxIP | CHATxIP | CHAEXT)
  517. #define CHAN_B_IRQMASK (CHBRxIP | CHBTxIP | CHBEXT)
  518. /* *** Chip 1 *** */
  519. /* Channel B -- /dev/ttyb, could be the console */
  520. if(zs_intreg & CHAN_B_IRQMASK) {
  521. if (zs_intreg & CHBRxIP)
  522. receive_chars(info, regs);
  523. if (zs_intreg & CHBTxIP)
  524. transmit_chars(info);
  525. if (zs_intreg & CHBEXT)
  526. status_handle(info);
  527. }
  528. info=info->zs_next;
  529. /* Channel A -- /dev/ttya, could be the console */
  530. if(zs_intreg & CHAN_A_IRQMASK) {
  531. if (zs_intreg & CHARxIP)
  532. receive_chars(info, regs);
  533. if (zs_intreg & CHATxIP)
  534. transmit_chars(info);
  535. if (zs_intreg & CHAEXT)
  536. status_handle(info);
  537. }
  538. }
  539. /*
  540.  * -------------------------------------------------------------------
  541.  * Here ends the serial interrupt routines.
  542.  * -------------------------------------------------------------------
  543.  */
  544. /*
  545.  * This routine is used to handle the "bottom half" processing for the
  546.  * serial driver, known also the "software interrupt" processing.
  547.  * This processing is done at the kernel interrupt level, after the
  548.  * rs_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON.  This
  549.  * is where time-consuming activities which can not be done in the
  550.  * interrupt driver proper are done; the interrupt driver schedules
  551.  * them using rs_sched_event(), and they get done here.
  552.  */
  553. static void do_serial_bh(void)
  554. {
  555. run_task_queue(&tq_serial);
  556. }
  557. static void do_softint(void *private_)
  558. {
  559. struct sgi_serial *info = (struct sgi_serial *) private_;
  560. struct tty_struct *tty;
  561. tty = info->tty;
  562. if (!tty)
  563. return;
  564. if (test_and_clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event)) {
  565. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  566.     tty->ldisc.write_wakeup)
  567. (tty->ldisc.write_wakeup)(tty);
  568. wake_up_interruptible(&tty->write_wait);
  569. }
  570. }
  571. /*
  572.  * This routine is called from the scheduler tqueue when the interrupt
  573.  * routine has signalled that a hangup has occurred.  The path of
  574.  * hangup processing is:
  575.  *
  576.  *  serial interrupt routine -> (scheduler tqueue) ->
  577.  *  do_serial_hangup() -> tty->hangup() -> rs_hangup()
  578.  * 
  579.  */
  580. static void do_serial_hangup(void *private_)
  581. {
  582. struct sgi_serial *info = (struct sgi_serial *) private_;
  583. struct tty_struct *tty;
  584. tty = info->tty;
  585. if (!tty)
  586. return;
  587. tty_hangup(tty);
  588. }
  589. static int startup(struct sgi_serial * info)
  590. {
  591. volatile unsigned char junk;
  592. unsigned long flags;
  593. if (info->flags & ZILOG_INITIALIZED)
  594. return 0;
  595. if (!info->xmit_buf) {
  596. info->xmit_buf = (unsigned char *) get_free_page(GFP_KERNEL);
  597. if (!info->xmit_buf)
  598. return -ENOMEM;
  599. }
  600. save_flags(flags); cli();
  601. #ifdef SERIAL_DEBUG_OPEN
  602. printk("starting up ttys%d (irq %d)...n", info->line, info->irq);
  603. #endif
  604. /*
  605.  * Clear the FIFO buffers and disable them
  606.  * (they will be reenabled in change_speed())
  607.  */
  608. ZS_CLEARFIFO(info->zs_channel);
  609. info->xmit_fifo_size = 1;
  610. /*
  611.  * Clear the interrupt registers.
  612.  */
  613. udelay(2);
  614. info->zs_channel->control = ERR_RES;
  615. junk = ioc_icontrol->istat0;
  616. udelay(2);
  617. info->zs_channel->control = RES_H_IUS;
  618. junk = ioc_icontrol->istat0;
  619. /*
  620.  * Now, initialize the Zilog
  621.  */
  622. zs_rtsdtr(info, 1);
  623. /*
  624.  * Finally, enable sequencing and interrupts
  625.  */
  626. info->curregs[1] |= (info->curregs[1] & ~0x18) | (EXT_INT_ENAB|INT_ALL_Rx);
  627. info->pendregs[1] = info->curregs[1];
  628. info->curregs[3] |= (RxENABLE | Rx8);
  629. info->pendregs[3] = info->curregs[3];
  630. /* We enable Tx interrupts as needed. */
  631. info->curregs[5] |= (TxENAB | Tx8);
  632. info->pendregs[5] = info->curregs[5];
  633. info->curregs[9] |= (NV | MIE);
  634. info->pendregs[9] = info->curregs[9];
  635. write_zsreg(info->zs_channel, 3, info->curregs[3]);
  636. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  637. write_zsreg(info->zs_channel, 9, info->curregs[9]);
  638. /*
  639.  * And clear the interrupt registers again for luck.
  640.  */
  641. udelay(2);
  642. info->zs_channel->control = ERR_RES;
  643. junk = ioc_icontrol->istat0;
  644. udelay(2);
  645. info->zs_channel->control = RES_H_IUS;
  646. junk = ioc_icontrol->istat0;
  647. if (info->tty)
  648. clear_bit(TTY_IO_ERROR, &info->tty->flags);
  649. info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
  650. /*
  651.  * and set the speed of the serial port
  652.  */
  653. change_speed(info);
  654. info->flags |= ZILOG_INITIALIZED;
  655. restore_flags(flags);
  656. return 0;
  657. }
  658. /*
  659.  * This routine will shutdown a serial port; interrupts are disabled, and
  660.  * DTR is dropped if the hangup on close termio flag is on.
  661.  */
  662. static void shutdown(struct sgi_serial * info)
  663. {
  664. unsigned long flags;
  665. if (!(info->flags & ZILOG_INITIALIZED))
  666. return;
  667. #ifdef SERIAL_DEBUG_OPEN
  668. printk("Shutting down serial port %d (irq %d)....", info->line,
  669.        info->irq);
  670. #endif
  671. save_flags(flags); cli(); /* Disable interrupts */
  672. if (info->xmit_buf) {
  673. free_page((unsigned long) info->xmit_buf);
  674. info->xmit_buf = 0;
  675. }
  676. if (info->tty)
  677. set_bit(TTY_IO_ERROR, &info->tty->flags);
  678. info->flags &= ~ZILOG_INITIALIZED;
  679. restore_flags(flags);
  680. }
  681. /*
  682.  * This routine is called to set the UART divisor registers to match
  683.  * the specified baud rate for a serial port.
  684.  */
  685. static void change_speed(struct sgi_serial *info)
  686. {
  687. unsigned short port;
  688. unsigned cflag;
  689. int i;
  690. int brg;
  691. if (!info->tty || !info->tty->termios)
  692. return;
  693. cflag = info->tty->termios->c_cflag;
  694. if (!(port = info->port))
  695. return;
  696. i = cflag & CBAUD;
  697. if (i & CBAUDEX) {
  698. /* XXX CBAUDEX is not obeyed.
  699.  * It is impossible at a 32bits SPARC.
  700.  * But we have to report this to user ... someday.
  701.  */
  702. i = B9600;
  703. }
  704. if (i == 0) {
  705. /* XXX B0, hangup the line. */
  706. do_serial_hangup(info);
  707. } else if (baud_table[i]) {
  708. info->zs_baud = baud_table[i];
  709. info->clk_divisor = 16;
  710. info->curregs[4] = X16CLK;
  711. info->curregs[11] = TCBR | RCBR;
  712. brg = BPS_TO_BRG(info->zs_baud, ZS_CLOCK/info->clk_divisor);
  713. info->curregs[12] = (brg & 255);
  714. info->curregs[13] = ((brg >> 8) & 255);
  715. info->curregs[14] = BRENABL;
  716. }
  717. /* byte size and parity */
  718. switch (cflag & CSIZE) {
  719. case CS5:
  720. info->curregs[3] &= ~(0xc0);
  721. info->curregs[3] |= Rx5;
  722. info->pendregs[3] = info->curregs[3];
  723. info->curregs[5] &= ~(0xe0);
  724. info->curregs[5] |= Tx5;
  725. info->pendregs[5] = info->curregs[5];
  726. break;
  727. case CS6:
  728. info->curregs[3] &= ~(0xc0);
  729. info->curregs[3] |= Rx6;
  730. info->pendregs[3] = info->curregs[3];
  731. info->curregs[5] &= ~(0xe0);
  732. info->curregs[5] |= Tx6;
  733. info->pendregs[5] = info->curregs[5];
  734. break;
  735. case CS7:
  736. info->curregs[3] &= ~(0xc0);
  737. info->curregs[3] |= Rx7;
  738. info->pendregs[3] = info->curregs[3];
  739. info->curregs[5] &= ~(0xe0);
  740. info->curregs[5] |= Tx7;
  741. info->pendregs[5] = info->curregs[5];
  742. break;
  743. case CS8:
  744. default: /* defaults to 8 bits */
  745. info->curregs[3] &= ~(0xc0);
  746. info->curregs[3] |= Rx8;
  747. info->pendregs[3] = info->curregs[3];
  748. info->curregs[5] &= ~(0xe0);
  749. info->curregs[5] |= Tx8;
  750. info->pendregs[5] = info->curregs[5];
  751. break;
  752. }
  753. info->curregs[4] &= ~(0x0c);
  754. if (cflag & CSTOPB) {
  755. info->curregs[4] |= SB2;
  756. } else {
  757. info->curregs[4] |= SB1;
  758. }
  759. info->pendregs[4] = info->curregs[4];
  760. if (cflag & PARENB) {
  761. info->curregs[4] |= PAR_ENA;
  762. info->pendregs[4] |= PAR_ENA;
  763. } else {
  764. info->curregs[4] &= ~PAR_ENA;
  765. info->pendregs[4] &= ~PAR_ENA;
  766. }
  767. if (!(cflag & PARODD)) {
  768. info->curregs[4] |= PAR_EVEN;
  769. info->pendregs[4] |= PAR_EVEN;
  770. } else {
  771. info->curregs[4] &= ~PAR_EVEN;
  772. info->pendregs[4] &= ~PAR_EVEN;
  773. }
  774. /* Load up the new values */
  775. load_zsregs(info->zs_channel, info->curregs);
  776. return;
  777. }
  778. /* This is for console output over ttya/ttyb */
  779. static void zs_cons_put_char(char ch)
  780. {
  781. struct sgi_zschannel *chan = zs_conschan;
  782. volatile unsigned char junk;
  783. int flags, loops = 0;
  784. save_flags(flags); cli();
  785. while(((junk = chan->control) & Tx_BUF_EMP)==0 && loops < 10000) {
  786. loops++;
  787. udelay(2);
  788. }
  789. udelay(2);
  790. chan->data = ch;
  791. junk = ioc_icontrol->istat0;
  792. restore_flags(flags);
  793. }
  794. /* 
  795.  * This is the more generic put_char function for the driver.
  796.  * In earlier versions of this driver, "rs_put_char" was the
  797.  * name of the console-specific fucntion, now called zs_cons_put_char
  798.  */
  799. static void rs_put_char(struct tty_struct *tty, char ch)
  800. {
  801. struct sgi_zschannel *chan = 
  802. ((struct sgi_serial *)tty->driver_data)->zs_channel;
  803. volatile unsigned char junk;
  804. int flags, loops = 0;
  805. save_flags(flags); cli();
  806. while(((junk = chan->control) & Tx_BUF_EMP)==0 && loops < 10000) {
  807. loops++;
  808. udelay(2);
  809. }
  810. udelay(2);
  811. chan->data = ch;
  812. junk = ioc_icontrol->istat0;
  813. restore_flags(flags);
  814. }
  815. /* These are for receiving and sending characters under the kgdb
  816.  * source level kernel debugger.
  817.  */
  818. int putDebugChar(char kgdb_char)
  819. {
  820. struct sgi_zschannel *chan = zs_kgdbchan;
  821. volatile unsigned char junk;
  822. unsigned long flags;
  823. save_flags(flags); cli();
  824. udelay(2);
  825. while((chan->control & Tx_BUF_EMP)==0)
  826. udelay(2);
  827. udelay(2);
  828. chan->data = kgdb_char;
  829. junk = ioc_icontrol->istat0;
  830. restore_flags(flags);
  831. return 1;
  832. }
  833. char getDebugChar(void)
  834. {
  835. struct sgi_zschannel *chan = zs_kgdbchan;
  836. unsigned char junk;
  837. while((chan->control & Rx_CH_AV)==0)
  838. udelay(2);
  839. junk = ioc_icontrol->istat0;
  840. udelay(2);
  841. return chan->data;
  842. }
  843. /*
  844.  * Fair output driver allows a process to speak.
  845.  */
  846. static void rs_fair_output(void)
  847. {
  848. int left; /* Output no more than that */
  849. unsigned long flags;
  850. struct sgi_serial *info = zs_consinfo;
  851. volatile unsigned char junk;
  852. char c;
  853. if (info == 0) return;
  854. if (info->xmit_buf == 0) return;
  855. save_flags(flags);  cli();
  856. left = info->xmit_cnt;
  857. while (left != 0) {
  858. c = info->xmit_buf[info->xmit_tail];
  859. info->xmit_tail = (info->xmit_tail+1) & (SERIAL_XMIT_SIZE-1);
  860. info->xmit_cnt--;
  861. restore_flags(flags);
  862. zs_cons_put_char(c);
  863. save_flags(flags);  cli();
  864. left = MIN(info->xmit_cnt, left-1);
  865. }
  866. /* Last character is being transmitted now (hopefully). */
  867. udelay(2);
  868. zs_conschan->control = RES_Tx_P;
  869. junk = ioc_icontrol->istat0;
  870. restore_flags(flags);
  871. return;
  872. }
  873. static int rs_write(struct tty_struct * tty, int from_user,
  874.     const unsigned char *buf, int count)
  875. {
  876. int c, total = 0;
  877. struct sgi_serial *info = (struct sgi_serial *)tty->driver_data;
  878. unsigned long flags;
  879. if (serial_paranoia_check(info, tty->device, "rs_write"))
  880. return 0;
  881. if (!tty || !info->xmit_buf)
  882. return 0;
  883. save_flags(flags);
  884. while (1) {
  885. cli();
  886. c = MIN(count, MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,
  887.    SERIAL_XMIT_SIZE - info->xmit_head));
  888. if (c <= 0)
  889. break;
  890. if (from_user) {
  891. down(&tmp_buf_sem);
  892. copy_from_user(tmp_buf, buf, c);
  893. c = MIN(c, MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,
  894.        SERIAL_XMIT_SIZE - info->xmit_head));
  895. memcpy(info->xmit_buf + info->xmit_head, tmp_buf, c);
  896. up(&tmp_buf_sem);
  897. } else
  898. memcpy(info->xmit_buf + info->xmit_head, buf, c);
  899. info->xmit_head = (info->xmit_head + c) & (SERIAL_XMIT_SIZE-1);
  900. info->xmit_cnt += c;
  901. restore_flags(flags);
  902. buf += c;
  903. count -= c;
  904. total += c;
  905. }
  906. if (info->xmit_cnt && !tty->stopped && !tty->hw_stopped) {
  907. /*
  908.  * The above test used to include the condition
  909.    * "&& !(info->curregs[5] & TxENAB)", but there
  910.  * is reason to suspect that it is never statisfied
  911.  * when the port is running.  The problem may in fact
  912.  * have been masked by the fact that, if O_POST is set,
  913.  * there is always a rs_flush_xx operation following the
  914.  * rs_write, and the flush ignores that condition when
  915.  * it kicks off the transmit.
  916.  */
  917. /* Enable transmitter */
  918. info->curregs[1] |= TxINT_ENAB|EXT_INT_ENAB;
  919. info->pendregs[1] |= TxINT_ENAB|EXT_INT_ENAB;
  920. write_zsreg(info->zs_channel, 1, info->curregs[1]);
  921. info->curregs[5] |= TxENAB;
  922. info->pendregs[5] |= TxENAB;
  923. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  924. /*
  925.  * The following code is imported from the 2.3.6 Sun sbus zs.c
  926.  * driver, of which an earlier version served as the basis
  927.  * for sgiserial.c.  Perhaps due to changes over time in
  928.  * the line discipline code, ns_write()s with from_user
  929.  * set would not otherwise actually kick-off output in
  930.  * Linux 2.2.x or later.  Maybe it never really worked.
  931.  */
  932. rs_put_char(tty, info->xmit_buf[info->xmit_tail++]);
  933.                 info->xmit_tail = info->xmit_tail & (SERIAL_XMIT_SIZE-1);
  934.                 info->xmit_cnt--;
  935. }
  936. restore_flags(flags);
  937. return total;
  938. }
  939. static int rs_write_room(struct tty_struct *tty)
  940. {
  941. struct sgi_serial *info = (struct sgi_serial *)tty->driver_data;
  942. int ret;
  943. if (serial_paranoia_check(info, tty->device, "rs_write_room"))
  944. return 0;
  945. ret = SERIAL_XMIT_SIZE - info->xmit_cnt - 1;
  946. if (ret < 0)
  947. ret = 0;
  948. return ret;
  949. }
  950. static int rs_chars_in_buffer(struct tty_struct *tty)
  951. {
  952. struct sgi_serial *info = (struct sgi_serial *)tty->driver_data;
  953. if (serial_paranoia_check(info, tty->device, "rs_chars_in_buffer"))
  954. return 0;
  955. return info->xmit_cnt;
  956. }
  957. static void rs_flush_buffer(struct tty_struct *tty)
  958. {
  959. struct sgi_serial *info = (struct sgi_serial *)tty->driver_data;
  960. if (serial_paranoia_check(info, tty->device, "rs_flush_buffer"))
  961. return;
  962. cli();
  963. info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
  964. sti();
  965. wake_up_interruptible(&tty->write_wait);
  966. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  967.     tty->ldisc.write_wakeup)
  968. (tty->ldisc.write_wakeup)(tty);
  969. }
  970. static void rs_flush_chars(struct tty_struct *tty)
  971. {
  972. struct sgi_serial *info = (struct sgi_serial *)tty->driver_data;
  973. unsigned long flags;
  974. if (serial_paranoia_check(info, tty->device, "rs_flush_chars"))
  975. return;
  976. if (info->xmit_cnt <= 0 || tty->stopped || tty->hw_stopped ||
  977.     !info->xmit_buf)
  978. return;
  979. /* Enable transmitter */
  980. save_flags(flags); cli();
  981. info->curregs[1] |= TxINT_ENAB|EXT_INT_ENAB;
  982. info->pendregs[1] |= TxINT_ENAB|EXT_INT_ENAB;
  983. write_zsreg(info->zs_channel, 1, info->curregs[1]);
  984. info->curregs[5] |= TxENAB;
  985. info->pendregs[5] |= TxENAB;
  986. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  987. /*
  988.  * Send a first (bootstrapping) character. A best solution is
  989.  * to call transmit_chars() here which handles output in a
  990.  * generic way. Current transmit_chars() not only transmits,
  991.  * but resets interrupts also what we do not desire here.
  992.  * XXX Discuss with David.
  993.  */
  994. if (info->zs_channel->control & Tx_BUF_EMP) {
  995. volatile unsigned char junk;
  996. /* Send char */
  997. udelay(2);
  998. info->zs_channel->data = info->xmit_buf[info->xmit_tail++];
  999. junk = ioc_icontrol->istat0;
  1000. info->xmit_tail = info->xmit_tail & (SERIAL_XMIT_SIZE-1);
  1001. info->xmit_cnt--;
  1002. }
  1003. restore_flags(flags);
  1004. }
  1005. /*
  1006.  * ------------------------------------------------------------
  1007.  * rs_throttle()
  1008.  * 
  1009.  * This routine is called by the upper-layer tty layer to signal that
  1010.  * incoming characters should be throttled.
  1011.  * ------------------------------------------------------------
  1012.  */
  1013. static void rs_throttle(struct tty_struct * tty)
  1014. {
  1015. struct sgi_serial *info = (struct sgi_serial *)tty->driver_data;
  1016. #ifdef SERIAL_DEBUG_THROTTLE
  1017. char buf[64];
  1018. printk("throttle %s: %d....n", _tty_name(tty, buf),
  1019.        tty->ldisc.chars_in_buffer(tty));
  1020. #endif
  1021. if (serial_paranoia_check(info, tty->device, "rs_throttle"))
  1022. return;
  1023. if (I_IXOFF(tty))
  1024. info->x_char = STOP_CHAR(tty);
  1025. /* Turn off RTS line */
  1026. cli();
  1027. info->curregs[5] &= ~RTS;
  1028. info->pendregs[5] &= ~RTS;
  1029. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  1030. sti();
  1031. }
  1032. static void rs_unthrottle(struct tty_struct * tty)
  1033. {
  1034. struct sgi_serial *info = (struct sgi_serial *)tty->driver_data;
  1035. #ifdef SERIAL_DEBUG_THROTTLE
  1036. char buf[64];
  1037. printk("unthrottle %s: %d....n", _tty_name(tty, buf),
  1038.        tty->ldisc.chars_in_buffer(tty));
  1039. #endif
  1040. if (serial_paranoia_check(info, tty->device, "rs_unthrottle"))
  1041. return;
  1042. if (I_IXOFF(tty)) {
  1043. if (info->x_char)
  1044. info->x_char = 0;
  1045. else
  1046. info->x_char = START_CHAR(tty);
  1047. }
  1048. /* Assert RTS line */
  1049. cli();
  1050. info->curregs[5] |= RTS;
  1051. info->pendregs[5] |= RTS;
  1052. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  1053. sti();
  1054. }
  1055. /*
  1056.  * ------------------------------------------------------------
  1057.  * rs_ioctl() and friends
  1058.  * ------------------------------------------------------------
  1059.  */
  1060. static int get_serial_info(struct sgi_serial * info,
  1061.    struct serial_struct * retinfo)
  1062. {
  1063. struct serial_struct tmp;
  1064.   
  1065. if (!retinfo)
  1066. return -EFAULT;
  1067. memset(&tmp, 0, sizeof(tmp));
  1068. tmp.type = info->type;
  1069. tmp.line = info->line;
  1070. tmp.port = info->port;
  1071. tmp.irq = info->irq;
  1072. tmp.flags = info->flags;
  1073. tmp.baud_base = info->baud_base;
  1074. tmp.close_delay = info->close_delay;
  1075. tmp.closing_wait = info->closing_wait;
  1076. tmp.custom_divisor = info->custom_divisor;
  1077. return copy_to_user(retinfo,&tmp,sizeof(*retinfo));
  1078. }
  1079. static int set_serial_info(struct sgi_serial * info,
  1080.    struct serial_struct * new_info)
  1081. {
  1082. struct serial_struct new_serial;
  1083. struct sgi_serial old_info;
  1084. int  retval = 0;
  1085. if (!new_info)
  1086. return -EFAULT;
  1087. copy_from_user(&new_serial,new_info,sizeof(new_serial));
  1088. old_info = *info;
  1089. if (!capable(CAP_SYS_ADMIN)) {
  1090. if ((new_serial.baud_base != info->baud_base) ||
  1091.     (new_serial.type != info->type) ||
  1092.     (new_serial.close_delay != info->close_delay) ||
  1093.     ((new_serial.flags & ~ZILOG_USR_MASK) !=
  1094.      (info->flags & ~ZILOG_USR_MASK)))
  1095. return -EPERM;
  1096. info->flags = ((info->flags & ~ZILOG_USR_MASK) |
  1097.        (new_serial.flags & ZILOG_USR_MASK));
  1098. info->custom_divisor = new_serial.custom_divisor;
  1099. goto check_and_exit;
  1100. }
  1101. if (info->count > 1)
  1102. return -EBUSY;
  1103. /*
  1104.  * OK, past this point, all the error checking has been done.
  1105.  * At this point, we start making changes.....
  1106.  */
  1107. info->baud_base = new_serial.baud_base;
  1108. info->flags = ((info->flags & ~ZILOG_FLAGS) |
  1109. (new_serial.flags & ZILOG_FLAGS));
  1110. info->type = new_serial.type;
  1111. info->close_delay = new_serial.close_delay;
  1112. info->closing_wait = new_serial.closing_wait;
  1113. check_and_exit:
  1114. retval = startup(info);
  1115. return retval;
  1116. }
  1117. /*
  1118.  * get_lsr_info - get line status register info
  1119.  *
  1120.  * Purpose: Let user call ioctl() to get info when the UART physically
  1121.  *      is emptied.  On bus types like RS485, the transmitter must
  1122.  *      release the bus after transmitting. This must be done when
  1123.  *      the transmit shift register is empty, not be done when the
  1124.  *      transmit holding register is empty.  This functionality
  1125.  *      allows an RS485 driver to be written in user space. 
  1126.  */
  1127. static int get_lsr_info(struct sgi_serial * info, unsigned int *value)
  1128. {
  1129. volatile unsigned char junk;
  1130. unsigned char status;
  1131. cli();
  1132. udelay(2);
  1133. status = info->zs_channel->control;
  1134. junk = ioc_icontrol->istat0;
  1135. sti();
  1136. return put_user(status,value);
  1137. static int get_modem_info(struct sgi_serial * info, unsigned int *value)
  1138. {
  1139. unsigned char status;
  1140. unsigned int result;
  1141. cli();
  1142. status = info->zs_channel->control;
  1143. udelay(2);
  1144. sti();
  1145. result =  ((info->curregs[5] & RTS) ? TIOCM_RTS : 0)
  1146. | ((info->curregs[5] & DTR) ? TIOCM_DTR : 0)
  1147. | ((status  & DCD) ? TIOCM_CAR : 0)
  1148. | ((status  & SYNC) ? TIOCM_DSR : 0)
  1149. | ((status  & CTS) ? TIOCM_CTS : 0);
  1150. if (put_user(result, value))
  1151. return -EFAULT;
  1152. return 0;
  1153. }
  1154. static int set_modem_info(struct sgi_serial * info, unsigned int cmd,
  1155.   unsigned int *value)
  1156. {
  1157. unsigned int arg;
  1158. if (get_user(arg, value))
  1159. return -EFAULT;
  1160. switch (cmd) {
  1161. case TIOCMBIS: 
  1162. if (arg & TIOCM_RTS)
  1163. info->curregs[5] |= RTS;
  1164. if (arg & TIOCM_DTR)
  1165. info->curregs[5] |= DTR;
  1166. break;
  1167. case TIOCMBIC:
  1168. if (arg & TIOCM_RTS)
  1169. info->curregs[5] &= ~RTS;
  1170. if (arg & TIOCM_DTR)
  1171. info->curregs[5] &= ~DTR;
  1172. break;
  1173. case TIOCMSET:
  1174. info->curregs[5] = ((info->curregs[5] & ~(RTS | DTR))
  1175.      | ((arg & TIOCM_RTS) ? RTS : 0)
  1176.      | ((arg & TIOCM_DTR) ? DTR : 0));
  1177. break;
  1178. default:
  1179. return -EINVAL;
  1180. }
  1181. cli();
  1182. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  1183. sti();
  1184. return 0;
  1185. }
  1186. /*
  1187.  * This routine sends a break character out the serial port.
  1188.  */
  1189. static void send_break( struct sgi_serial * info, int duration)
  1190. {
  1191. if (!info->port)
  1192. return;
  1193. current->state = TASK_INTERRUPTIBLE;
  1194. cli();
  1195. write_zsreg(info->zs_channel, 5, (info->curregs[5] | SND_BRK));
  1196. schedule_timeout(duration);
  1197. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  1198. sti();
  1199. }
  1200. static int rs_ioctl(struct tty_struct *tty, struct file * file,
  1201.     unsigned int cmd, unsigned long arg)
  1202. {
  1203. struct sgi_serial * info = (struct sgi_serial *) tty->driver_data;
  1204. int retval;
  1205. if (serial_paranoia_check(info, tty->device, "zs_ioctl"))
  1206. return -ENODEV;
  1207. if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
  1208.     (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGWILD)  &&
  1209.     (cmd != TIOCSERSWILD) && (cmd != TIOCSERGSTRUCT)) {
  1210. if (tty->flags & (1 << TTY_IO_ERROR))
  1211.     return -EIO;
  1212. }
  1213. switch (cmd) {
  1214. case TCSBRK: /* SVID version: non-zero arg --> no break */
  1215. retval = tty_check_change(tty);
  1216. if (retval)
  1217. return retval;
  1218. tty_wait_until_sent(tty, 0);
  1219. if (!arg)
  1220. send_break(info, HZ/4); /* 1/4 second */
  1221. return 0;
  1222. case TCSBRKP: /* support for POSIX tcsendbreak() */
  1223. retval = tty_check_change(tty);
  1224. if (retval)
  1225. return retval;
  1226. tty_wait_until_sent(tty, 0);
  1227. send_break(info, arg ? arg*(HZ/10) : HZ/4);
  1228. return 0;
  1229. case TIOCGSOFTCAR:
  1230. if (put_user(C_CLOCAL(tty) ? 1 : 0,
  1231.      (unsigned long *) arg))
  1232. return -EFAULT;
  1233. return 0;
  1234. case TIOCSSOFTCAR:
  1235. if (get_user(arg, (unsigned long *) arg))
  1236. return -EFAULT;
  1237. tty->termios->c_cflag =
  1238. ((tty->termios->c_cflag & ~CLOCAL) |
  1239.  (arg ? CLOCAL : 0));
  1240. return 0;
  1241. case TIOCMGET:
  1242. return get_modem_info(info, (unsigned int *) arg);
  1243. case TIOCMBIS:
  1244. case TIOCMBIC:
  1245. case TIOCMSET:
  1246. return set_modem_info(info, cmd, (unsigned int *) arg);
  1247. case TIOCGSERIAL:
  1248. return get_serial_info(info,
  1249.        (struct serial_struct *) arg);
  1250. case TIOCSSERIAL:
  1251. return set_serial_info(info,
  1252.        (struct serial_struct *) arg);
  1253. case TIOCSERGETLSR: /* Get line status register */
  1254. return get_lsr_info(info, (unsigned int *) arg);
  1255. case TIOCSERGSTRUCT:
  1256. if (copy_to_user((struct sgi_serial *) arg,
  1257.     info, sizeof(struct sgi_serial)))
  1258. return -EFAULT;
  1259. return 0;
  1260. default:
  1261. return -ENOIOCTLCMD;
  1262. }
  1263. return 0;
  1264. }
  1265. static void rs_set_termios(struct tty_struct *tty, struct termios *old_termios)
  1266. {
  1267. struct sgi_serial *info = (struct sgi_serial *)tty->driver_data;
  1268. if (tty->termios->c_cflag == old_termios->c_cflag)
  1269. return;
  1270. change_speed(info);
  1271. if ((old_termios->c_cflag & CRTSCTS) &&
  1272.     !(tty->termios->c_cflag & CRTSCTS)) {
  1273. tty->hw_stopped = 0;
  1274. rs_start(tty);
  1275. }
  1276. }
  1277. /*
  1278.  * ------------------------------------------------------------
  1279.  * rs_close()
  1280.  * 
  1281.  * This routine is called when the serial port gets closed.  First, we
  1282.  * wait for the last remaining data to be sent.  Then, we unlink its
  1283.  * ZILOG structure from the interrupt chain if necessary, and we free
  1284.  * that IRQ if nothing is left in the chain.
  1285.  * ------------------------------------------------------------
  1286.  */
  1287. static void rs_close(struct tty_struct *tty, struct file * filp)
  1288. {
  1289. struct sgi_serial * info = (struct sgi_serial *)tty->driver_data;
  1290. unsigned long flags;
  1291. if (!info || serial_paranoia_check(info, tty->device, "rs_close"))
  1292. return;
  1293. save_flags(flags); cli();
  1294. if (tty_hung_up_p(filp)) {
  1295. restore_flags(flags);
  1296. return;
  1297. }
  1298. #ifdef SERIAL_DEBUG_OPEN
  1299. printk("rs_close ttys%d, count = %dn", info->line, info->count);
  1300. #endif
  1301. if ((tty->count == 1) && (info->count != 1)) {
  1302. /*
  1303.  * Uh, oh.  tty->count is 1, which means that the tty
  1304.  * structure will be freed.  Info->count should always
  1305.  * be one in these conditions.  If it's greater than
  1306.  * one, we've got real problems, since it means the
  1307.  * serial port won't be shutdown.
  1308.  */
  1309. printk("rs_close: bad serial port count; tty->count is 1, "
  1310.        "info->count is %dn", info->count);
  1311. info->count = 1;
  1312. }
  1313. if (--info->count < 0) {
  1314. printk("rs_close: bad serial port count for ttys%d: %dn",
  1315.        info->line, info->count);
  1316. info->count = 0;
  1317. }
  1318. if (info->count) {
  1319. restore_flags(flags);
  1320. return;
  1321. }
  1322. info->flags |= ZILOG_CLOSING;
  1323. /*
  1324.  * Save the termios structure, since this port may have
  1325.  * separate termios for callout and dialin.
  1326.  */
  1327. if (info->flags & ZILOG_NORMAL_ACTIVE)
  1328. info->normal_termios = *tty->termios;
  1329. if (info->flags & ZILOG_CALLOUT_ACTIVE)
  1330. info->callout_termios = *tty->termios;
  1331. /*
  1332.  * Now we wait for the transmit buffer to clear; and we notify 
  1333.  * the line discipline to only process XON/XOFF characters.
  1334.  */
  1335. tty->closing = 1;
  1336. if (info->closing_wait != ZILOG_CLOSING_WAIT_NONE)
  1337. tty_wait_until_sent(tty, info->closing_wait);
  1338. /*
  1339.  * At this point we stop accepting input.  To do this, we
  1340.  * disable the receive line status interrupts, and tell the
  1341.  * interrupt driver to stop checking the data ready bit in the
  1342.  * line status register.
  1343.  */
  1344. /** if (!info->iscons) ... **/
  1345. info->curregs[3] &= ~RxENABLE;
  1346. info->pendregs[3] = info->curregs[3];
  1347. write_zsreg(info->zs_channel, 3, info->curregs[3]);
  1348. info->curregs[1] &= ~(0x18);
  1349. info->pendregs[1] = info->curregs[1];
  1350. write_zsreg(info->zs_channel, 1, info->curregs[1]);
  1351. ZS_CLEARFIFO(info->zs_channel);
  1352. shutdown(info);
  1353. if (tty->driver.flush_buffer)
  1354. tty->driver.flush_buffer(tty);
  1355. if (tty->ldisc.flush_buffer)
  1356. tty->ldisc.flush_buffer(tty);
  1357. tty->closing = 0;
  1358. info->event = 0;
  1359. info->tty = 0;
  1360. if (tty->ldisc.num != ldiscs[N_TTY].num) {
  1361. if (tty->ldisc.close)
  1362. (tty->ldisc.close)(tty);
  1363. tty->ldisc = ldiscs[N_TTY];
  1364. tty->termios->c_line = N_TTY;
  1365. if (tty->ldisc.open)
  1366. (tty->ldisc.open)(tty);
  1367. }
  1368. if (info->blocked_open) {
  1369. if (info->close_delay) {
  1370. current->state = TASK_INTERRUPTIBLE;
  1371. schedule_timeout(info->close_delay);
  1372. }
  1373. wake_up_interruptible(&info->open_wait);
  1374. }
  1375. info->flags &= ~(ZILOG_NORMAL_ACTIVE|ZILOG_CALLOUT_ACTIVE|
  1376.  ZILOG_CLOSING);
  1377. wake_up_interruptible(&info->close_wait);
  1378. restore_flags(flags);
  1379. }
  1380. /*
  1381.  * rs_hangup() --- called by tty_hangup() when a hangup is signaled.
  1382.  */
  1383. void rs_hangup(struct tty_struct *tty)
  1384. {
  1385. struct sgi_serial * info = (struct sgi_serial *)tty->driver_data;
  1386. if (serial_paranoia_check(info, tty->device, "rs_hangup"))
  1387. return;
  1388. rs_flush_buffer(tty);
  1389. shutdown(info);
  1390. info->event = 0;
  1391. info->count = 0;
  1392. info->flags &= ~(ZILOG_NORMAL_ACTIVE|ZILOG_CALLOUT_ACTIVE);
  1393. info->tty = 0;
  1394. wake_up_interruptible(&info->open_wait);
  1395. }
  1396. /*
  1397.  * ------------------------------------------------------------
  1398.  * rs_open() and friends
  1399.  * ------------------------------------------------------------
  1400.  */
  1401. static int block_til_ready(struct tty_struct *tty, struct file * filp,
  1402.    struct sgi_serial *info)
  1403. {
  1404. DECLARE_WAITQUEUE(wait, current);
  1405. int retval;
  1406. int do_clocal = 0;
  1407. /*
  1408.  * If the device is in the middle of being closed, then block
  1409.  * until it's done, and then try again.
  1410.  */
  1411. if (info->flags & ZILOG_CLOSING) {
  1412. interruptible_sleep_on(&info->close_wait);
  1413. #ifdef SERIAL_DO_RESTART
  1414. if (info->flags & ZILOG_HUP_NOTIFY)
  1415. return -EAGAIN;
  1416. else
  1417. return -ERESTARTSYS;
  1418. #else
  1419. return -EAGAIN;
  1420. #endif
  1421. }
  1422. /*
  1423.  * If this is a callout device, then just make sure the normal
  1424.  * device isn't being used.
  1425.  */
  1426. if (tty->driver.subtype == SERIAL_TYPE_CALLOUT) {
  1427. if (info->flags & ZILOG_NORMAL_ACTIVE)
  1428. return -EBUSY;
  1429. if ((info->flags & ZILOG_CALLOUT_ACTIVE) &&
  1430.     (info->flags & ZILOG_SESSION_LOCKOUT) &&
  1431.     (info->session != current->session))
  1432.     return -EBUSY;
  1433. if ((info->flags & ZILOG_CALLOUT_ACTIVE) &&
  1434.     (info->flags & ZILOG_PGRP_LOCKOUT) &&
  1435.     (info->pgrp != current->pgrp))
  1436.     return -EBUSY;
  1437. info->flags |= ZILOG_CALLOUT_ACTIVE;
  1438. return 0;
  1439. }
  1440. /*
  1441.  * If non-blocking mode is set, or the port is not enabled,
  1442.  * then make the check up front and then exit.
  1443.  */
  1444. if ((filp->f_flags & O_NONBLOCK) ||
  1445.     (tty->flags & (1 << TTY_IO_ERROR))) {
  1446. if (info->flags & ZILOG_CALLOUT_ACTIVE)
  1447. return -EBUSY;
  1448. info->flags |= ZILOG_NORMAL_ACTIVE;
  1449. return 0;
  1450. }
  1451. if (info->flags & ZILOG_CALLOUT_ACTIVE) {
  1452. if (info->normal_termios.c_cflag & CLOCAL)
  1453. do_clocal = 1;
  1454. } else {
  1455. if (tty->termios->c_cflag & CLOCAL)
  1456. do_clocal = 1;
  1457. }
  1458. /*
  1459.  * Block waiting for the carrier detect and the line to become
  1460.  * free (i.e., not in use by the callout).  While we are in
  1461.  * this loop, info->count is dropped by one, so that
  1462.  * rs_close() knows when to free things.  We restore it upon
  1463.  * exit, either normal or abnormal.
  1464.  */
  1465. retval = 0;
  1466. add_wait_queue(&info->open_wait, &wait);
  1467. #ifdef SERIAL_DEBUG_OPEN
  1468. printk("block_til_ready before block: ttys%d, count = %dn",
  1469.        info->line, info->count);
  1470. #endif
  1471. info->count--;
  1472. info->blocked_open++;
  1473. while (1) {
  1474. cli();
  1475. if (!(info->flags & ZILOG_CALLOUT_ACTIVE))
  1476. zs_rtsdtr(info, 1);
  1477. sti();
  1478. set_current_state(TASK_INTERRUPTIBLE);
  1479. if (tty_hung_up_p(filp) ||
  1480.     !(info->flags & ZILOG_INITIALIZED)) {
  1481. #ifdef SERIAL_DO_RESTART
  1482. if (info->flags & ZILOG_HUP_NOTIFY)
  1483. retval = -EAGAIN;
  1484. else
  1485. retval = -ERESTARTSYS;
  1486. #else
  1487. retval = -EAGAIN;
  1488. #endif
  1489. break;
  1490. }
  1491. if (!(info->flags & ZILOG_CALLOUT_ACTIVE) &&
  1492.     !(info->flags & ZILOG_CLOSING) && do_clocal)
  1493. break;
  1494. if (signal_pending(current)) {
  1495. retval = -ERESTARTSYS;
  1496. break;
  1497. }
  1498. #ifdef SERIAL_DEBUG_OPEN
  1499. printk("block_til_ready blocking: ttys%d, count = %dn",
  1500.        info->line, info->count);
  1501. #endif
  1502. schedule();
  1503. }
  1504. current->state = TASK_RUNNING;
  1505. remove_wait_queue(&info->open_wait, &wait);
  1506. if (!tty_hung_up_p(filp))
  1507. info->count++;
  1508. info->blocked_open--;
  1509. #ifdef SERIAL_DEBUG_OPEN
  1510. printk("block_til_ready after blocking: ttys%d, count = %dn",
  1511.        info->line, info->count);
  1512. #endif
  1513. if (retval)
  1514. return retval;
  1515. info->flags |= ZILOG_NORMAL_ACTIVE;
  1516. return 0;
  1517. }
  1518. /*
  1519.  * This routine is called whenever a serial port is opened.  It
  1520.  * enables interrupts for a serial port, linking in its ZILOG structure into
  1521.  * the IRQ chain.   It also performs the serial-specific
  1522.  * initialization for the tty structure.
  1523.  */
  1524. int rs_open(struct tty_struct *tty, struct file * filp)
  1525. {
  1526. struct sgi_serial *info;
  1527. int  retval, line;
  1528. line = MINOR(tty->device) - tty->driver.minor_start;
  1529. /* The zilog lines for the mouse/keyboard must be
  1530.  * opened using their respective drivers.
  1531.  */
  1532. if ((line < 0) || (line >= NUM_CHANNELS))
  1533. return -ENODEV;
  1534. info = zs_soft + line;
  1535. /* Is the kgdb running over this line? */
  1536. if (info->kgdb_channel)
  1537. return -ENODEV;
  1538. if (serial_paranoia_check(info, tty->device, "rs_open"))
  1539. return -ENODEV;
  1540. #ifdef SERIAL_DEBUG_OPEN
  1541. printk("rs_open %s%d, count = %dn", tty->driver.name, info->line,
  1542.        info->count);
  1543. #endif
  1544. info->count++;
  1545. tty->driver_data = info;
  1546. info->tty = tty;
  1547. /*
  1548.  * Start up serial port
  1549.  */
  1550. retval = startup(info);
  1551. if (retval)
  1552. return retval;
  1553. retval = block_til_ready(tty, filp, info);
  1554. if (retval) {
  1555. #ifdef SERIAL_DEBUG_OPEN
  1556. printk("rs_open returning after block_til_ready with %dn",
  1557.        retval);
  1558. #endif
  1559. return retval;
  1560. }
  1561. if ((info->count == 1) && (info->flags & ZILOG_SPLIT_TERMIOS)) {
  1562. if (tty->driver.subtype == SERIAL_TYPE_NORMAL)
  1563. *tty->termios = info->normal_termios;
  1564. else 
  1565. *tty->termios = info->callout_termios;
  1566. change_speed(info);
  1567. }
  1568. /* If this is the serial console change the speed to 
  1569.  * the right value
  1570.  */
  1571. if (info->is_cons) {
  1572. info->tty->termios->c_cflag = sgisercon->cflag;
  1573. change_speed(info);
  1574. }
  1575. info->session = current->session;
  1576. info->pgrp = current->pgrp;
  1577. #ifdef SERIAL_DEBUG_OPEN
  1578. printk("rs_open ttys%d successful...n", info->line);
  1579. #endif
  1580. return 0;
  1581. }
  1582. /* Finally, routines used to initialize the serial driver. */
  1583. static void show_serial_version(void)
  1584. {
  1585. printk("SGI Zilog8530 serial driver version 1.00n");
  1586. }
  1587. /* Return layout for the requested zs chip number. */
  1588. static inline struct sgi_zslayout *get_zs(int chip)
  1589. {
  1590. extern struct hpc3_miscregs *hpc3mregs;
  1591. if (chip > 0)
  1592. panic("Wheee, bogus zs chip number requested.");
  1593. return (struct sgi_zslayout *) (&hpc3mregs->ser1cmd);
  1594. }
  1595. static inline void
  1596. rs_cons_check(struct sgi_serial *ss, int channel)
  1597. {
  1598. int i, o, io;
  1599. static int msg_printed = 0;
  1600. i = o = io = 0;
  1601. /* Is this one of the serial console lines? */
  1602. if((zs_cons_chanout != channel) &&
  1603.    (zs_cons_chanin != channel))
  1604. return;
  1605. zs_conschan = ss->zs_channel;
  1606. zs_consinfo = ss;
  1607. /* If this is console input, we handle the break received
  1608.  * status interrupt on this line to mean prom_halt().
  1609.  */
  1610. if(zs_cons_chanin == channel) {
  1611. ss->break_abort = 1;
  1612. i = 1;
  1613. }
  1614. if(o && i)
  1615. io = 1;
  1616. /* Set flag variable for this port so that it cannot be
  1617.  * opened for other uses by accident.
  1618.  */
  1619. ss->is_cons = 1;
  1620. if(io) {
  1621. if (!msg_printed) {
  1622. printk("zs%d: console I/On", ((channel>>1)&1));
  1623. msg_printed = 1;
  1624. }
  1625. } else {
  1626. printk("zs%d: console %sn", ((channel>>1)&1),
  1627.        (i==1 ? "input" : (o==1 ? "output" : "WEIRD")));
  1628. }
  1629. }
  1630. volatile int test_done;
  1631. /* rs_init inits the driver */
  1632. int rs_init(void)
  1633. {
  1634. int chip, channel, i, flags;
  1635. struct sgi_serial *info;
  1636. /* Setup base handler, and timer table. */
  1637. init_bh(SERIAL_BH, do_serial_bh);
  1638. show_serial_version();
  1639. /* Initialize the tty_driver structure */
  1640. /* SGI: Not all of this is exactly right for us. */
  1641. memset(&serial_driver, 0, sizeof(struct tty_driver));
  1642. serial_driver.magic = TTY_DRIVER_MAGIC;
  1643. serial_driver.name = "ttyS";
  1644. serial_driver.major = TTY_MAJOR;
  1645. serial_driver.minor_start = 64;
  1646. serial_driver.num = NUM_CHANNELS;
  1647. serial_driver.type = TTY_DRIVER_TYPE_SERIAL;
  1648. serial_driver.subtype = SERIAL_TYPE_NORMAL;
  1649. serial_driver.init_termios = tty_std_termios;
  1650. serial_driver.init_termios.c_cflag =
  1651. B9600 | CS8 | CREAD | HUPCL | CLOCAL;
  1652. serial_driver.flags = TTY_DRIVER_REAL_RAW;
  1653. serial_driver.refcount = &serial_refcount;
  1654. serial_driver.table = serial_table;
  1655. serial_driver.termios = serial_termios;
  1656. serial_driver.termios_locked = serial_termios_locked;
  1657. serial_driver.open = rs_open;
  1658. serial_driver.close = rs_close;
  1659. serial_driver.write = rs_write;
  1660. serial_driver.flush_chars = rs_flush_chars;
  1661. serial_driver.write_room = rs_write_room;
  1662. serial_driver.chars_in_buffer = rs_chars_in_buffer;
  1663. serial_driver.flush_buffer = rs_flush_buffer;
  1664. serial_driver.ioctl = rs_ioctl;
  1665. serial_driver.throttle = rs_throttle;
  1666. serial_driver.unthrottle = rs_unthrottle;
  1667. serial_driver.set_termios = rs_set_termios;
  1668. serial_driver.stop = rs_stop;
  1669. serial_driver.start = rs_start;
  1670. serial_driver.hangup = rs_hangup;
  1671. /*
  1672.  * The callout device is just like normal device except for
  1673.  * major number and the subtype code.
  1674.  */
  1675. callout_driver = serial_driver;
  1676. callout_driver.name = "cua";
  1677. callout_driver.major = TTYAUX_MAJOR;
  1678. callout_driver.subtype = SERIAL_TYPE_CALLOUT;
  1679. if (tty_register_driver(&serial_driver))
  1680. panic("Couldn't register serial drivern");
  1681. if (tty_register_driver(&callout_driver))
  1682. panic("Couldn't register callout drivern");
  1683. save_flags(flags); cli();
  1684. /* Set up our interrupt linked list */
  1685. zs_chain = &zs_soft[0];
  1686. zs_soft[0].zs_next = &zs_soft[1];
  1687. zs_soft[1].zs_next = 0;
  1688. for(chip = 0; chip < NUM_SERIAL; chip++) {
  1689. /* If we are doing kgdb over one of the channels on
  1690.  * chip zero, kgdb_channel will be set to 1 by the
  1691.  * rs_kgdb_hook() routine below.
  1692.  */
  1693. if(!zs_chips[chip]) {
  1694. zs_chips[chip] = get_zs(chip);
  1695. /* Two channels per chip */
  1696. zs_channels[(chip*2)] = &zs_chips[chip]->channelB;
  1697. zs_channels[(chip*2)+1] = &zs_chips[chip]->channelA;
  1698. zs_soft[(chip*2)].kgdb_channel = 0;
  1699. zs_soft[(chip*2)+1].kgdb_channel = 0;
  1700. }
  1701. /* First, set up channel A on this chip. */
  1702. channel = chip * 2;
  1703. zs_soft[channel].zs_channel = zs_channels[channel];
  1704. zs_soft[channel].change_needed = 0;
  1705. zs_soft[channel].clk_divisor = 16;
  1706. zs_soft[channel].zs_baud = get_zsbaud(&zs_soft[channel]);
  1707. zs_soft[channel].cons_mouse = 0;
  1708. /* If not keyboard/mouse and is console serial
  1709.  * line, then enable receiver interrupts.
  1710.  */
  1711. if(zs_soft[channel].is_cons) {
  1712. write_zsreg(zs_soft[channel].zs_channel, R1,
  1713.     (EXT_INT_ENAB | INT_ALL_Rx));
  1714. write_zsreg(zs_soft[channel].zs_channel, R9, (NV | MIE));
  1715. write_zsreg(zs_soft[channel].zs_channel, R10, (NRZ));
  1716. write_zsreg(zs_soft[channel].zs_channel, R3, (Rx8|RxENABLE));
  1717. write_zsreg(zs_soft[channel].zs_channel, R5, (Tx8 | TxENAB));
  1718. }
  1719. /* If this is the kgdb line, enable interrupts because we
  1720.  * now want to receive the 'control-c' character from the
  1721.  * client attached to us asynchronously.
  1722.  */
  1723. if(zs_soft[channel].kgdb_channel)
  1724. kgdb_chaninit(&zs_soft[channel], 1,
  1725.       zs_soft[channel].zs_baud);
  1726. /* Now, channel B */
  1727. channel++;
  1728. zs_soft[channel].zs_channel = zs_channels[channel];
  1729. zs_soft[channel].change_needed = 0;
  1730. zs_soft[channel].clk_divisor = 16;
  1731. zs_soft[channel].zs_baud = get_zsbaud(&zs_soft[channel]);
  1732. zs_soft[channel].cons_keyb = 0;
  1733. /* If console serial line, then enable receiver interrupts. */
  1734. if(zs_soft[channel].is_cons) {
  1735. write_zsreg(zs_soft[channel].zs_channel, R1,
  1736.     (EXT_INT_ENAB | INT_ALL_Rx));
  1737. write_zsreg(zs_soft[channel].zs_channel, R9,
  1738.     (NV | MIE));
  1739. write_zsreg(zs_soft[channel].zs_channel, R10,
  1740.     (NRZ));
  1741. write_zsreg(zs_soft[channel].zs_channel, R3,
  1742.     (Rx8|RxENABLE));
  1743. write_zsreg(zs_soft[channel].zs_channel, R5,
  1744.     (Tx8 | TxENAB | RTS | DTR));
  1745. }
  1746. }
  1747. for(info=zs_chain, i=0; info; info = info->zs_next, i++)
  1748. {
  1749. info->magic = SERIAL_MAGIC;
  1750. info->port = (int) info->zs_channel;
  1751. info->line = i;
  1752. info->tty = 0;
  1753. info->irq = zilog_irq;
  1754. info->custom_divisor = 16;
  1755. info->close_delay = 50;
  1756. info->closing_wait = 3000;
  1757. info->x_char = 0;
  1758. info->event = 0;
  1759. info->count = 0;
  1760. info->blocked_open = 0;
  1761. info->tqueue.routine = do_softint;
  1762. info->tqueue.data = info;
  1763. info->tqueue_hangup.routine = do_serial_hangup;
  1764. info->tqueue_hangup.data = info;
  1765. info->callout_termios =callout_driver.init_termios;
  1766. info->normal_termios = serial_driver.init_termios;
  1767. init_waitqueue_head(&info->open_wait);
  1768. init_waitqueue_head(&info->close_wait);
  1769. printk("tty%02d at 0x%04x (irq = %d)", info->line, 
  1770.        info->port, info->irq);
  1771. printk(" is a Zilog8530n");
  1772. }
  1773. if (request_irq(zilog_irq, rs_interrupt, (SA_INTERRUPT),
  1774. "Zilog8530", zs_chain))
  1775. panic("Unable to attach zs intrn");
  1776. restore_flags(flags);
  1777. return 0;
  1778. }
  1779. /*
  1780.  * register_serial and unregister_serial allows for serial ports to be
  1781.  * configured at run-time, to support PCMCIA modems.
  1782.  */
  1783. /* SGI: Unused at this time, just here to make things link. */
  1784. int register_serial(struct serial_struct *req)
  1785. {
  1786. return -1;
  1787. }
  1788. void unregister_serial(int line)
  1789. {
  1790. return;
  1791. }
  1792. /* Hooks for running a serial console.  con_init() calls this if the
  1793.  * console is being run over one of the ttya/ttyb serial ports.
  1794.  * 'chip' should be zero, as chip 1 drives the mouse/keyboard.
  1795.  * 'channel' is decoded as 0=TTYA 1=TTYB, note that the channels
  1796.  * are addressed backwards, channel B is first, then channel A.
  1797.  */
  1798. void
  1799. rs_cons_hook(int chip, int out, int line)
  1800. {
  1801. int channel;
  1802. if(chip)
  1803. panic("rs_cons_hook called with chip not zero");
  1804. if(line != 0 && line != 1)
  1805. panic("rs_cons_hook called with line not ttya or ttyb");
  1806. channel = line;
  1807. if(!zs_chips[chip]) {
  1808. zs_chips[chip] = get_zs(chip);
  1809. /* Two channels per chip */
  1810. zs_channels[(chip*2)] = &zs_chips[chip]->channelB;
  1811. zs_channels[(chip*2)+1] = &zs_chips[chip]->channelA;
  1812. }
  1813. zs_soft[channel].zs_channel = zs_channels[channel];
  1814. zs_soft[channel].change_needed = 0;
  1815. zs_soft[channel].clk_divisor = 16;
  1816. zs_soft[channel].zs_baud = get_zsbaud(&zs_soft[channel]);
  1817. if(out) 
  1818. zs_cons_chanout = ((chip * 2) + channel);
  1819. else 
  1820. zs_cons_chanin = ((chip * 2) + channel);
  1821. rs_cons_check(&zs_soft[channel], channel);
  1822. }
  1823. /* This is called at boot time to prime the kgdb serial debugging
  1824.  * serial line.  The 'tty_num' argument is 0 for /dev/ttyd2 and 1 for
  1825.  * /dev/ttyd1 (yes they are backwards on purpose) which is determined
  1826.  * in setup_arch() from the boot command line flags.
  1827.  */
  1828. void
  1829. rs_kgdb_hook(int tty_num)
  1830. {
  1831. int chip = 0;
  1832. if(!zs_chips[chip]) {
  1833. zs_chips[chip] = get_zs(chip);
  1834. /* Two channels per chip */
  1835. zs_channels[(chip*2)] = &zs_chips[chip]->channelA;
  1836. zs_channels[(chip*2)+1] = &zs_chips[chip]->channelB;
  1837. }
  1838. zs_soft[tty_num].zs_channel = zs_channels[tty_num];
  1839. zs_kgdbchan = zs_soft[tty_num].zs_channel;
  1840. zs_soft[tty_num].change_needed = 0;
  1841. zs_soft[tty_num].clk_divisor = 16;
  1842. zs_soft[tty_num].zs_baud = get_zsbaud(&zs_soft[tty_num]);
  1843. zs_soft[tty_num].kgdb_channel = 1;     /* This runs kgdb */
  1844. zs_soft[tty_num ^ 1].kgdb_channel = 0; /* This does not */
  1845. /* Turn on transmitter/receiver at 8-bits/char */
  1846. kgdb_chaninit(&zs_soft[tty_num], 0, 9600);
  1847. ZS_CLEARERR(zs_kgdbchan);
  1848. udelay(5);
  1849. ZS_CLEARFIFO(zs_kgdbchan);
  1850. }
  1851. static void zs_console_write(struct console *co, const char *str,
  1852.                              unsigned int count)
  1853. {
  1854. while(count--) {
  1855. if(*str == 'n')
  1856. zs_cons_put_char('r');
  1857. zs_cons_put_char(*str++);
  1858. }
  1859. /* Comment this if you want to have a strict interrupt-driven output */
  1860. rs_fair_output();
  1861. }
  1862. static int zs_console_wait_key(struct console *con)
  1863. {
  1864. sleep_on(&keypress_wait);
  1865. return 0;
  1866. }
  1867. static kdev_t zs_console_device(struct console *con)
  1868. {
  1869. return MKDEV(TTY_MAJOR, 64 + con->index);
  1870. }
  1871. static int __init zs_console_setup(struct console *con, char *options)
  1872. {
  1873. struct sgi_serial *info;
  1874. int baud;
  1875. int bits = 8;
  1876. int parity = 'n';
  1877. int cflag = CREAD | HUPCL | CLOCAL;
  1878. char *s, *dbaud;
  1879. int     i, brg;
  1880.     
  1881. if (options) {
  1882. baud = simple_strtoul(options, NULL, 10);
  1883. s = options;
  1884. while(*s >= '0' && *s <= '9')
  1885. s++;
  1886. if (*s) parity = *s++;
  1887. if (*s) bits   = *s - '0';
  1888. }
  1889. else {
  1890. /* If the user doesn't set console=... try to read the
  1891.  * PROM variable - if this fails use 9600 baud and
  1892.  * inform the user about the problem
  1893.  */
  1894. dbaud = ArcGetEnvironmentVariable("dbaud");
  1895. if(dbaud) baud = simple_strtoul(dbaud, NULL, 10);
  1896. else {
  1897. /* Use prom_printf() to make sure that the user
  1898.  * is getting anything ...
  1899.  */
  1900. prom_printf("No dbaud set in PROM ?!? Using 9600.n");
  1901. baud = 9600;
  1902. }
  1903. }
  1904. /*
  1905.  * Now construct a cflag setting.
  1906.  */
  1907. switch(baud) {
  1908. case 1200:
  1909. cflag |= B1200;
  1910. break;
  1911. case 2400:
  1912. cflag |= B2400;
  1913. break;
  1914. case 4800:
  1915. cflag |= B4800;
  1916. break;
  1917. case 19200:
  1918. cflag |= B19200;
  1919. break;
  1920. case 38400:
  1921. cflag |= B38400;
  1922. break;
  1923. case 57600:
  1924. cflag |= B57600;
  1925. break;
  1926. case 115200:
  1927. cflag |= B115200;
  1928. break;
  1929. case 9600:
  1930. default:
  1931. cflag |= B9600;
  1932. break;
  1933. }
  1934. switch(bits) {
  1935. case 7:
  1936. cflag |= CS7;
  1937. break;
  1938. default:
  1939. case 8:
  1940. cflag |= CS8;
  1941. break;
  1942. }
  1943. switch(parity) {
  1944. case 'o': case 'O':
  1945. cflag |= PARODD;
  1946. break;
  1947. case 'e': case 'E':
  1948. cflag |= PARENB;
  1949. break;
  1950. }
  1951. con->cflag = cflag;
  1952.         rs_cons_hook(0, 0, con->index);
  1953. info = zs_soft + con->index;
  1954. info->is_cons = 1;
  1955.     
  1956. printk("Console: ttyS%d (Zilog8530), %d baudn", 
  1957. info->line, baud);
  1958. i = con->cflag & CBAUD;
  1959. if (con->cflag & CBAUDEX) {
  1960. i &= ~CBAUDEX;
  1961. con->cflag &= ~CBAUDEX;
  1962. }
  1963. info->zs_baud = baud;
  1964. switch (con->cflag & CSIZE) {
  1965. case CS5:
  1966. zscons_regs[3] = Rx5 | RxENABLE;
  1967. zscons_regs[5] = Tx5 | TxENAB;
  1968. break;
  1969. case CS6:
  1970. zscons_regs[3] = Rx6 | RxENABLE;
  1971. zscons_regs[5] = Tx6 | TxENAB;
  1972. break;
  1973. case CS7:
  1974. zscons_regs[3] = Rx7 | RxENABLE;
  1975. zscons_regs[5] = Tx7 | TxENAB;
  1976. break;
  1977. default:
  1978. case CS8:
  1979. zscons_regs[3] = Rx8 | RxENABLE;
  1980. zscons_regs[5] = Tx8 | TxENAB;
  1981. break;
  1982. }
  1983. zscons_regs[5] |= DTR;
  1984. if (con->cflag & PARENB)
  1985. zscons_regs[4] |= PAR_ENA;
  1986. if (!(con->cflag & PARODD))
  1987. zscons_regs[4] |= PAR_EVEN;
  1988. if (con->cflag & CSTOPB)
  1989. zscons_regs[4] |= SB2;
  1990. else
  1991. zscons_regs[4] |= SB1;
  1992. sgisercon = con;
  1993. brg = BPS_TO_BRG(baud, ZS_CLOCK / info->clk_divisor);
  1994. zscons_regs[12] = brg & 0xff;
  1995. zscons_regs[13] = (brg >> 8) & 0xff;
  1996. memcpy(info->curregs, zscons_regs, sizeof(zscons_regs));
  1997. memcpy(info->pendregs, zscons_regs, sizeof(zscons_regs));    
  1998. load_zsregs(info->zs_channel, zscons_regs);
  1999. ZS_CLEARERR(info->zs_channel);
  2000. ZS_CLEARFIFO(info->zs_channel);
  2001. return 0;
  2002. }
  2003. static struct console sgi_console_driver = {
  2004. name: "ttyS",
  2005. write: zs_console_write,
  2006. device: zs_console_device,
  2007. wait_key: zs_console_wait_key,
  2008. setup: zs_console_setup,
  2009. flags: CON_PRINTBUFFER,
  2010. index: -1,
  2011. };
  2012. /*
  2013.  * Register console.
  2014.  */
  2015. void __init sgi_serial_console_init(void)
  2016. {
  2017. register_console(&sgi_console_driver);
  2018. }
  2019. __initcall(rs_init);