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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * macserial.c: Serial port driver for Power Macintoshes.
  3.  *
  4.  * Derived from drivers/sbus/char/sunserial.c by Paul Mackerras.
  5.  *
  6.  * Copyright (C) 1996 Paul Mackerras (Paul.Mackerras@cs.anu.edu.au)
  7.  * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
  8.  *
  9.  * Receive DMA code by Takashi Oe <toe@unlserve.unl.edu>.
  10.  *
  11.  * $Id: macserial.c,v 1.24.2.4 1999/10/19 04:36:42 paulus Exp $
  12.  */
  13. #include <linux/config.h>
  14. #include <linux/errno.h>
  15. #include <linux/module.h>
  16. #include <linux/signal.h>
  17. #include <linux/sched.h>
  18. #include <linux/timer.h>
  19. #include <linux/interrupt.h>
  20. #include <linux/tty.h>
  21. #include <linux/tty_flip.h>
  22. #include <linux/major.h>
  23. #include <linux/string.h>
  24. #include <linux/fcntl.h>
  25. #include <linux/mm.h>
  26. #include <linux/kernel.h>
  27. #include <linux/delay.h>
  28. #include <linux/init.h>
  29. #ifdef CONFIG_SERIAL_CONSOLE
  30. #include <linux/console.h>
  31. #endif
  32. #include <linux/slab.h>
  33. #include <asm/sections.h>
  34. #include <asm/io.h>
  35. #include <asm/pgtable.h>
  36. #include <asm/irq.h>
  37. #include <asm/prom.h>
  38. #include <asm/system.h>
  39. #include <asm/segment.h>
  40. #include <asm/bitops.h>
  41. #include <asm/machdep.h>
  42. #include <asm/pmac_feature.h>
  43. #include <linux/adb.h>
  44. #include <linux/pmu.h>
  45. #ifdef CONFIG_KGDB
  46. #include <asm/kgdb.h>
  47. #endif
  48. #include <asm/dbdma.h>
  49. #include "macserial.h"
  50. #ifdef CONFIG_PMAC_PBOOK
  51. static int serial_notify_sleep(struct pmu_sleep_notifier *self, int when);
  52. static struct pmu_sleep_notifier serial_sleep_notifier = {
  53. serial_notify_sleep,
  54. SLEEP_LEVEL_MISC,
  55. };
  56. #endif
  57. #define SUPPORT_SERIAL_DMA
  58. #define MACSERIAL_VERSION "2.0"
  59. /*
  60.  * It would be nice to dynamically allocate everything that
  61.  * depends on NUM_SERIAL, so we could support any number of
  62.  * Z8530s, but for now...
  63.  */
  64. #define NUM_SERIAL 2 /* Max number of ZS chips supported */
  65. #define NUM_CHANNELS (NUM_SERIAL * 2) /* 2 channels per chip */
  66. /* On PowerMacs, the hardware takes care of the SCC recovery time,
  67.    but we need the eieio to make sure that the accesses occur
  68.    in the order we want. */
  69. #define RECOVERY_DELAY eieio()
  70. struct mac_zschannel zs_channels[NUM_CHANNELS];
  71. struct mac_serial zs_soft[NUM_CHANNELS];
  72. int zs_channels_found;
  73. struct mac_serial *zs_chain; /* list of all channels */
  74. struct tty_struct zs_ttys[NUM_CHANNELS];
  75. static int is_powerbook;
  76. #ifdef CONFIG_SERIAL_CONSOLE
  77. static struct console sercons;
  78. #endif
  79. #ifdef CONFIG_KGDB
  80. struct mac_zschannel *zs_kgdbchan;
  81. static unsigned char scc_inittab[] = {
  82. 9,  0x80, /* reset A side (CHRA) */
  83. 13, 0, /* set baud rate divisor */
  84. 12, 1,
  85. 14, 1, /* baud rate gen enable, src=rtxc (BRENABL) */
  86. 11, 0x50, /* clocks = br gen (RCBR | TCBR) */
  87. 5,  0x6a, /* tx 8 bits, assert RTS (Tx8 | TxENAB | RTS) */
  88. 4,  0x44, /* x16 clock, 1 stop (SB1 | X16CLK)*/
  89. 3,  0xc1, /* rx enable, 8 bits (RxENABLE | Rx8)*/
  90. };
  91. #endif
  92. #define ZS_CLOCK         3686400  /* Z8530 RTxC input clock rate */
  93. static DECLARE_TASK_QUEUE(tq_serial);
  94. static struct tty_driver serial_driver, callout_driver;
  95. static int serial_refcount;
  96. /* serial subtype definitions */
  97. #define SERIAL_TYPE_NORMAL 1
  98. #define SERIAL_TYPE_CALLOUT 2
  99. /* number of characters left in xmit buffer before we ask for more */
  100. #define WAKEUP_CHARS 256
  101. /*
  102.  * Debugging.
  103.  */
  104. #undef SERIAL_DEBUG_INTR
  105. #undef SERIAL_DEBUG_OPEN
  106. #undef SERIAL_DEBUG_FLOW
  107. #undef SERIAL_DEBUG_POWER
  108. #undef SERIAL_DEBUG_THROTTLE
  109. #undef SERIAL_DEBUG_STOP
  110. #undef SERIAL_DEBUG_BAUDS
  111. #define RS_STROBE_TIME 10
  112. #define RS_ISR_PASS_LIMIT 256
  113. #define _INLINE_ inline
  114. #ifdef SERIAL_DEBUG_OPEN
  115. #define OPNDBG(fmt, arg...) printk(KERN_DEBUG fmt , ## arg)
  116. #else
  117. #define OPNDBG(fmt, arg...) do { } while (0)
  118. #endif
  119. #ifdef SERIAL_DEBUG_POWER
  120. #define PWRDBG(fmt, arg...) printk(KERN_DEBUG fmt , ## arg)
  121. #else
  122. #define PWRDBG(fmt, arg...) do { } while (0)
  123. #endif
  124. #ifdef SERIAL_DEBUG_BAUDS
  125. #define BAUDBG(fmt, arg...) printk(fmt , ## arg)
  126. #else
  127. #define BAUDBG(fmt, arg...) do { } while (0)
  128. #endif
  129. static void probe_sccs(void);
  130. static void change_speed(struct mac_serial *info, struct termios *old);
  131. static void rs_wait_until_sent(struct tty_struct *tty, int timeout);
  132. static int set_scc_power(struct mac_serial * info, int state);
  133. static int setup_scc(struct mac_serial * info);
  134. static void dbdma_reset(volatile struct dbdma_regs *dma);
  135. static void dbdma_flush(volatile struct dbdma_regs *dma);
  136. static void rs_txdma_irq(int irq, void *dev_id, struct pt_regs *regs);
  137. static void rs_rxdma_irq(int irq, void *dev_id, struct pt_regs *regs);
  138. static void dma_init(struct mac_serial * info);
  139. static void rxdma_start(struct mac_serial * info, int current);
  140. static void rxdma_to_tty(struct mac_serial * info);
  141. static struct tty_struct *serial_table[NUM_CHANNELS];
  142. static struct termios *serial_termios[NUM_CHANNELS];
  143. static struct termios *serial_termios_locked[NUM_CHANNELS];
  144. #ifndef MIN
  145. #define MIN(a,b) ((a) < (b) ? (a) : (b))
  146. #endif
  147. /*
  148.  * tmp_buf is used as a temporary buffer by serial_write.  We need to
  149.  * lock it in case the copy_from_user blocks while swapping in a page,
  150.  * and some other program tries to do a serial write at the same time.
  151.  * Since the lock will only come under contention when the system is
  152.  * swapping and available memory is low, it makes sense to share one
  153.  * buffer across all the serial ports, since it significantly saves
  154.  * memory if large numbers of serial ports are open.
  155.  */
  156. static unsigned char *tmp_buf;
  157. static DECLARE_MUTEX(tmp_buf_sem);
  158. static inline int __pmac
  159. serial_paranoia_check(struct mac_serial *info,
  160.       dev_t device, const char *routine)
  161. {
  162. #ifdef SERIAL_PARANOIA_CHECK
  163. static const char badmagic[] = KERN_WARNING
  164. "Warning: bad magic number for serial struct (%d, %d) in %sn";
  165. static const char badinfo[] = KERN_WARNING
  166. "Warning: null mac_serial for (%d, %d) in %sn";
  167. if (!info) {
  168. printk(badinfo, MAJOR(device), MINOR(device), routine);
  169. return 1;
  170. }
  171. if (info->magic != SERIAL_MAGIC) {
  172. printk(badmagic, MAJOR(device), MINOR(device), routine);
  173. return 1;
  174. }
  175. #endif
  176. return 0;
  177. }
  178. /* 
  179.  * Reading and writing Z8530 registers.
  180.  */
  181. static inline unsigned char __pmac read_zsreg(struct mac_zschannel *channel,
  182.       unsigned char reg)
  183. {
  184. unsigned char retval;
  185. unsigned long flags;
  186. /*
  187.  * We have to make this atomic.
  188.  */
  189. spin_lock_irqsave(&channel->lock, flags);
  190. if (reg != 0) {
  191. *channel->control = reg;
  192. RECOVERY_DELAY;
  193. }
  194. retval = *channel->control;
  195. RECOVERY_DELAY;
  196. spin_unlock_irqrestore(&channel->lock, flags);
  197. return retval;
  198. }
  199. static inline void __pmac write_zsreg(struct mac_zschannel *channel,
  200.       unsigned char reg, unsigned char value)
  201. {
  202. unsigned long flags;
  203. spin_lock_irqsave(&channel->lock, flags);
  204. if (reg != 0) {
  205. *channel->control = reg;
  206. RECOVERY_DELAY;
  207. }
  208. *channel->control = value;
  209. RECOVERY_DELAY;
  210. spin_unlock_irqrestore(&channel->lock, flags);
  211. return;
  212. }
  213. static inline unsigned char __pmac read_zsdata(struct mac_zschannel *channel)
  214. {
  215. unsigned char retval;
  216. retval = *channel->data;
  217. RECOVERY_DELAY;
  218. return retval;
  219. }
  220. static inline void write_zsdata(struct mac_zschannel *channel,
  221. unsigned char value)
  222. {
  223. *channel->data = value;
  224. RECOVERY_DELAY;
  225. return;
  226. }
  227. static inline void load_zsregs(struct mac_zschannel *channel,
  228.        unsigned char *regs)
  229. {
  230. ZS_CLEARERR(channel);
  231. ZS_CLEARFIFO(channel);
  232. /* Load 'em up */
  233. write_zsreg(channel, R4, regs[R4]);
  234. write_zsreg(channel, R10, regs[R10]);
  235. write_zsreg(channel, R3, regs[R3] & ~RxENABLE);
  236. write_zsreg(channel, R5, regs[R5] & ~TxENAB);
  237. write_zsreg(channel, R1, regs[R1]);
  238. write_zsreg(channel, R9, regs[R9]);
  239. write_zsreg(channel, R11, regs[R11]);
  240. write_zsreg(channel, R12, regs[R12]);
  241. write_zsreg(channel, R13, regs[R13]);
  242. write_zsreg(channel, R14, regs[R14]);
  243. write_zsreg(channel, R15, regs[R15]);
  244. write_zsreg(channel, R3, regs[R3]);
  245. write_zsreg(channel, R5, regs[R5]);
  246. return;
  247. }
  248. /* Sets or clears DTR/RTS on the requested line */
  249. static inline void zs_rtsdtr(struct mac_serial *ss, int set)
  250. {
  251. if (set)
  252. ss->curregs[5] |= (RTS | DTR);
  253. else
  254. ss->curregs[5] &= ~(RTS | DTR);
  255. write_zsreg(ss->zs_channel, 5, ss->curregs[5]);
  256. return;
  257. }
  258. /* Utility routines for the Zilog */
  259. static inline int get_zsbaud(struct mac_serial *ss)
  260. {
  261. struct mac_zschannel *channel = ss->zs_channel;
  262. int brg;
  263. if ((ss->curregs[R11] & TCBR) == 0) {
  264. /* higher rates don't use the baud rate generator */
  265. return (ss->curregs[R4] & X32CLK)? ZS_CLOCK/32: ZS_CLOCK/16;
  266. }
  267. /* The baud rate is split up between two 8-bit registers in
  268.  * what is termed 'BRG time constant' format in my docs for
  269.  * the chip, it is a function of the clk rate the chip is
  270.  * receiving which happens to be constant.
  271.  */
  272. brg = (read_zsreg(channel, 13) << 8);
  273. brg |= read_zsreg(channel, 12);
  274. return BRG_TO_BPS(brg, (ZS_CLOCK/(ss->clk_divisor)));
  275. }
  276. /* On receive, this clears errors and the receiver interrupts */
  277. static inline void rs_recv_clear(struct mac_zschannel *zsc)
  278. {
  279. write_zsreg(zsc, 0, ERR_RES);
  280. write_zsreg(zsc, 0, RES_H_IUS); /* XXX this is unnecessary */
  281. }
  282. /*
  283.  * Reset a Descriptor-Based DMA channel.
  284.  */
  285. static void dbdma_reset(volatile struct dbdma_regs *dma)
  286. {
  287. int i;
  288. out_le32(&dma->control, (WAKE|FLUSH|PAUSE|RUN) << 16);
  289. /*
  290.  * Yes this looks peculiar, but apparently it needs to be this
  291.  * way on some machines.  (We need to make sure the DBDMA
  292.  * engine has actually got the write above and responded
  293.  * to it. - paulus)
  294.  */
  295. for (i = 200; i > 0; --i)
  296. if (ld_le32(&dma->status) & RUN)
  297. udelay(1);
  298. }
  299. /*
  300.  * Tells a DBDMA channel to stop and write any buffered data
  301.  * it might have to memory.
  302.  */
  303. static _INLINE_ void dbdma_flush(volatile struct dbdma_regs *dma)
  304. {
  305. int i = 0;
  306. out_le32(&dma->control, (FLUSH << 16) | FLUSH);
  307. while (((in_le32(&dma->status) & FLUSH) != 0) && (i++ < 100))
  308. udelay(1);
  309. }
  310. /*
  311.  * ----------------------------------------------------------------------
  312.  *
  313.  * Here starts the interrupt handling routines.  All of the following
  314.  * subroutines are declared as inline and are folded into
  315.  * rs_interrupt().  They were separated out for readability's sake.
  316.  *
  317.  *  - Ted Ts'o (tytso@mit.edu), 7-Mar-93
  318.  * -----------------------------------------------------------------------
  319.  */
  320. /*
  321.  * This routine is used by the interrupt handler to schedule
  322.  * processing in the software interrupt portion of the driver.
  323.  */
  324. static _INLINE_ void rs_sched_event(struct mac_serial *info,
  325.   int event)
  326. {
  327. info->event |= 1 << event;
  328. queue_task(&info->tqueue, &tq_serial);
  329. mark_bh(MACSERIAL_BH);
  330. }
  331. /* Work out the flag value for a z8530 status value. */
  332. static _INLINE_ int stat_to_flag(int stat)
  333. {
  334. int flag;
  335. if (stat & Rx_OVR) {
  336. flag = TTY_OVERRUN;
  337. } else if (stat & FRM_ERR) {
  338. flag = TTY_FRAME;
  339. } else if (stat & PAR_ERR) {
  340. flag = TTY_PARITY;
  341. } else
  342. flag = 0;
  343. return flag;
  344. }
  345. static _INLINE_ void receive_chars(struct mac_serial *info,
  346.    struct pt_regs *regs)
  347. {
  348. struct tty_struct *tty = info->tty;
  349. unsigned char ch, stat, flag;
  350. while ((read_zsreg(info->zs_channel, 0) & Rx_CH_AV) != 0) {
  351. stat = read_zsreg(info->zs_channel, R1);
  352. ch = read_zsdata(info->zs_channel);
  353. #ifdef CONFIG_KGDB
  354. if (info->kgdb_channel) {
  355. if (ch == 0x03 || ch == '$')
  356. breakpoint();
  357. if (stat & (Rx_OVR|FRM_ERR|PAR_ERR))
  358. write_zsreg(info->zs_channel, 0, ERR_RES);
  359. return;
  360. }
  361. #endif
  362. if (!tty)
  363. continue;
  364. if (tty->flip.count >= TTY_FLIPBUF_SIZE)
  365. tty_flip_buffer_push(tty);
  366. if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
  367. static int flip_buf_ovf;
  368. if (++flip_buf_ovf <= 1)
  369. printk(KERN_WARNING "FB. overflow: %dn",
  370.     flip_buf_ovf);
  371. break;
  372. }
  373. tty->flip.count++;
  374. {
  375. static int flip_max_cnt;
  376. if (flip_max_cnt < tty->flip.count)
  377. flip_max_cnt = tty->flip.count;
  378. }
  379. flag = stat_to_flag(stat);
  380. if (flag)
  381. /* reset the error indication */
  382. write_zsreg(info->zs_channel, 0, ERR_RES);
  383. *tty->flip.flag_buf_ptr++ = flag;
  384. *tty->flip.char_buf_ptr++ = ch;
  385. }
  386. if (tty)
  387. tty_flip_buffer_push(tty);
  388. }
  389. static void transmit_chars(struct mac_serial *info)
  390. {
  391. unsigned long flags;
  392. save_flags(flags);
  393. cli();
  394. if ((read_zsreg(info->zs_channel, 0) & Tx_BUF_EMP) == 0)
  395. goto out;
  396. info->tx_active = 0;
  397. if (info->x_char && !info->power_wait) {
  398. /* Send next char */
  399. write_zsdata(info->zs_channel, info->x_char);
  400. info->x_char = 0;
  401. info->tx_active = 1;
  402. goto out;
  403. }
  404. if ((info->xmit_cnt <= 0) || info->tty->stopped || info->tx_stopped
  405.     || info->power_wait) {
  406. write_zsreg(info->zs_channel, 0, RES_Tx_P);
  407. goto out;
  408. }
  409. /* Send char */
  410. write_zsdata(info->zs_channel, info->xmit_buf[info->xmit_tail++]);
  411. info->xmit_tail = info->xmit_tail & (SERIAL_XMIT_SIZE-1);
  412. info->xmit_cnt--;
  413. info->tx_active = 1;
  414. if (info->xmit_cnt < WAKEUP_CHARS)
  415. rs_sched_event(info, RS_EVENT_WRITE_WAKEUP);
  416.  out:
  417. restore_flags(flags);
  418. }
  419. static void powerup_done(unsigned long data)
  420. {
  421. struct mac_serial *info = (struct mac_serial *) data;
  422. info->power_wait = 0;
  423. transmit_chars(info);
  424. }
  425. static _INLINE_ void status_handle(struct mac_serial *info)
  426. {
  427. unsigned char status;
  428. /* Get status from Read Register 0 */
  429. status = read_zsreg(info->zs_channel, 0);
  430. /* Check for DCD transitions */
  431. if (((status ^ info->read_reg_zero) & DCD) != 0
  432.     && info->tty && !C_CLOCAL(info->tty)) {
  433. if (status & DCD) {
  434. wake_up_interruptible(&info->open_wait);
  435. } else if (!(info->flags & ZILOG_CALLOUT_ACTIVE)) {
  436. if (info->tty)
  437. tty_hangup(info->tty);
  438. }
  439. }
  440. /* Check for CTS transitions */
  441. if (info->tty && C_CRTSCTS(info->tty)) {
  442. /*
  443.  * For some reason, on the Power Macintosh,
  444.  * it seems that the CTS bit is 1 when CTS is
  445.  * *negated* and 0 when it is asserted.
  446.  * The DCD bit doesn't seem to be inverted
  447.  * like this.
  448.  */
  449. if ((status & CTS) == 0) {
  450. if (info->tx_stopped) {
  451. #ifdef SERIAL_DEBUG_FLOW
  452. printk(KERN_DEBUG "CTS upn");
  453. #endif
  454. info->tx_stopped = 0;
  455. if (!info->tx_active)
  456. transmit_chars(info);
  457. }
  458. } else {
  459. #ifdef SERIAL_DEBUG_FLOW
  460. printk(KERN_DEBUG "CTS downn");
  461. #endif
  462. info->tx_stopped = 1;
  463. }
  464. }
  465. /* Clear status condition... */
  466. write_zsreg(info->zs_channel, 0, RES_EXT_INT);
  467. info->read_reg_zero = status;
  468. }
  469. static _INLINE_ void receive_special_dma(struct mac_serial *info)
  470. {
  471. unsigned char stat, flag;
  472. volatile struct dbdma_regs *rd = &info->rx->dma;
  473. int where = RX_BUF_SIZE;
  474. spin_lock(&info->rx_dma_lock);
  475. if ((ld_le32(&rd->status) & ACTIVE) != 0)
  476. dbdma_flush(rd);
  477. if (in_le32(&rd->cmdptr)
  478.     == virt_to_bus(info->rx_cmds[info->rx_cbuf] + 1))
  479. where -= in_le16(&info->rx->res_count);
  480. where--;
  481. stat = read_zsreg(info->zs_channel, R1);
  482. flag = stat_to_flag(stat);
  483. if (flag) {
  484. info->rx_flag_buf[info->rx_cbuf][where] = flag;
  485. /* reset the error indication */
  486. write_zsreg(info->zs_channel, 0, ERR_RES);
  487. }
  488. spin_unlock(&info->rx_dma_lock);
  489. }
  490. /*
  491.  * This is the serial driver's generic interrupt routine
  492.  */
  493. static void rs_interrupt(int irq, void *dev_id, struct pt_regs * regs)
  494. {
  495. struct mac_serial *info = (struct mac_serial *) dev_id;
  496. unsigned char zs_intreg;
  497. int shift;
  498. if (!(info->flags & ZILOG_INITIALIZED)) {
  499. printk(KERN_WARNING "rs_interrupt: irq %d, port not "
  500.     "initializedn", irq);
  501. disable_irq(irq);
  502. return;
  503. }
  504. /* NOTE: The read register 3, which holds the irq status,
  505.  *       does so for both channels on each chip.  Although
  506.  *       the status value itself must be read from the A
  507.  *       channel and is only valid when read from channel A.
  508.  *       Yes... broken hardware...
  509.  */
  510. #define CHAN_IRQMASK (CHBRxIP | CHBTxIP | CHBEXT)
  511. if (info->zs_chan_a == info->zs_channel)
  512. shift = 3; /* Channel A */
  513. else
  514. shift = 0; /* Channel B */
  515. for (;;) {
  516. zs_intreg = read_zsreg(info->zs_chan_a, 3) >> shift;
  517. #ifdef SERIAL_DEBUG_INTR
  518. printk(KERN_DEBUG "rs_interrupt: irq %d, zs_intreg 0x%xn",
  519.        irq, (int)zs_intreg);
  520. #endif
  521. if ((zs_intreg & CHAN_IRQMASK) == 0)
  522. break;
  523. if (zs_intreg & CHBRxIP) {
  524. /* If we are doing DMA, we only ask for interrupts
  525.    on characters with errors or special conditions. */
  526. if (info->dma_initted)
  527. receive_special_dma(info);
  528. else
  529. receive_chars(info, regs);
  530. }
  531. if (zs_intreg & CHBTxIP)
  532. transmit_chars(info);
  533. if (zs_intreg & CHBEXT)
  534. status_handle(info);
  535. }
  536. }
  537. /* Transmit DMA interrupt - not used at present */
  538. static void rs_txdma_irq(int irq, void *dev_id, struct pt_regs *regs)
  539. {
  540. }
  541. /*
  542.  * Receive DMA interrupt.
  543.  */
  544. static void rs_rxdma_irq(int irq, void *dev_id, struct pt_regs *regs)
  545. {
  546. struct mac_serial *info = (struct mac_serial *) dev_id;
  547. volatile struct dbdma_cmd *cd;
  548. if (!info->dma_initted)
  549. return;
  550. spin_lock(&info->rx_dma_lock);
  551. /* First, confirm that this interrupt is, indeed, coming */
  552. /* from Rx DMA */
  553. cd = info->rx_cmds[info->rx_cbuf] + 2;
  554. if ((in_le16(&cd->xfer_status) & (RUN | ACTIVE)) != (RUN | ACTIVE)) {
  555. spin_unlock(&info->rx_dma_lock);
  556. return;
  557. }
  558. if (info->rx_fbuf != RX_NO_FBUF) {
  559. info->rx_cbuf = info->rx_fbuf;
  560. if (++info->rx_fbuf == info->rx_nbuf)
  561. info->rx_fbuf = 0;
  562. if (info->rx_fbuf == info->rx_ubuf)
  563. info->rx_fbuf = RX_NO_FBUF;
  564. }
  565. spin_unlock(&info->rx_dma_lock);
  566. }
  567. /*
  568.  * -------------------------------------------------------------------
  569.  * Here ends the serial interrupt routines.
  570.  * -------------------------------------------------------------------
  571.  */
  572. /*
  573.  * ------------------------------------------------------------
  574.  * rs_stop() and rs_start()
  575.  *
  576.  * This routines are called before setting or resetting tty->stopped.
  577.  * ------------------------------------------------------------
  578.  */
  579. static void rs_stop(struct tty_struct *tty)
  580. {
  581. struct mac_serial *info = (struct mac_serial *)tty->driver_data;
  582. #ifdef SERIAL_DEBUG_STOP
  583. printk(KERN_DEBUG "rs_stop %ld....n",
  584.        tty->ldisc.chars_in_buffer(tty));
  585. #endif
  586. if (serial_paranoia_check(info, tty->device, "rs_stop"))
  587. return;
  588. #if 0
  589. save_flags(flags); cli();
  590. if (info->curregs[5] & TxENAB) {
  591. info->curregs[5] &= ~TxENAB;
  592. info->pendregs[5] &= ~TxENAB;
  593. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  594. }
  595. restore_flags(flags);
  596. #endif
  597. }
  598. static void rs_start(struct tty_struct *tty)
  599. {
  600. struct mac_serial *info = (struct mac_serial *)tty->driver_data;
  601. unsigned long flags;
  602. #ifdef SERIAL_DEBUG_STOP
  603. printk(KERN_DEBUG "rs_start %ld....n", 
  604.        tty->ldisc.chars_in_buffer(tty));
  605. #endif
  606. if (serial_paranoia_check(info, tty->device, "rs_start"))
  607. return;
  608. save_flags(flags); cli();
  609. #if 0
  610. if (info->xmit_cnt && info->xmit_buf && !(info->curregs[5] & TxENAB)) {
  611. info->curregs[5] |= TxENAB;
  612. info->pendregs[5] = info->curregs[5];
  613. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  614. }
  615. #else
  616. if (info->xmit_cnt && info->xmit_buf && !info->tx_active) {
  617. transmit_chars(info);
  618. }
  619. #endif
  620. restore_flags(flags);
  621. }
  622. /*
  623.  * This routine is used to handle the "bottom half" processing for the
  624.  * serial driver, known also the "software interrupt" processing.
  625.  * This processing is done at the kernel interrupt level, after the
  626.  * rs_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON.  This
  627.  * is where time-consuming activities which can not be done in the
  628.  * interrupt driver proper are done; the interrupt driver schedules
  629.  * them using rs_sched_event(), and they get done here.
  630.  */
  631. static void do_serial_bh(void)
  632. {
  633. run_task_queue(&tq_serial);
  634. }
  635. static void do_softint(void *private_)
  636. {
  637. struct mac_serial *info = (struct mac_serial *) private_;
  638. struct tty_struct *tty;
  639. tty = info->tty;
  640. if (!tty)
  641. return;
  642. if (test_and_clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event)) {
  643. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  644.     tty->ldisc.write_wakeup)
  645. (tty->ldisc.write_wakeup)(tty);
  646. wake_up_interruptible(&tty->write_wait);
  647. }
  648. }
  649. static int startup(struct mac_serial * info)
  650. {
  651. int delay;
  652. OPNDBG("startup() (ttyS%d, irq %d)n", info->line, info->irq);
  653.  
  654. if (info->flags & ZILOG_INITIALIZED) {
  655. OPNDBG(" -> already initedn");
  656.   return 0;
  657. }
  658. if (!info->xmit_buf) {
  659. info->xmit_buf = (unsigned char *) get_free_page(GFP_KERNEL);
  660. if (!info->xmit_buf)
  661. return -ENOMEM;
  662. }
  663. OPNDBG("starting up ttyS%d (irq %d)...n", info->line, info->irq);
  664. delay = set_scc_power(info, 1);
  665. setup_scc(info);
  666. if (delay) {
  667. unsigned long flags;
  668. /* delay is in ms */
  669. save_flags(flags);
  670. cli();
  671. info->power_wait = 1;
  672. mod_timer(&info->powerup_timer,
  673.   jiffies + (delay * HZ + 999) / 1000);
  674. restore_flags(flags);
  675. }
  676. OPNDBG("enabling IRQ on ttyS%d (irq %d)...n", info->line, info->irq);
  677. info->flags |= ZILOG_INITIALIZED;
  678. enable_irq(info->irq);
  679. if (info->dma_initted) {
  680. enable_irq(info->rx_dma_irq);
  681. }
  682. return 0;
  683. }
  684. static _INLINE_ void rxdma_start(struct mac_serial * info, int current)
  685. {
  686. volatile struct dbdma_regs *rd = &info->rx->dma;
  687. volatile struct dbdma_cmd *cd = info->rx_cmds[current];
  688. //printk(KERN_DEBUG "SCC: rxdma_startn");
  689. st_le32(&rd->cmdptr, virt_to_bus(cd));
  690. out_le32(&rd->control, (RUN << 16) | RUN);
  691. }
  692. static void rxdma_to_tty(struct mac_serial *info)
  693. {
  694. struct tty_struct *tty = info->tty;
  695. volatile struct dbdma_regs *rd = &info->rx->dma;
  696. unsigned long flags;
  697. int residue, available, space, do_queue;
  698. if (!tty)
  699. return;
  700. do_queue = 0;
  701. spin_lock_irqsave(&info->rx_dma_lock, flags);
  702. more:
  703. space = TTY_FLIPBUF_SIZE - tty->flip.count;
  704. if (!space) {
  705. do_queue++;
  706. goto out;
  707. }
  708. residue = 0;
  709. if (info->rx_ubuf == info->rx_cbuf) {
  710. if ((ld_le32(&rd->status) & ACTIVE) != 0) {
  711. dbdma_flush(rd);
  712. if (in_le32(&rd->cmdptr)
  713.     == virt_to_bus(info->rx_cmds[info->rx_cbuf]+1))
  714. residue = in_le16(&info->rx->res_count);
  715. }
  716. }
  717. available = RX_BUF_SIZE - residue - info->rx_done_bytes;
  718. if (available > space)
  719. available = space;
  720. if (available) {
  721. memcpy(tty->flip.char_buf_ptr,
  722.        info->rx_char_buf[info->rx_ubuf] + info->rx_done_bytes,
  723.        available);
  724. memcpy(tty->flip.flag_buf_ptr,
  725.        info->rx_flag_buf[info->rx_ubuf] + info->rx_done_bytes,
  726.        available);
  727. tty->flip.char_buf_ptr += available;
  728. tty->flip.count += available;
  729. tty->flip.flag_buf_ptr += available;
  730. memset(info->rx_flag_buf[info->rx_ubuf] + info->rx_done_bytes,
  731.        0, available);
  732. info->rx_done_bytes += available;
  733. do_queue++;
  734. }
  735. if (info->rx_done_bytes == RX_BUF_SIZE) {
  736. volatile struct dbdma_cmd *cd = info->rx_cmds[info->rx_ubuf];
  737. if (info->rx_ubuf == info->rx_cbuf)
  738. goto out;
  739. /* mark rx_char_buf[rx_ubuf] free */
  740. st_le16(&cd->command, DBDMA_NOP);
  741. cd++;
  742. st_le32(&cd->cmd_dep, 0);
  743. st_le32((unsigned int *)&cd->res_count, 0);
  744. cd++;
  745. st_le16(&cd->xfer_status, 0);
  746. if (info->rx_fbuf == RX_NO_FBUF) {
  747. info->rx_fbuf = info->rx_ubuf;
  748. if (!(ld_le32(&rd->status) & ACTIVE)) {
  749. dbdma_reset(&info->rx->dma);
  750. rxdma_start(info, info->rx_ubuf);
  751. info->rx_cbuf = info->rx_ubuf;
  752. }
  753. }
  754. info->rx_done_bytes = 0;
  755. if (++info->rx_ubuf == info->rx_nbuf)
  756. info->rx_ubuf = 0;
  757. if (info->rx_fbuf == info->rx_ubuf)
  758. info->rx_fbuf = RX_NO_FBUF;
  759. goto more;
  760. }
  761. out:
  762. spin_unlock_irqrestore(&info->rx_dma_lock, flags);
  763. if (do_queue)
  764. queue_task(&tty->flip.tqueue, &tq_timer);
  765. }
  766. static void poll_rxdma(unsigned long private_)
  767. {
  768. struct mac_serial *info = (struct mac_serial *) private_;
  769. unsigned long flags;
  770. rxdma_to_tty(info);
  771. spin_lock_irqsave(&info->rx_dma_lock, flags);
  772. mod_timer(&info->poll_dma_timer, RX_DMA_TIMER);
  773. spin_unlock_irqrestore(&info->rx_dma_lock, flags);
  774. }
  775. static void dma_init(struct mac_serial * info)
  776. {
  777. int i, size;
  778. volatile struct dbdma_cmd *cd;
  779. unsigned char *p;
  780. info->rx_nbuf = 8;
  781. /* various mem set up */
  782. size = sizeof(struct dbdma_cmd) * (3 * info->rx_nbuf + 2)
  783. + (RX_BUF_SIZE * 2 + sizeof(*info->rx_cmds)
  784.    + sizeof(*info->rx_char_buf) + sizeof(*info->rx_flag_buf))
  785. * info->rx_nbuf;
  786. info->dma_priv = kmalloc(size, GFP_KERNEL | GFP_DMA);
  787. if (info->dma_priv == NULL)
  788. return;
  789. memset(info->dma_priv, 0, size);
  790. info->rx_cmds = (volatile struct dbdma_cmd **)info->dma_priv;
  791. info->rx_char_buf = (unsigned char **) (info->rx_cmds + info->rx_nbuf);
  792. info->rx_flag_buf = info->rx_char_buf + info->rx_nbuf;
  793. p = (unsigned char *) (info->rx_flag_buf + info->rx_nbuf);
  794. for (i = 0; i < info->rx_nbuf; i++, p += RX_BUF_SIZE)
  795. info->rx_char_buf[i] = p;
  796. for (i = 0; i < info->rx_nbuf; i++, p += RX_BUF_SIZE)
  797. info->rx_flag_buf[i] = p;
  798. /* a bit of DMA programming */
  799. cd = info->rx_cmds[0] = (volatile struct dbdma_cmd *) DBDMA_ALIGN(p);
  800. st_le16(&cd->command, DBDMA_NOP);
  801. cd++;
  802. st_le16(&cd->req_count, RX_BUF_SIZE);
  803. st_le16(&cd->command, INPUT_MORE);
  804. st_le32(&cd->phy_addr, virt_to_bus(info->rx_char_buf[0]));
  805. cd++;
  806. st_le16(&cd->req_count, 4);
  807. st_le16(&cd->command, STORE_WORD | INTR_ALWAYS);
  808. st_le32(&cd->phy_addr, virt_to_bus(cd-2));
  809. st_le32(&cd->cmd_dep, DBDMA_STOP);
  810. for (i = 1; i < info->rx_nbuf; i++) {
  811. info->rx_cmds[i] = ++cd;
  812. st_le16(&cd->command, DBDMA_NOP);
  813. cd++;
  814. st_le16(&cd->req_count, RX_BUF_SIZE);
  815. st_le16(&cd->command, INPUT_MORE);
  816. st_le32(&cd->phy_addr, virt_to_bus(info->rx_char_buf[i]));
  817. cd++;
  818. st_le16(&cd->req_count, 4);
  819. st_le16(&cd->command, STORE_WORD | INTR_ALWAYS);
  820. st_le32(&cd->phy_addr, virt_to_bus(cd-2));
  821. st_le32(&cd->cmd_dep, DBDMA_STOP);
  822. }
  823. cd++;
  824. st_le16(&cd->command, DBDMA_NOP | BR_ALWAYS);
  825. st_le32(&cd->cmd_dep, virt_to_bus(info->rx_cmds[0]));
  826. /* setup DMA to our liking */
  827. dbdma_reset(&info->rx->dma);
  828. st_le32(&info->rx->dma.intr_sel, 0x10001);
  829. st_le32(&info->rx->dma.br_sel, 0x10001);
  830. out_le32(&info->rx->dma.wait_sel, 0x10001);
  831. /* set various flags */
  832. info->rx_ubuf = 0;
  833. info->rx_cbuf = 0;
  834. info->rx_fbuf = info->rx_ubuf + 1;
  835. if (info->rx_fbuf == info->rx_nbuf)
  836. info->rx_fbuf = RX_NO_FBUF;
  837. info->rx_done_bytes = 0;
  838. /* setup polling */
  839. init_timer(&info->poll_dma_timer);
  840. info->poll_dma_timer.function = (void *)&poll_rxdma;
  841. info->poll_dma_timer.data = (unsigned long)info;
  842. info->dma_initted = 1;
  843. }
  844. /*
  845.  * FixZeroBug....Works around a bug in the SCC receving channel.
  846.  * Taken from Darwin code, 15 Sept. 2000  -DanM
  847.  *
  848.  * The following sequence prevents a problem that is seen with O'Hare ASICs
  849.  * (most versions -- also with some Heathrow and Hydra ASICs) where a zero
  850.  * at the input to the receiver becomes 'stuck' and locks up the receiver.
  851.  * This problem can occur as a result of a zero bit at the receiver input
  852.  * coincident with any of the following events:
  853.  *
  854.  * The SCC is initialized (hardware or software).
  855.  * A framing error is detected.
  856.  * The clocking option changes from synchronous or X1 asynchronous
  857.  * clocking to X16, X32, or X64 asynchronous clocking.
  858.  * The decoding mode is changed among NRZ, NRZI, FM0, or FM1.
  859.  *
  860.  * This workaround attempts to recover from the lockup condition by placing
  861.  * the SCC in synchronous loopback mode with a fast clock before programming
  862.  * any of the asynchronous modes.
  863.  */
  864. static void fix_zero_bug_scc(struct mac_serial * info)
  865. {
  866. write_zsreg(info->zs_channel, 9,
  867.     (info->zs_channel == info->zs_chan_a? CHRA: CHRB));
  868. udelay(10);
  869. write_zsreg(info->zs_channel, 9,
  870.     ((info->zs_channel == info->zs_chan_a? CHRA: CHRB) | NV));
  871. write_zsreg(info->zs_channel, 4, (X1CLK | EXTSYNC));
  872. /* I think this is wrong....but, I just copying code....
  873. */
  874. write_zsreg(info->zs_channel, 3, (8 & ~RxENABLE));
  875. write_zsreg(info->zs_channel, 5, (8 & ~TxENAB));
  876. write_zsreg(info->zs_channel, 9, NV); /* Didn't we already do this? */
  877. write_zsreg(info->zs_channel, 11, (RCBR | TCBR));
  878. write_zsreg(info->zs_channel, 12, 0);
  879. write_zsreg(info->zs_channel, 13, 0);
  880. write_zsreg(info->zs_channel, 14, (LOOPBAK | SSBR));
  881. write_zsreg(info->zs_channel, 14, (LOOPBAK | SSBR | BRENABL));
  882. write_zsreg(info->zs_channel, 3, (8 | RxENABLE));
  883. write_zsreg(info->zs_channel, 0, RES_EXT_INT);
  884. write_zsreg(info->zs_channel, 0, RES_EXT_INT); /* to kill some time */
  885. /* The channel should be OK now, but it is probably receiving
  886.  * loopback garbage.
  887.  * Switch to asynchronous mode, disable the receiver,
  888.  * and discard everything in the receive buffer.
  889.  */
  890. write_zsreg(info->zs_channel, 9, NV);
  891. write_zsreg(info->zs_channel, 4, PAR_ENA);
  892. write_zsreg(info->zs_channel, 3, (8 & ~RxENABLE));
  893. while (read_zsreg(info->zs_channel, 0) & Rx_CH_AV) {
  894. (void)read_zsreg(info->zs_channel, 8);
  895. write_zsreg(info->zs_channel, 0, RES_EXT_INT);
  896. write_zsreg(info->zs_channel, 0, ERR_RES);
  897. }
  898. }
  899. static int setup_scc(struct mac_serial * info)
  900. {
  901. unsigned long flags;
  902. OPNDBG("setting up ttyS%d SCC...n", info->line);
  903. save_flags(flags); cli(); /* Disable interrupts */
  904. /* Nice buggy HW ... */
  905. fix_zero_bug_scc(info);
  906. /*
  907.  * Reset the chip.
  908.  */
  909. write_zsreg(info->zs_channel, 9,
  910.     (info->zs_channel == info->zs_chan_a? CHRA: CHRB));
  911. udelay(10);
  912. write_zsreg(info->zs_channel, 9, 0);
  913. /*
  914.  * Clear the receive FIFO.
  915.  */
  916. ZS_CLEARFIFO(info->zs_channel);
  917. info->xmit_fifo_size = 1;
  918. /*
  919.  * Reset DMAs
  920.  */
  921. if (info->has_dma)
  922. dma_init(info);
  923. /*
  924.  * Clear the interrupt registers.
  925.  */
  926. write_zsreg(info->zs_channel, 0, ERR_RES);
  927. write_zsreg(info->zs_channel, 0, RES_H_IUS);
  928. /*
  929.  * Turn on RTS and DTR.
  930.  */
  931. if (!info->is_irda)
  932. zs_rtsdtr(info, 1);
  933. /*
  934.  * Finally, enable sequencing and interrupts
  935.  */
  936. if (!info->dma_initted) {
  937. /* interrupt on ext/status changes, all received chars,
  938.    transmit ready */
  939. info->curregs[1] = (info->curregs[1] & ~0x18)
  940. | (EXT_INT_ENAB | INT_ALL_Rx | TxINT_ENAB);
  941. } else {
  942. /* interrupt on ext/status changes, W/Req pin is
  943.    receive DMA request */
  944. info->curregs[1] = (info->curregs[1] & ~(0x18 | TxINT_ENAB))
  945. | (EXT_INT_ENAB | WT_RDY_RT | WT_FN_RDYFN);
  946. write_zsreg(info->zs_channel, 1, info->curregs[1]);
  947. /* enable W/Req pin */
  948. info->curregs[1] |= WT_RDY_ENAB;
  949. write_zsreg(info->zs_channel, 1, info->curregs[1]);
  950. /* enable interrupts on transmit ready and receive errors */
  951. info->curregs[1] |= INT_ERR_Rx | TxINT_ENAB;
  952. }
  953. info->pendregs[1] = info->curregs[1];
  954. info->curregs[3] |= (RxENABLE | Rx8);
  955. info->pendregs[3] = info->curregs[3];
  956. info->curregs[5] |= (TxENAB | Tx8);
  957. info->pendregs[5] = info->curregs[5];
  958. info->curregs[9] |= (NV | MIE);
  959. info->pendregs[9] = info->curregs[9];
  960. write_zsreg(info->zs_channel, 3, info->curregs[3]);
  961. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  962. write_zsreg(info->zs_channel, 9, info->curregs[9]);
  963. if (info->tty)
  964. clear_bit(TTY_IO_ERROR, &info->tty->flags);
  965. info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
  966. /*
  967.  * Set the speed of the serial port
  968.  */
  969. change_speed(info, 0);
  970. /* Save the current value of RR0 */
  971. info->read_reg_zero = read_zsreg(info->zs_channel, 0);
  972. restore_flags(flags);
  973. if (info->dma_initted) {
  974. spin_lock_irqsave(&info->rx_dma_lock, flags);
  975. rxdma_start(info, 0);
  976. info->poll_dma_timer.expires = RX_DMA_TIMER;
  977. add_timer(&info->poll_dma_timer);
  978. spin_unlock_irqrestore(&info->rx_dma_lock, flags);
  979. }
  980. return 0;
  981. }
  982. /*
  983.  * This routine will shutdown a serial port; interrupts are disabled, and
  984.  * DTR is dropped if the hangup on close termio flag is on.
  985.  */
  986. static void shutdown(struct mac_serial * info)
  987. {
  988. OPNDBG("Shutting down serial port %d (irq %d)....n", info->line,
  989.        info->irq);
  990. if (!(info->flags & ZILOG_INITIALIZED)) {
  991. OPNDBG("(already shutdown)n");
  992. return;
  993. }
  994. if (info->has_dma) {
  995. del_timer(&info->poll_dma_timer);
  996. dbdma_reset(info->tx_dma);
  997. dbdma_reset(&info->rx->dma);
  998. disable_irq(info->tx_dma_irq);
  999. disable_irq(info->rx_dma_irq);
  1000. }
  1001. disable_irq(info->irq);
  1002. info->pendregs[1] = info->curregs[1] = 0;
  1003. write_zsreg(info->zs_channel, 1, 0); /* no interrupts */
  1004. info->curregs[3] &= ~RxENABLE;
  1005. info->pendregs[3] = info->curregs[3];
  1006. write_zsreg(info->zs_channel, 3, info->curregs[3]);
  1007. info->curregs[5] &= ~TxENAB;
  1008. if (!info->tty || C_HUPCL(info->tty))
  1009. info->curregs[5] &= ~DTR;
  1010. info->pendregs[5] = info->curregs[5];
  1011. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  1012. if (info->tty)
  1013. set_bit(TTY_IO_ERROR, &info->tty->flags);
  1014. set_scc_power(info, 0);
  1015. if (info->xmit_buf) {
  1016. free_page((unsigned long) info->xmit_buf);
  1017. info->xmit_buf = 0;
  1018. }
  1019. if (info->has_dma && info->dma_priv) {
  1020. kfree(info->dma_priv);
  1021. info->dma_priv = NULL;
  1022. info->dma_initted = 0;
  1023. }
  1024. memset(info->curregs, 0, sizeof(info->curregs));
  1025. memset(info->pendregs, 0, sizeof(info->pendregs));
  1026. info->flags &= ~ZILOG_INITIALIZED;
  1027. }
  1028. /*
  1029.  * Turn power on or off to the SCC and associated stuff
  1030.  * (port drivers, modem, IR port, etc.)
  1031.  * Returns the number of milliseconds we should wait before
  1032.  * trying to use the port.
  1033.  */
  1034. static int set_scc_power(struct mac_serial * info, int state)
  1035. {
  1036. int delay = 0;
  1037. if (state) {
  1038. PWRDBG("ttyS%d: powering up hardwaren", info->line);
  1039. pmac_call_feature(
  1040. PMAC_FTR_SCC_ENABLE,
  1041. info->dev_node, info->port_type, 1);
  1042. if (info->is_internal_modem) {
  1043. pmac_call_feature(
  1044. PMAC_FTR_MODEM_ENABLE,
  1045. info->dev_node, 0, 1);
  1046. delay = 2500; /* wait for 2.5s before using */
  1047. } else if (info->is_irda)
  1048. mdelay(50); /* Do better here once the problems
  1049.                  * with blocking have been ironed out
  1050.                  */
  1051. } else {
  1052. /* TODO: Make that depend on a timer, don't power down
  1053.  * immediately
  1054.  */
  1055. PWRDBG("ttyS%d: shutting down hardwaren", info->line);
  1056. if (info->is_internal_modem) {
  1057. PWRDBG("ttyS%d: shutting down modemn", info->line);
  1058. pmac_call_feature(
  1059. PMAC_FTR_MODEM_ENABLE,
  1060. info->dev_node, 0, 0);
  1061. }
  1062. pmac_call_feature(
  1063. PMAC_FTR_SCC_ENABLE,
  1064. info->dev_node, info->port_type, 0);
  1065. }
  1066. return delay;
  1067. }
  1068. static void irda_rts_pulses(struct mac_serial *info, int w)
  1069. {
  1070. unsigned long flags;
  1071. udelay(w);
  1072. save_flags(flags); cli();
  1073. write_zsreg(info->zs_channel, 5, Tx8 | TxENAB);
  1074. udelay(2);
  1075. write_zsreg(info->zs_channel, 5, Tx8 | TxENAB | RTS);
  1076. udelay(8);
  1077. write_zsreg(info->zs_channel, 5, Tx8 | TxENAB);
  1078. udelay(4);
  1079. write_zsreg(info->zs_channel, 5, Tx8 | TxENAB | RTS);
  1080. restore_flags(flags);
  1081. }
  1082. /*
  1083.  * Set the irda codec on the imac to the specified baud rate.
  1084.  */
  1085. static void irda_setup(struct mac_serial *info)
  1086. {
  1087. int code, speed, t;
  1088. unsigned long flags;
  1089. speed = info->tty->termios->c_cflag & CBAUD;
  1090. if (speed < B2400 || speed > B115200)
  1091. return;
  1092. code = 0x4d + B115200 - speed;
  1093. /* disable serial interrupts and receive DMA */
  1094. write_zsreg(info->zs_channel, 1, info->curregs[1] & ~0x9f);
  1095. /* wait for transmitter to drain */
  1096. t = 10000;
  1097. while ((read_zsreg(info->zs_channel, 0) & Tx_BUF_EMP) == 0
  1098.        || (read_zsreg(info->zs_channel, 1) & ALL_SNT) == 0) {
  1099. if (--t <= 0) {
  1100. printk(KERN_ERR "transmitter didn't drainn");
  1101. return;
  1102. }
  1103. udelay(10);
  1104. }
  1105. udelay(100);
  1106. /* set to 8 bits, no parity, 19200 baud, RTS on, DTR off */
  1107. write_zsreg(info->zs_channel, 4, X16CLK | SB1);
  1108. write_zsreg(info->zs_channel, 11, TCBR | RCBR);
  1109. t = BPS_TO_BRG(19200, ZS_CLOCK/16);
  1110. write_zsreg(info->zs_channel, 12, t);
  1111. write_zsreg(info->zs_channel, 13, t >> 8);
  1112. write_zsreg(info->zs_channel, 14, BRENABL);
  1113. write_zsreg(info->zs_channel, 3, Rx8 | RxENABLE);
  1114. write_zsreg(info->zs_channel, 5, Tx8 | TxENAB | RTS);
  1115. /* set TxD low for ~104us and pulse RTS */
  1116. udelay(1000);
  1117. save_flags(flags); cli();
  1118. write_zsdata(info->zs_channel, 0xfe);
  1119. irda_rts_pulses(info, 150);
  1120. restore_flags(flags);
  1121. irda_rts_pulses(info, 180);
  1122. irda_rts_pulses(info, 50);
  1123. udelay(100);
  1124. /* assert DTR, wait 30ms, talk to the chip */
  1125. write_zsreg(info->zs_channel, 5, Tx8 | TxENAB | RTS | DTR);
  1126. mdelay(30);
  1127. while (read_zsreg(info->zs_channel, 0) & Rx_CH_AV)
  1128. read_zsdata(info->zs_channel);
  1129. write_zsdata(info->zs_channel, 1);
  1130. t = 1000;
  1131. while ((read_zsreg(info->zs_channel, 0) & Rx_CH_AV) == 0) {
  1132. if (--t <= 0) {
  1133. printk(KERN_ERR "irda_setup timed out on 1st byten");
  1134. goto out;
  1135. }
  1136. udelay(10);
  1137. }
  1138. t = read_zsdata(info->zs_channel);
  1139. if (t != 4)
  1140. printk(KERN_ERR "irda_setup 1st byte = %xn", t);
  1141. write_zsdata(info->zs_channel, code);
  1142. t = 1000;
  1143. while ((read_zsreg(info->zs_channel, 0) & Rx_CH_AV) == 0) {
  1144. if (--t <= 0) {
  1145. printk(KERN_ERR "irda_setup timed out on 2nd byten");
  1146. goto out;
  1147. }
  1148. udelay(10);
  1149. }
  1150. t = read_zsdata(info->zs_channel);
  1151. if (t != code)
  1152. printk(KERN_ERR "irda_setup 2nd byte = %x (%x)n", t, code);
  1153. /* Drop DTR again and do some more RTS pulses */
  1154.  out:
  1155. udelay(100);
  1156. write_zsreg(info->zs_channel, 5, Tx8 | TxENAB | RTS);
  1157. irda_rts_pulses(info, 80);
  1158. /* We should be right to go now.  We assume that load_zsregs
  1159.    will get called soon to load up the correct baud rate etc. */
  1160. info->curregs[5] = (info->curregs[5] | RTS) & ~DTR;
  1161. info->pendregs[5] = info->curregs[5];
  1162. }
  1163. /*
  1164.  * This routine is called to set the UART divisor registers to match
  1165.  * the specified baud rate for a serial port.
  1166.  */
  1167. static void change_speed(struct mac_serial *info, struct termios *old_termios)
  1168. {
  1169. unsigned cflag;
  1170. int bits;
  1171. int brg, baud;
  1172. unsigned long flags;
  1173. if (!info->tty || !info->tty->termios)
  1174. return;
  1175. cflag = info->tty->termios->c_cflag;
  1176. baud = tty_get_baud_rate(info->tty);
  1177. if (baud == 0) {
  1178. if (old_termios) {
  1179. info->tty->termios->c_cflag &= ~CBAUD;
  1180. info->tty->termios->c_cflag |= (old_termios->c_cflag & CBAUD);
  1181. cflag = info->tty->termios->c_cflag;
  1182. baud = tty_get_baud_rate(info->tty);
  1183. }
  1184. else
  1185. baud = info->zs_baud;
  1186. }
  1187. if (baud > 230400)
  1188. baud = 230400;
  1189. else if (baud == 0)
  1190. baud = 38400;
  1191. save_flags(flags); cli();
  1192. info->zs_baud = baud;
  1193. info->clk_divisor = 16;
  1194. BAUDBG(KERN_DEBUG "set speed to %d bds, ", baud);
  1195. switch (baud) {
  1196. case ZS_CLOCK/16: /* 230400 */
  1197. info->curregs[4] = X16CLK;
  1198. info->curregs[11] = 0;
  1199. break;
  1200. case ZS_CLOCK/32: /* 115200 */
  1201. info->curregs[4] = X32CLK;
  1202. info->curregs[11] = 0;
  1203. break;
  1204. default:
  1205. info->curregs[4] = X16CLK;
  1206. info->curregs[11] = TCBR | RCBR;
  1207. brg = BPS_TO_BRG(baud, ZS_CLOCK/info->clk_divisor);
  1208. info->curregs[12] = (brg & 255);
  1209. info->curregs[13] = ((brg >> 8) & 255);
  1210. info->curregs[14] = BRENABL;
  1211. }
  1212. /* byte size and parity */
  1213. info->curregs[3] &= ~RxNBITS_MASK;
  1214. info->curregs[5] &= ~TxNBITS_MASK;
  1215. switch (cflag & CSIZE) {
  1216. case CS5:
  1217. info->curregs[3] |= Rx5;
  1218. info->curregs[5] |= Tx5;
  1219. BAUDBG("5 bits, ");
  1220. bits = 7;
  1221. break;
  1222. case CS6:
  1223. info->curregs[3] |= Rx6;
  1224. info->curregs[5] |= Tx6;
  1225. BAUDBG("6 bits, ");
  1226. bits = 8;
  1227. break;
  1228. case CS7:
  1229. info->curregs[3] |= Rx7;
  1230. info->curregs[5] |= Tx7;
  1231. BAUDBG("7 bits, ");
  1232. bits = 9;
  1233. break;
  1234. case CS8:
  1235. default: /* defaults to 8 bits */
  1236. info->curregs[3] |= Rx8;
  1237. info->curregs[5] |= Tx8;
  1238. BAUDBG("8 bits, ");
  1239. bits = 10;
  1240. break;
  1241. }
  1242. info->pendregs[3] = info->curregs[3];
  1243. info->pendregs[5] = info->curregs[5];
  1244. info->curregs[4] &= ~(SB_MASK | PAR_ENA | PAR_EVEN);
  1245. if (cflag & CSTOPB) {
  1246. info->curregs[4] |= SB2;
  1247. bits++;
  1248. BAUDBG("2 stop, ");
  1249. } else {
  1250. info->curregs[4] |= SB1;
  1251. BAUDBG("1 stop, ");
  1252. }
  1253. if (cflag & PARENB) {
  1254. bits++;
  1255.   info->curregs[4] |= PAR_ENA;
  1256. BAUDBG("parity, ");
  1257. }
  1258. if (!(cflag & PARODD)) {
  1259. info->curregs[4] |= PAR_EVEN;
  1260. }
  1261. info->pendregs[4] = info->curregs[4];
  1262. if (!(cflag & CLOCAL)) {
  1263. if (!(info->curregs[15] & DCDIE))
  1264. info->read_reg_zero = read_zsreg(info->zs_channel, 0);
  1265. info->curregs[15] |= DCDIE;
  1266. } else
  1267. info->curregs[15] &= ~DCDIE;
  1268. if (cflag & CRTSCTS) {
  1269. info->curregs[15] |= CTSIE;
  1270. if ((read_zsreg(info->zs_channel, 0) & CTS) != 0)
  1271. info->tx_stopped = 1;
  1272. } else {
  1273. info->curregs[15] &= ~CTSIE;
  1274. info->tx_stopped = 0;
  1275. }
  1276. info->pendregs[15] = info->curregs[15];
  1277. /* Calc timeout value. This is pretty broken with high baud rates with HZ=100.
  1278.    This code would love a larger HZ and a >1 fifo size, but this is not
  1279.    a priority. The resulting value must be >HZ/2
  1280.  */
  1281. info->timeout = ((info->xmit_fifo_size*HZ*bits) / baud);
  1282. info->timeout += HZ/50+1; /* Add .02 seconds of slop */
  1283. BAUDBG("timeout=%d/%ds, base:%dn", (int)info->timeout, (int)HZ,
  1284.        (int)info->baud_base);
  1285. /* set the irda codec to the right rate */
  1286. if (info->is_irda)
  1287. irda_setup(info);
  1288. /* Load up the new values */
  1289. load_zsregs(info->zs_channel, info->curregs);
  1290. restore_flags(flags);
  1291. }
  1292. static void rs_flush_chars(struct tty_struct *tty)
  1293. {
  1294. struct mac_serial *info = (struct mac_serial *)tty->driver_data;
  1295. if (serial_paranoia_check(info, tty->device, "rs_flush_chars"))
  1296. return;
  1297. if (info->xmit_cnt <= 0 || tty->stopped || info->tx_stopped ||
  1298.     !info->xmit_buf)
  1299. return;
  1300. /* Enable transmitter */
  1301. transmit_chars(info);
  1302. }
  1303. static int rs_write(struct tty_struct * tty, int from_user,
  1304.     const unsigned char *buf, int count)
  1305. {
  1306. int c, ret = 0;
  1307. struct mac_serial *info = (struct mac_serial *)tty->driver_data;
  1308. unsigned long flags;
  1309. if (serial_paranoia_check(info, tty->device, "rs_write"))
  1310. return 0;
  1311. if (!tty || !info->xmit_buf || !tmp_buf)
  1312. return 0;
  1313. if (from_user) {
  1314. down(&tmp_buf_sem);
  1315. while (1) {
  1316. c = MIN(count,
  1317. MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,
  1318.     SERIAL_XMIT_SIZE - info->xmit_head));
  1319. if (c <= 0)
  1320. break;
  1321. c -= copy_from_user(tmp_buf, buf, c);
  1322. if (!c) {
  1323. if (!ret)
  1324. ret = -EFAULT;
  1325. break;
  1326. }
  1327. save_flags(flags);
  1328. cli();
  1329. c = MIN(c, MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,
  1330.        SERIAL_XMIT_SIZE - info->xmit_head));
  1331. memcpy(info->xmit_buf + info->xmit_head, tmp_buf, c);
  1332. info->xmit_head = ((info->xmit_head + c) &
  1333.    (SERIAL_XMIT_SIZE-1));
  1334. info->xmit_cnt += c;
  1335. restore_flags(flags);
  1336. buf += c;
  1337. count -= c;
  1338. ret += c;
  1339. }
  1340. up(&tmp_buf_sem);
  1341. } else {
  1342. while (1) {
  1343. save_flags(flags);
  1344. cli();
  1345. c = MIN(count,
  1346. MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,
  1347.     SERIAL_XMIT_SIZE - info->xmit_head));
  1348. if (c <= 0) {
  1349. restore_flags(flags);
  1350. break;
  1351. }
  1352. memcpy(info->xmit_buf + info->xmit_head, buf, c);
  1353. info->xmit_head = ((info->xmit_head + c) &
  1354.    (SERIAL_XMIT_SIZE-1));
  1355. info->xmit_cnt += c;
  1356. restore_flags(flags);
  1357. buf += c;
  1358. count -= c;
  1359. ret += c;
  1360. }
  1361. }
  1362. if (info->xmit_cnt && !tty->stopped && !info->tx_stopped
  1363.     && !info->tx_active)
  1364. transmit_chars(info);
  1365. return ret;
  1366. }
  1367. static int rs_write_room(struct tty_struct *tty)
  1368. {
  1369. struct mac_serial *info = (struct mac_serial *)tty->driver_data;
  1370. int ret;
  1371. if (serial_paranoia_check(info, tty->device, "rs_write_room"))
  1372. return 0;
  1373. ret = SERIAL_XMIT_SIZE - info->xmit_cnt - 1;
  1374. if (ret < 0)
  1375. ret = 0;
  1376. return ret;
  1377. }
  1378. static int rs_chars_in_buffer(struct tty_struct *tty)
  1379. {
  1380. struct mac_serial *info = (struct mac_serial *)tty->driver_data;
  1381. if (serial_paranoia_check(info, tty->device, "rs_chars_in_buffer"))
  1382. return 0;
  1383. return info->xmit_cnt;
  1384. }
  1385. static void rs_flush_buffer(struct tty_struct *tty)
  1386. {
  1387. struct mac_serial *info = (struct mac_serial *)tty->driver_data;
  1388. unsigned long flags;
  1389. if (serial_paranoia_check(info, tty->device, "rs_flush_buffer"))
  1390. return;
  1391. save_flags(flags); cli();
  1392. info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
  1393. restore_flags(flags);
  1394. wake_up_interruptible(&tty->write_wait);
  1395. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  1396.     tty->ldisc.write_wakeup)
  1397. (tty->ldisc.write_wakeup)(tty);
  1398. }
  1399. /*
  1400.  * ------------------------------------------------------------
  1401.  * rs_throttle()
  1402.  * 
  1403.  * This routine is called by the upper-layer tty layer to signal that
  1404.  * incoming characters should be throttled.
  1405.  * ------------------------------------------------------------
  1406.  */
  1407. static void rs_throttle(struct tty_struct * tty)
  1408. {
  1409. struct mac_serial *info = (struct mac_serial *)tty->driver_data;
  1410. unsigned long flags;
  1411. #ifdef SERIAL_DEBUG_THROTTLE
  1412. printk(KERN_DEBUG "throttle %ld....n",tty->ldisc.chars_in_buffer(tty));
  1413. #endif
  1414. if (serial_paranoia_check(info, tty->device, "rs_throttle"))
  1415. return;
  1416. if (I_IXOFF(tty)) {
  1417. save_flags(flags); cli();
  1418. info->x_char = STOP_CHAR(tty);
  1419. if (!info->tx_active)
  1420. transmit_chars(info);
  1421. restore_flags(flags);
  1422. }
  1423. if (C_CRTSCTS(tty)) {
  1424. /*
  1425.  * Here we want to turn off the RTS line.  On Macintoshes,
  1426.  * the external serial ports using a DIN-8 or DIN-9
  1427.  * connector only have the DTR line (which is usually
  1428.  * wired to both RTS and DTR on an external modem in
  1429.  * the cable).  RTS doesn't go out to the serial port
  1430.  * socket, it acts as an output enable for the transmit
  1431.  * data line.  So in this case we don't drop RTS.
  1432.  *
  1433.  * Macs with internal modems generally do have both RTS
  1434.  * and DTR wired to the modem, so in that case we do
  1435.  * drop RTS.
  1436.  */
  1437. if (info->is_internal_modem) {
  1438. save_flags(flags); cli();
  1439. info->curregs[5] &= ~RTS;
  1440. info->pendregs[5] &= ~RTS;
  1441. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  1442. restore_flags(flags);
  1443. }
  1444. }
  1445. #ifdef CDTRCTS
  1446. if (tty->termios->c_cflag & CDTRCTS) {
  1447. save_flags(flags); cli();
  1448. info->curregs[5] &= ~DTR;
  1449. info->pendregs[5] &= ~DTR;
  1450. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  1451. restore_flags(flags);
  1452. }
  1453. #endif /* CDTRCTS */
  1454. }
  1455. static void rs_unthrottle(struct tty_struct * tty)
  1456. {
  1457. struct mac_serial *info = (struct mac_serial *)tty->driver_data;
  1458. unsigned long flags;
  1459. #ifdef SERIAL_DEBUG_THROTTLE
  1460. printk(KERN_DEBUG "unthrottle %s: %d....n",
  1461. tty->ldisc.chars_in_buffer(tty));
  1462. #endif
  1463. if (serial_paranoia_check(info, tty->device, "rs_unthrottle"))
  1464. return;
  1465. if (I_IXOFF(tty)) {
  1466. save_flags(flags); cli();
  1467. if (info->x_char)
  1468. info->x_char = 0;
  1469. else {
  1470. info->x_char = START_CHAR(tty);
  1471. if (!info->tx_active)
  1472. transmit_chars(info);
  1473. }
  1474. restore_flags(flags);
  1475. }
  1476. if (C_CRTSCTS(tty) && info->is_internal_modem) {
  1477. /* Assert RTS line */
  1478. save_flags(flags); cli();
  1479. info->curregs[5] |= RTS;
  1480. info->pendregs[5] |= RTS;
  1481. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  1482. restore_flags(flags);
  1483. }
  1484. #ifdef CDTRCTS
  1485. if (tty->termios->c_cflag & CDTRCTS) {
  1486. /* Assert DTR line */
  1487. save_flags(flags); cli();
  1488. info->curregs[5] |= DTR;
  1489. info->pendregs[5] |= DTR;
  1490. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  1491. restore_flags(flags);
  1492. }
  1493. #endif
  1494. }
  1495. /*
  1496.  * ------------------------------------------------------------
  1497.  * rs_ioctl() and friends
  1498.  * ------------------------------------------------------------
  1499.  */
  1500. static int get_serial_info(struct mac_serial * info,
  1501.    struct serial_struct * retinfo)
  1502. {
  1503. struct serial_struct tmp;
  1504.   
  1505. if (!retinfo)
  1506. return -EFAULT;
  1507. memset(&tmp, 0, sizeof(tmp));
  1508. tmp.type = info->type;
  1509. tmp.line = info->line;
  1510. tmp.port = info->port;
  1511. tmp.irq = info->irq;
  1512. tmp.flags = info->flags;
  1513. tmp.baud_base = info->baud_base;
  1514. tmp.close_delay = info->close_delay;
  1515. tmp.closing_wait = info->closing_wait;
  1516. tmp.custom_divisor = info->custom_divisor;
  1517. if (copy_to_user(retinfo,&tmp,sizeof(*retinfo)))
  1518. return -EFAULT;
  1519. return 0;
  1520. }
  1521. static int set_serial_info(struct mac_serial * info,
  1522.    struct serial_struct * new_info)
  1523. {
  1524. struct serial_struct new_serial;
  1525. struct mac_serial old_info;
  1526. int  retval = 0;
  1527. if (copy_from_user(&new_serial,new_info,sizeof(new_serial)))
  1528. return -EFAULT;
  1529. old_info = *info;
  1530. if (!capable(CAP_SYS_ADMIN)) {
  1531. if ((new_serial.baud_base != info->baud_base) ||
  1532.     (new_serial.type != info->type) ||
  1533.     (new_serial.close_delay != info->close_delay) ||
  1534.     ((new_serial.flags & ~ZILOG_USR_MASK) !=
  1535.      (info->flags & ~ZILOG_USR_MASK)))
  1536. return -EPERM;
  1537. info->flags = ((info->flags & ~ZILOG_USR_MASK) |
  1538.        (new_serial.flags & ZILOG_USR_MASK));
  1539. info->custom_divisor = new_serial.custom_divisor;
  1540. goto check_and_exit;
  1541. }
  1542. if (info->count > 1)
  1543. return -EBUSY;
  1544. /*
  1545.  * OK, past this point, all the error checking has been done.
  1546.  * At this point, we start making changes.....
  1547.  */
  1548. info->baud_base = new_serial.baud_base;
  1549. info->flags = ((info->flags & ~ZILOG_FLAGS) |
  1550. (new_serial.flags & ZILOG_FLAGS));
  1551. info->type = new_serial.type;
  1552. info->close_delay = new_serial.close_delay;
  1553. info->closing_wait = new_serial.closing_wait;
  1554. check_and_exit:
  1555. if (info->flags & ZILOG_INITIALIZED)
  1556. retval = setup_scc(info);
  1557. return retval;
  1558. }
  1559. /*
  1560.  * get_lsr_info - get line status register info
  1561.  *
  1562.  * Purpose: Let user call ioctl() to get info when the UART physically
  1563.  *      is emptied.  On bus types like RS485, the transmitter must
  1564.  *      release the bus after transmitting. This must be done when
  1565.  *      the transmit shift register is empty, not be done when the
  1566.  *      transmit holding register is empty.  This functionality
  1567.  *      allows an RS485 driver to be written in user space. 
  1568.  */
  1569. static int get_lsr_info(struct mac_serial * info, unsigned int *value)
  1570. {
  1571. unsigned char status;
  1572. unsigned long flags;
  1573. save_flags(flags); cli();
  1574. status = read_zsreg(info->zs_channel, 0);
  1575. restore_flags(flags);
  1576. status = (status & Tx_BUF_EMP)? TIOCSER_TEMT: 0;
  1577. return put_user(status,value);
  1578. }
  1579. static int get_modem_info(struct mac_serial *info, unsigned int *value)
  1580. {
  1581. unsigned char control, status;
  1582. unsigned int result;
  1583. unsigned long flags;
  1584. save_flags(flags); cli();
  1585. control = info->curregs[5];
  1586. status = read_zsreg(info->zs_channel, 0);
  1587. restore_flags(flags);
  1588. result =  ((control & RTS) ? TIOCM_RTS: 0)
  1589. | ((control & DTR) ? TIOCM_DTR: 0)
  1590. | ((status  & DCD) ? TIOCM_CAR: 0)
  1591. | ((status  & CTS) ? 0: TIOCM_CTS);
  1592. return put_user(result,value);
  1593. }
  1594. static int set_modem_info(struct mac_serial *info, unsigned int cmd,
  1595.   unsigned int *value)
  1596. {
  1597. unsigned int arg, bits;
  1598. unsigned long flags;
  1599. if (get_user(arg, value))
  1600. return -EFAULT;
  1601. bits = (arg & TIOCM_RTS? RTS: 0) + (arg & TIOCM_DTR? DTR: 0);
  1602. save_flags(flags); cli();
  1603. switch (cmd) {
  1604. case TIOCMBIS:
  1605. info->curregs[5] |= bits;
  1606. break;
  1607. case TIOCMBIC:
  1608. info->curregs[5] &= ~bits;
  1609. break;
  1610. case TIOCMSET:
  1611. info->curregs[5] = (info->curregs[5] & ~(DTR | RTS)) | bits;
  1612. break;
  1613. default:
  1614. restore_flags(flags);
  1615. return -EINVAL;
  1616. }
  1617. info->pendregs[5] = info->curregs[5];
  1618. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  1619. restore_flags(flags);
  1620. return 0;
  1621. }
  1622. /*
  1623.  * rs_break - turn transmit break condition on/off
  1624.  */
  1625. static void rs_break(struct tty_struct *tty, int break_state)
  1626. {
  1627. struct mac_serial *info = (struct mac_serial *) tty->driver_data;
  1628. unsigned long flags;
  1629. if (serial_paranoia_check(info, tty->device, "rs_break"))
  1630. return;
  1631. save_flags(flags); cli();
  1632. if (break_state == -1)
  1633. info->curregs[5] |= SND_BRK;
  1634. else
  1635. info->curregs[5] &= ~SND_BRK;
  1636. write_zsreg(info->zs_channel, 5, info->curregs[5]);
  1637. restore_flags(flags);
  1638. }
  1639. static int rs_ioctl(struct tty_struct *tty, struct file * file,
  1640.     unsigned int cmd, unsigned long arg)
  1641. {
  1642. struct mac_serial * info = (struct mac_serial *)tty->driver_data;
  1643. #ifdef CONFIG_KGDB
  1644. if (info->kgdb_channel)
  1645. return -ENODEV;
  1646. #endif
  1647. if (serial_paranoia_check(info, tty->device, "rs_ioctl"))
  1648. return -ENODEV;
  1649. if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
  1650.     (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT)) {
  1651. if (tty->flags & (1 << TTY_IO_ERROR))
  1652.     return -EIO;
  1653. }
  1654. switch (cmd) {
  1655. case TIOCMGET:
  1656. return get_modem_info(info, (unsigned int *) arg);
  1657. case TIOCMBIS:
  1658. case TIOCMBIC:
  1659. case TIOCMSET:
  1660. return set_modem_info(info, cmd, (unsigned int *) arg);
  1661. case TIOCGSERIAL:
  1662. return get_serial_info(info,
  1663.        (struct serial_struct *) arg);
  1664. case TIOCSSERIAL:
  1665. return set_serial_info(info,
  1666.        (struct serial_struct *) arg);
  1667. case TIOCSERGETLSR: /* Get line status register */
  1668. return get_lsr_info(info, (unsigned int *) arg);
  1669. case TIOCSERGSTRUCT:
  1670. if (copy_to_user((struct mac_serial *) arg,
  1671.  info, sizeof(struct mac_serial)))
  1672. return -EFAULT;
  1673. return 0;
  1674. default:
  1675. return -ENOIOCTLCMD;
  1676. }
  1677. return 0;
  1678. }
  1679. static void rs_set_termios(struct tty_struct *tty, struct termios *old_termios)
  1680. {
  1681. struct mac_serial *info = (struct mac_serial *)tty->driver_data;
  1682. int was_stopped;
  1683. if (tty->termios->c_cflag == old_termios->c_cflag)
  1684. return;
  1685. was_stopped = info->tx_stopped;
  1686. change_speed(info, old_termios);
  1687. if (was_stopped && !info->tx_stopped) {
  1688. tty->hw_stopped = 0;
  1689. rs_start(tty);
  1690. }
  1691. }
  1692. /*
  1693.  * ------------------------------------------------------------
  1694.  * rs_close()
  1695.  * 
  1696.  * This routine is called when the serial port gets closed.
  1697.  * Wait for the last remaining data to be sent.
  1698.  * ------------------------------------------------------------
  1699.  */
  1700. static void rs_close(struct tty_struct *tty, struct file * filp)
  1701. {
  1702. struct mac_serial * info = (struct mac_serial *)tty->driver_data;
  1703. unsigned long flags;
  1704. if (!info || serial_paranoia_check(info, tty->device, "rs_close"))
  1705. return;
  1706. save_flags(flags); cli();
  1707. if (tty_hung_up_p(filp)) {
  1708. MOD_DEC_USE_COUNT;
  1709. restore_flags(flags);
  1710. return;
  1711. }
  1712. OPNDBG("rs_close ttyS%d, count = %dn", info->line, info->count);
  1713. if ((tty->count == 1) && (info->count != 1)) {
  1714. /*
  1715.  * Uh, oh.  tty->count is 1, which means that the tty
  1716.  * structure will be freed.  Info->count should always
  1717.  * be one in these conditions.  If it's greater than
  1718.  * one, we've got real problems, since it means the
  1719.  * serial port won't be shutdown.
  1720.  */
  1721. printk(KERN_ERR "rs_close: bad serial port count; tty->count "
  1722. "is 1, info->count is %dn", info->count);
  1723. info->count = 1;
  1724. }
  1725. if (--info->count < 0) {
  1726. printk(KERN_ERR "rs_close: bad serial port count for "
  1727. "ttyS%d: %dn", info->line, info->count);
  1728. info->count = 0;
  1729. }
  1730. if (info->count) {
  1731. MOD_DEC_USE_COUNT;
  1732. restore_flags(flags);
  1733. return;
  1734. }
  1735. info->flags |= ZILOG_CLOSING;
  1736. /*
  1737.  * Save the termios structure, since this port may have
  1738.  * separate termios for callout and dialin.
  1739.  */
  1740. if (info->flags & ZILOG_NORMAL_ACTIVE)
  1741. info->normal_termios = *tty->termios;
  1742. if (info->flags & ZILOG_CALLOUT_ACTIVE)
  1743. info->callout_termios = *tty->termios;
  1744. /*
  1745.  * Now we wait for the transmit buffer to clear; and we notify 
  1746.  * the line discipline to only process XON/XOFF characters.
  1747.  */
  1748. OPNDBG("waiting end of Tx... (timeout:%d)n", info->closing_wait);
  1749. tty->closing = 1;
  1750. if (info->closing_wait != ZILOG_CLOSING_WAIT_NONE) {
  1751. restore_flags(flags);
  1752. tty_wait_until_sent(tty, info->closing_wait);
  1753. save_flags(flags); cli();
  1754. }
  1755. /*
  1756.  * At this point we stop accepting input.  To do this, we
  1757.  * disable the receiver and receive interrupts.
  1758.  */
  1759. info->curregs[3] &= ~RxENABLE;
  1760. info->pendregs[3] = info->curregs[3];
  1761. write_zsreg(info->zs_channel, 3, info->curregs[3]);
  1762. info->curregs[1] &= ~(0x18); /* disable any rx ints */
  1763. info->pendregs[1] = info->curregs[1];
  1764. write_zsreg(info->zs_channel, 1, info->curregs[1]);
  1765. ZS_CLEARFIFO(info->zs_channel);
  1766. if (info->flags & ZILOG_INITIALIZED) {
  1767. /*
  1768.  * Before we drop DTR, make sure the SCC transmitter
  1769.  * has completely drained.
  1770.  */
  1771. OPNDBG("waiting end of Rx...n");
  1772. restore_flags(flags);
  1773. rs_wait_until_sent(tty, info->timeout);
  1774. save_flags(flags); cli();
  1775. }
  1776. shutdown(info);
  1777. /* restore flags now since shutdown() will have disabled this port's
  1778.    specific irqs */
  1779. restore_flags(flags);
  1780. if (tty->driver.flush_buffer)
  1781. tty->driver.flush_buffer(tty);
  1782. if (tty->ldisc.flush_buffer)
  1783. tty->ldisc.flush_buffer(tty);
  1784. tty->closing = 0;
  1785. info->event = 0;
  1786. info->tty = 0;
  1787. if (info->blocked_open) {
  1788. if (info->close_delay) {
  1789. current->state = TASK_INTERRUPTIBLE;
  1790. schedule_timeout(info->close_delay);
  1791. }
  1792. wake_up_interruptible(&info->open_wait);
  1793. }
  1794. info->flags &= ~(ZILOG_NORMAL_ACTIVE|ZILOG_CALLOUT_ACTIVE|
  1795.  ZILOG_CLOSING);
  1796. wake_up_interruptible(&info->close_wait);
  1797. MOD_DEC_USE_COUNT;
  1798. }
  1799. /*
  1800.  * rs_wait_until_sent() --- wait until the transmitter is empty
  1801.  */
  1802. static void rs_wait_until_sent(struct tty_struct *tty, int timeout)
  1803. {
  1804. struct mac_serial *info = (struct mac_serial *) tty->driver_data;
  1805. unsigned long orig_jiffies, char_time;
  1806. if (serial_paranoia_check(info, tty->device, "rs_wait_until_sent"))
  1807. return;
  1808. /* printk("rs_wait_until_sent, timeout:%d, tty_stopped:%d, tx_stopped:%dn",
  1809. timeout, tty->stopped, info->tx_stopped);
  1810. */
  1811. orig_jiffies = jiffies;
  1812. /*
  1813.  * Set the check interval to be 1/5 of the estimated time to
  1814.  * send a single character, and make it at least 1.  The check
  1815.  * interval should also be less than the timeout.
  1816.  */
  1817. if (info->timeout <= HZ/50) {
  1818. printk(KERN_INFO "macserial: invalid info->timeout=%dn",
  1819.     info->timeout);
  1820. info->timeout = HZ/50+1;
  1821. }
  1822. char_time = (info->timeout - HZ/50) / info->xmit_fifo_size;
  1823. char_time = char_time / 5;
  1824. if (char_time > HZ) {
  1825. printk(KERN_WARNING "macserial: char_time %ld >HZ !!!n",
  1826.     char_time);
  1827. char_time = 1;
  1828. } else if (char_time == 0)
  1829. char_time = 1;
  1830. if (timeout)
  1831. char_time = MIN(char_time, timeout);
  1832. while ((read_zsreg(info->zs_channel, 1) & ALL_SNT) == 0) {
  1833. current->state = TASK_INTERRUPTIBLE;
  1834. schedule_timeout(char_time);
  1835. if (signal_pending(current))
  1836. break;
  1837. if (timeout && time_after(jiffies, orig_jiffies + timeout))
  1838. break;
  1839. }
  1840. current->state = TASK_RUNNING;
  1841. }
  1842. /*
  1843.  * rs_hangup() --- called by tty_hangup() when a hangup is signaled.
  1844.  */
  1845. static void rs_hangup(struct tty_struct *tty)
  1846. {
  1847. struct mac_serial * info = (struct mac_serial *)tty->driver_data;
  1848. if (serial_paranoia_check(info, tty->device, "rs_hangup"))
  1849. return;
  1850. rs_flush_buffer(tty);
  1851. shutdown(info);
  1852. info->event = 0;
  1853. info->count = 0;
  1854. info->flags &= ~(ZILOG_NORMAL_ACTIVE|ZILOG_CALLOUT_ACTIVE);
  1855. info->tty = 0;
  1856. wake_up_interruptible(&info->open_wait);
  1857. }
  1858. /*
  1859.  * ------------------------------------------------------------
  1860.  * rs_open() and friends
  1861.  * ------------------------------------------------------------
  1862.  */
  1863. static int block_til_ready(struct tty_struct *tty, struct file * filp,
  1864.    struct mac_serial *info)
  1865. {
  1866. DECLARE_WAITQUEUE(wait,current);
  1867. int retval;
  1868. int do_clocal = 0;
  1869. /*
  1870.  * If the device is in the middle of being closed, then block
  1871.  * until it's done, and then try again.
  1872.  */
  1873. if (info->flags & ZILOG_CLOSING) {
  1874. interruptible_sleep_on(&info->close_wait);
  1875. #ifdef SERIAL_DO_RESTART
  1876. return ((info->flags & ZILOG_HUP_NOTIFY) ?
  1877. -EAGAIN : -ERESTARTSYS);
  1878. #else
  1879. return -EAGAIN;
  1880. #endif
  1881. }
  1882. /*
  1883.  * If this is a callout device, then just make sure the normal
  1884.  * device isn't being used.
  1885.  */
  1886. if (tty->driver.subtype == SERIAL_TYPE_CALLOUT) {
  1887. if (info->flags & ZILOG_NORMAL_ACTIVE)
  1888. return -EBUSY;
  1889. if ((info->flags & ZILOG_CALLOUT_ACTIVE) &&
  1890.     (info->flags & ZILOG_SESSION_LOCKOUT) &&
  1891.     (info->session != current->session))
  1892.     return -EBUSY;
  1893. if ((info->flags & ZILOG_CALLOUT_ACTIVE) &&
  1894.     (info->flags & ZILOG_PGRP_LOCKOUT) &&
  1895.     (info->pgrp != current->pgrp))
  1896.     return -EBUSY;
  1897. info->flags |= ZILOG_CALLOUT_ACTIVE;
  1898. return 0;
  1899. }
  1900. /*
  1901.  * If non-blocking mode is set, or the port is not enabled,
  1902.  * then make the check up front and then exit.
  1903.  */
  1904. if ((filp->f_flags & O_NONBLOCK) ||
  1905.     (tty->flags & (1 << TTY_IO_ERROR))) {
  1906. if (info->flags & ZILOG_CALLOUT_ACTIVE)
  1907. return -EBUSY;
  1908. info->flags |= ZILOG_NORMAL_ACTIVE;
  1909. return 0;
  1910. }
  1911. if (info->flags & ZILOG_CALLOUT_ACTIVE) {
  1912. if (info->normal_termios.c_cflag & CLOCAL)
  1913. do_clocal = 1;
  1914. } else {
  1915. if (tty->termios->c_cflag & CLOCAL)
  1916. do_clocal = 1;
  1917. }
  1918. /*
  1919.  * Block waiting for the carrier detect and the line to become
  1920.  * free (i.e., not in use by the callout).  While we are in
  1921.  * this loop, info->count is dropped by one, so that
  1922.  * rs_close() knows when to free things.  We restore it upon
  1923.  * exit, either normal or abnormal.
  1924.  */
  1925. retval = 0;
  1926. add_wait_queue(&info->open_wait, &wait);
  1927. OPNDBG("block_til_ready before block: ttyS%d, count = %dn",
  1928.        info->line, info->count);
  1929. cli();
  1930. if (!tty_hung_up_p(filp)) 
  1931. info->count--;
  1932. sti();
  1933. info->blocked_open++;
  1934. while (1) {
  1935. cli();
  1936. if (!(info->flags & ZILOG_CALLOUT_ACTIVE) &&
  1937.     (tty->termios->c_cflag & CBAUD) &&
  1938.     !info->is_irda)
  1939. zs_rtsdtr(info, 1);
  1940. sti();
  1941. set_current_state(TASK_INTERRUPTIBLE);
  1942. if (tty_hung_up_p(filp) ||
  1943.     !(info->flags & ZILOG_INITIALIZED)) {
  1944. #ifdef SERIAL_DO_RESTART
  1945. if (info->flags & ZILOG_HUP_NOTIFY)
  1946. retval = -EAGAIN;
  1947. else
  1948. retval = -ERESTARTSYS;
  1949. #else
  1950. retval = -EAGAIN;
  1951. #endif
  1952. break;
  1953. }
  1954. if (!(info->flags & ZILOG_CALLOUT_ACTIVE) &&
  1955.     !(info->flags & ZILOG_CLOSING) &&
  1956.     (do_clocal || (read_zsreg(info->zs_channel, 0) & DCD)))
  1957. break;
  1958. if (signal_pending(current)) {
  1959. retval = -ERESTARTSYS;
  1960. break;
  1961. }
  1962. OPNDBG("block_til_ready blocking: ttyS%d, count = %dn",
  1963.        info->line, info->count);
  1964. schedule();
  1965. }
  1966. current->state = TASK_RUNNING;
  1967. remove_wait_queue(&info->open_wait, &wait);
  1968. if (!tty_hung_up_p(filp))
  1969. info->count++;
  1970. info->blocked_open--;
  1971. OPNDBG("block_til_ready after blocking: ttyS%d, count = %dn",
  1972.        info->line, info->count);
  1973. if (retval)
  1974. return retval;
  1975. info->flags |= ZILOG_NORMAL_ACTIVE;
  1976. return 0;
  1977. }
  1978. /*
  1979.  * This routine is called whenever a serial port is opened.  It
  1980.  * enables interrupts for a serial port, linking in its ZILOG structure into
  1981.  * the IRQ chain.   It also performs the serial-specific
  1982.  * initialization for the tty structure.
  1983.  */
  1984. static int rs_open(struct tty_struct *tty, struct file * filp)
  1985. {
  1986. struct mac_serial *info;
  1987. int  retval, line;
  1988. unsigned long page;
  1989. MOD_INC_USE_COUNT;
  1990. line = MINOR(tty->device) - tty->driver.minor_start;
  1991. if ((line < 0) || (line >= zs_channels_found)) {
  1992. MOD_DEC_USE_COUNT;
  1993. return -ENODEV;
  1994. }
  1995. info = zs_soft + line;
  1996. #ifdef CONFIG_KGDB
  1997. if (info->kgdb_channel) {
  1998. MOD_DEC_USE_COUNT;
  1999. return -ENODEV;
  2000. }
  2001. #endif
  2002. if (serial_paranoia_check(info, tty->device, "rs_open"))
  2003. return -ENODEV;
  2004. OPNDBG("rs_open %s%d, count = %d, tty=%pn", tty->driver.name,
  2005.        info->line, info->count, tty);
  2006. info->count++;
  2007. tty->driver_data = info;
  2008. info->tty = tty;
  2009. if (!tmp_buf) {
  2010. page = get_free_page(GFP_KERNEL);
  2011. if (!page)
  2012. return -ENOMEM;
  2013. if (tmp_buf)
  2014. free_page(page);
  2015. else
  2016. tmp_buf = (unsigned char *) page;
  2017. }
  2018. /*
  2019.  * If the port is the middle of closing, bail out now
  2020.  */
  2021. if (tty_hung_up_p(filp) ||
  2022.     (info->flags & ZILOG_CLOSING)) {
  2023. if (info->flags & ZILOG_CLOSING)
  2024. interruptible_sleep_on(&info->close_wait);
  2025. #ifdef SERIAL_DO_RESTART
  2026. return ((info->flags & ZILOG_HUP_NOTIFY) ?
  2027. -EAGAIN : -ERESTARTSYS);
  2028. #else
  2029. return -EAGAIN;
  2030. #endif
  2031. }
  2032. /*
  2033.  * Start up serial port
  2034.  */
  2035. retval = startup(info);
  2036. if (retval)
  2037. return retval;
  2038. retval = block_til_ready(tty, filp, info);
  2039. if (retval) {
  2040. OPNDBG("rs_open returning after block_til_ready with %dn",
  2041. retval);
  2042. return retval;
  2043. }
  2044. if ((info->count == 1) && (info->flags & ZILOG_SPLIT_TERMIOS)) {
  2045. if (tty->driver.subtype == SERIAL_TYPE_NORMAL)
  2046. *tty->termios = info->normal_termios;
  2047. else 
  2048. *tty->termios = info->callout_termios;
  2049. change_speed(info, 0);
  2050. }
  2051. #ifdef CONFIG_SERIAL_CONSOLE
  2052. if (sercons.cflag && sercons.index == line) {
  2053. tty->termios->c_cflag = sercons.cflag;
  2054. sercons.cflag = 0;
  2055. change_speed(info, 0);
  2056. }
  2057. #endif
  2058. info->session = current->session;
  2059. info->pgrp = current->pgrp;
  2060. OPNDBG("rs_open ttyS%d successful...n", info->line);
  2061. return 0;
  2062. }
  2063. /* Finally, routines used to initialize the serial driver. */
  2064. static void show_serial_version(void)
  2065. {
  2066. printk(KERN_INFO "PowerMac Z8530 serial driver version " MACSERIAL_VERSION "n");
  2067. }
  2068. /*
  2069.  * Initialize one channel, both the mac_serial and mac_zschannel
  2070.  * structs.  We use the dev_node field of the mac_serial struct.
  2071.  */
  2072. static int
  2073. chan_init(struct mac_serial *zss, struct mac_zschannel *zs_chan,
  2074.   struct mac_zschannel *zs_chan_a)
  2075. {
  2076. struct device_node *ch = zss->dev_node;
  2077. char *conn;
  2078. int len;
  2079. struct slot_names_prop {
  2080. int count;
  2081. char name[1];
  2082. } *slots;
  2083. zss->irq = ch->intrs[0].line;
  2084. zss->has_dma = 0;
  2085. #if !defined(CONFIG_KGDB) && defined(SUPPORT_SERIAL_DMA)
  2086. if (ch->n_addrs >= 3 && ch->n_intrs == 3)
  2087. zss->has_dma = 1;
  2088. #endif
  2089. zss->dma_initted = 0;
  2090. zs_chan->control = (volatile unsigned char *)
  2091. ioremap(ch->addrs[0].address, 0x1000);
  2092. zs_chan->data = zs_chan->control + 0x10;
  2093. spin_lock_init(&zs_chan->lock);
  2094. zs_chan->parent = zss;
  2095. zss->zs_channel = zs_chan;
  2096. zss->zs_chan_a = zs_chan_a;
  2097. /* setup misc varariables */
  2098. zss->kgdb_channel = 0;
  2099. /* For now, we assume you either have a slot-names property
  2100.  * with "Modem" in it, or your channel is compatible with
  2101.  * "cobalt". Might need additional fixups
  2102.  */
  2103. zss->is_internal_modem = device_is_compatible(ch, "cobalt");
  2104. conn = get_property(ch, "AAPL,connector", &len);
  2105. zss->is_irda = conn && (strcmp(conn, "infrared") == 0);
  2106. zss->port_type = PMAC_SCC_ASYNC;
  2107. /* 1999 Powerbook G3 has slot-names property instead */
  2108. slots = (struct slot_names_prop *)get_property(ch, "slot-names", &len);
  2109. if (slots && slots->count > 0) {
  2110. if (strcmp(slots->name, "IrDA") == 0)
  2111. zss->is_irda = 1;
  2112. else if (strcmp(slots->name, "Modem") == 0)
  2113. zss->is_internal_modem = 1;
  2114. }
  2115. if (zss->is_irda)
  2116. zss->port_type = PMAC_SCC_IRDA;
  2117. if (zss->is_internal_modem) {
  2118. struct device_node* i2c_modem = find_devices("i2c-modem");
  2119. if (i2c_modem) {
  2120. char* mid = get_property(i2c_modem, "modem-id", NULL);
  2121. if (mid) switch(*mid) {
  2122. case 0x04 :
  2123. case 0x05 :
  2124. case 0x07 :
  2125. case 0x08 :
  2126. case 0x0b :
  2127. case 0x0c :
  2128. zss->port_type = PMAC_SCC_I2S1;
  2129. }
  2130. printk(KERN_INFO "macserial: i2c-modem detected, id: %dn",
  2131. mid ? (*mid) : 0);
  2132. } else {
  2133. printk(KERN_INFO "macserial: serial modem detectedn");
  2134. }
  2135. }
  2136. while (zss->has_dma) {
  2137. zss->dma_priv = NULL;
  2138. /* it seems that the last two addresses are the
  2139.    DMA controllers */
  2140. zss->tx_dma = (volatile struct dbdma_regs *)
  2141. ioremap(ch->addrs[ch->n_addrs - 2].address, 0x100);
  2142. zss->rx = (volatile struct mac_dma *)
  2143. ioremap(ch->addrs[ch->n_addrs - 1].address, 0x100);
  2144. zss->tx_dma_irq = ch->intrs[1].line;
  2145. zss->rx_dma_irq = ch->intrs[2].line;
  2146. spin_lock_init(&zss->rx_dma_lock);
  2147. break;
  2148. }
  2149. init_timer(&zss->powerup_timer);
  2150. zss->powerup_timer.function = powerup_done;
  2151. zss->powerup_timer.data = (unsigned long) zss;
  2152. return 0;
  2153. }
  2154. /*
  2155.  * /proc fs routines. TODO: Add status lines & error stats
  2156.  */
  2157. static inline int
  2158. line_info(char *buf, struct mac_serial *info)
  2159. {
  2160. int ret=0;
  2161. unsigned char* connector;
  2162. int lenp;
  2163. ret += sprintf(buf, "%d: port:0x%X irq:%d", info->line, info->port, info->irq);
  2164. connector = get_property(info->dev_node, "AAPL,connector", &lenp);
  2165. if (connector)
  2166. ret+=sprintf(buf+ret," con:%s ", connector);
  2167. if (info->is_internal_modem) {
  2168. if (!connector)
  2169. ret+=sprintf(buf+ret," con:");
  2170. ret+=sprintf(buf+ret,"%s", " (internal modem)");
  2171. }
  2172. if (info->is_irda) {
  2173. if (!connector)
  2174. ret+=sprintf(buf+ret," con:");
  2175. ret+=sprintf(buf+ret,"%s", " (IrDA)");
  2176. }
  2177. ret+=sprintf(buf+ret,"n");
  2178. return ret;
  2179. }
  2180. int macserial_read_proc(char *page, char **start, off_t off, int count,
  2181.  int *eof, void *data)
  2182. {
  2183. int l, len = 0;
  2184. off_t begin = 0;
  2185. struct mac_serial *info;
  2186. len += sprintf(page, "serinfo:1.0 driver:" MACSERIAL_VERSION "n");
  2187. for (info = zs_chain; info && len < 4000; info = info->zs_next) {
  2188. l = line_info(page + len, info);
  2189. len += l;
  2190. if (len+begin > off+count)
  2191. goto done;
  2192. if (len+begin < off) {
  2193. begin += len;
  2194. len = 0;
  2195. }
  2196. }
  2197. *eof = 1;
  2198. done:
  2199. if (off >= len+begin)
  2200. return 0;
  2201. *start = page + (off-begin);
  2202. return ((count < begin+len-off) ? count : begin+len-off);
  2203. }
  2204. /* Ask the PROM how many Z8530s we have and initialize their zs_channels */
  2205. static void
  2206. probe_sccs()
  2207. {
  2208. struct device_node *dev, *ch;
  2209. struct mac_serial **pp;
  2210. int n, chip, nchan;
  2211. struct mac_zschannel *zs_chan;
  2212. int chan_a_index;
  2213. n = 0;
  2214. pp = &zs_chain;
  2215. zs_chan = zs_channels;
  2216. for (dev = find_devices("escc"); dev != 0; dev = dev->next) {
  2217. nchan = 0;
  2218. chip = n;
  2219. if (n >= NUM_CHANNELS) {
  2220. printk(KERN_WARNING "Sorry, can't use %s: no more "
  2221.     "channelsn", dev->full_name);
  2222. continue;
  2223. }
  2224. chan_a_index = 0;
  2225. for (ch = dev->child; ch != 0; ch = ch->sibling) {
  2226. if (nchan >= 2) {
  2227. printk(KERN_WARNING "SCC: Only 2 channels per "
  2228. "chip are supportedn");
  2229. break;
  2230. }
  2231. if (ch->n_addrs < 1 || (ch ->n_intrs < 1)) {
  2232. printk("Can't use %s: %d addrs %d intrsn",
  2233.       ch->full_name, ch->n_addrs, ch->n_intrs);
  2234. continue;
  2235. }
  2236. /* The channel with the higher address
  2237.    will be the A side. */
  2238. if (nchan > 0 &&
  2239.     ch->addrs[0].address
  2240.     > zs_soft[n-1].dev_node->addrs[0].address)
  2241. chan_a_index = 1;
  2242. /* minimal initialization for now */
  2243. zs_soft[n].dev_node = ch;
  2244. *pp = &zs_soft[n];
  2245. pp = &zs_soft[n].zs_next;
  2246. ++nchan;
  2247. ++n;
  2248. }
  2249. if (nchan == 0)
  2250. continue;
  2251. /* set up A side */
  2252. if (chan_init(&zs_soft[chip + chan_a_index], zs_chan, zs_chan))
  2253. continue;
  2254. ++zs_chan;
  2255. /* set up B side, if it exists */
  2256. if (nchan > 1)
  2257. if (chan_init(&zs_soft[chip + 1 - chan_a_index],
  2258.   zs_chan, zs_chan - 1))
  2259. continue;
  2260. ++zs_chan;
  2261. }
  2262. *pp = 0;
  2263. zs_channels_found = n;
  2264. #ifdef CONFIG_PMAC_PBOOK
  2265. if (n)
  2266. pmu_register_sleep_notifier(&serial_sleep_notifier);
  2267. #endif /* CONFIG_PMAC_PBOOK */
  2268. }
  2269. /* rs_init inits the driver */
  2270. int macserial_init(void)
  2271. {
  2272. int channel, i;
  2273. unsigned long flags;
  2274. struct mac_serial *info;
  2275. /* Setup base handler, and timer table. */
  2276. init_bh(MACSERIAL_BH, do_serial_bh);
  2277. /* Find out how many Z8530 SCCs we have */
  2278. if (zs_chain == 0)
  2279. probe_sccs();
  2280. /* XXX assume it's a powerbook if we have a via-pmu
  2281.  * 
  2282.  * This is OK for core99 machines as well.
  2283.  */
  2284. is_powerbook = find_devices("via-pmu") != 0;
  2285. /* Register the interrupt handler for each one
  2286.  * We also request the OF resources here as probe_sccs()
  2287.  * might be called too early for that
  2288.  */
  2289. save_flags(flags); cli();
  2290. for (i = 0; i < zs_channels_found; ++i) {
  2291. struct device_node* ch = zs_soft[i].dev_node;
  2292. if (!request_OF_resource(ch, 0, NULL)) {
  2293. printk(KERN_ERR "macserial: can't request IO resource !n");
  2294. return -ENODEV;
  2295. }
  2296. if (zs_soft[i].has_dma) {
  2297. if (!request_OF_resource(ch, ch->n_addrs - 2, " (tx dma)")) {
  2298. printk(KERN_ERR "macserial: can't request TX DMA resource !n");
  2299. zs_soft[i].has_dma = 0;
  2300. goto no_dma;
  2301. }
  2302. if (!request_OF_resource(ch, ch->n_addrs - 1, " (rx dma)")) {
  2303. release_OF_resource(ch, ch->n_addrs - 2);
  2304. printk(KERN_ERR "macserial: can't request RX DMA resource !n");
  2305. zs_soft[i].has_dma = 0;
  2306. goto no_dma;
  2307. }
  2308. if (request_irq(zs_soft[i].tx_dma_irq, rs_txdma_irq, 0,
  2309. "SCC-txdma", &zs_soft[i]))
  2310. printk(KERN_ERR "macserial: can't get irq %dn",
  2311.        zs_soft[i].tx_dma_irq);
  2312. disable_irq(zs_soft[i].tx_dma_irq);
  2313. if (request_irq(zs_soft[i].rx_dma_irq, rs_rxdma_irq, 0,
  2314. "SCC-rxdma", &zs_soft[i]))
  2315. printk(KERN_ERR "macserial: can't get irq %dn",
  2316.        zs_soft[i].rx_dma_irq);
  2317. disable_irq(zs_soft[i].rx_dma_irq);
  2318. }
  2319. no_dma:
  2320. if (request_irq(zs_soft[i].irq, rs_interrupt, 0,
  2321. "SCC", &zs_soft[i]))
  2322. printk(KERN_ERR "macserial: can't get irq %dn",
  2323.        zs_soft[i].irq);
  2324. disable_irq(zs_soft[i].irq);
  2325. }
  2326. restore_flags(flags);
  2327. show_serial_version();
  2328. /* Initialize the tty_driver structure */
  2329. /* Not all of this is exactly right for us. */
  2330. memset(&serial_driver, 0, sizeof(struct tty_driver));
  2331. serial_driver.magic = TTY_DRIVER_MAGIC;
  2332. serial_driver.driver_name = "macserial";
  2333. #ifdef CONFIG_DEVFS_FS
  2334. serial_driver.name = "tts/%d";
  2335. #else
  2336. serial_driver.name = "ttyS";
  2337. #endif /* CONFIG_DEVFS_FS */
  2338. serial_driver.major = TTY_MAJOR;
  2339. serial_driver.minor_start = 64;
  2340. serial_driver.num = zs_channels_found;
  2341. serial_driver.type = TTY_DRIVER_TYPE_SERIAL;
  2342. serial_driver.subtype = SERIAL_TYPE_NORMAL;
  2343. serial_driver.init_termios = tty_std_termios;
  2344. serial_driver.init_termios.c_cflag =
  2345. B38400 | CS8 | CREAD | HUPCL | CLOCAL;
  2346. serial_driver.flags = TTY_DRIVER_REAL_RAW;
  2347. serial_driver.refcount = &serial_refcount;
  2348. serial_driver.table = serial_table;
  2349. serial_driver.termios = serial_termios;
  2350. serial_driver.termios_locked = serial_termios_locked;
  2351. serial_driver.open = rs_open;
  2352. serial_driver.close = rs_close;
  2353. serial_driver.write = rs_write;
  2354. serial_driver.flush_chars = rs_flush_chars;
  2355. serial_driver.write_room = rs_write_room;
  2356. serial_driver.chars_in_buffer = rs_chars_in_buffer;
  2357. serial_driver.flush_buffer = rs_flush_buffer;
  2358. serial_driver.ioctl = rs_ioctl;
  2359. serial_driver.throttle = rs_throttle;
  2360. serial_driver.unthrottle = rs_unthrottle;
  2361. serial_driver.set_termios = rs_set_termios;
  2362. serial_driver.stop = rs_stop;
  2363. serial_driver.start = rs_start;
  2364. serial_driver.hangup = rs_hangup;
  2365. serial_driver.break_ctl = rs_break;
  2366. serial_driver.wait_until_sent = rs_wait_until_sent;
  2367. serial_driver.read_proc = macserial_read_proc;
  2368. /*
  2369.  * The callout device is just like normal device except for
  2370.  * major number and the subtype code.
  2371.  */
  2372. callout_driver = serial_driver;
  2373. #ifdef CONFIG_DEVFS_FS
  2374. callout_driver.name = "cua/%d";
  2375. #else
  2376. callout_driver.name = "cua";
  2377. #endif /* CONFIG_DEVFS_FS */
  2378. callout_driver.major = TTYAUX_MAJOR;
  2379. callout_driver.subtype = SERIAL_TYPE_CALLOUT;
  2380. callout_driver.read_proc = 0;
  2381. callout_driver.proc_entry = 0;
  2382. if (tty_register_driver(&serial_driver))
  2383. panic("Couldn't register serial drivern");
  2384. if (tty_register_driver(&callout_driver))
  2385. panic("Couldn't register callout drivern");
  2386. for (channel = 0; channel < zs_channels_found; ++channel) {
  2387. #ifdef CONFIG_KGDB
  2388. if (zs_soft[channel].kgdb_channel) {
  2389. kgdb_interruptible(1);
  2390. continue;
  2391. }
  2392. #endif
  2393. zs_soft[channel].clk_divisor = 16;
  2394. /* -- we are not sure the SCC is powered ON at this point
  2395.   zs_soft[channel].zs_baud = get_zsbaud(&zs_soft[channel]);
  2396. */
  2397. zs_soft[channel].zs_baud = 38400;
  2398. /* If console serial line, then enable interrupts. */
  2399. if (zs_soft[channel].is_cons) {
  2400. printk(KERN_INFO "macserial: console line, enabling "
  2401. "interrupt %dn", zs_soft[channel].irq);
  2402. panic("macserial: console not supported yet !");
  2403. write_zsreg(zs_soft[channel].zs_channel, R1,
  2404.     (EXT_INT_ENAB | INT_ALL_Rx | TxINT_ENAB));
  2405. write_zsreg(zs_soft[channel].zs_channel, R9,
  2406.     (NV | MIE));
  2407. }
  2408. }
  2409. for (info = zs_chain, i = 0; info; info = info->zs_next, i++)
  2410. {
  2411. unsigned char* connector;
  2412. int lenp;
  2413. #ifdef CONFIG_KGDB
  2414. if (info->kgdb_channel) {
  2415. continue;
  2416. }
  2417. #endif
  2418. info->magic = SERIAL_MAGIC;
  2419. info->port = (int) info->zs_channel->control;
  2420. info->line = i;
  2421. info->tty = 0;
  2422. info->custom_divisor = 16;
  2423. info->timeout = 0;
  2424. info->close_delay = 50;
  2425. info->closing_wait = 3000;
  2426. info->x_char = 0;
  2427. info->event = 0;
  2428. info->count = 0;
  2429. info->blocked_open = 0;
  2430. info->tqueue.routine = do_softint;
  2431. info->tqueue.data = info;
  2432. info->callout_termios =callout_driver.init_termios;
  2433. info->normal_termios = serial_driver.init_termios;
  2434. init_waitqueue_head(&info->open_wait);
  2435. init_waitqueue_head(&info->close_wait);
  2436. info->timeout = HZ;
  2437. printk(KERN_INFO "tty%02d at 0x%08x (irq = %d)", info->line, 
  2438. info->port, info->irq);
  2439. printk(" is a Z8530 ESCC");
  2440. connector = get_property(info->dev_node, "AAPL,connector", &lenp);
  2441. if (connector)
  2442. printk(", port = %s", connector);
  2443. if (info->is_internal_modem)
  2444. printk(" (internal modem)");
  2445. if (info->is_irda)
  2446. printk(" (IrDA)");
  2447. printk("n");
  2448.   }
  2449. tmp_buf = 0;
  2450. return 0;
  2451. }
  2452. void macserial_cleanup(void)
  2453. {
  2454. int i;
  2455. unsigned long flags;
  2456. struct mac_serial *info;
  2457. for (info = zs_chain, i = 0; info; info = info->zs_next, i++)
  2458. set_scc_power(info, 0);
  2459. save_flags(flags); cli();
  2460. for (i = 0; i < zs_channels_found; ++i) {
  2461. free_irq(zs_soft[i].irq, &zs_soft[i]);
  2462. if (zs_soft[i].has_dma) {
  2463. free_irq(zs_soft[i].tx_dma_irq, &zs_soft[i]);
  2464. free_irq(zs_soft[i].rx_dma_irq, &zs_soft[i]);
  2465. }
  2466. release_OF_resource(zs_soft[i].dev_node, 0);
  2467. if (zs_soft[i].has_dma) {
  2468. struct device_node* ch = zs_soft[i].dev_node;
  2469. release_OF_resource(ch, ch->n_addrs - 2);
  2470. release_OF_resource(ch, ch->n_addrs - 1);
  2471. }
  2472. }
  2473. restore_flags(flags);
  2474. tty_unregister_driver(&callout_driver);
  2475. tty_unregister_driver(&serial_driver);
  2476. if (tmp_buf) {
  2477. free_page((unsigned long) tmp_buf);
  2478. tmp_buf = 0;
  2479. }
  2480. #ifdef CONFIG_PMAC_PBOOK
  2481. if (zs_channels_found)
  2482. pmu_unregister_sleep_notifier(&serial_sleep_notifier);
  2483. #endif /* CONFIG_PMAC_PBOOK */
  2484. }
  2485. module_init(macserial_init);
  2486. module_exit(macserial_cleanup);
  2487. MODULE_LICENSE("GPL");
  2488. EXPORT_NO_SYMBOLS;
  2489. #if 0
  2490. /*
  2491.  * register_serial and unregister_serial allows for serial ports to be
  2492.  * configured at run-time, to support PCMCIA modems.
  2493.  */
  2494. /* PowerMac: Unused at this time, just here to make things link. */
  2495. int register_serial(struct serial_struct *req)
  2496. {
  2497. return -1;
  2498. }
  2499. void unregister_serial(int line)
  2500. {
  2501. return;
  2502. }
  2503. #endif
  2504. /*
  2505.  * ------------------------------------------------------------
  2506.  * Serial console driver
  2507.  * ------------------------------------------------------------
  2508.  */
  2509. #ifdef CONFIG_SERIAL_CONSOLE
  2510. /*
  2511.  * Print a string to the serial port trying not to disturb
  2512.  * any possible real use of the port...
  2513.  */
  2514. static void serial_console_write(struct console *co, const char *s,
  2515.  unsigned count)
  2516. {
  2517. struct mac_serial *info = zs_soft + co->index;
  2518. int i;
  2519. /* Turn of interrupts and enable the transmitter. */
  2520. write_zsreg(info->zs_channel, R1, info->curregs[1] & ~TxINT_ENAB);
  2521. write_zsreg(info->zs_channel, R5, info->curregs[5] | TxENAB | RTS | DTR);
  2522. for (i=0; i<count; i++) {
  2523. /* Wait for the transmit buffer to empty. */
  2524. while ((read_zsreg(info->zs_channel, 0) & Tx_BUF_EMP) == 0) {
  2525. eieio();
  2526. }
  2527. write_zsdata(info->zs_channel, s[i]);
  2528. if (s[i] == 10) {
  2529. while ((read_zsreg(info->zs_channel, 0) & Tx_BUF_EMP)
  2530.                                 == 0)
  2531. eieio();
  2532. write_zsdata(info->zs_channel, 13);
  2533. }
  2534. }
  2535. /* Restore the values in the registers. */
  2536. write_zsreg(info->zs_channel, R1, info->curregs[1]);
  2537. /* Don't disable the transmitter. */
  2538. }
  2539. /*
  2540.  * Receive character from the serial port
  2541.  */
  2542. static int serial_console_wait_key(struct console *co)
  2543. {
  2544. struct mac_serial *info = zs_soft + co->index;
  2545. int           val;
  2546. /* Turn of interrupts and enable the transmitter. */
  2547. write_zsreg(info->zs_channel, R1, info->curregs[1] & ~INT_ALL_Rx);
  2548. write_zsreg(info->zs_channel, R3, info->curregs[3] | RxENABLE);
  2549. /* Wait for something in the receive buffer. */
  2550. while((read_zsreg(info->zs_channel, 0) & Rx_CH_AV) == 0)
  2551. eieio();
  2552. val = read_zsdata(info->zs_channel);
  2553. /* Restore the values in the registers. */
  2554. write_zsreg(info->zs_channel, R1, info->curregs[1]);
  2555. write_zsreg(info->zs_channel, R3, info->curregs[3]);
  2556. return val;
  2557. }
  2558. static kdev_t serial_console_device(struct console *c)
  2559. {
  2560. return MKDEV(TTY_MAJOR, 64 + c->index);
  2561. }
  2562. /*
  2563.  * Setup initial baud/bits/parity. We do two things here:
  2564.  * - construct a cflag setting for the first rs_open()
  2565.  * - initialize the serial port
  2566.  * Return non-zero if we didn't find a serial port.
  2567.  */
  2568. static int __init serial_console_setup(struct console *co, char *options)
  2569. {
  2570. struct mac_serial *info;
  2571. int baud = 38400;
  2572. int bits = 8;
  2573. int parity = 'n';
  2574. int cflag = CREAD | HUPCL | CLOCAL;
  2575. int brg;
  2576. char *s;
  2577. long flags;
  2578. /* Find out how many Z8530 SCCs we have */
  2579. if (zs_chain == 0)
  2580. probe_sccs();
  2581. if (zs_chain == 0)
  2582. return -1;
  2583. /* Do we have the device asked for? */
  2584. if (co->index >= zs_channels_found)
  2585. return -1;
  2586. info = zs_soft + co->index;
  2587. set_scc_power(info, 1);
  2588. /* Reset the channel */
  2589. write_zsreg(info->zs_channel, R9, CHRA);
  2590. if (options) {
  2591. baud = simple_strtoul(options, NULL, 10);
  2592. s = options;
  2593. while(*s >= '0' && *s <= '9')
  2594. s++;
  2595. if (*s)
  2596. parity = *s++;
  2597. if (*s)
  2598. bits   = *s - '0';
  2599. }
  2600. /*
  2601.  * Now construct a cflag setting.
  2602.  */
  2603. switch(baud) {
  2604. case 1200:
  2605. cflag |= B1200;
  2606. break;
  2607. case 2400:
  2608. cflag |= B2400;
  2609. break;
  2610. case 4800:
  2611. cflag |= B4800;
  2612. break;
  2613. case 9600:
  2614. cflag |= B9600;
  2615. break;
  2616. case 19200:
  2617. cflag |= B19200;
  2618. break;
  2619. case 57600:
  2620. cflag |= B57600;
  2621. break;
  2622. case 115200:
  2623. cflag |= B115200;
  2624. break;
  2625. case 38400:
  2626. default:
  2627. cflag |= B38400;
  2628. break;
  2629. }
  2630. switch(bits) {
  2631. case 7:
  2632. cflag |= CS7;
  2633. break;
  2634. default:
  2635. case 8:
  2636. cflag |= CS8;
  2637. break;
  2638. }
  2639. switch(parity) {
  2640. case 'o': case 'O':
  2641. cflag |= PARENB | PARODD;
  2642. break;
  2643. case 'e': case 'E':
  2644. cflag |= PARENB;
  2645. break;
  2646. }
  2647. co->cflag = cflag;
  2648. save_flags(flags); cli();
  2649.         memset(info->curregs, 0, sizeof(info->curregs));
  2650. info->zs_baud = baud;
  2651. info->clk_divisor = 16;
  2652. switch (info->zs_baud) {
  2653. case ZS_CLOCK/16: /* 230400 */
  2654. info->curregs[4] = X16CLK;
  2655. info->curregs[11] = 0;
  2656. break;
  2657. case ZS_CLOCK/32: /* 115200 */
  2658. info->curregs[4] = X32CLK;
  2659. info->curregs[11] = 0;
  2660. break;
  2661. default:
  2662. info->curregs[4] = X16CLK;
  2663. info->curregs[11] = TCBR | RCBR;
  2664. brg = BPS_TO_BRG(info->zs_baud, ZS_CLOCK/info->clk_divisor);
  2665. info->curregs[12] = (brg & 255);
  2666. info->curregs[13] = ((brg >> 8) & 255);
  2667. info->curregs[14] = BRENABL;
  2668. }
  2669. /* byte size and parity */
  2670. info->curregs[3] &= ~RxNBITS_MASK;
  2671. info->curregs[5] &= ~TxNBITS_MASK;
  2672. switch (cflag & CSIZE) {
  2673. case CS5:
  2674. info->curregs[3] |= Rx5;
  2675. info->curregs[5] |= Tx5;
  2676. break;
  2677. case CS6:
  2678. info->curregs[3] |= Rx6;
  2679. info->curregs[5] |= Tx6;
  2680. break;
  2681. case CS7:
  2682. info->curregs[3] |= Rx7;
  2683. info->curregs[5] |= Tx7;
  2684. break;
  2685. case CS8:
  2686. default: /* defaults to 8 bits */
  2687. info->curregs[3] |= Rx8;
  2688. info->curregs[5] |= Tx8;
  2689. break;
  2690. }
  2691.         info->curregs[5] |= TxENAB | RTS | DTR;
  2692. info->pendregs[3] = info->curregs[3];
  2693. info->pendregs[5] = info->curregs[5];
  2694. info->curregs[4] &= ~(SB_MASK | PAR_ENA | PAR_EVEN);
  2695. if (cflag & CSTOPB) {
  2696. info->curregs[4] |= SB2;
  2697. } else {
  2698. info->curregs[4] |= SB1;
  2699. }
  2700. if (cflag & PARENB) {
  2701. info->curregs[4] |= PAR_ENA;
  2702. if (!(cflag & PARODD)) {
  2703. info->curregs[4] |= PAR_EVEN;
  2704. }
  2705. }
  2706. info->pendregs[4] = info->curregs[4];
  2707. if (!(cflag & CLOCAL)) {
  2708. if (!(info->curregs[15] & DCDIE))
  2709. info->read_reg_zero = read_zsreg(info->zs_channel, 0);
  2710. info->curregs[15] |= DCDIE;
  2711. } else
  2712. info->curregs[15] &= ~DCDIE;
  2713. if (cflag & CRTSCTS) {
  2714. info->curregs[15] |= CTSIE;
  2715. if ((read_zsreg(info->zs_channel, 0) & CTS) != 0)
  2716. info->tx_stopped = 1;
  2717. } else {
  2718. info->curregs[15] &= ~CTSIE;
  2719. info->tx_stopped = 0;
  2720. }
  2721. info->pendregs[15] = info->curregs[15];
  2722. /* Load up the new values */
  2723. load_zsregs(info->zs_channel, info->curregs);
  2724. restore_flags(flags);
  2725. return 0;
  2726. }
  2727. static struct console sercons = {
  2728. name: "ttyS",
  2729. write: serial_console_write,
  2730. device: serial_console_device,
  2731. wait_key: serial_console_wait_key,
  2732. setup: serial_console_setup,
  2733. flags: CON_PRINTBUFFER,
  2734. index: -1,
  2735. };
  2736. /*
  2737.  * Register console.
  2738.  */
  2739. void __init mac_scc_console_init(void)
  2740. {
  2741. register_console(&sercons);
  2742. }
  2743. #endif /* ifdef CONFIG_SERIAL_CONSOLE */
  2744. #ifdef CONFIG_KGDB
  2745. /* These are for receiving and sending characters under the kgdb
  2746.  * source level kernel debugger.
  2747.  */
  2748. void putDebugChar(char kgdb_char)
  2749. {
  2750. struct mac_zschannel *chan = zs_kgdbchan;
  2751. while ((read_zsreg(chan, 0) & Tx_BUF_EMP) == 0)
  2752. udelay(5);
  2753. write_zsdata(chan, kgdb_char);
  2754. }
  2755. char getDebugChar(void)
  2756. {
  2757. struct mac_zschannel *chan = zs_kgdbchan;
  2758. while((read_zsreg(chan, 0) & Rx_CH_AV) == 0)
  2759. eieio(); /*barrier();*/
  2760. return read_zsdata(chan);
  2761. }
  2762. void kgdb_interruptible(int yes)
  2763. {
  2764. struct mac_zschannel *chan = zs_kgdbchan;
  2765. int one, nine;
  2766. nine = read_zsreg(chan, 9);
  2767. if (yes == 1) {
  2768. one = EXT_INT_ENAB|INT_ALL_Rx;
  2769. nine |= MIE;
  2770. printk("turning serial ints onn");
  2771. } else {
  2772. one = RxINT_DISAB;
  2773. nine &= ~MIE;
  2774. printk("turning serial ints offn");
  2775. }
  2776. write_zsreg(chan, 1, one);
  2777. write_zsreg(chan, 9, nine);
  2778. }
  2779. /* This sets up the serial port we're using, and turns on
  2780.  * interrupts for that channel, so kgdb is usable once we're done.
  2781.  */
  2782. static inline void kgdb_chaninit(struct mac_zschannel *ms, int intson, int bps)
  2783. {
  2784. int brg;
  2785. int i, x;
  2786. volatile char *sccc = ms->control;
  2787. brg = BPS_TO_BRG(bps, ZS_CLOCK/16);
  2788. printk("setting bps on kgdb line to %d [brg=%x]n", bps, brg);
  2789. for (i = 20000; i != 0; --i) {
  2790. x = *sccc; eieio();
  2791. }
  2792. for (i = 0; i < sizeof(scc_inittab); ++i) {
  2793. write_zsreg(ms, scc_inittab[i], scc_inittab[i+1]);
  2794. i++;
  2795. }
  2796. }
  2797. /* This is called at boot time to prime the kgdb serial debugging
  2798.  * serial line.  The 'tty_num' argument is 0 for /dev/ttya and 1
  2799.  * for /dev/ttyb which is determined in setup_arch() from the
  2800.  * boot command line flags.
  2801.  * XXX at the moment probably only channel A will work
  2802.  */
  2803. void __init zs_kgdb_hook(int tty_num)
  2804. {
  2805. /* Find out how many Z8530 SCCs we have */
  2806. if (zs_chain == 0)
  2807. probe_sccs();
  2808. set_scc_power(&zs_soft[tty_num], 1);
  2809. zs_kgdbchan = zs_soft[tty_num].zs_channel;
  2810. zs_soft[tty_num].change_needed = 0;
  2811. zs_soft[tty_num].clk_divisor = 16;
  2812. zs_soft[tty_num].zs_baud = 38400;
  2813. zs_soft[tty_num].kgdb_channel = 1;     /* This runs kgdb */
  2814. /* Turn on transmitter/receiver at 8-bits/char */
  2815.         kgdb_chaninit(zs_soft[tty_num].zs_channel, 1, 38400);
  2816. printk("KGDB: on channel %d initializedn", tty_num);
  2817. set_debug_traps(); /* init stub */
  2818. }
  2819. #endif /* ifdef CONFIG_KGDB */
  2820. #ifdef CONFIG_PMAC_PBOOK
  2821. /*
  2822.  * notify clients before sleep and reset bus afterwards
  2823.  */
  2824. int
  2825. serial_notify_sleep(struct pmu_sleep_notifier *self, int when)
  2826. {
  2827. int i;
  2828. switch (when) {
  2829. case PBOOK_SLEEP_REQUEST:
  2830. case PBOOK_SLEEP_REJECT:
  2831. break;
  2832. case PBOOK_SLEEP_NOW:
  2833. for (i=0; i<zs_channels_found; i++) {
  2834. struct mac_serial *info = &zs_soft[i];
  2835. if (info->flags & ZILOG_INITIALIZED) {
  2836. shutdown(info);
  2837. info->flags |= ZILOG_SLEEPING;
  2838. }
  2839. }
  2840. break;
  2841. case PBOOK_WAKE:
  2842. for (i=0; i<zs_channels_found; i++) {
  2843. struct mac_serial *info = &zs_soft[i];
  2844. if (info->flags & ZILOG_SLEEPING) {
  2845. info->flags &= ~ZILOG_SLEEPING;
  2846. startup(info);
  2847. }
  2848. }
  2849. break;
  2850. }
  2851. return PBOOK_SLEEP_OK;
  2852. }
  2853. #endif /* CONFIG_PMAC_PBOOK */