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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  esp.c - driver for Hayes ESP serial cards
  3.  *
  4.  *  --- Notices from serial.c, upon which this driver is based ---
  5.  *
  6.  *  Copyright (C) 1991, 1992  Linus Torvalds
  7.  *
  8.  *  Extensively rewritten by Theodore Ts'o, 8/16/92 -- 9/14/92.  Now
  9.  *  much more extensible to support other serial cards based on the
  10.  *  16450/16550A UART's.  Added support for the AST FourPort and the
  11.  *  Accent Async board.  
  12.  *
  13.  *  set_serial_info fixed to set the flags, custom divisor, and uart
  14.  *  type fields.  Fix suggested by Michael K. Johnson 12/12/92.
  15.  *
  16.  *  11/95: TIOCMIWAIT, TIOCGICOUNT by Angelo Haritsis <ah@doc.ic.ac.uk>
  17.  *
  18.  *  03/96: Modularised by Angelo Haritsis <ah@doc.ic.ac.uk>
  19.  *
  20.  *  rs_set_termios fixed to look also for changes of the input
  21.  *      flags INPCK, BRKINT, PARMRK, IGNPAR and IGNBRK.
  22.  *                                            Bernd Anh鋟pl 05/17/96.
  23.  *
  24.  * --- End of notices from serial.c ---
  25.  *
  26.  * Support for the ESP serial card by Andrew J. Robinson
  27.  *     <arobinso@nyx.net> (Card detection routine taken from a patch
  28.  *     by Dennis J. Boylan).  Patches to allow use with 2.1.x contributed
  29.  *     by Chris Faylor.
  30.  *
  31.  * Most recent changes: (Andrew J. Robinson)
  32.  *   Support for PIO mode.  This allows the driver to work properly with
  33.  *     multiport cards.
  34.  *
  35.  * Arnaldo Carvalho de Melo <acme@conectiva.com.br> -
  36.  * several cleanups, use module_init/module_exit, etc
  37.  *
  38.  * This module exports the following rs232 io functions:
  39.  *
  40.  * int espserial_init(void);
  41.  */
  42. #include <linux/module.h>
  43. #include <linux/errno.h>
  44. #include <linux/signal.h>
  45. #include <linux/sched.h>
  46. #include <linux/interrupt.h>
  47. #include <linux/tty.h>
  48. #include <linux/tty_flip.h>
  49. #include <linux/serial.h>
  50. #include <linux/serialP.h>
  51. #include <linux/serial_reg.h>
  52. #include <linux/major.h>
  53. #include <linux/string.h>
  54. #include <linux/fcntl.h>
  55. #include <linux/ptrace.h>
  56. #include <linux/ioport.h>
  57. #include <linux/mm.h>
  58. #include <linux/init.h>
  59. #include <asm/system.h>
  60. #include <asm/io.h>
  61. #include <asm/segment.h>
  62. #include <asm/bitops.h>
  63. #include <asm/dma.h>
  64. #include <linux/slab.h>
  65. #include <asm/uaccess.h>
  66. #include <linux/hayesesp.h>
  67. #define NR_PORTS 64 /* maximum number of ports */
  68. #define NR_PRIMARY 8 /* maximum number of primary ports */
  69. /* The following variables can be set by giving module options */
  70. static int irq[NR_PRIMARY]; /* IRQ for each base port */
  71. static unsigned int divisor[NR_PRIMARY]; /* custom divisor for each port */
  72. static unsigned int dma = ESP_DMA_CHANNEL; /* DMA channel */
  73. static unsigned int rx_trigger = ESP_RX_TRIGGER;
  74. static unsigned int tx_trigger = ESP_TX_TRIGGER;
  75. static unsigned int flow_off = ESP_FLOW_OFF;
  76. static unsigned int flow_on = ESP_FLOW_ON;
  77. static unsigned int rx_timeout = ESP_RX_TMOUT;
  78. static unsigned int pio_threshold = ESP_PIO_THRESHOLD;
  79. MODULE_LICENSE("GPL");
  80. MODULE_PARM(irq, "1-8i");
  81. MODULE_PARM(divisor, "1-8i");
  82. MODULE_PARM(dma, "i");
  83. MODULE_PARM(rx_trigger, "i");
  84. MODULE_PARM(tx_trigger, "i");
  85. MODULE_PARM(flow_off, "i");
  86. MODULE_PARM(flow_on, "i");
  87. MODULE_PARM(rx_timeout, "i");
  88. MODULE_PARM(pio_threshold, "i");
  89. /* END */
  90. static char *dma_buffer;
  91. static int dma_bytes;
  92. static struct esp_pio_buffer *free_pio_buf;
  93. #define DMA_BUFFER_SZ 1024
  94. #define WAKEUP_CHARS 1024
  95. static char serial_name[] __initdata = "ESP serial driver";
  96. static char serial_version[] __initdata = "2.2";
  97. static DECLARE_TASK_QUEUE(tq_esp);
  98. static struct tty_driver esp_driver, esp_callout_driver;
  99. static int serial_refcount;
  100. /* serial subtype definitions */
  101. #define SERIAL_TYPE_NORMAL 1
  102. #define SERIAL_TYPE_CALLOUT 2
  103. /*
  104.  * Serial driver configuration section.  Here are the various options:
  105.  *
  106.  * SERIAL_PARANOIA_CHECK
  107.  *  Check the magic number for the esp_structure where
  108.  *  ever possible.
  109.  */
  110. #undef SERIAL_PARANOIA_CHECK
  111. #define SERIAL_DO_RESTART
  112. #undef SERIAL_DEBUG_INTR
  113. #undef SERIAL_DEBUG_OPEN
  114. #undef SERIAL_DEBUG_FLOW
  115. #define _INLINE_ inline
  116.   
  117. #if defined(MODULE) && defined(SERIAL_DEBUG_MCOUNT)
  118. #define DBG_CNT(s) printk("(%s): [%x] refc=%d, serc=%d, ttyc=%d -> %sn", 
  119.  kdevname(tty->device), (info->flags), serial_refcount,info->count,tty->count,s)
  120. #else
  121. #define DBG_CNT(s)
  122. #endif
  123. static struct esp_struct *ports;
  124. static void change_speed(struct esp_struct *info);
  125. static void rs_wait_until_sent(struct tty_struct *, int);
  126. /*
  127.  * The ESP card has a clock rate of 14.7456 MHz (that is, 2**ESPC_SCALE
  128.  * times the normal 1.8432 Mhz clock of most serial boards).
  129.  */
  130. #define BASE_BAUD ((1843200 / 16) * (1 << ESPC_SCALE))
  131. /* Standard COM flags (except for COM4, because of the 8514 problem) */
  132. #define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
  133. static struct tty_struct *serial_table[NR_PORTS];
  134. static struct termios *serial_termios[NR_PORTS];
  135. static struct termios *serial_termios_locked[NR_PORTS];
  136. #ifndef MIN
  137. #define MIN(a,b) ((a) < (b) ? (a) : (b))
  138. #endif
  139. /*
  140.  * tmp_buf is used as a temporary buffer by serial_write.  We need to
  141.  * lock it in case the memcpy_fromfs blocks while swapping in a page,
  142.  * and some other program tries to do a serial write at the same time.
  143.  * Since the lock will only come under contention when the system is
  144.  * swapping and available memory is low, it makes sense to share one
  145.  * buffer across all the serial ports, since it significantly saves
  146.  * memory if large numbers of serial ports are open.
  147.  */
  148. static unsigned char *tmp_buf;
  149. static DECLARE_MUTEX(tmp_buf_sem);
  150. static inline int serial_paranoia_check(struct esp_struct *info,
  151. kdev_t device, const char *routine)
  152. {
  153. #ifdef SERIAL_PARANOIA_CHECK
  154. static const char badmagic[] = KERN_WARNING
  155. "Warning: bad magic number for serial struct (%s) in %sn";
  156. static const char badinfo[] = KERN_WARNING
  157. "Warning: null esp_struct for (%s) in %sn";
  158. if (!info) {
  159. printk(badinfo, kdevname(device), routine);
  160. return 1;
  161. }
  162. if (info->magic != ESP_MAGIC) {
  163. printk(badmagic, kdevname(device), routine);
  164. return 1;
  165. }
  166. #endif
  167. return 0;
  168. }
  169. static inline unsigned int serial_in(struct esp_struct *info, int offset)
  170. {
  171. return inb(info->port + offset);
  172. }
  173. static inline void serial_out(struct esp_struct *info, int offset,
  174.       unsigned char value)
  175. {
  176. outb(value, info->port+offset);
  177. }
  178. /*
  179.  * ------------------------------------------------------------
  180.  * rs_stop() and rs_start()
  181.  *
  182.  * This routines are called before setting or resetting tty->stopped.
  183.  * They enable or disable transmitter interrupts, as necessary.
  184.  * ------------------------------------------------------------
  185.  */
  186. static void rs_stop(struct tty_struct *tty)
  187. {
  188. struct esp_struct *info = (struct esp_struct *)tty->driver_data;
  189. unsigned long flags;
  190. if (serial_paranoia_check(info, tty->device, "rs_stop"))
  191. return;
  192. save_flags(flags); cli();
  193. if (info->IER & UART_IER_THRI) {
  194. info->IER &= ~UART_IER_THRI;
  195. serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK);
  196. serial_out(info, UART_ESI_CMD2, info->IER);
  197. }
  198. restore_flags(flags);
  199. }
  200. static void rs_start(struct tty_struct *tty)
  201. {
  202. struct esp_struct *info = (struct esp_struct *)tty->driver_data;
  203. unsigned long flags;
  204. if (serial_paranoia_check(info, tty->device, "rs_start"))
  205. return;
  206. save_flags(flags); cli();
  207. if (info->xmit_cnt && info->xmit_buf && !(info->IER & UART_IER_THRI)) {
  208. info->IER |= UART_IER_THRI;
  209. serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK);
  210. serial_out(info, UART_ESI_CMD2, info->IER);
  211. }
  212. restore_flags(flags);
  213. }
  214. /*
  215.  * ----------------------------------------------------------------------
  216.  *
  217.  * Here starts the interrupt handling routines.  All of the following
  218.  * subroutines are declared as inline and are folded into
  219.  * rs_interrupt().  They were separated out for readability's sake.
  220.  *
  221.  * Note: rs_interrupt() is a "fast" interrupt, which means that it
  222.  * runs with interrupts turned off.  People who may want to modify
  223.  * rs_interrupt() should try to keep the interrupt handler as fast as
  224.  * possible.  After you are done making modifications, it is not a bad
  225.  * idea to do:
  226.  * 
  227.  * gcc -S -DKERNEL -Wall -Wstrict-prototypes -O6 -fomit-frame-pointer serial.c
  228.  *
  229.  * and look at the resulting assemble code in serial.s.
  230.  *
  231.  *  - Ted Ts'o (tytso@mit.edu), 7-Mar-93
  232.  * -----------------------------------------------------------------------
  233.  */
  234. /*
  235.  * This routine is used by the interrupt handler to schedule
  236.  * processing in the software interrupt portion of the driver.
  237.  */
  238. static _INLINE_ void rs_sched_event(struct esp_struct *info,
  239.   int event)
  240. {
  241. info->event |= 1 << event;
  242. queue_task(&info->tqueue, &tq_esp);
  243. mark_bh(ESP_BH);
  244. }
  245. static _INLINE_ struct esp_pio_buffer *get_pio_buffer(void)
  246. {
  247. struct esp_pio_buffer *buf;
  248. if (free_pio_buf) {
  249. buf = free_pio_buf;
  250. free_pio_buf = buf->next;
  251. } else {
  252. buf = kmalloc(sizeof(struct esp_pio_buffer), GFP_ATOMIC);
  253. }
  254. return buf;
  255. }
  256. static _INLINE_ void release_pio_buffer(struct esp_pio_buffer *buf)
  257. {
  258. buf->next = free_pio_buf;
  259. free_pio_buf = buf;
  260. }
  261. static _INLINE_ void receive_chars_pio(struct esp_struct *info, int num_bytes)
  262. {
  263. struct tty_struct *tty = info->tty;
  264. int i;
  265. struct esp_pio_buffer *pio_buf;
  266. struct esp_pio_buffer *err_buf;
  267. unsigned char status_mask;
  268. pio_buf = get_pio_buffer();
  269. if (!pio_buf)
  270. return;
  271. err_buf = get_pio_buffer();
  272. if (!err_buf) {
  273. release_pio_buffer(pio_buf);
  274. return;
  275. }
  276. sti();
  277. status_mask = (info->read_status_mask >> 2) & 0x07;
  278. for (i = 0; i < num_bytes - 1; i += 2) {
  279. *((unsigned short *)(pio_buf->data + i)) =
  280. inw(info->port + UART_ESI_RX);
  281. err_buf->data[i] = serial_in(info, UART_ESI_RWS);
  282. err_buf->data[i + 1] = (err_buf->data[i] >> 3) & status_mask;
  283. err_buf->data[i] &= status_mask;
  284. }
  285. if (num_bytes & 0x0001) {
  286. pio_buf->data[num_bytes - 1] = serial_in(info, UART_ESI_RX);
  287. err_buf->data[num_bytes - 1] =
  288. (serial_in(info, UART_ESI_RWS) >> 3) & status_mask;
  289. }
  290. cli();
  291. /* make sure everything is still ok since interrupts were enabled */
  292. tty = info->tty;
  293. if (!tty) {
  294. release_pio_buffer(pio_buf);
  295. release_pio_buffer(err_buf);
  296. info->stat_flags &= ~ESP_STAT_RX_TIMEOUT;
  297. return;
  298. }
  299. status_mask = (info->ignore_status_mask >> 2) & 0x07;
  300. for (i = 0; i < num_bytes; i++) {
  301. if (!(err_buf->data[i] & status_mask)) {
  302. *(tty->flip.char_buf_ptr++) = pio_buf->data[i];
  303. if (err_buf->data[i] & 0x04) {
  304. *(tty->flip.flag_buf_ptr++) = TTY_BREAK;
  305. if (info->flags & ASYNC_SAK)
  306. do_SAK(tty);
  307. }
  308. else if (err_buf->data[i] & 0x02)
  309. *(tty->flip.flag_buf_ptr++) = TTY_FRAME;
  310. else if (err_buf->data[i] & 0x01)
  311. *(tty->flip.flag_buf_ptr++) = TTY_PARITY;
  312. else
  313. *(tty->flip.flag_buf_ptr++) = 0;
  314. tty->flip.count++;
  315. }
  316. }
  317. queue_task(&tty->flip.tqueue, &tq_timer);
  318. info->stat_flags &= ~ESP_STAT_RX_TIMEOUT;
  319. release_pio_buffer(pio_buf);
  320. release_pio_buffer(err_buf);
  321. }
  322. static _INLINE_ void receive_chars_dma(struct esp_struct *info, int num_bytes)
  323. {
  324. unsigned long flags;
  325. info->stat_flags &= ~ESP_STAT_RX_TIMEOUT;
  326. dma_bytes = num_bytes;
  327. info->stat_flags |= ESP_STAT_DMA_RX;
  328. flags=claim_dma_lock();
  329.         disable_dma(dma);
  330.         clear_dma_ff(dma);
  331.         set_dma_mode(dma, DMA_MODE_READ);
  332.         set_dma_addr(dma, virt_to_bus(dma_buffer));
  333.         set_dma_count(dma, dma_bytes);
  334.         enable_dma(dma);
  335.         release_dma_lock(flags);
  336.         
  337.         serial_out(info, UART_ESI_CMD1, ESI_START_DMA_RX);
  338. }
  339. static _INLINE_ void receive_chars_dma_done(struct esp_struct *info,
  340.     int status)
  341. {
  342. struct tty_struct *tty = info->tty;
  343. int num_bytes;
  344. unsigned long flags;
  345. flags=claim_dma_lock();
  346. disable_dma(dma);
  347. clear_dma_ff(dma);
  348. info->stat_flags &= ~ESP_STAT_DMA_RX;
  349. num_bytes = dma_bytes - get_dma_residue(dma);
  350. release_dma_lock(flags);
  351. info->icount.rx += num_bytes;
  352. memcpy(tty->flip.char_buf_ptr, dma_buffer, num_bytes);
  353. tty->flip.char_buf_ptr += num_bytes;
  354. tty->flip.count += num_bytes;
  355. memset(tty->flip.flag_buf_ptr, 0, num_bytes);
  356. tty->flip.flag_buf_ptr += num_bytes;
  357. if (num_bytes > 0) {
  358. tty->flip.flag_buf_ptr--;
  359. status &= (0x1c & info->read_status_mask);
  360. if (status & info->ignore_status_mask) {
  361. tty->flip.count--;
  362. tty->flip.char_buf_ptr--;
  363. tty->flip.flag_buf_ptr--;
  364. } else if (status & 0x10) {
  365. *tty->flip.flag_buf_ptr = TTY_BREAK;
  366. (info->icount.brk)++;
  367. if (info->flags & ASYNC_SAK)
  368. do_SAK(tty);
  369. } else if (status & 0x08) {
  370. *tty->flip.flag_buf_ptr = TTY_FRAME;
  371. (info->icount.frame)++;
  372. }
  373. else if (status & 0x04) {
  374. *tty->flip.flag_buf_ptr = TTY_PARITY;
  375. (info->icount.parity)++;
  376. }
  377. tty->flip.flag_buf_ptr++;
  378. queue_task(&tty->flip.tqueue, &tq_timer);
  379. }
  380. if (dma_bytes != num_bytes) {
  381. num_bytes = dma_bytes - num_bytes;
  382. dma_bytes = 0;
  383. receive_chars_dma(info, num_bytes);
  384. } else
  385. dma_bytes = 0;
  386. }
  387. static _INLINE_ void transmit_chars_pio(struct esp_struct *info,
  388. int space_avail)
  389. {
  390. int i;
  391. struct esp_pio_buffer *pio_buf;
  392. pio_buf = get_pio_buffer();
  393. if (!pio_buf)
  394. return;
  395. while (space_avail && info->xmit_cnt) {
  396. if (info->xmit_tail + space_avail <= ESP_XMIT_SIZE) {
  397. memcpy(pio_buf->data,
  398.        &(info->xmit_buf[info->xmit_tail]),
  399.        space_avail);
  400. } else {
  401. i = ESP_XMIT_SIZE - info->xmit_tail;
  402. memcpy(pio_buf->data,
  403.        &(info->xmit_buf[info->xmit_tail]), i);
  404. memcpy(&(pio_buf->data[i]), info->xmit_buf,
  405.        space_avail - i);
  406. }
  407. info->xmit_cnt -= space_avail;
  408. info->xmit_tail = (info->xmit_tail + space_avail) &
  409. (ESP_XMIT_SIZE - 1);
  410. sti();
  411. for (i = 0; i < space_avail - 1; i += 2) {
  412. outw(*((unsigned short *)(pio_buf->data + i)),
  413.      info->port + UART_ESI_TX);
  414. }
  415. if (space_avail & 0x0001)
  416. serial_out(info, UART_ESI_TX,
  417.    pio_buf->data[space_avail - 1]);
  418. cli();
  419. if (info->xmit_cnt) {
  420. serial_out(info, UART_ESI_CMD1, ESI_NO_COMMAND);
  421. serial_out(info, UART_ESI_CMD1, ESI_GET_TX_AVAIL);
  422. space_avail = serial_in(info, UART_ESI_STAT1) << 8;
  423. space_avail |= serial_in(info, UART_ESI_STAT2);
  424. if (space_avail > info->xmit_cnt)
  425. space_avail = info->xmit_cnt;
  426. }
  427. }
  428. if (info->xmit_cnt < WAKEUP_CHARS) {
  429. rs_sched_event(info, ESP_EVENT_WRITE_WAKEUP);
  430. #ifdef SERIAL_DEBUG_INTR
  431. printk("THRE...");
  432. #endif
  433. if (info->xmit_cnt <= 0) {
  434. info->IER &= ~UART_IER_THRI;
  435. serial_out(info, UART_ESI_CMD1,
  436.    ESI_SET_SRV_MASK);
  437. serial_out(info, UART_ESI_CMD2, info->IER);
  438. }
  439. }
  440. release_pio_buffer(pio_buf);
  441. }
  442. static _INLINE_ void transmit_chars_dma(struct esp_struct *info, int num_bytes)
  443. {
  444. unsigned long flags;
  445. dma_bytes = num_bytes;
  446. if (info->xmit_tail + dma_bytes <= ESP_XMIT_SIZE) {
  447. memcpy(dma_buffer, &(info->xmit_buf[info->xmit_tail]),
  448.        dma_bytes);
  449. } else {
  450. int i = ESP_XMIT_SIZE - info->xmit_tail;
  451. memcpy(dma_buffer, &(info->xmit_buf[info->xmit_tail]),
  452. i);
  453. memcpy(&(dma_buffer[i]), info->xmit_buf, dma_bytes - i);
  454. }
  455. info->xmit_cnt -= dma_bytes;
  456. info->xmit_tail = (info->xmit_tail + dma_bytes) & (ESP_XMIT_SIZE - 1);
  457. if (info->xmit_cnt < WAKEUP_CHARS) {
  458. rs_sched_event(info, ESP_EVENT_WRITE_WAKEUP);
  459. #ifdef SERIAL_DEBUG_INTR
  460. printk("THRE...");
  461. #endif
  462. if (info->xmit_cnt <= 0) {
  463. info->IER &= ~UART_IER_THRI;
  464. serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK);
  465. serial_out(info, UART_ESI_CMD2, info->IER);
  466. }
  467. }
  468. info->stat_flags |= ESP_STAT_DMA_TX;
  469. flags=claim_dma_lock();
  470.         disable_dma(dma);
  471.         clear_dma_ff(dma);
  472.         set_dma_mode(dma, DMA_MODE_WRITE);
  473.         set_dma_addr(dma, virt_to_bus(dma_buffer));
  474.         set_dma_count(dma, dma_bytes);
  475.         enable_dma(dma);
  476.         release_dma_lock(flags);
  477.         
  478.         serial_out(info, UART_ESI_CMD1, ESI_START_DMA_TX);
  479. }
  480. static _INLINE_ void transmit_chars_dma_done(struct esp_struct *info)
  481. {
  482. int num_bytes;
  483. unsigned long flags;
  484. flags=claim_dma_lock();
  485. disable_dma(dma);
  486. clear_dma_ff(dma);
  487. num_bytes = dma_bytes - get_dma_residue(dma);
  488. info->icount.tx += dma_bytes;
  489. release_dma_lock(flags);
  490. if (dma_bytes != num_bytes) {
  491. dma_bytes -= num_bytes;
  492. memmove(dma_buffer, dma_buffer + num_bytes, dma_bytes);
  493. flags=claim_dma_lock();
  494.          disable_dma(dma);
  495.          clear_dma_ff(dma);
  496.          set_dma_mode(dma, DMA_MODE_WRITE);
  497.          set_dma_addr(dma, virt_to_bus(dma_buffer));
  498.          set_dma_count(dma, dma_bytes);
  499.          enable_dma(dma);
  500.          release_dma_lock(flags);
  501.         
  502.          serial_out(info, UART_ESI_CMD1, ESI_START_DMA_TX);
  503. } else {
  504. dma_bytes = 0;
  505. info->stat_flags &= ~ESP_STAT_DMA_TX;
  506. }
  507. }
  508. static _INLINE_ void check_modem_status(struct esp_struct *info)
  509. {
  510. int status;
  511. serial_out(info, UART_ESI_CMD1, ESI_GET_UART_STAT);
  512. status = serial_in(info, UART_ESI_STAT2);
  513. if (status & UART_MSR_ANY_DELTA) {
  514. /* update input line counters */
  515. if (status & UART_MSR_TERI)
  516. info->icount.rng++;
  517. if (status & UART_MSR_DDSR)
  518. info->icount.dsr++;
  519. if (status & UART_MSR_DDCD)
  520. info->icount.dcd++;
  521. if (status & UART_MSR_DCTS)
  522. info->icount.cts++;
  523. wake_up_interruptible(&info->delta_msr_wait);
  524. }
  525. if ((info->flags & ASYNC_CHECK_CD) && (status & UART_MSR_DDCD)) {
  526. #if (defined(SERIAL_DEBUG_OPEN) || defined(SERIAL_DEBUG_INTR))
  527. printk("ttys%d CD now %s...", info->line,
  528.        (status & UART_MSR_DCD) ? "on" : "off");
  529. #endif
  530. if (status & UART_MSR_DCD)
  531. wake_up_interruptible(&info->open_wait);
  532. else if (!((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  533.    (info->flags & ASYNC_CALLOUT_NOHUP))) {
  534. #ifdef SERIAL_DEBUG_OPEN
  535. printk("scheduling hangup...");
  536. #endif
  537. MOD_INC_USE_COUNT;
  538. if (schedule_task(&info->tqueue_hangup) == 0)
  539. MOD_DEC_USE_COUNT;
  540. }
  541. }
  542. }
  543. /*
  544.  * This is the serial driver's interrupt routine
  545.  */
  546. static void rs_interrupt_single(int irq, void *dev_id, struct pt_regs * regs)
  547. {
  548. struct esp_struct * info;
  549. unsigned err_status;
  550. unsigned int scratch;
  551. #ifdef SERIAL_DEBUG_INTR
  552. printk("rs_interrupt_single(%d)...", irq);
  553. #endif
  554. info = (struct esp_struct *)dev_id;
  555. err_status = 0;
  556. scratch = serial_in(info, UART_ESI_SID);
  557. cli();
  558. if (!info->tty) {
  559. sti();
  560. return;
  561. }
  562. if (scratch & 0x04) { /* error */
  563. serial_out(info, UART_ESI_CMD1, ESI_GET_ERR_STAT);
  564. err_status = serial_in(info, UART_ESI_STAT1);
  565. serial_in(info, UART_ESI_STAT2);
  566. if (err_status & 0x01)
  567. info->stat_flags |= ESP_STAT_RX_TIMEOUT;
  568. if (err_status & 0x20) /* UART status */
  569. check_modem_status(info);
  570. if (err_status & 0x80) /* Start break */
  571. wake_up_interruptible(&info->break_wait);
  572. }
  573. if ((scratch & 0x88) || /* DMA completed or timed out */
  574.     (err_status & 0x1c) /* receive error */) {
  575. if (info->stat_flags & ESP_STAT_DMA_RX)
  576. receive_chars_dma_done(info, err_status);
  577. else if (info->stat_flags & ESP_STAT_DMA_TX)
  578. transmit_chars_dma_done(info);
  579. }
  580. if (!(info->stat_flags & (ESP_STAT_DMA_RX | ESP_STAT_DMA_TX)) &&
  581.     ((scratch & 0x01) || (info->stat_flags & ESP_STAT_RX_TIMEOUT)) &&
  582.     (info->IER & UART_IER_RDI)) {
  583. int num_bytes;
  584. serial_out(info, UART_ESI_CMD1, ESI_NO_COMMAND);
  585. serial_out(info, UART_ESI_CMD1, ESI_GET_RX_AVAIL);
  586. num_bytes = serial_in(info, UART_ESI_STAT1) << 8;
  587. num_bytes |= serial_in(info, UART_ESI_STAT2);
  588. if (num_bytes > (TTY_FLIPBUF_SIZE - info->tty->flip.count))
  589.   num_bytes = TTY_FLIPBUF_SIZE - info->tty->flip.count;
  590. if (num_bytes) {
  591. if (dma_bytes ||
  592.     (info->stat_flags & ESP_STAT_USE_PIO) ||
  593.     (num_bytes <= info->config.pio_threshold))
  594. receive_chars_pio(info, num_bytes);
  595. else
  596. receive_chars_dma(info, num_bytes);
  597. }
  598. }
  599. if (!(info->stat_flags & (ESP_STAT_DMA_RX | ESP_STAT_DMA_TX)) &&
  600.     (scratch & 0x02) && (info->IER & UART_IER_THRI)) {
  601. if ((info->xmit_cnt <= 0) || info->tty->stopped) {
  602. info->IER &= ~UART_IER_THRI;
  603. serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK);
  604. serial_out(info, UART_ESI_CMD2, info->IER);
  605. } else {
  606. int num_bytes;
  607. serial_out(info, UART_ESI_CMD1, ESI_NO_COMMAND);
  608. serial_out(info, UART_ESI_CMD1, ESI_GET_TX_AVAIL);
  609. num_bytes = serial_in(info, UART_ESI_STAT1) << 8;
  610. num_bytes |= serial_in(info, UART_ESI_STAT2);
  611. if (num_bytes > info->xmit_cnt)
  612. num_bytes = info->xmit_cnt;
  613. if (num_bytes) {
  614. if (dma_bytes ||
  615.     (info->stat_flags & ESP_STAT_USE_PIO) ||
  616.     (num_bytes <= info->config.pio_threshold))
  617. transmit_chars_pio(info, num_bytes);
  618. else
  619. transmit_chars_dma(info, num_bytes);
  620. }
  621. }
  622. }
  623. info->last_active = jiffies;
  624. #ifdef SERIAL_DEBUG_INTR
  625. printk("end.n");
  626. #endif
  627. sti();
  628. }
  629. /*
  630.  * -------------------------------------------------------------------
  631.  * Here ends the serial interrupt routines.
  632.  * -------------------------------------------------------------------
  633.  */
  634. /*
  635.  * This routine is used to handle the "bottom half" processing for the
  636.  * serial driver, known also the "software interrupt" processing.
  637.  * This processing is done at the kernel interrupt level, after the
  638.  * rs_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON.  This
  639.  * is where time-consuming activities which can not be done in the
  640.  * interrupt driver proper are done; the interrupt driver schedules
  641.  * them using rs_sched_event(), and they get done here.
  642.  */
  643. static void do_serial_bh(void)
  644. {
  645. run_task_queue(&tq_esp);
  646. }
  647. static void do_softint(void *private_)
  648. {
  649. struct esp_struct *info = (struct esp_struct *) private_;
  650. struct tty_struct *tty;
  651. tty = info->tty;
  652. if (!tty)
  653. return;
  654. if (test_and_clear_bit(ESP_EVENT_WRITE_WAKEUP, &info->event)) {
  655. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  656.     tty->ldisc.write_wakeup)
  657. (tty->ldisc.write_wakeup)(tty);
  658. wake_up_interruptible(&tty->write_wait);
  659. }
  660. }
  661. /*
  662.  * This routine is called from the scheduler tqueue when the interrupt
  663.  * routine has signalled that a hangup has occurred.  The path of
  664.  * hangup processing is:
  665.  *
  666.  *  serial interrupt routine -> (scheduler tqueue) ->
  667.  *  do_serial_hangup() -> tty->hangup() -> esp_hangup()
  668.  * 
  669.  */
  670. static void do_serial_hangup(void *private_)
  671. {
  672. struct esp_struct *info = (struct esp_struct *) private_;
  673. struct tty_struct *tty;
  674. tty = info->tty;
  675. if (tty)
  676. tty_hangup(tty);
  677. MOD_DEC_USE_COUNT;
  678. }
  679. /*
  680.  * ---------------------------------------------------------------
  681.  * Low level utility subroutines for the serial driver:  routines to
  682.  * figure out the appropriate timeout for an interrupt chain, routines
  683.  * to initialize and startup a serial port, and routines to shutdown a
  684.  * serial port.  Useful stuff like that.
  685.  * ---------------------------------------------------------------
  686.  */
  687. static _INLINE_ void esp_basic_init(struct esp_struct * info)
  688. {
  689. /* put ESPC in enhanced mode */
  690. serial_out(info, UART_ESI_CMD1, ESI_SET_MODE);
  691. if (info->stat_flags & ESP_STAT_NEVER_DMA)
  692. serial_out(info, UART_ESI_CMD2, 0x01);
  693. else
  694. serial_out(info, UART_ESI_CMD2, 0x31);
  695. /* disable interrupts for now */
  696. serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK);
  697. serial_out(info, UART_ESI_CMD2, 0x00);
  698. /* set interrupt and DMA channel */
  699. serial_out(info, UART_ESI_CMD1, ESI_SET_IRQ);
  700. if (info->stat_flags & ESP_STAT_NEVER_DMA)
  701. serial_out(info, UART_ESI_CMD2, 0x01);
  702. else
  703. serial_out(info, UART_ESI_CMD2, (dma << 4) | 0x01);
  704. serial_out(info, UART_ESI_CMD1, ESI_SET_ENH_IRQ);
  705. if (info->line % 8) /* secondary port */
  706. serial_out(info, UART_ESI_CMD2, 0x0d); /* shared */
  707. else if (info->irq == 9)
  708. serial_out(info, UART_ESI_CMD2, 0x02);
  709. else
  710. serial_out(info, UART_ESI_CMD2, info->irq);
  711. /* set error status mask (check this) */
  712. serial_out(info, UART_ESI_CMD1, ESI_SET_ERR_MASK);
  713. if (info->stat_flags & ESP_STAT_NEVER_DMA)
  714. serial_out(info, UART_ESI_CMD2, 0xa1);
  715. else
  716. serial_out(info, UART_ESI_CMD2, 0xbd);
  717. serial_out(info, UART_ESI_CMD2, 0x00);
  718. /* set DMA timeout */
  719. serial_out(info, UART_ESI_CMD1, ESI_SET_DMA_TMOUT);
  720. serial_out(info, UART_ESI_CMD2, 0xff);
  721. /* set FIFO trigger levels */
  722. serial_out(info, UART_ESI_CMD1, ESI_SET_TRIGGER);
  723. serial_out(info, UART_ESI_CMD2, info->config.rx_trigger >> 8);
  724. serial_out(info, UART_ESI_CMD2, info->config.rx_trigger);
  725. serial_out(info, UART_ESI_CMD2, info->config.tx_trigger >> 8);
  726. serial_out(info, UART_ESI_CMD2, info->config.tx_trigger);
  727. /* Set clock scaling and wait states */
  728. serial_out(info, UART_ESI_CMD1, ESI_SET_PRESCALAR);
  729. serial_out(info, UART_ESI_CMD2, 0x04 | ESPC_SCALE);
  730. /* set reinterrupt pacing */
  731. serial_out(info, UART_ESI_CMD1, ESI_SET_REINTR);
  732. serial_out(info, UART_ESI_CMD2, 0xff);
  733. }
  734. static int startup(struct esp_struct * info)
  735. {
  736. unsigned long flags;
  737. int retval=0;
  738.         unsigned int num_chars;
  739. save_flags(flags); cli();
  740. if (info->flags & ASYNC_INITIALIZED)
  741. goto out;
  742. if (!info->xmit_buf) {
  743. info->xmit_buf = (unsigned char *)get_free_page(GFP_KERNEL);
  744. retval = -ENOMEM;
  745. if (!info->xmit_buf)
  746. goto out;
  747. }
  748. #ifdef SERIAL_DEBUG_OPEN
  749. printk("starting up ttys%d (irq %d)...", info->line, info->irq);
  750. #endif
  751. /* Flush the RX buffer.  Using the ESI flush command may cause */
  752. /* wild interrupts, so read all the data instead. */
  753. serial_out(info, UART_ESI_CMD1, ESI_NO_COMMAND);
  754. serial_out(info, UART_ESI_CMD1, ESI_GET_RX_AVAIL);
  755. num_chars = serial_in(info, UART_ESI_STAT1) << 8;
  756. num_chars |= serial_in(info, UART_ESI_STAT2);
  757. while (num_chars > 1) {
  758. inw(info->port + UART_ESI_RX);
  759. num_chars -= 2;
  760. }
  761. if (num_chars)
  762. serial_in(info, UART_ESI_RX);
  763. /* set receive character timeout */
  764. serial_out(info, UART_ESI_CMD1, ESI_SET_RX_TIMEOUT);
  765. serial_out(info, UART_ESI_CMD2, info->config.rx_timeout);
  766. /* clear all flags except the "never DMA" flag */
  767. info->stat_flags &= ESP_STAT_NEVER_DMA;
  768. if (info->stat_flags & ESP_STAT_NEVER_DMA)
  769. info->stat_flags |= ESP_STAT_USE_PIO;
  770. /*
  771.  * Allocate the IRQ
  772.  */
  773. retval = request_irq(info->irq, rs_interrupt_single, SA_SHIRQ,
  774.      "esp serial", info);
  775. if (retval) {
  776. if (capable(CAP_SYS_ADMIN)) {
  777. if (info->tty)
  778. set_bit(TTY_IO_ERROR,
  779. &info->tty->flags);
  780. retval = 0;
  781. }
  782. goto out;
  783. }
  784. if (!(info->stat_flags & ESP_STAT_USE_PIO) && !dma_buffer) {
  785. dma_buffer = (char *)__get_dma_pages(
  786. GFP_KERNEL, get_order(DMA_BUFFER_SZ));
  787. /* use PIO mode if DMA buf/chan cannot be allocated */
  788. if (!dma_buffer)
  789. info->stat_flags |= ESP_STAT_USE_PIO;
  790. else if (request_dma(dma, "esp serial")) {
  791. free_pages((unsigned long)dma_buffer,
  792.    get_order(DMA_BUFFER_SZ));
  793. dma_buffer = 0;
  794. info->stat_flags |= ESP_STAT_USE_PIO;
  795. }
  796. }
  797. info->MCR = UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2;
  798. serial_out(info, UART_ESI_CMD1, ESI_WRITE_UART);
  799. serial_out(info, UART_ESI_CMD2, UART_MCR);
  800. serial_out(info, UART_ESI_CMD2, info->MCR);
  801. /*
  802.  * Finally, enable interrupts
  803.  */
  804. /* info->IER = UART_IER_MSI | UART_IER_RLSI | UART_IER_RDI; */
  805. info->IER = UART_IER_RLSI | UART_IER_RDI | UART_IER_DMA_TMOUT |
  806. UART_IER_DMA_TC;
  807. serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK);
  808. serial_out(info, UART_ESI_CMD2, info->IER);
  809. if (info->tty)
  810. clear_bit(TTY_IO_ERROR, &info->tty->flags);
  811. info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
  812. /*
  813.  * Set up the tty->alt_speed kludge
  814.  */
  815. if (info->tty) {
  816. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
  817. info->tty->alt_speed = 57600;
  818. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
  819. info->tty->alt_speed = 115200;
  820. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)
  821. info->tty->alt_speed = 230400;
  822. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
  823. info->tty->alt_speed = 460800;
  824. }
  825. /*
  826.  * set the speed of the serial port
  827.  */
  828. change_speed(info);
  829. info->flags |= ASYNC_INITIALIZED;
  830. retval = 0;
  831. out: restore_flags(flags);
  832. return retval;
  833. }
  834. /*
  835.  * This routine will shutdown a serial port; interrupts are disabled, and
  836.  * DTR is dropped if the hangup on close termio flag is on.
  837.  */
  838. static void shutdown(struct esp_struct * info)
  839. {
  840. unsigned long flags, f;
  841. if (!(info->flags & ASYNC_INITIALIZED))
  842. return;
  843. #ifdef SERIAL_DEBUG_OPEN
  844. printk("Shutting down serial port %d (irq %d)....", info->line,
  845.        info->irq);
  846. #endif
  847. save_flags(flags); cli(); /* Disable interrupts */
  848. /*
  849.  * clear delta_msr_wait queue to avoid mem leaks: we may free the irq
  850.  * here so the queue might never be waken up
  851.  */
  852. wake_up_interruptible(&info->delta_msr_wait);
  853. wake_up_interruptible(&info->break_wait);
  854. /* stop a DMA transfer on the port being closed */
  855.    
  856. if (info->stat_flags & (ESP_STAT_DMA_RX | ESP_STAT_DMA_TX)) {
  857. f=claim_dma_lock();
  858. disable_dma(dma);
  859. clear_dma_ff(dma);
  860. release_dma_lock(f);
  861. dma_bytes = 0;
  862. }
  863. /*
  864.  * Free the IRQ
  865.  */
  866. free_irq(info->irq, info);
  867. if (dma_buffer) {
  868. struct esp_struct *current_port = ports;
  869. while (current_port) {
  870. if ((current_port != info) &&
  871.     (current_port->flags & ASYNC_INITIALIZED))
  872. break;
  873. current_port = current_port->next_port;
  874. }
  875. if (!current_port) {
  876. free_dma(dma);
  877. free_pages((unsigned long)dma_buffer,
  878.    get_order(DMA_BUFFER_SZ));
  879. dma_buffer = 0;
  880. }
  881. }
  882. if (info->xmit_buf) {
  883. free_page((unsigned long) info->xmit_buf);
  884. info->xmit_buf = 0;
  885. }
  886. info->IER = 0;
  887. serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK);
  888. serial_out(info, UART_ESI_CMD2, 0x00);
  889. if (!info->tty || (info->tty->termios->c_cflag & HUPCL))
  890. info->MCR &= ~(UART_MCR_DTR|UART_MCR_RTS);
  891. info->MCR &= ~UART_MCR_OUT2;
  892. serial_out(info, UART_ESI_CMD1, ESI_WRITE_UART);
  893. serial_out(info, UART_ESI_CMD2, UART_MCR);
  894. serial_out(info, UART_ESI_CMD2, info->MCR);
  895. if (info->tty)
  896. set_bit(TTY_IO_ERROR, &info->tty->flags);
  897. info->flags &= ~ASYNC_INITIALIZED;
  898. restore_flags(flags);
  899. }
  900. /*
  901.  * This routine is called to set the UART divisor registers to match
  902.  * the specified baud rate for a serial port.
  903.  */
  904. static void change_speed(struct esp_struct *info)
  905. {
  906. unsigned short port;
  907. int quot = 0;
  908. unsigned cflag,cval;
  909. int baud, bits;
  910. unsigned char flow1 = 0, flow2 = 0;
  911. unsigned long flags;
  912. if (!info->tty || !info->tty->termios)
  913. return;
  914. cflag = info->tty->termios->c_cflag;
  915. port = info->port;
  916. /* byte size and parity */
  917. switch (cflag & CSIZE) {
  918.       case CS5: cval = 0x00; bits = 7; break;
  919.       case CS6: cval = 0x01; bits = 8; break;
  920.       case CS7: cval = 0x02; bits = 9; break;
  921.       case CS8: cval = 0x03; bits = 10; break;
  922.       default:  cval = 0x00; bits = 7; break;
  923. }
  924. if (cflag & CSTOPB) {
  925. cval |= 0x04;
  926. bits++;
  927. }
  928. if (cflag & PARENB) {
  929. cval |= UART_LCR_PARITY;
  930. bits++;
  931. }
  932. if (!(cflag & PARODD))
  933. cval |= UART_LCR_EPAR;
  934. #ifdef CMSPAR
  935. if (cflag & CMSPAR)
  936. cval |= UART_LCR_SPAR;
  937. #endif
  938. baud = tty_get_baud_rate(info->tty);
  939. if (baud == 38400 &&
  940.     ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST))
  941. quot = info->custom_divisor;
  942. else {
  943. if (baud == 134)
  944. /* Special case since 134 is really 134.5 */
  945. quot = (2*BASE_BAUD / 269);
  946. else if (baud)
  947. quot = BASE_BAUD / baud;
  948. }
  949. /* If the quotient is ever zero, default to 9600 bps */
  950. if (!quot)
  951. quot = BASE_BAUD / 9600;
  952. info->timeout = ((1024 * HZ * bits * quot) / BASE_BAUD) + (HZ / 50);
  953. /* CTS flow control flag and modem status interrupts */
  954. /* info->IER &= ~UART_IER_MSI; */
  955. if (cflag & CRTSCTS) {
  956. info->flags |= ASYNC_CTS_FLOW;
  957. /* info->IER |= UART_IER_MSI; */
  958. flow1 = 0x04;
  959. flow2 = 0x10;
  960. } else
  961. info->flags &= ~ASYNC_CTS_FLOW;
  962. if (cflag & CLOCAL)
  963. info->flags &= ~ASYNC_CHECK_CD;
  964. else {
  965. info->flags |= ASYNC_CHECK_CD;
  966. /* info->IER |= UART_IER_MSI; */
  967. }
  968. /*
  969.  * Set up parity check flag
  970.  */
  971. #define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
  972. info->read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
  973. if (I_INPCK(info->tty))
  974. info->read_status_mask |= UART_LSR_FE | UART_LSR_PE;
  975. if (I_BRKINT(info->tty) || I_PARMRK(info->tty))
  976. info->read_status_mask |= UART_LSR_BI;
  977. info->ignore_status_mask = 0;
  978. #if 0
  979. /* This should be safe, but for some broken bits of hardware... */
  980. if (I_IGNPAR(info->tty)) {
  981. info->ignore_status_mask |= UART_LSR_PE | UART_LSR_FE;
  982. info->read_status_mask |= UART_LSR_PE | UART_LSR_FE;
  983. }
  984. #endif
  985. if (I_IGNBRK(info->tty)) {
  986. info->ignore_status_mask |= UART_LSR_BI;
  987. info->read_status_mask |= UART_LSR_BI;
  988. /*
  989.  * If we're ignore parity and break indicators, ignore 
  990.  * overruns too.  (For real raw support).
  991.  */
  992. if (I_IGNPAR(info->tty)) {
  993. info->ignore_status_mask |= UART_LSR_OE | 
  994. UART_LSR_PE | UART_LSR_FE;
  995. info->read_status_mask |= UART_LSR_OE | 
  996. UART_LSR_PE | UART_LSR_FE;
  997. }
  998. }
  999. if (I_IXOFF(info->tty))
  1000. flow1 |= 0x81;
  1001. save_flags(flags); cli();
  1002. /* set baud */
  1003. serial_out(info, UART_ESI_CMD1, ESI_SET_BAUD);
  1004. serial_out(info, UART_ESI_CMD2, quot >> 8);
  1005. serial_out(info, UART_ESI_CMD2, quot & 0xff);
  1006. /* set data bits, parity, etc. */
  1007. serial_out(info, UART_ESI_CMD1, ESI_WRITE_UART);
  1008. serial_out(info, UART_ESI_CMD2, UART_LCR);
  1009. serial_out(info, UART_ESI_CMD2, cval);
  1010. /* Enable flow control */
  1011. serial_out(info, UART_ESI_CMD1, ESI_SET_FLOW_CNTL);
  1012. serial_out(info, UART_ESI_CMD2, flow1);
  1013. serial_out(info, UART_ESI_CMD2, flow2);
  1014. /* set flow control characters (XON/XOFF only) */
  1015. if (I_IXOFF(info->tty)) {
  1016. serial_out(info, UART_ESI_CMD1, ESI_SET_FLOW_CHARS);
  1017. serial_out(info, UART_ESI_CMD2, START_CHAR(info->tty));
  1018. serial_out(info, UART_ESI_CMD2, STOP_CHAR(info->tty));
  1019. serial_out(info, UART_ESI_CMD2, 0x10);
  1020. serial_out(info, UART_ESI_CMD2, 0x21);
  1021. switch (cflag & CSIZE) {
  1022. case CS5:
  1023. serial_out(info, UART_ESI_CMD2, 0x1f);
  1024. break;
  1025. case CS6:
  1026. serial_out(info, UART_ESI_CMD2, 0x3f);
  1027. break;
  1028. case CS7:
  1029. case CS8:
  1030. serial_out(info, UART_ESI_CMD2, 0x7f);
  1031. break;
  1032. default:
  1033. serial_out(info, UART_ESI_CMD2, 0xff);
  1034. break;
  1035. }
  1036. }
  1037. /* Set high/low water */
  1038. serial_out(info, UART_ESI_CMD1, ESI_SET_FLOW_LVL);
  1039. serial_out(info, UART_ESI_CMD2, info->config.flow_off >> 8);
  1040. serial_out(info, UART_ESI_CMD2, info->config.flow_off);
  1041. serial_out(info, UART_ESI_CMD2, info->config.flow_on >> 8);
  1042. serial_out(info, UART_ESI_CMD2, info->config.flow_on);
  1043. restore_flags(flags);
  1044. }
  1045. static void rs_put_char(struct tty_struct *tty, unsigned char ch)
  1046. {
  1047. struct esp_struct *info = (struct esp_struct *)tty->driver_data;
  1048. unsigned long flags;
  1049. if (serial_paranoia_check(info, tty->device, "rs_put_char"))
  1050. return;
  1051. if (!tty || !info->xmit_buf)
  1052. return;
  1053. save_flags(flags); cli();
  1054. if (info->xmit_cnt >= ESP_XMIT_SIZE - 1) {
  1055. restore_flags(flags);
  1056. return;
  1057. }
  1058. info->xmit_buf[info->xmit_head++] = ch;
  1059. info->xmit_head &= ESP_XMIT_SIZE-1;
  1060. info->xmit_cnt++;
  1061. restore_flags(flags);
  1062. }
  1063. static void rs_flush_chars(struct tty_struct *tty)
  1064. {
  1065. struct esp_struct *info = (struct esp_struct *)tty->driver_data;
  1066. unsigned long flags;
  1067. if (serial_paranoia_check(info, tty->device, "rs_flush_chars"))
  1068. return;
  1069. if (info->xmit_cnt <= 0 || tty->stopped || !info->xmit_buf)
  1070. return;
  1071. save_flags(flags); cli();
  1072. if (!(info->IER & UART_IER_THRI)) {
  1073. info->IER |= UART_IER_THRI;
  1074. serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK);
  1075. serial_out(info, UART_ESI_CMD2, info->IER);
  1076. }
  1077. restore_flags(flags);
  1078. }
  1079. static int rs_write(struct tty_struct * tty, int from_user,
  1080.     const unsigned char *buf, int count)
  1081. {
  1082. int c, t, ret = 0;
  1083. struct esp_struct *info = (struct esp_struct *)tty->driver_data;
  1084. unsigned long flags;
  1085. if (serial_paranoia_check(info, tty->device, "rs_write"))
  1086. return 0;
  1087. if (!tty || !info->xmit_buf || !tmp_buf)
  1088. return 0;
  1089.     
  1090. if (from_user)
  1091. down(&tmp_buf_sem);
  1092. while (1) {
  1093. /* Thanks to R. Wolff for suggesting how to do this with */
  1094. /* interrupts enabled */
  1095. c = count;
  1096. t = ESP_XMIT_SIZE - info->xmit_cnt - 1;
  1097. if (t < c)
  1098. c = t;
  1099. t = ESP_XMIT_SIZE - info->xmit_head;
  1100. if (t < c)
  1101. c = t;
  1102. if (c <= 0)
  1103. break;
  1104. if (from_user) {
  1105. c -= copy_from_user(tmp_buf, buf, c);
  1106. if (!c) {
  1107. if (!ret)
  1108. ret = -EFAULT;
  1109. break;
  1110. }
  1111. memcpy(info->xmit_buf + info->xmit_head, tmp_buf, c);
  1112. } else
  1113. memcpy(info->xmit_buf + info->xmit_head, buf, c);
  1114. info->xmit_head = (info->xmit_head + c) & (ESP_XMIT_SIZE-1);
  1115. info->xmit_cnt += c;
  1116. buf += c;
  1117. count -= c;
  1118. ret += c;
  1119. }
  1120. if (from_user)
  1121. up(&tmp_buf_sem);
  1122. save_flags(flags); cli();
  1123. if (info->xmit_cnt && !tty->stopped && !(info->IER & UART_IER_THRI)) {
  1124. info->IER |= UART_IER_THRI;
  1125. serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK);
  1126. serial_out(info, UART_ESI_CMD2, info->IER);
  1127. }
  1128. restore_flags(flags);
  1129. return ret;
  1130. }
  1131. static int rs_write_room(struct tty_struct *tty)
  1132. {
  1133. struct esp_struct *info = (struct esp_struct *)tty->driver_data;
  1134. int ret;
  1135. if (serial_paranoia_check(info, tty->device, "rs_write_room"))
  1136. return 0;
  1137. ret = ESP_XMIT_SIZE - info->xmit_cnt - 1;
  1138. if (ret < 0)
  1139. ret = 0;
  1140. return ret;
  1141. }
  1142. static int rs_chars_in_buffer(struct tty_struct *tty)
  1143. {
  1144. struct esp_struct *info = (struct esp_struct *)tty->driver_data;
  1145. if (serial_paranoia_check(info, tty->device, "rs_chars_in_buffer"))
  1146. return 0;
  1147. return info->xmit_cnt;
  1148. }
  1149. static void rs_flush_buffer(struct tty_struct *tty)
  1150. {
  1151. struct esp_struct *info = (struct esp_struct *)tty->driver_data;
  1152. if (serial_paranoia_check(info, tty->device, "rs_flush_buffer"))
  1153. return;
  1154. cli();
  1155. info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
  1156. sti();
  1157. wake_up_interruptible(&tty->write_wait);
  1158. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  1159.     tty->ldisc.write_wakeup)
  1160. (tty->ldisc.write_wakeup)(tty);
  1161. }
  1162. /*
  1163.  * ------------------------------------------------------------
  1164.  * rs_throttle()
  1165.  * 
  1166.  * This routine is called by the upper-layer tty layer to signal that
  1167.  * incoming characters should be throttled.
  1168.  * ------------------------------------------------------------
  1169.  */
  1170. static void rs_throttle(struct tty_struct * tty)
  1171. {
  1172. struct esp_struct *info = (struct esp_struct *)tty->driver_data;
  1173. #ifdef SERIAL_DEBUG_THROTTLE
  1174. char buf[64];
  1175. printk("throttle %s: %d....n", tty_name(tty, buf),
  1176.        tty->ldisc.chars_in_buffer(tty));
  1177. #endif
  1178. if (serial_paranoia_check(info, tty->device, "rs_throttle"))
  1179. return;
  1180. cli();
  1181. info->IER &= ~UART_IER_RDI;
  1182. serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK);
  1183. serial_out(info, UART_ESI_CMD2, info->IER);
  1184. serial_out(info, UART_ESI_CMD1, ESI_SET_RX_TIMEOUT);
  1185. serial_out(info, UART_ESI_CMD2, 0x00);
  1186. sti();
  1187. }
  1188. static void rs_unthrottle(struct tty_struct * tty)
  1189. {
  1190. struct esp_struct *info = (struct esp_struct *)tty->driver_data;
  1191. #ifdef SERIAL_DEBUG_THROTTLE
  1192. char buf[64];
  1193. printk("unthrottle %s: %d....n", tty_name(tty, buf),
  1194.        tty->ldisc.chars_in_buffer(tty));
  1195. #endif
  1196. if (serial_paranoia_check(info, tty->device, "rs_unthrottle"))
  1197. return;
  1198. cli();
  1199. info->IER |= UART_IER_RDI;
  1200. serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK);
  1201. serial_out(info, UART_ESI_CMD2, info->IER);
  1202. serial_out(info, UART_ESI_CMD1, ESI_SET_RX_TIMEOUT);
  1203. serial_out(info, UART_ESI_CMD2, info->config.rx_timeout);
  1204. sti();
  1205. }
  1206. /*
  1207.  * ------------------------------------------------------------
  1208.  * rs_ioctl() and friends
  1209.  * ------------------------------------------------------------
  1210.  */
  1211. static int get_serial_info(struct esp_struct * info,
  1212.    struct serial_struct * retinfo)
  1213. {
  1214. struct serial_struct tmp;
  1215.   
  1216. if (!retinfo)
  1217. return -EFAULT;
  1218. memset(&tmp, 0, sizeof(tmp));
  1219. tmp.type = PORT_16550A;
  1220. tmp.line = info->line;
  1221. tmp.port = info->port;
  1222. tmp.irq = info->irq;
  1223. tmp.flags = info->flags;
  1224. tmp.xmit_fifo_size = 1024;
  1225. tmp.baud_base = BASE_BAUD;
  1226. tmp.close_delay = info->close_delay;
  1227. tmp.closing_wait = info->closing_wait;
  1228. tmp.custom_divisor = info->custom_divisor;
  1229. tmp.hub6 = 0;
  1230. if (copy_to_user(retinfo,&tmp,sizeof(*retinfo)))
  1231. return -EFAULT;
  1232. return 0;
  1233. }
  1234. static int get_esp_config(struct esp_struct * info,
  1235.   struct hayes_esp_config * retinfo)
  1236. {
  1237. struct hayes_esp_config tmp;
  1238.   
  1239. if (!retinfo)
  1240. return -EFAULT;
  1241. memset(&tmp, 0, sizeof(tmp));
  1242. tmp.rx_timeout = info->config.rx_timeout;
  1243. tmp.rx_trigger = info->config.rx_trigger;
  1244. tmp.tx_trigger = info->config.tx_trigger;
  1245. tmp.flow_off = info->config.flow_off;
  1246. tmp.flow_on = info->config.flow_on;
  1247. tmp.pio_threshold = info->config.pio_threshold;
  1248. tmp.dma_channel = (info->stat_flags & ESP_STAT_NEVER_DMA ? 0 : dma);
  1249. return copy_to_user(retinfo, &tmp, sizeof(*retinfo)) ? -EFAULT : 0;
  1250. }
  1251. static int set_serial_info(struct esp_struct * info,
  1252.    struct serial_struct * new_info)
  1253. {
  1254. struct serial_struct new_serial;
  1255. struct esp_struct old_info;
  1256. unsigned int change_irq;
  1257. int retval = 0;
  1258. struct esp_struct *current_async;
  1259. if (copy_from_user(&new_serial,new_info,sizeof(new_serial)))
  1260. return -EFAULT;
  1261. old_info = *info;
  1262. if ((new_serial.type != PORT_16550A) ||
  1263.     (new_serial.hub6) ||
  1264.     (info->port != new_serial.port) ||
  1265.     (new_serial.baud_base != BASE_BAUD) ||
  1266.     (new_serial.irq > 15) ||
  1267.     (new_serial.irq < 2) ||
  1268.     (new_serial.irq == 6) ||
  1269.     (new_serial.irq == 8) ||
  1270.     (new_serial.irq == 13))
  1271. return -EINVAL;
  1272. change_irq = new_serial.irq != info->irq;
  1273. if (change_irq && (info->line % 8))
  1274. return -EINVAL;
  1275. if (!capable(CAP_SYS_ADMIN)) {
  1276. if (change_irq || 
  1277.     (new_serial.close_delay != info->close_delay) ||
  1278.     ((new_serial.flags & ~ASYNC_USR_MASK) !=
  1279.      (info->flags & ~ASYNC_USR_MASK)))
  1280. return -EPERM;
  1281. info->flags = ((info->flags & ~ASYNC_USR_MASK) |
  1282.        (new_serial.flags & ASYNC_USR_MASK));
  1283. info->custom_divisor = new_serial.custom_divisor;
  1284. } else {
  1285. if (new_serial.irq == 2)
  1286. new_serial.irq = 9;
  1287. if (change_irq) {
  1288. current_async = ports;
  1289. while (current_async) {
  1290. if ((current_async->line >= info->line) &&
  1291.     (current_async->line < (info->line + 8))) {
  1292. if (current_async == info) {
  1293. if (current_async->count > 1)
  1294. return -EBUSY;
  1295. } else if (current_async->count)
  1296. return -EBUSY;
  1297. }
  1298. current_async = current_async->next_port;
  1299. }
  1300. }
  1301. /*
  1302.  * OK, past this point, all the error checking has been done.
  1303.  * At this point, we start making changes.....
  1304.  */
  1305. info->flags = ((info->flags & ~ASYNC_FLAGS) |
  1306.        (new_serial.flags & ASYNC_FLAGS));
  1307. info->custom_divisor = new_serial.custom_divisor;
  1308. info->close_delay = new_serial.close_delay * HZ/100;
  1309. info->closing_wait = new_serial.closing_wait * HZ/100;
  1310. if (change_irq) {
  1311. /*
  1312.  * We need to shutdown the serial port at the old
  1313.  * port/irq combination.
  1314.  */
  1315. shutdown(info);
  1316. current_async = ports;
  1317. while (current_async) {
  1318. if ((current_async->line >= info->line) &&
  1319.     (current_async->line < (info->line + 8)))
  1320. current_async->irq = new_serial.irq;
  1321. current_async = current_async->next_port;
  1322. }
  1323. serial_out(info, UART_ESI_CMD1, ESI_SET_ENH_IRQ);
  1324. if (info->irq == 9)
  1325. serial_out(info, UART_ESI_CMD2, 0x02);
  1326. else
  1327. serial_out(info, UART_ESI_CMD2, info->irq);
  1328. }
  1329. }
  1330. if (info->flags & ASYNC_INITIALIZED) {
  1331. if (((old_info.flags & ASYNC_SPD_MASK) !=
  1332.      (info->flags & ASYNC_SPD_MASK)) ||
  1333.     (old_info.custom_divisor != info->custom_divisor)) {
  1334. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
  1335. info->tty->alt_speed = 57600;
  1336. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
  1337. info->tty->alt_speed = 115200;
  1338. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)
  1339. info->tty->alt_speed = 230400;
  1340. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
  1341. info->tty->alt_speed = 460800;
  1342. change_speed(info);
  1343. }
  1344. } else
  1345. retval = startup(info);
  1346. return retval;
  1347. }
  1348. static int set_esp_config(struct esp_struct * info,
  1349.   struct hayes_esp_config * new_info)
  1350. {
  1351. struct hayes_esp_config new_config;
  1352. unsigned int change_dma;
  1353. int retval = 0;
  1354. struct esp_struct *current_async;
  1355. /* Perhaps a non-sysadmin user should be able to do some of these */
  1356. /* operations.  I haven't decided yet. */
  1357. if (!capable(CAP_SYS_ADMIN))
  1358. return -EPERM;
  1359. if (copy_from_user(&new_config, new_info, sizeof(new_config)))
  1360. return -EFAULT;
  1361. if ((new_config.flow_on >= new_config.flow_off) ||
  1362.     (new_config.rx_trigger < 1) ||
  1363.     (new_config.tx_trigger < 1) ||
  1364.     (new_config.flow_off < 1) ||
  1365.     (new_config.flow_on < 1) ||
  1366.     (new_config.rx_trigger > 1023) ||
  1367.     (new_config.tx_trigger > 1023) ||
  1368.     (new_config.flow_off > 1023) ||
  1369.     (new_config.flow_on > 1023) ||
  1370.     (new_config.pio_threshold < 0) ||
  1371.     (new_config.pio_threshold > 1024))
  1372. return -EINVAL;
  1373. if ((new_config.dma_channel != 1) && (new_config.dma_channel != 3))
  1374. new_config.dma_channel = 0;
  1375. if (info->stat_flags & ESP_STAT_NEVER_DMA)
  1376. change_dma = new_config.dma_channel;
  1377. else
  1378. change_dma = (new_config.dma_channel != dma);
  1379. if (change_dma) {
  1380. if (new_config.dma_channel) {
  1381. /* PIO mode to DMA mode transition OR */
  1382. /* change current DMA channel */
  1383. current_async = ports;
  1384. while (current_async) {
  1385. if (current_async == info) {
  1386. if (current_async->count > 1)
  1387. return -EBUSY;
  1388. } else if (current_async->count)
  1389. return -EBUSY;
  1390. current_async =
  1391. current_async->next_port;
  1392. }
  1393. shutdown(info);
  1394. dma = new_config.dma_channel;
  1395. info->stat_flags &= ~ESP_STAT_NEVER_DMA;
  1396.                         /* all ports must use the same DMA channel */
  1397. current_async = ports;
  1398. while (current_async) {
  1399. esp_basic_init(current_async);
  1400. current_async = current_async->next_port;
  1401. }
  1402. } else {
  1403. /* DMA mode to PIO mode only */
  1404. if (info->count > 1)
  1405. return -EBUSY;
  1406. shutdown(info);
  1407. info->stat_flags |= ESP_STAT_NEVER_DMA;
  1408. esp_basic_init(info);
  1409. }
  1410. }
  1411. info->config.pio_threshold = new_config.pio_threshold;
  1412. if ((new_config.flow_off != info->config.flow_off) ||
  1413.     (new_config.flow_on != info->config.flow_on)) {
  1414. unsigned long flags;
  1415. info->config.flow_off = new_config.flow_off;
  1416. info->config.flow_on = new_config.flow_on;
  1417. save_flags(flags); cli();
  1418. serial_out(info, UART_ESI_CMD1, ESI_SET_FLOW_LVL);
  1419. serial_out(info, UART_ESI_CMD2, new_config.flow_off >> 8);
  1420. serial_out(info, UART_ESI_CMD2, new_config.flow_off);
  1421. serial_out(info, UART_ESI_CMD2, new_config.flow_on >> 8);
  1422. serial_out(info, UART_ESI_CMD2, new_config.flow_on);
  1423. restore_flags(flags);
  1424. }
  1425. if ((new_config.rx_trigger != info->config.rx_trigger) ||
  1426.     (new_config.tx_trigger != info->config.tx_trigger)) {
  1427. unsigned long flags;
  1428. info->config.rx_trigger = new_config.rx_trigger;
  1429. info->config.tx_trigger = new_config.tx_trigger;
  1430. save_flags(flags); cli();
  1431. serial_out(info, UART_ESI_CMD1, ESI_SET_TRIGGER);
  1432. serial_out(info, UART_ESI_CMD2,
  1433.    new_config.rx_trigger >> 8);
  1434. serial_out(info, UART_ESI_CMD2, new_config.rx_trigger);
  1435. serial_out(info, UART_ESI_CMD2,
  1436.    new_config.tx_trigger >> 8);
  1437. serial_out(info, UART_ESI_CMD2, new_config.tx_trigger);
  1438. restore_flags(flags);
  1439. }
  1440. if (new_config.rx_timeout != info->config.rx_timeout) {
  1441. unsigned long flags;
  1442. info->config.rx_timeout = new_config.rx_timeout;
  1443. save_flags(flags); cli();
  1444. if (info->IER & UART_IER_RDI) {
  1445. serial_out(info, UART_ESI_CMD1,
  1446.    ESI_SET_RX_TIMEOUT);
  1447. serial_out(info, UART_ESI_CMD2,
  1448.    new_config.rx_timeout);
  1449. }
  1450. restore_flags(flags);
  1451. }
  1452. if (!(info->flags & ASYNC_INITIALIZED))
  1453. retval = startup(info);
  1454. return retval;
  1455. }
  1456. /*
  1457.  * get_lsr_info - get line status register info
  1458.  *
  1459.  * Purpose: Let user call ioctl() to get info when the UART physically
  1460.  *      is emptied.  On bus types like RS485, the transmitter must
  1461.  *      release the bus after transmitting. This must be done when
  1462.  *      the transmit shift register is empty, not be done when the
  1463.  *      transmit holding register is empty.  This functionality
  1464.  *      allows an RS485 driver to be written in user space. 
  1465.  */
  1466. static int get_lsr_info(struct esp_struct * info, unsigned int *value)
  1467. {
  1468. unsigned char status;
  1469. unsigned int result;
  1470. cli();
  1471. serial_out(info, UART_ESI_CMD1, ESI_GET_UART_STAT);
  1472. status = serial_in(info, UART_ESI_STAT1);
  1473. sti();
  1474. result = ((status & UART_LSR_TEMT) ? TIOCSER_TEMT : 0);
  1475. return put_user(result,value);
  1476. }
  1477. static int get_modem_info(struct esp_struct * info, unsigned int *value)
  1478. {
  1479. unsigned char control, status;
  1480. unsigned int result;
  1481. control = info->MCR;
  1482. cli();
  1483. serial_out(info, UART_ESI_CMD1, ESI_GET_UART_STAT);
  1484. status = serial_in(info, UART_ESI_STAT2);
  1485. sti();
  1486. result =  ((control & UART_MCR_RTS) ? TIOCM_RTS : 0)
  1487. | ((control & UART_MCR_DTR) ? TIOCM_DTR : 0)
  1488. | ((status  & UART_MSR_DCD) ? TIOCM_CAR : 0)
  1489. | ((status  & UART_MSR_RI) ? TIOCM_RNG : 0)
  1490. | ((status  & UART_MSR_DSR) ? TIOCM_DSR : 0)
  1491. | ((status  & UART_MSR_CTS) ? TIOCM_CTS : 0);
  1492. return put_user(result,value);
  1493. }
  1494. static int set_modem_info(struct esp_struct * info, unsigned int cmd,
  1495.   unsigned int *value)
  1496. {
  1497. unsigned int arg;
  1498. if (get_user(arg, value))
  1499. return -EFAULT;
  1500. switch (cmd) {
  1501. case TIOCMBIS: 
  1502. if (arg & TIOCM_RTS)
  1503. info->MCR |= UART_MCR_RTS;
  1504. if (arg & TIOCM_DTR)
  1505. info->MCR |= UART_MCR_DTR;
  1506. break;
  1507. case TIOCMBIC:
  1508. if (arg & TIOCM_RTS)
  1509. info->MCR &= ~UART_MCR_RTS;
  1510. if (arg & TIOCM_DTR)
  1511. info->MCR &= ~UART_MCR_DTR;
  1512. break;
  1513. case TIOCMSET:
  1514. info->MCR = ((info->MCR & ~(UART_MCR_RTS | UART_MCR_DTR))
  1515.      | ((arg & TIOCM_RTS) ? UART_MCR_RTS : 0)
  1516.      | ((arg & TIOCM_DTR) ? UART_MCR_DTR : 0));
  1517. break;
  1518. default:
  1519. return -EINVAL;
  1520. }
  1521. cli();
  1522. serial_out(info, UART_ESI_CMD1, ESI_WRITE_UART);
  1523. serial_out(info, UART_ESI_CMD2, UART_MCR);
  1524. serial_out(info, UART_ESI_CMD2, info->MCR);
  1525. sti();
  1526. return 0;
  1527. }
  1528. /*
  1529.  * rs_break() --- routine which turns the break handling on or off
  1530.  */
  1531. static void esp_break(struct tty_struct *tty, int break_state)
  1532. {
  1533. struct esp_struct * info = (struct esp_struct *)tty->driver_data;
  1534. unsigned long flags;
  1535. if (serial_paranoia_check(info, tty->device, "esp_break"))
  1536. return;
  1537. save_flags(flags); cli();
  1538. if (break_state == -1) {
  1539. serial_out(info, UART_ESI_CMD1, ESI_ISSUE_BREAK);
  1540. serial_out(info, UART_ESI_CMD2, 0x01);
  1541. interruptible_sleep_on(&info->break_wait);
  1542. } else {
  1543. serial_out(info, UART_ESI_CMD1, ESI_ISSUE_BREAK);
  1544. serial_out(info, UART_ESI_CMD2, 0x00);
  1545. }
  1546. restore_flags(flags);
  1547. }
  1548. static int rs_ioctl(struct tty_struct *tty, struct file * file,
  1549.     unsigned int cmd, unsigned long arg)
  1550. {
  1551. struct esp_struct * info = (struct esp_struct *)tty->driver_data;
  1552. struct async_icount cprev, cnow; /* kernel counter temps */
  1553. struct serial_icounter_struct *p_cuser; /* user space */
  1554. if (serial_paranoia_check(info, tty->device, "rs_ioctl"))
  1555. return -ENODEV;
  1556. if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
  1557.     (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGWILD)  &&
  1558.     (cmd != TIOCSERSWILD) && (cmd != TIOCSERGSTRUCT) &&
  1559.     (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT) &&
  1560.     (cmd != TIOCGHAYESESP) && (cmd != TIOCSHAYESESP)) {
  1561. if (tty->flags & (1 << TTY_IO_ERROR))
  1562.     return -EIO;
  1563. }
  1564. switch (cmd) {
  1565. case TIOCMGET:
  1566. return get_modem_info(info, (unsigned int *) arg);
  1567. case TIOCMBIS:
  1568. case TIOCMBIC:
  1569. case TIOCMSET:
  1570. return set_modem_info(info, cmd, (unsigned int *) arg);
  1571. case TIOCGSERIAL:
  1572. return get_serial_info(info,
  1573.        (struct serial_struct *) arg);
  1574. case TIOCSSERIAL:
  1575. return set_serial_info(info,
  1576.        (struct serial_struct *) arg);
  1577. case TIOCSERCONFIG:
  1578. /* do not reconfigure after initial configuration */
  1579. return 0;
  1580. case TIOCSERGWILD:
  1581. return put_user(0L, (unsigned long *) arg);
  1582. case TIOCSERGETLSR: /* Get line status register */
  1583.     return get_lsr_info(info, (unsigned int *) arg);
  1584. case TIOCSERSWILD:
  1585. if (!capable(CAP_SYS_ADMIN))
  1586. return -EPERM;
  1587. return 0;
  1588. /*
  1589.  * Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change
  1590.  * - mask passed in arg for lines of interest
  1591.    *   (use |'ed TIOCM_RNG/DSR/CD/CTS for masking)
  1592.  * Caller should use TIOCGICOUNT to see which one it was
  1593.  */
  1594.  case TIOCMIWAIT:
  1595. cli();
  1596. cprev = info->icount; /* note the counters on entry */
  1597. sti();
  1598. while (1) {
  1599. interruptible_sleep_on(&info->delta_msr_wait);
  1600. /* see if a signal did it */
  1601. if (signal_pending(current))
  1602. return -ERESTARTSYS;
  1603. cli();
  1604. cnow = info->icount; /* atomic copy */
  1605. sti();
  1606. if (cnow.rng == cprev.rng &&
  1607.     cnow.dsr == cprev.dsr && 
  1608.     cnow.dcd == cprev.dcd &&
  1609.     cnow.cts == cprev.cts)
  1610. return -EIO; /* no change => error */
  1611. if (((arg & TIOCM_RNG) &&
  1612.      (cnow.rng != cprev.rng)) ||
  1613.      ((arg & TIOCM_DSR) &&
  1614.       (cnow.dsr != cprev.dsr)) ||
  1615.      ((arg & TIOCM_CD) &&
  1616.       (cnow.dcd != cprev.dcd)) ||
  1617.      ((arg & TIOCM_CTS) &&
  1618.       (cnow.cts != cprev.cts)) ) {
  1619. return 0;
  1620. }
  1621. cprev = cnow;
  1622. }
  1623. /* NOTREACHED */
  1624. /* 
  1625.  * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
  1626.  * Return: write counters to the user passed counter struct
  1627.  * NB: both 1->0 and 0->1 transitions are counted except for
  1628.  *     RI where only 0->1 is counted.
  1629.  */
  1630. case TIOCGICOUNT:
  1631. cli();
  1632. cnow = info->icount;
  1633. sti();
  1634. p_cuser = (struct serial_icounter_struct *) arg;
  1635. if (put_user(cnow.cts, &p_cuser->cts) ||
  1636.     put_user(cnow.dsr, &p_cuser->dsr) ||
  1637.     put_user(cnow.rng, &p_cuser->rng) ||
  1638.     put_user(cnow.dcd, &p_cuser->dcd))
  1639. return -EFAULT;
  1640. return 0;
  1641. case TIOCGHAYESESP:
  1642. return (get_esp_config(info, (struct hayes_esp_config *)arg));
  1643. case TIOCSHAYESESP:
  1644. return (set_esp_config(info, (struct hayes_esp_config *)arg));
  1645. default:
  1646. return -ENOIOCTLCMD;
  1647. }
  1648. return 0;
  1649. }
  1650. static void rs_set_termios(struct tty_struct *tty, struct termios *old_termios)
  1651. {
  1652. struct esp_struct *info = (struct esp_struct *)tty->driver_data;
  1653. if (   (tty->termios->c_cflag == old_termios->c_cflag)
  1654.     && (   RELEVANT_IFLAG(tty->termios->c_iflag) 
  1655. == RELEVANT_IFLAG(old_termios->c_iflag)))
  1656.   return;
  1657. change_speed(info);
  1658. /* Handle transition to B0 status */
  1659. if ((old_termios->c_cflag & CBAUD) &&
  1660. !(tty->termios->c_cflag & CBAUD)) {
  1661. info->MCR &= ~(UART_MCR_DTR|UART_MCR_RTS);
  1662. cli();
  1663. serial_out(info, UART_ESI_CMD1, ESI_WRITE_UART);
  1664. serial_out(info, UART_ESI_CMD2, UART_MCR);
  1665. serial_out(info, UART_ESI_CMD2, info->MCR);
  1666. sti();
  1667. }
  1668. /* Handle transition away from B0 status */
  1669. if (!(old_termios->c_cflag & CBAUD) &&
  1670. (tty->termios->c_cflag & CBAUD)) {
  1671. info->MCR |= (UART_MCR_DTR | UART_MCR_RTS);
  1672. cli();
  1673. serial_out(info, UART_ESI_CMD1, ESI_WRITE_UART);
  1674. serial_out(info, UART_ESI_CMD2, UART_MCR);
  1675. serial_out(info, UART_ESI_CMD2, info->MCR);
  1676. sti();
  1677. }
  1678. /* Handle turning of CRTSCTS */
  1679. if ((old_termios->c_cflag & CRTSCTS) &&
  1680.     !(tty->termios->c_cflag & CRTSCTS)) {
  1681. rs_start(tty);
  1682. }
  1683. #if 0
  1684. /*
  1685.  * No need to wake up processes in open wait, since they
  1686.  * sample the CLOCAL flag once, and don't recheck it.
  1687.  * XXX  It's not clear whether the current behavior is correct
  1688.  * or not.  Hence, this may change.....
  1689.  */
  1690. if (!(old_termios->c_cflag & CLOCAL) &&
  1691.     (tty->termios->c_cflag & CLOCAL))
  1692. wake_up_interruptible(&info->open_wait);
  1693. #endif
  1694. }
  1695. /*
  1696.  * ------------------------------------------------------------
  1697.  * rs_close()
  1698.  * 
  1699.  * This routine is called when the serial port gets closed.  First, we
  1700.  * wait for the last remaining data to be sent.  Then, we unlink its
  1701.  * async structure from the interrupt chain if necessary, and we free
  1702.  * that IRQ if nothing is left in the chain.
  1703.  * ------------------------------------------------------------
  1704.  */
  1705. static void rs_close(struct tty_struct *tty, struct file * filp)
  1706. {
  1707. struct esp_struct * info = (struct esp_struct *)tty->driver_data;
  1708. unsigned long flags;
  1709. if (!info || serial_paranoia_check(info, tty->device, "rs_close"))
  1710. return;
  1711. save_flags(flags); cli();
  1712. if (tty_hung_up_p(filp)) {
  1713. DBG_CNT("before DEC-hung");
  1714. goto out;
  1715. }
  1716. #ifdef SERIAL_DEBUG_OPEN
  1717. printk("rs_close ttys%d, count = %dn", info->line, info->count);
  1718. #endif
  1719. if ((tty->count == 1) && (info->count != 1)) {
  1720. /*
  1721.  * Uh, oh.  tty->count is 1, which means that the tty
  1722.  * structure will be freed.  Info->count should always
  1723.  * be one in these conditions.  If it's greater than
  1724.  * one, we've got real problems, since it means the
  1725.  * serial port won't be shutdown.
  1726.  */
  1727. printk("rs_close: bad serial port count; tty->count is 1, "
  1728.        "info->count is %dn", info->count);
  1729. info->count = 1;
  1730. }
  1731. if (--info->count < 0) {
  1732. printk("rs_close: bad serial port count for ttys%d: %dn",
  1733.        info->line, info->count);
  1734. info->count = 0;
  1735. }
  1736. if (info->count) {
  1737. DBG_CNT("before DEC-2");
  1738. goto out;
  1739. }
  1740. info->flags |= ASYNC_CLOSING;
  1741. /*
  1742.  * Save the termios structure, since this port may have
  1743.  * separate termios for callout and dialin.
  1744.  */
  1745. if (info->flags & ASYNC_NORMAL_ACTIVE)
  1746. info->normal_termios = *tty->termios;
  1747. if (info->flags & ASYNC_CALLOUT_ACTIVE)
  1748. info->callout_termios = *tty->termios;
  1749. /*
  1750.  * Now we wait for the transmit buffer to clear; and we notify 
  1751.  * the line discipline to only process XON/XOFF characters.
  1752.  */
  1753. tty->closing = 1;
  1754. if (info->closing_wait != ASYNC_CLOSING_WAIT_NONE)
  1755. tty_wait_until_sent(tty, info->closing_wait);
  1756. /*
  1757.  * At this point we stop accepting input.  To do this, we
  1758.  * disable the receive line status interrupts, and tell the
  1759.  * interrupt driver to stop checking the data ready bit in the
  1760.  * line status register.
  1761.  */
  1762. /* info->IER &= ~UART_IER_RLSI; */
  1763. info->IER &= ~UART_IER_RDI;
  1764. info->read_status_mask &= ~UART_LSR_DR;
  1765. if (info->flags & ASYNC_INITIALIZED) {
  1766. serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK);
  1767. serial_out(info, UART_ESI_CMD2, info->IER);
  1768. /* disable receive timeout */
  1769. serial_out(info, UART_ESI_CMD1, ESI_SET_RX_TIMEOUT);
  1770. serial_out(info, UART_ESI_CMD2, 0x00);
  1771. /*
  1772.  * Before we drop DTR, make sure the UART transmitter
  1773.  * has completely drained; this is especially
  1774.  * important if there is a transmit FIFO!
  1775.  */
  1776. rs_wait_until_sent(tty, info->timeout);
  1777. }
  1778. shutdown(info);
  1779. if (tty->driver.flush_buffer)
  1780. tty->driver.flush_buffer(tty);
  1781. if (tty->ldisc.flush_buffer)
  1782. tty->ldisc.flush_buffer(tty);
  1783. tty->closing = 0;
  1784. info->event = 0;
  1785. info->tty = 0;
  1786. if (info->blocked_open) {
  1787. if (info->close_delay) {
  1788. set_current_state(TASK_INTERRUPTIBLE);
  1789. schedule_timeout(info->close_delay);
  1790. }
  1791. wake_up_interruptible(&info->open_wait);
  1792. }
  1793. info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE|
  1794.  ASYNC_CLOSING);
  1795. wake_up_interruptible(&info->close_wait);
  1796. out: MOD_DEC_USE_COUNT;
  1797. restore_flags(flags);
  1798. }
  1799. static void rs_wait_until_sent(struct tty_struct *tty, int timeout)
  1800. {
  1801. struct esp_struct *info = (struct esp_struct *)tty->driver_data;
  1802. unsigned long orig_jiffies, char_time;
  1803. unsigned long flags;
  1804. if (serial_paranoia_check(info, tty->device, "rs_wait_until_sent"))
  1805. return;
  1806. orig_jiffies = jiffies;
  1807. char_time = ((info->timeout - HZ / 50) / 1024) / 5;
  1808. if (!char_time)
  1809. char_time = 1;
  1810. save_flags(flags); cli();
  1811. serial_out(info, UART_ESI_CMD1, ESI_NO_COMMAND);
  1812. serial_out(info, UART_ESI_CMD1, ESI_GET_TX_AVAIL);
  1813. while ((serial_in(info, UART_ESI_STAT1) != 0x03) ||
  1814. (serial_in(info, UART_ESI_STAT2) != 0xff)) {
  1815. set_current_state(TASK_INTERRUPTIBLE);
  1816. schedule_timeout(char_time);
  1817. if (signal_pending(current))
  1818. break;
  1819. if (timeout && ((orig_jiffies + timeout) < jiffies))
  1820. break;
  1821. serial_out(info, UART_ESI_CMD1, ESI_NO_COMMAND);
  1822. serial_out(info, UART_ESI_CMD1, ESI_GET_TX_AVAIL);
  1823. }
  1824. restore_flags(flags);
  1825. set_current_state(TASK_RUNNING);
  1826. }
  1827. /*
  1828.  * esp_hangup() --- called by tty_hangup() when a hangup is signaled.
  1829.  */
  1830. static void esp_hangup(struct tty_struct *tty)
  1831. {
  1832. struct esp_struct * info = (struct esp_struct *)tty->driver_data;
  1833. if (serial_paranoia_check(info, tty->device, "esp_hangup"))
  1834. return;
  1835. rs_flush_buffer(tty);
  1836. shutdown(info);
  1837. info->event = 0;
  1838. info->count = 0;
  1839. info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE);
  1840. info->tty = 0;
  1841. wake_up_interruptible(&info->open_wait);
  1842. }
  1843. /*
  1844.  * ------------------------------------------------------------
  1845.  * esp_open() and friends
  1846.  * ------------------------------------------------------------
  1847.  */
  1848. static int block_til_ready(struct tty_struct *tty, struct file * filp,
  1849.    struct esp_struct *info)
  1850. {
  1851. DECLARE_WAITQUEUE(wait, current);
  1852. int retval;
  1853. int do_clocal = 0;
  1854. unsigned long flags;
  1855. /*
  1856.  * If the device is in the middle of being closed, then block
  1857.  * until it's done, and then try again.
  1858.  */
  1859. if (tty_hung_up_p(filp) ||
  1860.     (info->flags & ASYNC_CLOSING)) {
  1861. if (info->flags & ASYNC_CLOSING)
  1862. interruptible_sleep_on(&info->close_wait);
  1863. #ifdef SERIAL_DO_RESTART
  1864. if (info->flags & ASYNC_HUP_NOTIFY)
  1865. return -EAGAIN;
  1866. else
  1867. return -ERESTARTSYS;
  1868. #else
  1869. return -EAGAIN;
  1870. #endif
  1871. }
  1872. /*
  1873.  * If this is a callout device, then just make sure the normal
  1874.  * device isn't being used.
  1875.  */
  1876. if (tty->driver.subtype == SERIAL_TYPE_CALLOUT) {
  1877. if (info->flags & ASYNC_NORMAL_ACTIVE)
  1878. return -EBUSY;
  1879. if ((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1880.     (info->flags & ASYNC_SESSION_LOCKOUT) &&
  1881.     (info->session != current->session))
  1882.     return -EBUSY;
  1883. if ((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1884.     (info->flags & ASYNC_PGRP_LOCKOUT) &&
  1885.     (info->pgrp != current->pgrp))
  1886.     return -EBUSY;
  1887. info->flags |= ASYNC_CALLOUT_ACTIVE;
  1888. return 0;
  1889. }
  1890. /*
  1891.  * If non-blocking mode is set, or the port is not enabled,
  1892.  * then make the check up front and then exit.
  1893.  */
  1894. if ((filp->f_flags & O_NONBLOCK) ||
  1895.     (tty->flags & (1 << TTY_IO_ERROR))) {
  1896. if (info->flags & ASYNC_CALLOUT_ACTIVE)
  1897. return -EBUSY;
  1898. info->flags |= ASYNC_NORMAL_ACTIVE;
  1899. return 0;
  1900. }
  1901. if (info->flags & ASYNC_CALLOUT_ACTIVE) {
  1902. if (info->normal_termios.c_cflag & CLOCAL)
  1903. do_clocal = 1;
  1904. } else {
  1905. if (tty->termios->c_cflag & CLOCAL)
  1906. do_clocal = 1;
  1907. }
  1908. /*
  1909.  * Block waiting for the carrier detect and the line to become
  1910.  * free (i.e., not in use by the callout).  While we are in
  1911.  * this loop, info->count is dropped by one, so that
  1912.  * rs_close() knows when to free things.  We restore it upon
  1913.  * exit, either normal or abnormal.
  1914.  */
  1915. retval = 0;
  1916. add_wait_queue(&info->open_wait, &wait);
  1917. #ifdef SERIAL_DEBUG_OPEN
  1918. printk("block_til_ready before block: ttys%d, count = %dn",
  1919.        info->line, info->count);
  1920. #endif
  1921. save_flags(flags);
  1922. cli();
  1923. if (!tty_hung_up_p(filp)) 
  1924. info->count--;
  1925. restore_flags(flags);
  1926. info->blocked_open++;
  1927. while (1) {
  1928. save_flags(flags);
  1929. cli();
  1930. if (!(info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1931. (tty->termios->c_cflag & CBAUD)) {
  1932. unsigned int scratch;
  1933. serial_out(info, UART_ESI_CMD1, ESI_READ_UART);
  1934. serial_out(info, UART_ESI_CMD2, UART_MCR);
  1935. scratch = serial_in(info, UART_ESI_STAT1);
  1936. serial_out(info, UART_ESI_CMD1, ESI_WRITE_UART);
  1937. serial_out(info, UART_ESI_CMD2, UART_MCR);
  1938. serial_out(info, UART_ESI_CMD2,
  1939. scratch | UART_MCR_DTR | UART_MCR_RTS);
  1940. }
  1941. restore_flags(flags);
  1942. set_current_state(TASK_INTERRUPTIBLE);
  1943. if (tty_hung_up_p(filp) ||
  1944.     !(info->flags & ASYNC_INITIALIZED)) {
  1945. #ifdef SERIAL_DO_RESTART
  1946. if (info->flags & ASYNC_HUP_NOTIFY)
  1947. retval = -EAGAIN;
  1948. else
  1949. retval = -ERESTARTSYS;
  1950. #else
  1951. retval = -EAGAIN;
  1952. #endif
  1953. break;
  1954. }
  1955. serial_out(info, UART_ESI_CMD1, ESI_GET_UART_STAT);
  1956. if (serial_in(info, UART_ESI_STAT2) & UART_MSR_DCD)
  1957. do_clocal = 1;
  1958. if (!(info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1959.     !(info->flags & ASYNC_CLOSING) &&
  1960.     (do_clocal))
  1961. break;
  1962. if (signal_pending(current)) {
  1963. retval = -ERESTARTSYS;
  1964. break;
  1965. }
  1966. #ifdef SERIAL_DEBUG_OPEN
  1967. printk("block_til_ready blocking: ttys%d, count = %dn",
  1968.        info->line, info->count);
  1969. #endif
  1970. schedule();
  1971. }
  1972. set_current_state(TASK_RUNNING);
  1973. remove_wait_queue(&info->open_wait, &wait);
  1974. if (!tty_hung_up_p(filp))
  1975. info->count++;
  1976. info->blocked_open--;
  1977. #ifdef SERIAL_DEBUG_OPEN
  1978. printk("block_til_ready after blocking: ttys%d, count = %dn",
  1979.        info->line, info->count);
  1980. #endif
  1981. if (retval)
  1982. return retval;
  1983. info->flags |= ASYNC_NORMAL_ACTIVE;
  1984. return 0;
  1985. }
  1986. /*
  1987.  * This routine is called whenever a serial port is opened.  It
  1988.  * enables interrupts for a serial port, linking in its async structure into
  1989.  * the IRQ chain.   It also performs the serial-specific
  1990.  * initialization for the tty structure.
  1991.  */
  1992. static int esp_open(struct tty_struct *tty, struct file * filp)
  1993. {
  1994. struct esp_struct *info;
  1995. int  retval, line;
  1996. line = MINOR(tty->device) - tty->driver.minor_start;
  1997. if ((line < 0) || (line >= NR_PORTS))
  1998. return -ENODEV;
  1999. /* find the port in the chain */
  2000. info = ports;
  2001. while (info && (info->line != line))
  2002. info = info->next_port;
  2003. if (!info) {
  2004. serial_paranoia_check(info, tty->device, "esp_open");
  2005. return -ENODEV;
  2006. }
  2007. #ifdef SERIAL_DEBUG_OPEN
  2008. printk("esp_open %s%d, count = %dn", tty->driver.name, info->line,
  2009.        info->count);
  2010. #endif
  2011. MOD_INC_USE_COUNT;
  2012. info->count++;
  2013. tty->driver_data = info;
  2014. info->tty = tty;
  2015. if (!tmp_buf) {
  2016. tmp_buf = (unsigned char *) get_free_page(GFP_KERNEL);
  2017. if (!tmp_buf)
  2018. return -ENOMEM;
  2019. }
  2020. /*
  2021.  * Start up serial port
  2022.  */
  2023. retval = startup(info);
  2024. if (retval)
  2025. return retval;
  2026. retval = block_til_ready(tty, filp, info);
  2027. if (retval) {
  2028. #ifdef SERIAL_DEBUG_OPEN
  2029. printk("esp_open returning after block_til_ready with %dn",
  2030.        retval);
  2031. #endif
  2032. return retval;
  2033. }
  2034. if ((info->count == 1) && (info->flags & ASYNC_SPLIT_TERMIOS)) {
  2035. if (tty->driver.subtype == SERIAL_TYPE_NORMAL)
  2036. *tty->termios = info->normal_termios;
  2037. else 
  2038. *tty->termios = info->callout_termios;
  2039. change_speed(info);
  2040. }
  2041. info->session = current->session;
  2042. info->pgrp = current->pgrp;
  2043. #ifdef SERIAL_DEBUG_OPEN
  2044. printk("esp_open ttys%d successful...", info->line);
  2045. #endif
  2046. return 0;
  2047. }
  2048. /*
  2049.  * ---------------------------------------------------------------------
  2050.  * espserial_init() and friends
  2051.  *
  2052.  * espserial_init() is called at boot-time to initialize the serial driver.
  2053.  * ---------------------------------------------------------------------
  2054.  */
  2055. /*
  2056.  * This routine prints out the appropriate serial driver version
  2057.  * number, and identifies which options were configured into this
  2058.  * driver.
  2059.  */
  2060.  
  2061. static _INLINE_ void show_serial_version(void)
  2062. {
  2063.   printk(KERN_INFO "%s version %s (DMA %u)n",
  2064. serial_name, serial_version, dma);
  2065. }
  2066. /*
  2067.  * This routine is called by espserial_init() to initialize a specific serial
  2068.  * port.
  2069.  */
  2070. static _INLINE_ int autoconfig(struct esp_struct * info, int *region_start)
  2071. {
  2072. int port_detected = 0;
  2073. unsigned long flags;
  2074. save_flags(flags); cli();
  2075. /*
  2076.  * Check for ESP card
  2077.  */
  2078. if (!check_region(info->port, 8) && 
  2079.     serial_in(info, UART_ESI_BASE) == 0xf3) {
  2080. serial_out(info, UART_ESI_CMD1, 0x00);
  2081. serial_out(info, UART_ESI_CMD1, 0x01);
  2082. if ((serial_in(info, UART_ESI_STAT2) & 0x70) == 0x20) {
  2083. port_detected = 1;
  2084. if (!(info->irq)) {
  2085. serial_out(info, UART_ESI_CMD1, 0x02);
  2086. if (serial_in(info, UART_ESI_STAT1) & 0x01)
  2087. info->irq = 3;
  2088. else
  2089. info->irq = 4;
  2090. }
  2091. if (ports && (ports->port == (info->port - 8))) {
  2092. release_region(*region_start,
  2093.        info->port - *region_start);
  2094. } else
  2095. *region_start = info->port;
  2096. request_region(*region_start,
  2097.        info->port - *region_start + 8,
  2098.        "esp serial");
  2099. /* put card in enhanced mode */
  2100. /* this prevents access through */
  2101. /* the "old" IO ports */
  2102. esp_basic_init(info);
  2103. /* clear out MCR */
  2104. serial_out(info, UART_ESI_CMD1, ESI_WRITE_UART);
  2105. serial_out(info, UART_ESI_CMD2, UART_MCR);
  2106. serial_out(info, UART_ESI_CMD2, 0x00);
  2107. }
  2108. }
  2109. restore_flags(flags);
  2110. return (port_detected);
  2111. }
  2112. /*
  2113.  * The serial driver boot-time initialization code!
  2114.  */
  2115. int __init espserial_init(void)
  2116. {
  2117. int i, offset;
  2118. int region_start;
  2119. struct esp_struct * info;
  2120. struct esp_struct *last_primary = 0;
  2121. int esp[] = {0x100,0x140,0x180,0x200,0x240,0x280,0x300,0x380};
  2122. init_bh(ESP_BH, do_serial_bh);
  2123. for (i = 0; i < NR_PRIMARY; i++) {
  2124. if (irq[i] != 0) {
  2125. if ((irq[i] < 2) || (irq[i] > 15) || (irq[i] == 6) ||
  2126.     (irq[i] == 8) || (irq[i] == 13))
  2127. irq[i] = 0;
  2128. else if (irq[i] == 2)
  2129. irq[i] = 9;
  2130. }
  2131. }
  2132. if ((dma != 1) && (dma != 3))
  2133. dma = 0;
  2134. if ((rx_trigger < 1) || (rx_trigger > 1023))
  2135. rx_trigger = 768;
  2136. if ((tx_trigger < 1) || (tx_trigger > 1023))
  2137. tx_trigger = 768;
  2138. if ((flow_off < 1) || (flow_off > 1023))
  2139. flow_off = 1016;
  2140. if ((flow_on < 1) || (flow_on > 1023))
  2141. flow_on = 944;
  2142. if ((rx_timeout < 0) || (rx_timeout > 255))
  2143. rx_timeout = 128;
  2144. if (flow_on >= flow_off)
  2145. flow_on = flow_off - 1;
  2146. show_serial_version();
  2147. /* Initialize the tty_driver structure */
  2148. memset(&esp_driver, 0, sizeof(struct tty_driver));
  2149. esp_driver.magic = TTY_DRIVER_MAGIC;
  2150. esp_driver.name = "ttyP";
  2151. esp_driver.major = ESP_IN_MAJOR;
  2152. esp_driver.minor_start = 0;
  2153. esp_driver.num = NR_PORTS;
  2154. esp_driver.type = TTY_DRIVER_TYPE_SERIAL;
  2155. esp_driver.subtype = SERIAL_TYPE_NORMAL;
  2156. esp_driver.init_termios = tty_std_termios;
  2157. esp_driver.init_termios.c_cflag =
  2158. B9600 | CS8 | CREAD | HUPCL | CLOCAL;
  2159. esp_driver.flags = TTY_DRIVER_REAL_RAW;
  2160. esp_driver.refcount = &serial_refcount;
  2161. esp_driver.table = serial_table;
  2162. esp_driver.termios = serial_termios;
  2163. esp_driver.termios_locked = serial_termios_locked;
  2164. esp_driver.open = esp_open;
  2165. esp_driver.close = rs_close;
  2166. esp_driver.write = rs_write;
  2167. esp_driver.put_char = rs_put_char;
  2168. esp_driver.flush_chars = rs_flush_chars;
  2169. esp_driver.write_room = rs_write_room;
  2170. esp_driver.chars_in_buffer = rs_chars_in_buffer;
  2171. esp_driver.flush_buffer = rs_flush_buffer;
  2172. esp_driver.ioctl = rs_ioctl;
  2173. esp_driver.throttle = rs_throttle;
  2174. esp_driver.unthrottle = rs_unthrottle;
  2175. esp_driver.set_termios = rs_set_termios;
  2176. esp_driver.stop = rs_stop;
  2177. esp_driver.start = rs_start;
  2178. esp_driver.hangup = esp_hangup;
  2179. esp_driver.break_ctl = esp_break;
  2180. esp_driver.wait_until_sent = rs_wait_until_sent;
  2181. /*
  2182.  * The callout device is just like normal device except for
  2183.  * major number and the subtype code.
  2184.  */
  2185. esp_callout_driver = esp_driver;
  2186. esp_callout_driver.name = "cup";
  2187. esp_callout_driver.major = ESP_OUT_MAJOR;
  2188. esp_callout_driver.subtype = SERIAL_TYPE_CALLOUT;
  2189. if (tty_register_driver(&esp_driver))
  2190. {
  2191. printk(KERN_ERR "Couldn't register esp serial driver");
  2192. return 1;
  2193. }
  2194. if (tty_register_driver(&esp_callout_driver))
  2195. {
  2196. printk(KERN_ERR "Couldn't register esp callout driver");
  2197. tty_unregister_driver(&esp_driver);
  2198. return 1;
  2199. }
  2200. info = kmalloc(sizeof(struct esp_struct), GFP_KERNEL);
  2201. if (!info)
  2202. {
  2203. printk(KERN_ERR "Couldn't allocate memory for esp serial device informationn");
  2204. tty_unregister_driver(&esp_driver);
  2205. tty_unregister_driver(&esp_callout_driver);
  2206. return 1;
  2207. }
  2208. memset((void *)info, 0, sizeof(struct esp_struct));
  2209. /* rx_trigger, tx_trigger are needed by autoconfig */
  2210. info->config.rx_trigger = rx_trigger;
  2211. info->config.tx_trigger = tx_trigger;
  2212. i = 0;
  2213. offset = 0;
  2214. do {
  2215. info->port = esp[i] + offset;
  2216. info->irq = irq[i];
  2217. info->line = (i * 8) + (offset / 8);
  2218. if (!autoconfig(info, &region_start)) {
  2219. i++;
  2220. offset = 0;
  2221. continue;
  2222. }
  2223. info->custom_divisor = (divisor[i] >> (offset / 2)) & 0xf;
  2224. info->flags = STD_COM_FLAGS;
  2225. if (info->custom_divisor)
  2226. info->flags |= ASYNC_SPD_CUST;
  2227. info->magic = ESP_MAGIC;
  2228. info->close_delay = 5*HZ/10;
  2229. info->closing_wait = 30*HZ;
  2230. info->tqueue.routine = do_softint;
  2231. info->tqueue.data = info;
  2232. info->tqueue_hangup.routine = do_serial_hangup;
  2233. info->tqueue_hangup.data = info;
  2234. info->callout_termios = esp_callout_driver.init_termios;
  2235. info->normal_termios = esp_driver.init_termios;
  2236. info->config.rx_timeout = rx_timeout;
  2237. info->config.flow_on = flow_on;
  2238. info->config.flow_off = flow_off;
  2239. info->config.pio_threshold = pio_threshold;
  2240. info->next_port = ports;
  2241. init_waitqueue_head(&info->open_wait);
  2242. init_waitqueue_head(&info->close_wait);
  2243. init_waitqueue_head(&info->delta_msr_wait);
  2244. init_waitqueue_head(&info->break_wait);
  2245. ports = info;
  2246. printk(KERN_INFO "ttyP%d at 0x%04x (irq = %d) is an ESP ",
  2247. info->line, info->port, info->irq);
  2248. if (info->line % 8) {
  2249. printk("secondary portn");
  2250. /* 8 port cards can't do DMA */
  2251. info->stat_flags |= ESP_STAT_NEVER_DMA;
  2252. if (last_primary)
  2253. last_primary->stat_flags |= ESP_STAT_NEVER_DMA;
  2254. } else {
  2255. printk("primary portn");
  2256. last_primary = info;
  2257. irq[i] = info->irq;
  2258. }
  2259. if (!dma)
  2260. info->stat_flags |= ESP_STAT_NEVER_DMA;
  2261. info = kmalloc(sizeof(struct esp_struct), GFP_KERNEL);
  2262. if (!info)
  2263. {
  2264. printk(KERN_ERR "Couldn't allocate memory for esp serial device informationn"); 
  2265. /* allow use of the already detected ports */
  2266. return 0;
  2267. }
  2268. memset((void *)info, 0, sizeof(struct esp_struct));
  2269. /* rx_trigger, tx_trigger are needed by autoconfig */
  2270. info->config.rx_trigger = rx_trigger;
  2271. info->config.tx_trigger = tx_trigger;
  2272. if (offset == 56) {
  2273. i++;
  2274. offset = 0;
  2275. } else {
  2276. offset += 8;
  2277. }
  2278. } while (i < NR_PRIMARY);
  2279. /* free the last port memory allocation */
  2280. kfree(info);
  2281. return 0;
  2282. }
  2283. static void __exit espserial_exit(void) 
  2284. {
  2285. unsigned long flags;
  2286. int e1, e2;
  2287. unsigned int region_start, region_end;
  2288. struct esp_struct *temp_async;
  2289. struct esp_pio_buffer *pio_buf;
  2290. /* printk("Unloading %s: version %sn", serial_name, serial_version); */
  2291. save_flags(flags);
  2292. cli();
  2293. remove_bh(ESP_BH);
  2294. if ((e1 = tty_unregister_driver(&esp_driver)))
  2295. printk("SERIAL: failed to unregister serial driver (%d)n",
  2296.        e1);
  2297. if ((e2 = tty_unregister_driver(&esp_callout_driver)))
  2298. printk("SERIAL: failed to unregister callout driver (%d)n", 
  2299.        e2);
  2300. restore_flags(flags);
  2301. while (ports) {
  2302. if (ports->port) {
  2303. region_start = region_end = ports->port;
  2304. temp_async = ports;
  2305. while (temp_async) {
  2306. if ((region_start - temp_async->port) == 8) {
  2307. region_start = temp_async->port;
  2308. temp_async->port = 0;
  2309. temp_async = ports;
  2310. } else if ((temp_async->port - region_end)
  2311.    == 8) {
  2312. region_end = temp_async->port;
  2313. temp_async->port = 0;
  2314. temp_async = ports;
  2315. } else
  2316. temp_async = temp_async->next_port;
  2317. }
  2318. release_region(region_start,
  2319.        region_end - region_start + 8);
  2320. }
  2321. temp_async = ports->next_port;
  2322. kfree(ports);
  2323. ports = temp_async;
  2324. }
  2325. if (dma_buffer)
  2326. free_pages((unsigned long)dma_buffer,
  2327. get_order(DMA_BUFFER_SZ));
  2328. if (tmp_buf)
  2329. free_page((unsigned long)tmp_buf);
  2330. while (free_pio_buf) {
  2331. pio_buf = free_pio_buf->next;
  2332. kfree(free_pio_buf);
  2333. free_pio_buf = pio_buf;
  2334. }
  2335. }
  2336. module_init(espserial_init);
  2337. module_exit(espserial_exit);