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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/drivers/char/serial.c
  3.  *
  4.  *  Copyright (C) 1991, 1992  Linus Torvalds
  5.  *  Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 
  6.  *  1998, 1999  Theodore Ts'o
  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.  *  1/97:  Extended dumb serial ports are a config option now.  
  25.  *         Saves 4k.   Michael A. Griffith <grif@acm.org>
  26.  * 
  27.  *  8/97: Fix bug in rs_set_termios with RTS
  28.  *        Stanislav V. Voronyi <stas@uanet.kharkov.ua>
  29.  *
  30.  *  3/98: Change the IRQ detection, use of probe_irq_o*(),
  31.  *   suppress TIOCSERGWILD and TIOCSERSWILD
  32.  *   Etienne Lorrain <etienne.lorrain@ibm.net>
  33.  *
  34.  *  4/98: Added changes to support the ARM architecture proposed by
  35.  *    Russell King
  36.  *
  37.  *  5/99: Updated to include support for the XR16C850 and ST16C654
  38.  *        uarts.  Stuart MacDonald <stuartm@connecttech.com>
  39.  *
  40.  *  8/99: Generalized PCI support added.  Theodore Ts'o
  41.  * 
  42.  *  3/00: Rid circular buffer of redundant xmit_cnt.  Fix a
  43.  *   few races on freeing buffers too.
  44.  *   Alan Modra <alan@linuxcare.com>
  45.  *
  46.  *  5/00: Support for the RSA-DV II/S card added.
  47.  *   Kiyokazu SUTO <suto@ks-and-ks.ne.jp>
  48.  * 
  49.  *  6/00: Remove old-style timer, use timer_list
  50.  *        Andrew Morton <andrewm@uow.edu.au>
  51.  *
  52.  *  7/00: Support Timedia/Sunix/Exsys PCI cards
  53.  *
  54.  *  7/00: fix some returns on failure not using MOD_DEC_USE_COUNT.
  55.  *   Arnaldo Carvalho de Melo <acme@conectiva.com.br>
  56.  *
  57.  * 10/00: add in optional software flow control for serial console.
  58.  *   Kanoj Sarcar <kanoj@sgi.com>  (Modified by Theodore Ts'o)
  59.  *
  60.  * 02/02: Fix for AMD Elan bug in transmit irq routine, by
  61.  *        Christer Weinigel <wingel@hog.ctrl-c.liu.se>,
  62.  *        Robert Schwebel <robert@schwebel.de>,
  63.  *        Juergen Beisert <jbeisert@eurodsn.de>,
  64.  *        Theodore Ts'o <tytso@mit.edu>
  65.  */
  66. static char *serial_version = "5.05c";
  67. static char *serial_revdate = "2001-07-08";
  68. /*
  69.  * Serial driver configuration section.  Here are the various options:
  70.  *
  71.  * CONFIG_HUB6
  72.  * Enables support for the venerable Bell Technologies
  73.  * HUB6 card.
  74.  *
  75.  * CONFIG_SERIAL_MANY_PORTS
  76.  *  Enables support for ports beyond the standard, stupid
  77.  *  COM 1/2/3/4.
  78.  *
  79.  * CONFIG_SERIAL_MULTIPORT
  80.  *  Enables support for special multiport board support.
  81.  *
  82.  * CONFIG_SERIAL_SHARE_IRQ
  83.  *  Enables support for multiple serial ports on one IRQ
  84.  *
  85.  * CONFIG_SERIAL_DETECT_IRQ
  86.  * Enable the autodetection of IRQ on standart ports
  87.  *
  88.  * SERIAL_PARANOIA_CHECK
  89.  *  Check the magic number for the async_structure where
  90.  *  ever possible.
  91.  *
  92.  * CONFIG_SERIAL_ACPI
  93.  * Enable support for serial console port and serial 
  94.  * debug port as defined by the SPCR and DBGP tables in 
  95.  * ACPI 2.0.
  96.  */
  97. #include <linux/config.h>
  98. #include <linux/version.h>
  99. #undef SERIAL_PARANOIA_CHECK
  100. #define CONFIG_SERIAL_NOPAUSE_IO
  101. #define SERIAL_DO_RESTART
  102. #if 0
  103. /* These defines are normally controlled by the autoconf.h */
  104. #define CONFIG_SERIAL_MANY_PORTS
  105. #define CONFIG_SERIAL_SHARE_IRQ
  106. #define CONFIG_SERIAL_DETECT_IRQ
  107. #define CONFIG_SERIAL_MULTIPORT
  108. #define CONFIG_HUB6
  109. #endif
  110. #ifdef CONFIG_PCI
  111. #define ENABLE_SERIAL_PCI
  112. #ifndef CONFIG_SERIAL_SHARE_IRQ
  113. #define CONFIG_SERIAL_SHARE_IRQ
  114. #endif
  115. #ifndef CONFIG_SERIAL_MANY_PORTS
  116. #define CONFIG_SERIAL_MANY_PORTS
  117. #endif
  118. #endif
  119. #ifdef CONFIG_SERIAL_ACPI
  120. #define ENABLE_SERIAL_ACPI
  121. #endif
  122. #if defined(CONFIG_ISAPNP)|| (defined(CONFIG_ISAPNP_MODULE) && defined(MODULE))
  123. #ifndef ENABLE_SERIAL_PNP
  124. #define ENABLE_SERIAL_PNP
  125. #endif
  126. #endif
  127. /* Set of debugging defines */
  128. #undef SERIAL_DEBUG_INTR
  129. #undef SERIAL_DEBUG_OPEN
  130. #undef SERIAL_DEBUG_FLOW
  131. #undef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT
  132. #undef SERIAL_DEBUG_PCI
  133. #undef SERIAL_DEBUG_AUTOCONF
  134. /* Sanity checks */
  135. #ifdef CONFIG_SERIAL_MULTIPORT
  136. #ifndef CONFIG_SERIAL_SHARE_IRQ
  137. #define CONFIG_SERIAL_SHARE_IRQ
  138. #endif
  139. #endif
  140. #ifdef CONFIG_HUB6
  141. #ifndef CONFIG_SERIAL_MANY_PORTS
  142. #define CONFIG_SERIAL_MANY_PORTS
  143. #endif
  144. #ifndef CONFIG_SERIAL_SHARE_IRQ
  145. #define CONFIG_SERIAL_SHARE_IRQ
  146. #endif
  147. #endif
  148. #ifdef MODULE
  149. #undef CONFIG_SERIAL_CONSOLE
  150. #endif
  151. #define CONFIG_SERIAL_RSA
  152. #define RS_STROBE_TIME (10*HZ)
  153. #define RS_ISR_PASS_LIMIT 256
  154. #if defined(__i386__) && (defined(CONFIG_M386) || defined(CONFIG_M486))
  155. #define SERIAL_INLINE
  156. #endif
  157.   
  158. /*
  159.  * End of serial driver configuration section.
  160.  */
  161. #include <linux/module.h>
  162. #include <linux/types.h>
  163. #ifdef LOCAL_HEADERS
  164. #include "serial_local.h"
  165. #else
  166. #include <linux/serial.h>
  167. #include <linux/serialP.h>
  168. #include <linux/serial_reg.h>
  169. #include <asm/serial.h>
  170. #define LOCAL_VERSTRING ""
  171. #endif
  172. #include <linux/errno.h>
  173. #include <linux/signal.h>
  174. #include <linux/sched.h>
  175. #include <linux/timer.h>
  176. #include <linux/interrupt.h>
  177. #include <linux/tty.h>
  178. #include <linux/tty_flip.h>
  179. #include <linux/major.h>
  180. #include <linux/string.h>
  181. #include <linux/fcntl.h>
  182. #include <linux/ptrace.h>
  183. #include <linux/ioport.h>
  184. #include <linux/mm.h>
  185. #include <linux/slab.h>
  186. #if (LINUX_VERSION_CODE >= 131343)
  187. #include <linux/init.h>
  188. #endif
  189. #if (LINUX_VERSION_CODE >= 131336)
  190. #include <asm/uaccess.h>
  191. #endif
  192. #include <linux/delay.h>
  193. #ifdef CONFIG_SERIAL_CONSOLE
  194. #include <linux/console.h>
  195. #endif
  196. #ifdef ENABLE_SERIAL_PCI
  197. #include <linux/pci.h>
  198. #endif
  199. #ifdef ENABLE_SERIAL_PNP
  200. #include <linux/isapnp.h>
  201. #endif
  202. #ifdef CONFIG_MAGIC_SYSRQ
  203. #include <linux/sysrq.h>
  204. #endif
  205. /*
  206.  * All of the compatibilty code so we can compile serial.c against
  207.  * older kernels is hidden in serial_compat.h
  208.  */
  209. #if defined(LOCAL_HEADERS) || (LINUX_VERSION_CODE < 0x020317) /* 2.3.23 */
  210. #include "serial_compat.h"
  211. #endif
  212. #include <asm/system.h>
  213. #include <asm/io.h>
  214. #include <asm/irq.h>
  215. #include <asm/bitops.h>
  216. #if defined(CONFIG_MAC_SERIAL)
  217. #define SERIAL_DEV_OFFSET ((_machine == _MACH_prep || _machine == _MACH_chrp) ? 0 : 2)
  218. #else
  219. #define SERIAL_DEV_OFFSET 0
  220. #endif
  221. #ifdef SERIAL_INLINE
  222. #define _INLINE_ inline
  223. #else
  224. #define _INLINE_
  225. #endif
  226. static char *serial_name = "Serial driver";
  227. static DECLARE_TASK_QUEUE(tq_serial);
  228. static struct tty_driver serial_driver, callout_driver;
  229. static int serial_refcount;
  230. static struct timer_list serial_timer;
  231. /* serial subtype definitions */
  232. #ifndef SERIAL_TYPE_NORMAL
  233. #define SERIAL_TYPE_NORMAL 1
  234. #define SERIAL_TYPE_CALLOUT 2
  235. #endif
  236. /* number of characters left in xmit buffer before we ask for more */
  237. #define WAKEUP_CHARS 256
  238. /*
  239.  * IRQ_timeout - How long the timeout should be for each IRQ
  240.  *  should be after the IRQ has been active.
  241.  */
  242. static struct async_struct *IRQ_ports[NR_IRQS];
  243. #ifdef CONFIG_SERIAL_MULTIPORT
  244. static struct rs_multiport_struct rs_multiport[NR_IRQS];
  245. #endif
  246. static int IRQ_timeout[NR_IRQS];
  247. #ifdef CONFIG_SERIAL_CONSOLE
  248. static struct console sercons;
  249. static int lsr_break_flag;
  250. #endif
  251. #if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
  252. static unsigned long break_pressed; /* break, really ... */
  253. #endif
  254. static unsigned detect_uart_irq (struct serial_state * state);
  255. static void autoconfig(struct serial_state * state);
  256. static void change_speed(struct async_struct *info, struct termios *old);
  257. static void rs_wait_until_sent(struct tty_struct *tty, int timeout);
  258. /*
  259.  * Here we define the default xmit fifo size used for each type of
  260.  * UART
  261.  */
  262. static struct serial_uart_config uart_config[] = {
  263. { "unknown", 1, 0 }, 
  264. { "8250", 1, 0 }, 
  265. { "16450", 1, 0 }, 
  266. { "16550", 1, 0 }, 
  267. { "16550A", 16, UART_CLEAR_FIFO | UART_USE_FIFO }, 
  268. { "cirrus", 1, 0 },  /* usurped by cyclades.c */
  269. { "ST16650", 1, UART_CLEAR_FIFO | UART_STARTECH }, 
  270. { "ST16650V2", 32, UART_CLEAR_FIFO | UART_USE_FIFO |
  271.   UART_STARTECH }, 
  272. { "TI16750", 64, UART_CLEAR_FIFO | UART_USE_FIFO},
  273. { "Startech", 1, 0}, /* usurped by cyclades.c */
  274. { "16C950/954", 128, UART_CLEAR_FIFO | UART_USE_FIFO},
  275. { "ST16654", 64, UART_CLEAR_FIFO | UART_USE_FIFO |
  276.   UART_STARTECH }, 
  277. { "XR16850", 128, UART_CLEAR_FIFO | UART_USE_FIFO |
  278.   UART_STARTECH },
  279. { "RSA", 2048, UART_CLEAR_FIFO | UART_USE_FIFO }, 
  280. { 0, 0}
  281. };
  282. #if defined(CONFIG_SERIAL_RSA) && defined(MODULE)
  283. #define PORT_RSA_MAX 4
  284. static int probe_rsa[PORT_RSA_MAX];
  285. static int force_rsa[PORT_RSA_MAX];
  286. MODULE_PARM(probe_rsa, "1-" __MODULE_STRING(PORT_RSA_MAX) "i");
  287. MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA");
  288. MODULE_PARM(force_rsa, "1-" __MODULE_STRING(PORT_RSA_MAX) "i");
  289. MODULE_PARM_DESC(force_rsa, "Force I/O ports for RSA");
  290. #endif /* CONFIG_SERIAL_RSA  */
  291. struct serial_state rs_table[RS_TABLE_SIZE] = {
  292. SERIAL_PORT_DFNS /* Defined in serial.h */
  293. };
  294. #define NR_PORTS (sizeof(rs_table)/sizeof(struct serial_state))
  295. int serial_nr_ports = NR_PORTS;
  296. #if (defined(ENABLE_SERIAL_PCI) || defined(ENABLE_SERIAL_PNP))
  297. #define NR_PCI_BOARDS 8
  298. static struct pci_board_inst serial_pci_board[NR_PCI_BOARDS];
  299. #ifndef IS_PCI_REGION_IOPORT
  300. #define IS_PCI_REGION_IOPORT(dev, r) (pci_resource_flags((dev), (r)) & 
  301.       IORESOURCE_IO)
  302. #endif
  303. #ifndef IS_PCI_REGION_IOMEM
  304. #define IS_PCI_REGION_IOMEM(dev, r) (pci_resource_flags((dev), (r)) & 
  305.       IORESOURCE_MEM)
  306. #endif
  307. #ifndef PCI_IRQ_RESOURCE
  308. #define PCI_IRQ_RESOURCE(dev, r) ((dev)->irq_resource[r].start)
  309. #endif
  310. #ifndef pci_get_subvendor
  311. #define pci_get_subvendor(dev) ((dev)->subsystem_vendor)
  312. #define pci_get_subdevice(dev)  ((dev)->subsystem_device)
  313. #endif
  314. #endif /* ENABLE_SERIAL_PCI || ENABLE_SERIAL_PNP  */
  315. #ifndef PREPARE_FUNC
  316. #define PREPARE_FUNC(dev)  (dev->prepare)
  317. #define ACTIVATE_FUNC(dev)  (dev->activate)
  318. #define DEACTIVATE_FUNC(dev)  (dev->deactivate)
  319. #endif
  320. #define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8)
  321. static struct tty_struct *serial_table[NR_PORTS];
  322. static struct termios *serial_termios[NR_PORTS];
  323. static struct termios *serial_termios_locked[NR_PORTS];
  324. #if defined(MODULE) && defined(SERIAL_DEBUG_MCOUNT)
  325. #define DBG_CNT(s) printk("(%s): [%x] refc=%d, serc=%d, ttyc=%d -> %sn", 
  326.  kdevname(tty->device), (info->flags), serial_refcount,info->count,tty->count,s)
  327. #else
  328. #define DBG_CNT(s)
  329. #endif
  330. /*
  331.  * tmp_buf is used as a temporary buffer by serial_write.  We need to
  332.  * lock it in case the copy_from_user blocks while swapping in a page,
  333.  * and some other program tries to do a serial write at the same time.
  334.  * Since the lock will only come under contention when the system is
  335.  * swapping and available memory is low, it makes sense to share one
  336.  * buffer across all the serial ports, since it significantly saves
  337.  * memory if large numbers of serial ports are open.
  338.  */
  339. static unsigned char *tmp_buf;
  340. #ifdef DECLARE_MUTEX
  341. static DECLARE_MUTEX(tmp_buf_sem);
  342. #else
  343. static struct semaphore tmp_buf_sem = MUTEX;
  344. #endif
  345. static inline int serial_paranoia_check(struct async_struct *info,
  346. kdev_t device, const char *routine)
  347. {
  348. #ifdef SERIAL_PARANOIA_CHECK
  349. static const char *badmagic =
  350. "Warning: bad magic number for serial struct (%s) in %sn";
  351. static const char *badinfo =
  352. "Warning: null async_struct for (%s) in %sn";
  353. if (!info) {
  354. printk(badinfo, kdevname(device), routine);
  355. return 1;
  356. }
  357. if (info->magic != SERIAL_MAGIC) {
  358. printk(badmagic, kdevname(device), routine);
  359. return 1;
  360. }
  361. #endif
  362. return 0;
  363. }
  364. static _INLINE_ unsigned int serial_in(struct async_struct *info, int offset)
  365. {
  366. switch (info->io_type) {
  367. #ifdef CONFIG_HUB6
  368. case SERIAL_IO_HUB6:
  369. outb(info->hub6 - 1 + offset, info->port);
  370. return inb(info->port+1);
  371. #endif
  372. case SERIAL_IO_MEM:
  373. return readb((unsigned long) info->iomem_base +
  374.      (offset<<info->iomem_reg_shift));
  375. default:
  376. return inb(info->port + offset);
  377. }
  378. }
  379. static _INLINE_ void serial_out(struct async_struct *info, int offset,
  380. int value)
  381. {
  382. switch (info->io_type) {
  383. #ifdef CONFIG_HUB6
  384. case SERIAL_IO_HUB6:
  385. outb(info->hub6 - 1 + offset, info->port);
  386. outb(value, info->port+1);
  387. break;
  388. #endif
  389. case SERIAL_IO_MEM:
  390. writeb(value, (unsigned long) info->iomem_base +
  391.       (offset<<info->iomem_reg_shift));
  392. break;
  393. default:
  394. outb(value, info->port+offset);
  395. }
  396. }
  397. /*
  398.  * We used to support using pause I/O for certain machines.  We
  399.  * haven't supported this for a while, but just in case it's badly
  400.  * needed for certain old 386 machines, I've left these #define's
  401.  * in....
  402.  */
  403. #define serial_inp(info, offset) serial_in(info, offset)
  404. #define serial_outp(info, offset, value) serial_out(info, offset, value)
  405. /*
  406.  * For the 16C950
  407.  */
  408. void serial_icr_write(struct async_struct *info, int offset, int  value)
  409. {
  410. serial_out(info, UART_SCR, offset);
  411. serial_out(info, UART_ICR, value);
  412. }
  413. unsigned int serial_icr_read(struct async_struct *info, int offset)
  414. {
  415. int value;
  416. serial_icr_write(info, UART_ACR, info->ACR | UART_ACR_ICRRD);
  417. serial_out(info, UART_SCR, offset);
  418. value = serial_in(info, UART_ICR);
  419. serial_icr_write(info, UART_ACR, info->ACR);
  420. return value;
  421. }
  422. /*
  423.  * ------------------------------------------------------------
  424.  * rs_stop() and rs_start()
  425.  *
  426.  * This routines are called before setting or resetting tty->stopped.
  427.  * They enable or disable transmitter interrupts, as necessary.
  428.  * ------------------------------------------------------------
  429.  */
  430. static void rs_stop(struct tty_struct *tty)
  431. {
  432. struct async_struct *info = (struct async_struct *)tty->driver_data;
  433. unsigned long flags;
  434. if (serial_paranoia_check(info, tty->device, "rs_stop"))
  435. return;
  436. save_flags(flags); cli();
  437. if (info->IER & UART_IER_THRI) {
  438. info->IER &= ~UART_IER_THRI;
  439. serial_out(info, UART_IER, info->IER);
  440. }
  441. if (info->state->type == PORT_16C950) {
  442. info->ACR |= UART_ACR_TXDIS;
  443. serial_icr_write(info, UART_ACR, info->ACR);
  444. }
  445. restore_flags(flags);
  446. }
  447. static void rs_start(struct tty_struct *tty)
  448. {
  449. struct async_struct *info = (struct async_struct *)tty->driver_data;
  450. unsigned long flags;
  451. if (serial_paranoia_check(info, tty->device, "rs_start"))
  452. return;
  453. save_flags(flags); cli();
  454. if (info->xmit.head != info->xmit.tail
  455.     && info->xmit.buf
  456.     && !(info->IER & UART_IER_THRI)) {
  457. info->IER |= UART_IER_THRI;
  458. serial_out(info, UART_IER, info->IER);
  459. }
  460. if (info->state->type == PORT_16C950) {
  461. info->ACR &= ~UART_ACR_TXDIS;
  462. serial_icr_write(info, UART_ACR, info->ACR);
  463. }
  464. restore_flags(flags);
  465. }
  466. /*
  467.  * ----------------------------------------------------------------------
  468.  *
  469.  * Here starts the interrupt handling routines.  All of the following
  470.  * subroutines are declared as inline and are folded into
  471.  * rs_interrupt().  They were separated out for readability's sake.
  472.  *
  473.  * Note: rs_interrupt() is a "fast" interrupt, which means that it
  474.  * runs with interrupts turned off.  People who may want to modify
  475.  * rs_interrupt() should try to keep the interrupt handler as fast as
  476.  * possible.  After you are done making modifications, it is not a bad
  477.  * idea to do:
  478.  * 
  479.  * gcc -S -DKERNEL -Wall -Wstrict-prototypes -O6 -fomit-frame-pointer serial.c
  480.  *
  481.  * and look at the resulting assemble code in serial.s.
  482.  *
  483.  *  - Ted Ts'o (tytso@mit.edu), 7-Mar-93
  484.  * -----------------------------------------------------------------------
  485.  */
  486. /*
  487.  * This routine is used by the interrupt handler to schedule
  488.  * processing in the software interrupt portion of the driver.
  489.  */
  490. static _INLINE_ void rs_sched_event(struct async_struct *info,
  491.   int event)
  492. {
  493. info->event |= 1 << event;
  494. queue_task(&info->tqueue, &tq_serial);
  495. mark_bh(SERIAL_BH);
  496. }
  497. static _INLINE_ void receive_chars(struct async_struct *info,
  498.  int *status, struct pt_regs * regs)
  499. {
  500. struct tty_struct *tty = info->tty;
  501. unsigned char ch;
  502. struct async_icount *icount;
  503. int max_count = 256;
  504. icount = &info->state->icount;
  505. do {
  506. if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
  507. tty->flip.tqueue.routine((void *) tty);
  508. if (tty->flip.count >= TTY_FLIPBUF_SIZE)
  509. return; // if TTY_DONT_FLIP is set
  510. }
  511. ch = serial_inp(info, UART_RX);
  512. *tty->flip.char_buf_ptr = ch;
  513. icount->rx++;
  514. #ifdef SERIAL_DEBUG_INTR
  515. printk("DR%02x:%02x...", ch, *status);
  516. #endif
  517. *tty->flip.flag_buf_ptr = 0;
  518. if (*status & (UART_LSR_BI | UART_LSR_PE |
  519.        UART_LSR_FE | UART_LSR_OE)) {
  520. /*
  521.  * For statistics only
  522.  */
  523. if (*status & UART_LSR_BI) {
  524. *status &= ~(UART_LSR_FE | UART_LSR_PE);
  525. icount->brk++;
  526. /*
  527.  * We do the SysRQ and SAK checking
  528.  * here because otherwise the break
  529.  * may get masked by ignore_status_mask
  530.  * or read_status_mask.
  531.  */
  532. #if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
  533. if (info->line == sercons.index) {
  534. if (!break_pressed) {
  535. break_pressed = jiffies;
  536. goto ignore_char;
  537. }
  538. break_pressed = 0;
  539. }
  540. #endif
  541. if (info->flags & ASYNC_SAK)
  542. do_SAK(tty);
  543. } else if (*status & UART_LSR_PE)
  544. icount->parity++;
  545. else if (*status & UART_LSR_FE)
  546. icount->frame++;
  547. if (*status & UART_LSR_OE)
  548. icount->overrun++;
  549. /*
  550.  * Mask off conditions which should be ignored.
  551.  */
  552. *status &= info->read_status_mask;
  553. #ifdef CONFIG_SERIAL_CONSOLE
  554. if (info->line == sercons.index) {
  555. /* Recover the break flag from console xmit */
  556. *status |= lsr_break_flag;
  557. lsr_break_flag = 0;
  558. }
  559. #endif
  560. if (*status & (UART_LSR_BI)) {
  561. #ifdef SERIAL_DEBUG_INTR
  562. printk("handling break....");
  563. #endif
  564. *tty->flip.flag_buf_ptr = TTY_BREAK;
  565. } else if (*status & UART_LSR_PE)
  566. *tty->flip.flag_buf_ptr = TTY_PARITY;
  567. else if (*status & UART_LSR_FE)
  568. *tty->flip.flag_buf_ptr = TTY_FRAME;
  569. }
  570. #if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
  571. if (break_pressed && info->line == sercons.index) {
  572. if (ch != 0 &&
  573.     time_before(jiffies, break_pressed + HZ*5)) {
  574. handle_sysrq(ch, regs, NULL, NULL);
  575. break_pressed = 0;
  576. goto ignore_char;
  577. }
  578. break_pressed = 0;
  579. }
  580. #endif
  581. if ((*status & info->ignore_status_mask) == 0) {
  582. tty->flip.flag_buf_ptr++;
  583. tty->flip.char_buf_ptr++;
  584. tty->flip.count++;
  585. }
  586. if ((*status & UART_LSR_OE) &&
  587.     (tty->flip.count < TTY_FLIPBUF_SIZE)) {
  588. /*
  589.  * Overrun is special, since it's reported
  590.  * immediately, and doesn't affect the current
  591.  * character
  592.  */
  593. *tty->flip.flag_buf_ptr = TTY_OVERRUN;
  594. tty->flip.count++;
  595. tty->flip.flag_buf_ptr++;
  596. tty->flip.char_buf_ptr++;
  597. }
  598. #if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
  599. ignore_char:
  600. #endif
  601. *status = serial_inp(info, UART_LSR);
  602. } while ((*status & UART_LSR_DR) && (max_count-- > 0));
  603. #if (LINUX_VERSION_CODE > 131394) /* 2.1.66 */
  604. tty_flip_buffer_push(tty);
  605. #else
  606. queue_task_irq_off(&tty->flip.tqueue, &tq_timer);
  607. #endif
  608. }
  609. static _INLINE_ void transmit_chars(struct async_struct *info, int *intr_done)
  610. {
  611. int count;
  612. if (info->x_char) {
  613. serial_outp(info, UART_TX, info->x_char);
  614. info->state->icount.tx++;
  615. info->x_char = 0;
  616. if (intr_done)
  617. *intr_done = 0;
  618. return;
  619. }
  620. if (info->xmit.head == info->xmit.tail
  621.     || info->tty->stopped
  622.     || info->tty->hw_stopped) {
  623. info->IER &= ~UART_IER_THRI;
  624. serial_out(info, UART_IER, info->IER);
  625. return;
  626. }
  627. count = info->xmit_fifo_size;
  628. do {
  629. serial_out(info, UART_TX, info->xmit.buf[info->xmit.tail]);
  630. info->xmit.tail = (info->xmit.tail + 1) & (SERIAL_XMIT_SIZE-1);
  631. info->state->icount.tx++;
  632. if (info->xmit.head == info->xmit.tail)
  633. break;
  634. } while (--count > 0);
  635. if (CIRC_CNT(info->xmit.head,
  636.      info->xmit.tail,
  637.      SERIAL_XMIT_SIZE) < WAKEUP_CHARS)
  638. rs_sched_event(info, RS_EVENT_WRITE_WAKEUP);
  639. #ifdef SERIAL_DEBUG_INTR
  640. printk("THRE...");
  641. #endif
  642. if (intr_done)
  643. *intr_done = 0;
  644. if (info->xmit.head == info->xmit.tail) {
  645. info->IER &= ~UART_IER_THRI;
  646. serial_out(info, UART_IER, info->IER);
  647. }
  648. }
  649. static _INLINE_ void check_modem_status(struct async_struct *info)
  650. {
  651. int status;
  652. struct async_icount *icount;
  653. status = serial_in(info, UART_MSR);
  654. if (status & UART_MSR_ANY_DELTA) {
  655. icount = &info->state->icount;
  656. /* update input line counters */
  657. if (status & UART_MSR_TERI)
  658. icount->rng++;
  659. if (status & UART_MSR_DDSR)
  660. icount->dsr++;
  661. if (status & UART_MSR_DDCD) {
  662. icount->dcd++;
  663. #ifdef CONFIG_HARD_PPS
  664. if ((info->flags & ASYNC_HARDPPS_CD) &&
  665.     (status & UART_MSR_DCD))
  666. hardpps();
  667. #endif
  668. }
  669. if (status & UART_MSR_DCTS)
  670. icount->cts++;
  671. wake_up_interruptible(&info->delta_msr_wait);
  672. }
  673. if ((info->flags & ASYNC_CHECK_CD) && (status & UART_MSR_DDCD)) {
  674. #if (defined(SERIAL_DEBUG_OPEN) || defined(SERIAL_DEBUG_INTR))
  675. printk("ttys%d CD now %s...", info->line,
  676.        (status & UART_MSR_DCD) ? "on" : "off");
  677. #endif
  678. if (status & UART_MSR_DCD)
  679. wake_up_interruptible(&info->open_wait);
  680. else if (!((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  681.    (info->flags & ASYNC_CALLOUT_NOHUP))) {
  682. #ifdef SERIAL_DEBUG_OPEN
  683. printk("doing serial hangup...");
  684. #endif
  685. if (info->tty)
  686. tty_hangup(info->tty);
  687. }
  688. }
  689. if (info->flags & ASYNC_CTS_FLOW) {
  690. if (info->tty->hw_stopped) {
  691. if (status & UART_MSR_CTS) {
  692. #if (defined(SERIAL_DEBUG_INTR) || defined(SERIAL_DEBUG_FLOW))
  693. printk("CTS tx start...");
  694. #endif
  695. info->tty->hw_stopped = 0;
  696. info->IER |= UART_IER_THRI;
  697. serial_out(info, UART_IER, info->IER);
  698. rs_sched_event(info, RS_EVENT_WRITE_WAKEUP);
  699. return;
  700. }
  701. } else {
  702. if (!(status & UART_MSR_CTS)) {
  703. #if (defined(SERIAL_DEBUG_INTR) || defined(SERIAL_DEBUG_FLOW))
  704. printk("CTS tx stop...");
  705. #endif
  706. info->tty->hw_stopped = 1;
  707. info->IER &= ~UART_IER_THRI;
  708. serial_out(info, UART_IER, info->IER);
  709. }
  710. }
  711. }
  712. }
  713. #ifdef CONFIG_SERIAL_SHARE_IRQ
  714. /*
  715.  * This is the serial driver's generic interrupt routine
  716.  */
  717. static void rs_interrupt(int irq, void *dev_id, struct pt_regs * regs)
  718. {
  719. int status, iir;
  720. struct async_struct * info;
  721. int pass_counter = 0;
  722. struct async_struct *end_mark = 0;
  723. #ifdef CONFIG_SERIAL_MULTIPORT
  724. int first_multi = 0;
  725. struct rs_multiport_struct *multi;
  726. #endif
  727. #ifdef SERIAL_DEBUG_INTR
  728. printk("rs_interrupt(%d)...", irq);
  729. #endif
  730. info = IRQ_ports[irq];
  731. if (!info)
  732. return;
  733. #ifdef CONFIG_SERIAL_MULTIPORT
  734. multi = &rs_multiport[irq];
  735. if (multi->port_monitor)
  736. first_multi = inb(multi->port_monitor);
  737. #endif
  738. do {
  739. if (!info->tty ||
  740.     ((iir=serial_in(info, UART_IIR)) & UART_IIR_NO_INT)) {
  741. if (!end_mark)
  742. end_mark = info;
  743. goto next;
  744. }
  745. #ifdef SERIAL_DEBUG_INTR
  746. printk("IIR = %x...", serial_in(info, UART_IIR));
  747. #endif
  748. end_mark = 0;
  749. info->last_active = jiffies;
  750. status = serial_inp(info, UART_LSR);
  751. #ifdef SERIAL_DEBUG_INTR
  752. printk("status = %x...", status);
  753. #endif
  754. if (status & UART_LSR_DR)
  755. receive_chars(info, &status, regs);
  756. check_modem_status(info);
  757. if ((status & UART_LSR_THRE) ||
  758. /* for buggy ELAN processors */
  759. ((iir & UART_IIR_ID) == UART_IIR_THRI))
  760. transmit_chars(info, 0);
  761. next:
  762. info = info->next_port;
  763. if (!info) {
  764. info = IRQ_ports[irq];
  765. if (pass_counter++ > RS_ISR_PASS_LIMIT) {
  766. #if 0
  767. printk("rs loop breakn");
  768. #endif
  769. break;  /* Prevent infinite loops */
  770. }
  771. continue;
  772. }
  773. } while (end_mark != info);
  774. #ifdef CONFIG_SERIAL_MULTIPORT
  775. if (multi->port_monitor)
  776. printk("rs port monitor (normal) irq %d: 0x%x, 0x%xn",
  777.        info->state->irq, first_multi,
  778.        inb(multi->port_monitor));
  779. #endif
  780. #ifdef SERIAL_DEBUG_INTR
  781. printk("end.n");
  782. #endif
  783. }
  784. #endif /* #ifdef CONFIG_SERIAL_SHARE_IRQ */
  785. /*
  786.  * This is the serial driver's interrupt routine for a single port
  787.  */
  788. static void rs_interrupt_single(int irq, void *dev_id, struct pt_regs * regs)
  789. {
  790. int status, iir;
  791. int pass_counter = 0;
  792. struct async_struct * info;
  793. #ifdef CONFIG_SERIAL_MULTIPORT
  794. int first_multi = 0;
  795. struct rs_multiport_struct *multi;
  796. #endif
  797. #ifdef SERIAL_DEBUG_INTR
  798. printk("rs_interrupt_single(%d)...", irq);
  799. #endif
  800. info = IRQ_ports[irq];
  801. if (!info || !info->tty)
  802. return;
  803. #ifdef CONFIG_SERIAL_MULTIPORT
  804. multi = &rs_multiport[irq];
  805. if (multi->port_monitor)
  806. first_multi = inb(multi->port_monitor);
  807. #endif
  808. iir = serial_in(info, UART_IIR);
  809. do {
  810. status = serial_inp(info, UART_LSR);
  811. #ifdef SERIAL_DEBUG_INTR
  812. printk("status = %x...", status);
  813. #endif
  814. if (status & UART_LSR_DR)
  815. receive_chars(info, &status, regs);
  816. check_modem_status(info);
  817. if ((status & UART_LSR_THRE) ||
  818.     /* For buggy ELAN processors */
  819.     ((iir & UART_IIR_ID) == UART_IIR_THRI))
  820. transmit_chars(info, 0);
  821. if (pass_counter++ > RS_ISR_PASS_LIMIT) {
  822. #if SERIAL_DEBUG_INTR
  823. printk("rs_single loop break.n");
  824. #endif
  825. break;
  826. }
  827. iir = serial_in(info, UART_IIR);
  828. #ifdef SERIAL_DEBUG_INTR
  829. printk("IIR = %x...", iir);
  830. #endif
  831. } while ((iir & UART_IIR_NO_INT) == 0);
  832. info->last_active = jiffies;
  833. #ifdef CONFIG_SERIAL_MULTIPORT
  834. if (multi->port_monitor)
  835. printk("rs port monitor (single) irq %d: 0x%x, 0x%xn",
  836.        info->state->irq, first_multi,
  837.        inb(multi->port_monitor));
  838. #endif
  839. #ifdef SERIAL_DEBUG_INTR
  840. printk("end.n");
  841. #endif
  842. }
  843. #ifdef CONFIG_SERIAL_MULTIPORT
  844. /*
  845.  * This is the serial driver's for multiport boards
  846.  */
  847. static void rs_interrupt_multi(int irq, void *dev_id, struct pt_regs * regs)
  848. {
  849. int status;
  850. struct async_struct * info;
  851. int pass_counter = 0;
  852. int first_multi= 0;
  853. struct rs_multiport_struct *multi;
  854. #ifdef SERIAL_DEBUG_INTR
  855. printk("rs_interrupt_multi(%d)...", irq);
  856. #endif
  857. info = IRQ_ports[irq];
  858. if (!info)
  859. return;
  860. multi = &rs_multiport[irq];
  861. if (!multi->port1) {
  862. /* Should never happen */
  863. printk("rs_interrupt_multi: NULL port1!n");
  864. return;
  865. }
  866. if (multi->port_monitor)
  867. first_multi = inb(multi->port_monitor);
  868. while (1) {
  869. if (!info->tty ||
  870.     (serial_in(info, UART_IIR) & UART_IIR_NO_INT))
  871. goto next;
  872. info->last_active = jiffies;
  873. status = serial_inp(info, UART_LSR);
  874. #ifdef SERIAL_DEBUG_INTR
  875. printk("status = %x...", status);
  876. #endif
  877. if (status & UART_LSR_DR)
  878. receive_chars(info, &status, regs);
  879. check_modem_status(info);
  880. if (status & UART_LSR_THRE)
  881. transmit_chars(info, 0);
  882. next:
  883. info = info->next_port;
  884. if (info)
  885. continue;
  886. info = IRQ_ports[irq];
  887. /*
  888.  * The user was a bonehead, and misconfigured their
  889.  * multiport info.  Rather than lock up the kernel
  890.  * in an infinite loop, if we loop too many times,
  891.  * print a message and break out of the loop.
  892.  */
  893. if (pass_counter++ > RS_ISR_PASS_LIMIT) {
  894. printk("Misconfigured multiport serial info "
  895.        "for irq %d.  Breaking out irq loopn", irq);
  896. break; 
  897. }
  898. if (multi->port_monitor)
  899. printk("rs port monitor irq %d: 0x%x, 0x%xn",
  900.        info->state->irq, first_multi,
  901.        inb(multi->port_monitor));
  902. if ((inb(multi->port1) & multi->mask1) != multi->match1)
  903. continue;
  904. if (!multi->port2)
  905. break;
  906. if ((inb(multi->port2) & multi->mask2) != multi->match2)
  907. continue;
  908. if (!multi->port3)
  909. break;
  910. if ((inb(multi->port3) & multi->mask3) != multi->match3)
  911. continue;
  912. if (!multi->port4)
  913. break;
  914. if ((inb(multi->port4) & multi->mask4) != multi->match4)
  915. continue;
  916. break;
  917. #ifdef SERIAL_DEBUG_INTR
  918. printk("end.n");
  919. #endif
  920. }
  921. #endif
  922. /*
  923.  * -------------------------------------------------------------------
  924.  * Here ends the serial interrupt routines.
  925.  * -------------------------------------------------------------------
  926.  */
  927. /*
  928.  * This routine is used to handle the "bottom half" processing for the
  929.  * serial driver, known also the "software interrupt" processing.
  930.  * This processing is done at the kernel interrupt level, after the
  931.  * rs_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON.  This
  932.  * is where time-consuming activities which can not be done in the
  933.  * interrupt driver proper are done; the interrupt driver schedules
  934.  * them using rs_sched_event(), and they get done here.
  935.  */
  936. static void do_serial_bh(void)
  937. {
  938. run_task_queue(&tq_serial);
  939. }
  940. static void do_softint(void *private_)
  941. {
  942. struct async_struct *info = (struct async_struct *) private_;
  943. struct tty_struct *tty;
  944. tty = info->tty;
  945. if (!tty)
  946. return;
  947. if (test_and_clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event)) {
  948. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  949.     tty->ldisc.write_wakeup)
  950. (tty->ldisc.write_wakeup)(tty);
  951. wake_up_interruptible(&tty->write_wait);
  952. #ifdef SERIAL_HAVE_POLL_WAIT
  953. wake_up_interruptible(&tty->poll_wait);
  954. #endif
  955. }
  956. }
  957. /*
  958.  * This subroutine is called when the RS_TIMER goes off.  It is used
  959.  * by the serial driver to handle ports that do not have an interrupt
  960.  * (irq=0).  This doesn't work very well for 16450's, but gives barely
  961.  * passable results for a 16550A.  (Although at the expense of much
  962.  * CPU overhead).
  963.  */
  964. static void rs_timer(unsigned long dummy)
  965. {
  966. static unsigned long last_strobe;
  967. struct async_struct *info;
  968. unsigned int i;
  969. unsigned long flags;
  970. if ((jiffies - last_strobe) >= RS_STROBE_TIME) {
  971. for (i=0; i < NR_IRQS; i++) {
  972. info = IRQ_ports[i];
  973. if (!info)
  974. continue;
  975. save_flags(flags); cli();
  976. #ifdef CONFIG_SERIAL_SHARE_IRQ
  977. if (info->next_port) {
  978. do {
  979. serial_out(info, UART_IER, 0);
  980. info->IER |= UART_IER_THRI;
  981. serial_out(info, UART_IER, info->IER);
  982. info = info->next_port;
  983. } while (info);
  984. #ifdef CONFIG_SERIAL_MULTIPORT
  985. if (rs_multiport[i].port1)
  986. rs_interrupt_multi(i, NULL, NULL);
  987. else
  988. #endif
  989. rs_interrupt(i, NULL, NULL);
  990. } else
  991. #endif /* CONFIG_SERIAL_SHARE_IRQ */
  992. rs_interrupt_single(i, NULL, NULL);
  993. restore_flags(flags);
  994. }
  995. }
  996. last_strobe = jiffies;
  997. mod_timer(&serial_timer, jiffies + RS_STROBE_TIME);
  998. if (IRQ_ports[0]) {
  999. save_flags(flags); cli();
  1000. #ifdef CONFIG_SERIAL_SHARE_IRQ
  1001. rs_interrupt(0, NULL, NULL);
  1002. #else
  1003. rs_interrupt_single(0, NULL, NULL);
  1004. #endif
  1005. restore_flags(flags);
  1006. mod_timer(&serial_timer, jiffies + IRQ_timeout[0]);
  1007. }
  1008. }
  1009. /*
  1010.  * ---------------------------------------------------------------
  1011.  * Low level utility subroutines for the serial driver:  routines to
  1012.  * figure out the appropriate timeout for an interrupt chain, routines
  1013.  * to initialize and startup a serial port, and routines to shutdown a
  1014.  * serial port.  Useful stuff like that.
  1015.  * ---------------------------------------------------------------
  1016.  */
  1017. /*
  1018.  * This routine figures out the correct timeout for a particular IRQ.
  1019.  * It uses the smallest timeout of all of the serial ports in a
  1020.  * particular interrupt chain.  Now only used for IRQ 0....
  1021.  */
  1022. static void figure_IRQ_timeout(int irq)
  1023. {
  1024. struct async_struct *info;
  1025. int timeout = 60*HZ; /* 60 seconds === a long time :-) */
  1026. info = IRQ_ports[irq];
  1027. if (!info) {
  1028. IRQ_timeout[irq] = 60*HZ;
  1029. return;
  1030. }
  1031. while (info) {
  1032. if (info->timeout < timeout)
  1033. timeout = info->timeout;
  1034. info = info->next_port;
  1035. }
  1036. if (!irq)
  1037. timeout = timeout / 2;
  1038. IRQ_timeout[irq] = (timeout > 3) ? timeout-2 : 1;
  1039. }
  1040. #ifdef CONFIG_SERIAL_RSA
  1041. /* Attempts to turn on the RSA FIFO.  Returns zero on failure */
  1042. static int enable_rsa(struct async_struct *info)
  1043. {
  1044. unsigned char mode;
  1045. int result;
  1046. unsigned long flags;
  1047. save_flags(flags); cli();
  1048. mode = serial_inp(info, UART_RSA_MSR);
  1049. result = mode & UART_RSA_MSR_FIFO;
  1050. if (!result) {
  1051. serial_outp(info, UART_RSA_MSR, mode | UART_RSA_MSR_FIFO);
  1052. mode = serial_inp(info, UART_RSA_MSR);
  1053. result = mode & UART_RSA_MSR_FIFO;
  1054. }
  1055. restore_flags(flags);
  1056. return result;
  1057. }
  1058. /* Attempts to turn off the RSA FIFO.  Returns zero on failure */
  1059. static int disable_rsa(struct async_struct *info)
  1060. {
  1061. unsigned char mode;
  1062. int result;
  1063. unsigned long flags;
  1064. save_flags(flags); cli();
  1065. mode = serial_inp(info, UART_RSA_MSR);
  1066. result = !(mode & UART_RSA_MSR_FIFO);
  1067. if (!result) {
  1068. serial_outp(info, UART_RSA_MSR, mode & ~UART_RSA_MSR_FIFO);
  1069. mode = serial_inp(info, UART_RSA_MSR);
  1070. result = !(mode & UART_RSA_MSR_FIFO);
  1071. }
  1072. restore_flags(flags);
  1073. return result;
  1074. }
  1075. #endif /* CONFIG_SERIAL_RSA */
  1076. static int startup(struct async_struct * info)
  1077. {
  1078. unsigned long flags;
  1079. int retval=0;
  1080. void (*handler)(int, void *, struct pt_regs *);
  1081. struct serial_state *state= info->state;
  1082. unsigned long page;
  1083. #ifdef CONFIG_SERIAL_MANY_PORTS
  1084. unsigned short ICP;
  1085. #endif
  1086. page = get_zeroed_page(GFP_KERNEL);
  1087. if (!page)
  1088. return -ENOMEM;
  1089. save_flags(flags); cli();
  1090. if (info->flags & ASYNC_INITIALIZED) {
  1091. free_page(page);
  1092. goto errout;
  1093. }
  1094. if (!CONFIGURED_SERIAL_PORT(state) || !state->type) {
  1095. if (info->tty)
  1096. set_bit(TTY_IO_ERROR, &info->tty->flags);
  1097. free_page(page);
  1098. goto errout;
  1099. }
  1100. if (info->xmit.buf)
  1101. free_page(page);
  1102. else
  1103. info->xmit.buf = (unsigned char *) page;
  1104. #ifdef SERIAL_DEBUG_OPEN
  1105. printk("starting up ttys%d (irq %d)...", info->line, state->irq);
  1106. #endif
  1107. if (uart_config[state->type].flags & UART_STARTECH) {
  1108. /* Wake up UART */
  1109. serial_outp(info, UART_LCR, 0xBF);
  1110. serial_outp(info, UART_EFR, UART_EFR_ECB);
  1111. /*
  1112.  * Turn off LCR == 0xBF so we actually set the IER
  1113.  * register on the XR16C850
  1114.  */
  1115. serial_outp(info, UART_LCR, 0);
  1116. serial_outp(info, UART_IER, 0);
  1117. /*
  1118.  * Now reset LCR so we can turn off the ECB bit
  1119.  */
  1120. serial_outp(info, UART_LCR, 0xBF);
  1121. serial_outp(info, UART_EFR, 0);
  1122. /*
  1123.  * For a XR16C850, we need to set the trigger levels
  1124.  */
  1125. if (state->type == PORT_16850) {
  1126. serial_outp(info, UART_FCTR, UART_FCTR_TRGD |
  1127. UART_FCTR_RX);
  1128. serial_outp(info, UART_TRG, UART_TRG_96);
  1129. serial_outp(info, UART_FCTR, UART_FCTR_TRGD |
  1130. UART_FCTR_TX);
  1131. serial_outp(info, UART_TRG, UART_TRG_96);
  1132. }
  1133. serial_outp(info, UART_LCR, 0);
  1134. }
  1135. if (state->type == PORT_16750) {
  1136. /* Wake up UART */
  1137. serial_outp(info, UART_IER, 0);
  1138. }
  1139. if (state->type == PORT_16C950) {
  1140. /* Wake up and initialize UART */
  1141. info->ACR = 0;
  1142. serial_outp(info, UART_LCR, 0xBF);
  1143. serial_outp(info, UART_EFR, UART_EFR_ECB);
  1144. serial_outp(info, UART_IER, 0);
  1145. serial_outp(info, UART_LCR, 0);
  1146. serial_icr_write(info, UART_CSR, 0); /* Reset the UART */
  1147. serial_outp(info, UART_LCR, 0xBF);
  1148. serial_outp(info, UART_EFR, UART_EFR_ECB);
  1149. serial_outp(info, UART_LCR, 0);
  1150. }
  1151. #ifdef CONFIG_SERIAL_RSA
  1152. /*
  1153.  * If this is an RSA port, see if we can kick it up to the
  1154.  * higher speed clock.
  1155.  */
  1156. if (state->type == PORT_RSA) {
  1157. if (state->baud_base != SERIAL_RSA_BAUD_BASE &&
  1158.     enable_rsa(info))
  1159. state->baud_base = SERIAL_RSA_BAUD_BASE;
  1160. if (state->baud_base == SERIAL_RSA_BAUD_BASE)
  1161. serial_outp(info, UART_RSA_FRR, 0);
  1162. }
  1163. #endif
  1164. /*
  1165.  * Clear the FIFO buffers and disable them
  1166.  * (they will be reenabled in change_speed())
  1167.  */
  1168. if (uart_config[state->type].flags & UART_CLEAR_FIFO) {
  1169. serial_outp(info, UART_FCR, UART_FCR_ENABLE_FIFO);
  1170. serial_outp(info, UART_FCR, (UART_FCR_ENABLE_FIFO |
  1171.      UART_FCR_CLEAR_RCVR |
  1172.      UART_FCR_CLEAR_XMIT));
  1173. serial_outp(info, UART_FCR, 0);
  1174. }
  1175. /*
  1176.  * Clear the interrupt registers.
  1177.  */
  1178. (void) serial_inp(info, UART_LSR);
  1179. (void) serial_inp(info, UART_RX);
  1180. (void) serial_inp(info, UART_IIR);
  1181. (void) serial_inp(info, UART_MSR);
  1182. /*
  1183.  * At this point there's no way the LSR could still be 0xFF;
  1184.  * if it is, then bail out, because there's likely no UART
  1185.  * here.
  1186.  */
  1187. if (!(info->flags & ASYNC_BUGGY_UART) &&
  1188.     (serial_inp(info, UART_LSR) == 0xff)) {
  1189. printk("ttyS%d: LSR safety check engaged!n", state->line);
  1190. if (capable(CAP_SYS_ADMIN)) {
  1191. if (info->tty)
  1192. set_bit(TTY_IO_ERROR, &info->tty->flags);
  1193. } else
  1194. retval = -ENODEV;
  1195. goto errout;
  1196. }
  1197. /*
  1198.  * Allocate the IRQ if necessary
  1199.  */
  1200. if (state->irq && (!IRQ_ports[state->irq] ||
  1201.   !IRQ_ports[state->irq]->next_port)) {
  1202. if (IRQ_ports[state->irq]) {
  1203. #ifdef CONFIG_SERIAL_SHARE_IRQ
  1204. free_irq(state->irq, &IRQ_ports[state->irq]);
  1205. #ifdef CONFIG_SERIAL_MULTIPORT
  1206. if (rs_multiport[state->irq].port1)
  1207. handler = rs_interrupt_multi;
  1208. else
  1209. #endif
  1210. handler = rs_interrupt;
  1211. #else
  1212. retval = -EBUSY;
  1213. goto errout;
  1214. #endif /* CONFIG_SERIAL_SHARE_IRQ */
  1215. } else 
  1216. handler = rs_interrupt_single;
  1217. retval = request_irq(state->irq, handler, SA_SHIRQ,
  1218.      "serial", &IRQ_ports[state->irq]);
  1219. if (retval) {
  1220. if (capable(CAP_SYS_ADMIN)) {
  1221. if (info->tty)
  1222. set_bit(TTY_IO_ERROR,
  1223. &info->tty->flags);
  1224. retval = 0;
  1225. }
  1226. goto errout;
  1227. }
  1228. }
  1229. /*
  1230.  * Insert serial port into IRQ chain.
  1231.  */
  1232. info->prev_port = 0;
  1233. info->next_port = IRQ_ports[state->irq];
  1234. if (info->next_port)
  1235. info->next_port->prev_port = info;
  1236. IRQ_ports[state->irq] = info;
  1237. figure_IRQ_timeout(state->irq);
  1238. /*
  1239.  * Now, initialize the UART 
  1240.  */
  1241. serial_outp(info, UART_LCR, UART_LCR_WLEN8); /* reset DLAB */
  1242. info->MCR = 0;
  1243. if (info->tty->termios->c_cflag & CBAUD)
  1244. info->MCR = UART_MCR_DTR | UART_MCR_RTS;
  1245. #ifdef CONFIG_SERIAL_MANY_PORTS
  1246. if (info->flags & ASYNC_FOURPORT) {
  1247. if (state->irq == 0)
  1248. info->MCR |= UART_MCR_OUT1;
  1249. } else
  1250. #endif
  1251. {
  1252. if (state->irq != 0)
  1253. info->MCR |= UART_MCR_OUT2;
  1254. }
  1255. info->MCR |= ALPHA_KLUDGE_MCR;  /* Don't ask */
  1256. serial_outp(info, UART_MCR, info->MCR);
  1257. /*
  1258.  * Finally, enable interrupts
  1259.  */
  1260. info->IER = UART_IER_MSI | UART_IER_RLSI | UART_IER_RDI;
  1261. serial_outp(info, UART_IER, info->IER); /* enable interrupts */
  1262. #ifdef CONFIG_SERIAL_MANY_PORTS
  1263. if (info->flags & ASYNC_FOURPORT) {
  1264. /* Enable interrupts on the AST Fourport board */
  1265. ICP = (info->port & 0xFE0) | 0x01F;
  1266. outb_p(0x80, ICP);
  1267. (void) inb_p(ICP);
  1268. }
  1269. #endif
  1270. /*
  1271.  * And clear the interrupt registers again for luck.
  1272.  */
  1273. (void)serial_inp(info, UART_LSR);
  1274. (void)serial_inp(info, UART_RX);
  1275. (void)serial_inp(info, UART_IIR);
  1276. (void)serial_inp(info, UART_MSR);
  1277. if (info->tty)
  1278. clear_bit(TTY_IO_ERROR, &info->tty->flags);
  1279. info->xmit.head = info->xmit.tail = 0;
  1280. /*
  1281.  * Set up serial timers...
  1282.  */
  1283. mod_timer(&serial_timer, jiffies + 2*HZ/100);
  1284. /*
  1285.  * Set up the tty->alt_speed kludge
  1286.  */
  1287. #if (LINUX_VERSION_CODE >= 131394) /* Linux 2.1.66 */
  1288. if (info->tty) {
  1289. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
  1290. info->tty->alt_speed = 57600;
  1291. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
  1292. info->tty->alt_speed = 115200;
  1293. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)
  1294. info->tty->alt_speed = 230400;
  1295. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
  1296. info->tty->alt_speed = 460800;
  1297. }
  1298. #endif
  1299. /*
  1300.  * and set the speed of the serial port
  1301.  */
  1302. change_speed(info, 0);
  1303. info->flags |= ASYNC_INITIALIZED;
  1304. restore_flags(flags);
  1305. return 0;
  1306. errout:
  1307. restore_flags(flags);
  1308. return retval;
  1309. }
  1310. /*
  1311.  * This routine will shutdown a serial port; interrupts are disabled, and
  1312.  * DTR is dropped if the hangup on close termio flag is on.
  1313.  */
  1314. static void shutdown(struct async_struct * info)
  1315. {
  1316. unsigned long flags;
  1317. struct serial_state *state;
  1318. int retval;
  1319. if (!(info->flags & ASYNC_INITIALIZED))
  1320. return;
  1321. state = info->state;
  1322. #ifdef SERIAL_DEBUG_OPEN
  1323. printk("Shutting down serial port %d (irq %d)....", info->line,
  1324.        state->irq);
  1325. #endif
  1326. save_flags(flags); cli(); /* Disable interrupts */
  1327. /*
  1328.  * clear delta_msr_wait queue to avoid mem leaks: we may free the irq
  1329.  * here so the queue might never be waken up
  1330.  */
  1331. wake_up_interruptible(&info->delta_msr_wait);
  1332. /*
  1333.  * First unlink the serial port from the IRQ chain...
  1334.  */
  1335. if (info->next_port)
  1336. info->next_port->prev_port = info->prev_port;
  1337. if (info->prev_port)
  1338. info->prev_port->next_port = info->next_port;
  1339. else
  1340. IRQ_ports[state->irq] = info->next_port;
  1341. figure_IRQ_timeout(state->irq);
  1342. /*
  1343.  * Free the IRQ, if necessary
  1344.  */
  1345. if (state->irq && (!IRQ_ports[state->irq] ||
  1346.   !IRQ_ports[state->irq]->next_port)) {
  1347. if (IRQ_ports[state->irq]) {
  1348. free_irq(state->irq, &IRQ_ports[state->irq]);
  1349. retval = request_irq(state->irq, rs_interrupt_single,
  1350.      SA_SHIRQ, "serial",
  1351.      &IRQ_ports[state->irq]);
  1352. if (retval)
  1353. printk("serial shutdown: request_irq: error %d"
  1354.        "  Couldn't reacquire IRQ.n", retval);
  1355. } else
  1356. free_irq(state->irq, &IRQ_ports[state->irq]);
  1357. }
  1358. if (info->xmit.buf) {
  1359. unsigned long pg = (unsigned long) info->xmit.buf;
  1360. info->xmit.buf = 0;
  1361. free_page(pg);
  1362. }
  1363. info->IER = 0;
  1364. serial_outp(info, UART_IER, 0x00); /* disable all intrs */
  1365. #ifdef CONFIG_SERIAL_MANY_PORTS
  1366. if (info->flags & ASYNC_FOURPORT) {
  1367. /* reset interrupts on the AST Fourport board */
  1368. (void) inb((info->port & 0xFE0) | 0x01F);
  1369. info->MCR |= UART_MCR_OUT1;
  1370. } else
  1371. #endif
  1372. info->MCR &= ~UART_MCR_OUT2;
  1373. info->MCR |= ALPHA_KLUDGE_MCR;  /* Don't ask */
  1374. /* disable break condition */
  1375. serial_out(info, UART_LCR, serial_inp(info, UART_LCR) & ~UART_LCR_SBC);
  1376. if (!info->tty || (info->tty->termios->c_cflag & HUPCL))
  1377. info->MCR &= ~(UART_MCR_DTR|UART_MCR_RTS);
  1378. serial_outp(info, UART_MCR, info->MCR);
  1379. /* disable FIFO's */
  1380. serial_outp(info, UART_FCR, (UART_FCR_ENABLE_FIFO |
  1381.      UART_FCR_CLEAR_RCVR |
  1382.      UART_FCR_CLEAR_XMIT));
  1383. serial_outp(info, UART_FCR, 0);
  1384. #ifdef CONFIG_SERIAL_RSA
  1385. /*
  1386.  * Reset the RSA board back to 115kbps compat mode.
  1387.  */
  1388. if ((state->type == PORT_RSA) &&
  1389.     (state->baud_base == SERIAL_RSA_BAUD_BASE &&
  1390.      disable_rsa(info)))
  1391. state->baud_base = SERIAL_RSA_BAUD_BASE_LO;
  1392. #endif
  1393. (void)serial_in(info, UART_RX);    /* read data port to reset things */
  1394. if (info->tty)
  1395. set_bit(TTY_IO_ERROR, &info->tty->flags);
  1396. if (uart_config[info->state->type].flags & UART_STARTECH) {
  1397. /* Arrange to enter sleep mode */
  1398. serial_outp(info, UART_LCR, 0xBF);
  1399. serial_outp(info, UART_EFR, UART_EFR_ECB);
  1400. serial_outp(info, UART_LCR, 0);
  1401. serial_outp(info, UART_IER, UART_IERX_SLEEP);
  1402. serial_outp(info, UART_LCR, 0xBF);
  1403. serial_outp(info, UART_EFR, 0);
  1404. serial_outp(info, UART_LCR, 0);
  1405. }
  1406. if (info->state->type == PORT_16750) {
  1407. /* Arrange to enter sleep mode */
  1408. serial_outp(info, UART_IER, UART_IERX_SLEEP);
  1409. }
  1410. info->flags &= ~ASYNC_INITIALIZED;
  1411. restore_flags(flags);
  1412. }
  1413. #if (LINUX_VERSION_CODE < 131394) /* Linux 2.1.66 */
  1414. static int baud_table[] = {
  1415. 0, 50, 75, 110, 134, 150, 200, 300,
  1416. 600, 1200, 1800, 2400, 4800, 9600, 19200,
  1417. 38400, 57600, 115200, 230400, 460800, 0 };
  1418. static int tty_get_baud_rate(struct tty_struct *tty)
  1419. {
  1420. struct async_struct * info = (struct async_struct *)tty->driver_data;
  1421. unsigned int cflag, i;
  1422. cflag = tty->termios->c_cflag;
  1423. i = cflag & CBAUD;
  1424. if (i & CBAUDEX) {
  1425. i &= ~CBAUDEX;
  1426. if (i < 1 || i > 2) 
  1427. tty->termios->c_cflag &= ~CBAUDEX;
  1428. else
  1429. i += 15;
  1430. }
  1431. if (i == 15) {
  1432. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
  1433. i += 1;
  1434. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
  1435. i += 2;
  1436. }
  1437. return baud_table[i];
  1438. }
  1439. #endif
  1440. /*
  1441.  * This routine is called to set the UART divisor registers to match
  1442.  * the specified baud rate for a serial port.
  1443.  */
  1444. static void change_speed(struct async_struct *info,
  1445.  struct termios *old_termios)
  1446. {
  1447. int quot = 0, baud_base, baud;
  1448. unsigned cflag, cval, fcr = 0;
  1449. int bits;
  1450. unsigned long flags;
  1451. if (!info->tty || !info->tty->termios)
  1452. return;
  1453. cflag = info->tty->termios->c_cflag;
  1454. if (!CONFIGURED_SERIAL_PORT(info))
  1455. return;
  1456. /* byte size and parity */
  1457. switch (cflag & CSIZE) {
  1458.       case CS5: cval = 0x00; bits = 7; break;
  1459.       case CS6: cval = 0x01; bits = 8; break;
  1460.       case CS7: cval = 0x02; bits = 9; break;
  1461.       case CS8: cval = 0x03; bits = 10; break;
  1462.       /* Never happens, but GCC is too dumb to figure it out */
  1463.       default:  cval = 0x00; bits = 7; break;
  1464.       }
  1465. if (cflag & CSTOPB) {
  1466. cval |= 0x04;
  1467. bits++;
  1468. }
  1469. if (cflag & PARENB) {
  1470. cval |= UART_LCR_PARITY;
  1471. bits++;
  1472. }
  1473. if (!(cflag & PARODD))
  1474. cval |= UART_LCR_EPAR;
  1475. #ifdef CMSPAR
  1476. if (cflag & CMSPAR)
  1477. cval |= UART_LCR_SPAR;
  1478. #endif
  1479. /* Determine divisor based on baud rate */
  1480. baud = tty_get_baud_rate(info->tty);
  1481. if (!baud)
  1482. baud = 9600; /* B0 transition handled in rs_set_termios */
  1483. #ifdef CONFIG_SERIAL_RSA
  1484. if ((info->state->type == PORT_RSA) &&
  1485.     (info->state->baud_base != SERIAL_RSA_BAUD_BASE) &&
  1486.     enable_rsa(info))
  1487. info->state->baud_base = SERIAL_RSA_BAUD_BASE;
  1488. #endif
  1489. baud_base = info->state->baud_base;
  1490. if (info->state->type == PORT_16C950) {
  1491. if (baud <= baud_base)
  1492. serial_icr_write(info, UART_TCR, 0);
  1493. else if (baud <= 2*baud_base) {
  1494. serial_icr_write(info, UART_TCR, 0x8);
  1495. baud_base = baud_base * 2;
  1496. } else if (baud <= 4*baud_base) {
  1497. serial_icr_write(info, UART_TCR, 0x4);
  1498. baud_base = baud_base * 4;
  1499. } else
  1500. serial_icr_write(info, UART_TCR, 0);
  1501. }
  1502. if (baud == 38400 &&
  1503.     ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST))
  1504. quot = info->state->custom_divisor;
  1505. else {
  1506. if (baud == 134)
  1507. /* Special case since 134 is really 134.5 */
  1508. quot = (2*baud_base / 269);
  1509. else if (baud)
  1510. quot = baud_base / baud;
  1511. }
  1512. /* If the quotient is zero refuse the change */
  1513. if (!quot && old_termios) {
  1514. info->tty->termios->c_cflag &= ~CBAUD;
  1515. info->tty->termios->c_cflag |= (old_termios->c_cflag & CBAUD);
  1516. baud = tty_get_baud_rate(info->tty);
  1517. if (!baud)
  1518. baud = 9600;
  1519. if (baud == 38400 &&
  1520.     ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST))
  1521. quot = info->state->custom_divisor;
  1522. else {
  1523. if (baud == 134)
  1524. /* Special case since 134 is really 134.5 */
  1525. quot = (2*baud_base / 269);
  1526. else if (baud)
  1527. quot = baud_base / baud;
  1528. }
  1529. }
  1530. /* As a last resort, if the quotient is zero, default to 9600 bps */
  1531. if (!quot)
  1532. quot = baud_base / 9600;
  1533. /*
  1534.  * Work around a bug in the Oxford Semiconductor 952 rev B
  1535.  * chip which causes it to seriously miscalculate baud rates
  1536.  * when DLL is 0.
  1537.  */
  1538. if (((quot & 0xFF) == 0) && (info->state->type == PORT_16C950) &&
  1539.     (info->state->revision == 0x5201))
  1540. quot++;
  1541. info->quot = quot;
  1542. info->timeout = ((info->xmit_fifo_size*HZ*bits*quot) / baud_base);
  1543. info->timeout += HZ/50; /* Add .02 seconds of slop */
  1544. /* Set up FIFO's */
  1545. if (uart_config[info->state->type].flags & UART_USE_FIFO) {
  1546. if ((info->state->baud_base / quot) < 2400)
  1547. fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1;
  1548. #ifdef CONFIG_SERIAL_RSA
  1549. else if (info->state->type == PORT_RSA)
  1550. fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_14;
  1551. #endif
  1552. else
  1553. fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_8;
  1554. }
  1555. if (info->state->type == PORT_16750)
  1556. fcr |= UART_FCR7_64BYTE;
  1557. /* CTS flow control flag and modem status interrupts */
  1558. info->IER &= ~UART_IER_MSI;
  1559. if (info->flags & ASYNC_HARDPPS_CD)
  1560. info->IER |= UART_IER_MSI;
  1561. if (cflag & CRTSCTS) {
  1562. info->flags |= ASYNC_CTS_FLOW;
  1563. info->IER |= UART_IER_MSI;
  1564. } else
  1565. info->flags &= ~ASYNC_CTS_FLOW;
  1566. if (cflag & CLOCAL)
  1567. info->flags &= ~ASYNC_CHECK_CD;
  1568. else {
  1569. info->flags |= ASYNC_CHECK_CD;
  1570. info->IER |= UART_IER_MSI;
  1571. }
  1572. serial_out(info, UART_IER, info->IER);
  1573. /*
  1574.  * Set up parity check flag
  1575.  */
  1576. #define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
  1577. info->read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
  1578. if (I_INPCK(info->tty))
  1579. info->read_status_mask |= UART_LSR_FE | UART_LSR_PE;
  1580. if (I_BRKINT(info->tty) || I_PARMRK(info->tty))
  1581. info->read_status_mask |= UART_LSR_BI;
  1582. /*
  1583.  * Characters to ignore
  1584.  */
  1585. info->ignore_status_mask = 0;
  1586. if (I_IGNPAR(info->tty))
  1587. info->ignore_status_mask |= UART_LSR_PE | UART_LSR_FE;
  1588. if (I_IGNBRK(info->tty)) {
  1589. info->ignore_status_mask |= UART_LSR_BI;
  1590. /*
  1591.  * If we're ignore parity and break indicators, ignore 
  1592.  * overruns too.  (For real raw support).
  1593.  */
  1594. if (I_IGNPAR(info->tty))
  1595. info->ignore_status_mask |= UART_LSR_OE;
  1596. }
  1597. /*
  1598.  * !!! ignore all characters if CREAD is not set
  1599.  */
  1600. if ((cflag & CREAD) == 0)
  1601. info->ignore_status_mask |= UART_LSR_DR;
  1602. save_flags(flags); cli();
  1603. if (uart_config[info->state->type].flags & UART_STARTECH) {
  1604. serial_outp(info, UART_LCR, 0xBF);
  1605. serial_outp(info, UART_EFR,
  1606.     (cflag & CRTSCTS) ? UART_EFR_CTS : 0);
  1607. }
  1608. serial_outp(info, UART_LCR, cval | UART_LCR_DLAB); /* set DLAB */
  1609. serial_outp(info, UART_DLL, quot & 0xff); /* LS of divisor */
  1610. serial_outp(info, UART_DLM, quot >> 8); /* MS of divisor */
  1611. if (info->state->type == PORT_16750)
  1612. serial_outp(info, UART_FCR, fcr);  /* set fcr */
  1613. serial_outp(info, UART_LCR, cval); /* reset DLAB */
  1614. info->LCR = cval; /* Save LCR */
  1615.   if (info->state->type != PORT_16750) {
  1616.   if (fcr & UART_FCR_ENABLE_FIFO) {
  1617.   /* emulated UARTs (Lucent Venus 167x) need two steps */
  1618.   serial_outp(info, UART_FCR, UART_FCR_ENABLE_FIFO);
  1619.   }
  1620. serial_outp(info, UART_FCR, fcr);  /* set fcr */
  1621. }
  1622. restore_flags(flags);
  1623. }
  1624. static void rs_put_char(struct tty_struct *tty, unsigned char ch)
  1625. {
  1626. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1627. unsigned long flags;
  1628. if (serial_paranoia_check(info, tty->device, "rs_put_char"))
  1629. return;
  1630. if (!tty || !info->xmit.buf)
  1631. return;
  1632. save_flags(flags); cli();
  1633. if (CIRC_SPACE(info->xmit.head,
  1634.        info->xmit.tail,
  1635.        SERIAL_XMIT_SIZE) == 0) {
  1636. restore_flags(flags);
  1637. return;
  1638. }
  1639. info->xmit.buf[info->xmit.head] = ch;
  1640. info->xmit.head = (info->xmit.head + 1) & (SERIAL_XMIT_SIZE-1);
  1641. restore_flags(flags);
  1642. }
  1643. static void rs_flush_chars(struct tty_struct *tty)
  1644. {
  1645. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1646. unsigned long flags;
  1647. if (serial_paranoia_check(info, tty->device, "rs_flush_chars"))
  1648. return;
  1649. if (info->xmit.head == info->xmit.tail
  1650.     || tty->stopped
  1651.     || tty->hw_stopped
  1652.     || !info->xmit.buf)
  1653. return;
  1654. save_flags(flags); cli();
  1655. info->IER |= UART_IER_THRI;
  1656. serial_out(info, UART_IER, info->IER);
  1657. restore_flags(flags);
  1658. }
  1659. static int rs_write(struct tty_struct * tty, int from_user,
  1660.     const unsigned char *buf, int count)
  1661. {
  1662. int c, ret = 0;
  1663. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1664. unsigned long flags;
  1665. if (serial_paranoia_check(info, tty->device, "rs_write"))
  1666. return 0;
  1667. if (!tty || !info->xmit.buf || !tmp_buf)
  1668. return 0;
  1669. save_flags(flags);
  1670. if (from_user) {
  1671. down(&tmp_buf_sem);
  1672. while (1) {
  1673. int c1;
  1674. c = CIRC_SPACE_TO_END(info->xmit.head,
  1675.       info->xmit.tail,
  1676.       SERIAL_XMIT_SIZE);
  1677. if (count < c)
  1678. c = count;
  1679. if (c <= 0)
  1680. break;
  1681. c -= copy_from_user(tmp_buf, buf, c);
  1682. if (!c) {
  1683. if (!ret)
  1684. ret = -EFAULT;
  1685. break;
  1686. }
  1687. cli();
  1688. c1 = CIRC_SPACE_TO_END(info->xmit.head,
  1689.        info->xmit.tail,
  1690.        SERIAL_XMIT_SIZE);
  1691. if (c1 < c)
  1692. c = c1;
  1693. memcpy(info->xmit.buf + info->xmit.head, tmp_buf, c);
  1694. info->xmit.head = ((info->xmit.head + c) &
  1695.    (SERIAL_XMIT_SIZE-1));
  1696. restore_flags(flags);
  1697. buf += c;
  1698. count -= c;
  1699. ret += c;
  1700. }
  1701. up(&tmp_buf_sem);
  1702. } else {
  1703. cli();
  1704. while (1) {
  1705. c = CIRC_SPACE_TO_END(info->xmit.head,
  1706.       info->xmit.tail,
  1707.       SERIAL_XMIT_SIZE);
  1708. if (count < c)
  1709. c = count;
  1710. if (c <= 0) {
  1711. break;
  1712. }
  1713. memcpy(info->xmit.buf + info->xmit.head, buf, c);
  1714. info->xmit.head = ((info->xmit.head + c) &
  1715.    (SERIAL_XMIT_SIZE-1));
  1716. buf += c;
  1717. count -= c;
  1718. ret += c;
  1719. }
  1720. restore_flags(flags);
  1721. }
  1722. if (info->xmit.head != info->xmit.tail
  1723.     && !tty->stopped
  1724.     && !tty->hw_stopped
  1725.     && !(info->IER & UART_IER_THRI)) {
  1726. info->IER |= UART_IER_THRI;
  1727. serial_out(info, UART_IER, info->IER);
  1728. }
  1729. return ret;
  1730. }
  1731. static int rs_write_room(struct tty_struct *tty)
  1732. {
  1733. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1734. if (serial_paranoia_check(info, tty->device, "rs_write_room"))
  1735. return 0;
  1736. return CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
  1737. }
  1738. static int rs_chars_in_buffer(struct tty_struct *tty)
  1739. {
  1740. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1741. if (serial_paranoia_check(info, tty->device, "rs_chars_in_buffer"))
  1742. return 0;
  1743. return CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
  1744. }
  1745. static void rs_flush_buffer(struct tty_struct *tty)
  1746. {
  1747. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1748. unsigned long flags;
  1749. if (serial_paranoia_check(info, tty->device, "rs_flush_buffer"))
  1750. return;
  1751. save_flags(flags); cli();
  1752. info->xmit.head = info->xmit.tail = 0;
  1753. restore_flags(flags);
  1754. wake_up_interruptible(&tty->write_wait);
  1755. #ifdef SERIAL_HAVE_POLL_WAIT
  1756. wake_up_interruptible(&tty->poll_wait);
  1757. #endif
  1758. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  1759.     tty->ldisc.write_wakeup)
  1760. (tty->ldisc.write_wakeup)(tty);
  1761. }
  1762. /*
  1763.  * This function is used to send a high-priority XON/XOFF character to
  1764.  * the device
  1765.  */
  1766. static void rs_send_xchar(struct tty_struct *tty, char ch)
  1767. {
  1768. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1769. if (serial_paranoia_check(info, tty->device, "rs_send_char"))
  1770. return;
  1771. info->x_char = ch;
  1772. if (ch) {
  1773. /* Make sure transmit interrupts are on */
  1774. info->IER |= UART_IER_THRI;
  1775. serial_out(info, UART_IER, info->IER);
  1776. }
  1777. }
  1778. /*
  1779.  * ------------------------------------------------------------
  1780.  * rs_throttle()
  1781.  * 
  1782.  * This routine is called by the upper-layer tty layer to signal that
  1783.  * incoming characters should be throttled.
  1784.  * ------------------------------------------------------------
  1785.  */
  1786. static void rs_throttle(struct tty_struct * tty)
  1787. {
  1788. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1789. unsigned long flags;
  1790. #ifdef SERIAL_DEBUG_THROTTLE
  1791. char buf[64];
  1792. printk("throttle %s: %d....n", tty_name(tty, buf),
  1793.        tty->ldisc.chars_in_buffer(tty));
  1794. #endif
  1795. if (serial_paranoia_check(info, tty->device, "rs_throttle"))
  1796. return;
  1797. if (I_IXOFF(tty))
  1798. rs_send_xchar(tty, STOP_CHAR(tty));
  1799. if (tty->termios->c_cflag & CRTSCTS)
  1800. info->MCR &= ~UART_MCR_RTS;
  1801. save_flags(flags); cli();
  1802. serial_out(info, UART_MCR, info->MCR);
  1803. restore_flags(flags);
  1804. }
  1805. static void rs_unthrottle(struct tty_struct * tty)
  1806. {
  1807. struct async_struct *info = (struct async_struct *)tty->driver_data;
  1808. unsigned long flags;
  1809. #ifdef SERIAL_DEBUG_THROTTLE
  1810. char buf[64];
  1811. printk("unthrottle %s: %d....n", tty_name(tty, buf),
  1812.        tty->ldisc.chars_in_buffer(tty));
  1813. #endif
  1814. if (serial_paranoia_check(info, tty->device, "rs_unthrottle"))
  1815. return;
  1816. if (I_IXOFF(tty)) {
  1817. if (info->x_char)
  1818. info->x_char = 0;
  1819. else
  1820. rs_send_xchar(tty, START_CHAR(tty));
  1821. }
  1822. if (tty->termios->c_cflag & CRTSCTS)
  1823. info->MCR |= UART_MCR_RTS;
  1824. save_flags(flags); cli();
  1825. serial_out(info, UART_MCR, info->MCR);
  1826. restore_flags(flags);
  1827. }
  1828. /*
  1829.  * ------------------------------------------------------------
  1830.  * rs_ioctl() and friends
  1831.  * ------------------------------------------------------------
  1832.  */
  1833. static int get_serial_info(struct async_struct * info,
  1834.    struct serial_struct * retinfo)
  1835. {
  1836. struct serial_struct tmp;
  1837. struct serial_state *state = info->state;
  1838.    
  1839. if (!retinfo)
  1840. return -EFAULT;
  1841. memset(&tmp, 0, sizeof(tmp));
  1842. tmp.type = state->type;
  1843. tmp.line = state->line;
  1844. tmp.port = state->port;
  1845. if (HIGH_BITS_OFFSET)
  1846. tmp.port_high = state->port >> HIGH_BITS_OFFSET;
  1847. else
  1848. tmp.port_high = 0;
  1849. tmp.irq = state->irq;
  1850. tmp.flags = state->flags;
  1851. tmp.xmit_fifo_size = state->xmit_fifo_size;
  1852. tmp.baud_base = state->baud_base;
  1853. tmp.close_delay = state->close_delay;
  1854. tmp.closing_wait = state->closing_wait;
  1855. tmp.custom_divisor = state->custom_divisor;
  1856. tmp.hub6 = state->hub6;
  1857. tmp.io_type = state->io_type;
  1858. if (copy_to_user(retinfo,&tmp,sizeof(*retinfo)))
  1859. return -EFAULT;
  1860. return 0;
  1861. }
  1862. static int set_serial_info(struct async_struct * info,
  1863.    struct serial_struct * new_info)
  1864. {
  1865. struct serial_struct new_serial;
  1866.   struct serial_state old_state, *state;
  1867. unsigned int i,change_irq,change_port;
  1868. int  retval = 0;
  1869. unsigned long new_port;
  1870. if (copy_from_user(&new_serial,new_info,sizeof(new_serial)))
  1871. return -EFAULT;
  1872. state = info->state;
  1873. old_state = *state;
  1874. new_port = new_serial.port;
  1875. if (HIGH_BITS_OFFSET)
  1876. new_port += (unsigned long) new_serial.port_high << HIGH_BITS_OFFSET;
  1877. change_irq = new_serial.irq != state->irq;
  1878. change_port = (new_port != ((int) state->port)) ||
  1879. (new_serial.hub6 != state->hub6);
  1880.   
  1881. if (!capable(CAP_SYS_ADMIN)) {
  1882. if (change_irq || change_port ||
  1883.     (new_serial.baud_base != state->baud_base) ||
  1884.     (new_serial.type != state->type) ||
  1885.     (new_serial.close_delay != state->close_delay) ||
  1886.     (new_serial.xmit_fifo_size != state->xmit_fifo_size) ||
  1887.     ((new_serial.flags & ~ASYNC_USR_MASK) !=
  1888.      (state->flags & ~ASYNC_USR_MASK)))
  1889. return -EPERM;
  1890. state->flags = ((state->flags & ~ASYNC_USR_MASK) |
  1891.        (new_serial.flags & ASYNC_USR_MASK));
  1892. info->flags = ((info->flags & ~ASYNC_USR_MASK) |
  1893.        (new_serial.flags & ASYNC_USR_MASK));
  1894. state->custom_divisor = new_serial.custom_divisor;
  1895. goto check_and_exit;
  1896. }
  1897. new_serial.irq = irq_cannonicalize(new_serial.irq);
  1898. if ((new_serial.irq >= NR_IRQS) || (new_serial.irq < 0) || 
  1899.     (new_serial.baud_base < 9600)|| (new_serial.type < PORT_UNKNOWN) ||
  1900.     (new_serial.type > PORT_MAX) || (new_serial.type == PORT_CIRRUS) ||
  1901.     (new_serial.type == PORT_STARTECH)) {
  1902. return -EINVAL;
  1903. }
  1904. if ((new_serial.type != state->type) ||
  1905.     (new_serial.xmit_fifo_size <= 0))
  1906. new_serial.xmit_fifo_size =
  1907. uart_config[new_serial.type].dfl_xmit_fifo_size;
  1908. /* Make sure address is not already in use */
  1909. if (new_serial.type) {
  1910. for (i = 0 ; i < NR_PORTS; i++)
  1911. if ((state != &rs_table[i]) &&
  1912.     (rs_table[i].io_type == SERIAL_IO_PORT) &&
  1913.     (rs_table[i].port == new_port) &&
  1914.     rs_table[i].type)
  1915. return -EADDRINUSE;
  1916. }
  1917. if ((change_port || change_irq) && (state->count > 1))
  1918. return -EBUSY;
  1919. /*
  1920.  * OK, past this point, all the error checking has been done.
  1921.  * At this point, we start making changes.....
  1922.  */
  1923. state->baud_base = new_serial.baud_base;
  1924. state->flags = ((state->flags & ~ASYNC_FLAGS) |
  1925. (new_serial.flags & ASYNC_FLAGS));
  1926. info->flags = ((state->flags & ~ASYNC_INTERNAL_FLAGS) |
  1927.        (info->flags & ASYNC_INTERNAL_FLAGS));
  1928. state->custom_divisor = new_serial.custom_divisor;
  1929. state->close_delay = new_serial.close_delay * HZ/100;
  1930. state->closing_wait = new_serial.closing_wait * HZ/100;
  1931. #if (LINUX_VERSION_CODE > 0x20100)
  1932. info->tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
  1933. #endif
  1934. info->xmit_fifo_size = state->xmit_fifo_size =
  1935. new_serial.xmit_fifo_size;
  1936. if ((state->type != PORT_UNKNOWN) && state->port) {
  1937. #ifdef CONFIG_SERIAL_RSA
  1938. if (old_state.type == PORT_RSA)
  1939. release_region(state->port + UART_RSA_BASE, 16);
  1940. else
  1941. #endif
  1942. release_region(state->port,8);
  1943. }
  1944. state->type = new_serial.type;
  1945. if (change_port || change_irq) {
  1946. /*
  1947.  * We need to shutdown the serial port at the old
  1948.  * port/irq combination.
  1949.  */
  1950. shutdown(info);
  1951. state->irq = new_serial.irq;
  1952. info->port = state->port = new_port;
  1953. info->hub6 = state->hub6 = new_serial.hub6;
  1954. if (info->hub6)
  1955. info->io_type = state->io_type = SERIAL_IO_HUB6;
  1956. else if (info->io_type == SERIAL_IO_HUB6)
  1957. info->io_type = state->io_type = SERIAL_IO_PORT;
  1958. }
  1959. if ((state->type != PORT_UNKNOWN) && state->port) {
  1960. #ifdef CONFIG_SERIAL_RSA
  1961. if (state->type == PORT_RSA)
  1962. request_region(state->port + UART_RSA_BASE,
  1963.        16, "serial_rsa(set)");
  1964. else
  1965. #endif
  1966. request_region(state->port,8,"serial(set)");
  1967. }
  1968. check_and_exit:
  1969. if ((!state->port && !state->iomem_base) || !state->type)
  1970. return 0;
  1971. if (info->flags & ASYNC_INITIALIZED) {
  1972. if (((old_state.flags & ASYNC_SPD_MASK) !=
  1973.      (state->flags & ASYNC_SPD_MASK)) ||
  1974.     (old_state.custom_divisor != state->custom_divisor)) {
  1975. #if (LINUX_VERSION_CODE >= 131394) /* Linux 2.1.66 */
  1976. if ((state->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
  1977. info->tty->alt_speed = 57600;
  1978. if ((state->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
  1979. info->tty->alt_speed = 115200;
  1980. if ((state->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)
  1981. info->tty->alt_speed = 230400;
  1982. if ((state->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
  1983. info->tty->alt_speed = 460800;
  1984. #endif
  1985. change_speed(info, 0);
  1986. }
  1987. } else
  1988. retval = startup(info);
  1989. return retval;
  1990. }
  1991. /*
  1992.  * get_lsr_info - get line status register info
  1993.  *
  1994.  * Purpose: Let user call ioctl() to get info when the UART physically
  1995.  *      is emptied.  On bus types like RS485, the transmitter must
  1996.  *      release the bus after transmitting. This must be done when
  1997.  *      the transmit shift register is empty, not be done when the
  1998.  *      transmit holding register is empty.  This functionality
  1999.  *      allows an RS485 driver to be written in user space. 
  2000.  */
  2001. static int get_lsr_info(struct async_struct * info, unsigned int *value)
  2002. {
  2003. unsigned char status;
  2004. unsigned int result;
  2005. unsigned long flags;
  2006. save_flags(flags); cli();
  2007. status = serial_in(info, UART_LSR);
  2008. restore_flags(flags);
  2009. result = ((status & UART_LSR_TEMT) ? TIOCSER_TEMT : 0);
  2010. /*
  2011.  * If we're about to load something into the transmit
  2012.  * register, we'll pretend the transmitter isn't empty to
  2013.  * avoid a race condition (depending on when the transmit
  2014.  * interrupt happens).
  2015.  */
  2016. if (info->x_char || 
  2017.     ((CIRC_CNT(info->xmit.head, info->xmit.tail,
  2018.        SERIAL_XMIT_SIZE) > 0) &&
  2019.      !info->tty->stopped && !info->tty->hw_stopped))
  2020. result &= ~TIOCSER_TEMT;
  2021. if (copy_to_user(value, &result, sizeof(int)))
  2022. return -EFAULT;
  2023. return 0;
  2024. }
  2025. static int get_modem_info(struct async_struct * info, unsigned int *value)
  2026. {
  2027. unsigned char control, status;
  2028. unsigned int result;
  2029. unsigned long flags;
  2030. control = info->MCR;
  2031. save_flags(flags); cli();
  2032. status = serial_in(info, UART_MSR);
  2033. restore_flags(flags);
  2034. result =  ((control & UART_MCR_RTS) ? TIOCM_RTS : 0)
  2035. | ((control & UART_MCR_DTR) ? TIOCM_DTR : 0)
  2036. #ifdef TIOCM_OUT1
  2037. | ((control & UART_MCR_OUT1) ? TIOCM_OUT1 : 0)
  2038. | ((control & UART_MCR_OUT2) ? TIOCM_OUT2 : 0)
  2039. #endif
  2040. | ((status  & UART_MSR_DCD) ? TIOCM_CAR : 0)
  2041. | ((status  & UART_MSR_RI) ? TIOCM_RNG : 0)
  2042. | ((status  & UART_MSR_DSR) ? TIOCM_DSR : 0)
  2043. | ((status  & UART_MSR_CTS) ? TIOCM_CTS : 0);
  2044. if (copy_to_user(value, &result, sizeof(int)))
  2045. return -EFAULT;
  2046. return 0;
  2047. }
  2048. static int set_modem_info(struct async_struct * info, unsigned int cmd,
  2049.   unsigned int *value)
  2050. {
  2051. unsigned int arg;
  2052. unsigned long flags;
  2053. if (copy_from_user(&arg, value, sizeof(int)))
  2054. return -EFAULT;
  2055. switch (cmd) {
  2056. case TIOCMBIS: 
  2057. if (arg & TIOCM_RTS)
  2058. info->MCR |= UART_MCR_RTS;
  2059. if (arg & TIOCM_DTR)
  2060. info->MCR |= UART_MCR_DTR;
  2061. #ifdef TIOCM_OUT1
  2062. if (arg & TIOCM_OUT1)
  2063. info->MCR |= UART_MCR_OUT1;
  2064. if (arg & TIOCM_OUT2)
  2065. info->MCR |= UART_MCR_OUT2;
  2066. #endif
  2067. if (arg & TIOCM_LOOP)
  2068. info->MCR |= UART_MCR_LOOP;
  2069. break;
  2070. case TIOCMBIC:
  2071. if (arg & TIOCM_RTS)
  2072. info->MCR &= ~UART_MCR_RTS;
  2073. if (arg & TIOCM_DTR)
  2074. info->MCR &= ~UART_MCR_DTR;
  2075. #ifdef TIOCM_OUT1
  2076. if (arg & TIOCM_OUT1)
  2077. info->MCR &= ~UART_MCR_OUT1;
  2078. if (arg & TIOCM_OUT2)
  2079. info->MCR &= ~UART_MCR_OUT2;
  2080. #endif
  2081. if (arg & TIOCM_LOOP)
  2082. info->MCR &= ~UART_MCR_LOOP;
  2083. break;
  2084. case TIOCMSET:
  2085. info->MCR = ((info->MCR & ~(UART_MCR_RTS |
  2086. #ifdef TIOCM_OUT1
  2087.     UART_MCR_OUT1 |
  2088.     UART_MCR_OUT2 |
  2089. #endif
  2090.     UART_MCR_LOOP |
  2091.     UART_MCR_DTR))
  2092.      | ((arg & TIOCM_RTS) ? UART_MCR_RTS : 0)
  2093. #ifdef TIOCM_OUT1
  2094.      | ((arg & TIOCM_OUT1) ? UART_MCR_OUT1 : 0)
  2095.      | ((arg & TIOCM_OUT2) ? UART_MCR_OUT2 : 0)
  2096. #endif
  2097.      | ((arg & TIOCM_LOOP) ? UART_MCR_LOOP : 0)
  2098.      | ((arg & TIOCM_DTR) ? UART_MCR_DTR : 0));
  2099. break;
  2100. default:
  2101. return -EINVAL;
  2102. }
  2103. save_flags(flags); cli();
  2104. info->MCR |= ALPHA_KLUDGE_MCR;  /* Don't ask */
  2105. serial_out(info, UART_MCR, info->MCR);
  2106. restore_flags(flags);
  2107. return 0;
  2108. }
  2109. static int do_autoconfig(struct async_struct * info)
  2110. {
  2111. int irq, retval;
  2112. if (!capable(CAP_SYS_ADMIN))
  2113. return -EPERM;
  2114. if (info->state->count > 1)
  2115. return -EBUSY;
  2116. shutdown(info);
  2117. autoconfig(info->state);
  2118. if ((info->state->flags & ASYNC_AUTO_IRQ) &&
  2119.     (info->state->port != 0  || info->state->iomem_base != 0) &&
  2120.     (info->state->type != PORT_UNKNOWN)) {
  2121. irq = detect_uart_irq(info->state);
  2122. if (irq > 0)
  2123. info->state->irq = irq;
  2124. }
  2125. retval = startup(info);
  2126. if (retval)
  2127. return retval;
  2128. return 0;
  2129. }
  2130. /*
  2131.  * rs_break() --- routine which turns the break handling on or off
  2132.  */
  2133. #if (LINUX_VERSION_CODE < 131394) /* Linux 2.1.66 */
  2134. static void send_break( struct async_struct * info, int duration)
  2135. {
  2136. if (!CONFIGURED_SERIAL_PORT(info))
  2137. return;
  2138. current->state = TASK_INTERRUPTIBLE;
  2139. current->timeout = jiffies + duration;
  2140. cli();
  2141. info->LCR |= UART_LCR_SBC;
  2142. serial_out(info, UART_LCR, info->LCR);
  2143. schedule();
  2144. info->LCR &= ~UART_LCR_SBC;
  2145. serial_out(info, UART_LCR, info->LCR);
  2146. sti();
  2147. }
  2148. #else
  2149. static void rs_break(struct tty_struct *tty, int break_state)
  2150. {
  2151. struct async_struct * info = (struct async_struct *)tty->driver_data;
  2152. unsigned long flags;
  2153. if (serial_paranoia_check(info, tty->device, "rs_break"))
  2154. return;
  2155. if (!CONFIGURED_SERIAL_PORT(info))
  2156. return;
  2157. save_flags(flags); cli();
  2158. if (break_state == -1)
  2159. info->LCR |= UART_LCR_SBC;
  2160. else
  2161. info->LCR &= ~UART_LCR_SBC;
  2162. serial_out(info, UART_LCR, info->LCR);
  2163. restore_flags(flags);
  2164. }
  2165. #endif
  2166. #ifdef CONFIG_SERIAL_MULTIPORT
  2167. static int get_multiport_struct(struct async_struct * info,
  2168. struct serial_multiport_struct *retinfo)
  2169. {
  2170. struct serial_multiport_struct ret;
  2171. struct rs_multiport_struct *multi;
  2172. multi = &rs_multiport[info->state->irq];
  2173. ret.port_monitor = multi->port_monitor;
  2174. ret.port1 = multi->port1;
  2175. ret.mask1 = multi->mask1;
  2176. ret.match1 = multi->match1;
  2177. ret.port2 = multi->port2;
  2178. ret.mask2 = multi->mask2;
  2179. ret.match2 = multi->match2;
  2180. ret.port3 = multi->port3;
  2181. ret.mask3 = multi->mask3;
  2182. ret.match3 = multi->match3;
  2183. ret.port4 = multi->port4;
  2184. ret.mask4 = multi->mask4;
  2185. ret.match4 = multi->match4;
  2186. ret.irq = info->state->irq;
  2187. if (copy_to_user(retinfo,&ret,sizeof(*retinfo)))
  2188. return -EFAULT;
  2189. return 0;
  2190. }
  2191. static int set_multiport_struct(struct async_struct * info,
  2192. struct serial_multiport_struct *in_multi)
  2193. {
  2194. struct serial_multiport_struct new_multi;
  2195. struct rs_multiport_struct *multi;
  2196. struct serial_state *state;
  2197. int was_multi, now_multi;
  2198. int retval;
  2199. void (*handler)(int, void *, struct pt_regs *);
  2200. if (!capable(CAP_SYS_ADMIN))
  2201. return -EPERM;
  2202. state = info->state;
  2203. if (copy_from_user(&new_multi, in_multi,
  2204.    sizeof(struct serial_multiport_struct)))
  2205. return -EFAULT;
  2206. if (new_multi.irq != state->irq || state->irq == 0 ||
  2207.     !IRQ_ports[state->irq])
  2208. return -EINVAL;
  2209. multi = &rs_multiport[state->irq];
  2210. was_multi = (multi->port1 != 0);
  2211. multi->port_monitor = new_multi.port_monitor;
  2212. if (multi->port1)
  2213. release_region(multi->port1,1);
  2214. multi->port1 = new_multi.port1;
  2215. multi->mask1 = new_multi.mask1;
  2216. multi->match1 = new_multi.match1;
  2217. if (multi->port1)
  2218. request_region(multi->port1,1,"serial(multiport1)");
  2219. if (multi->port2)
  2220. release_region(multi->port2,1);
  2221. multi->port2 = new_multi.port2;
  2222. multi->mask2 = new_multi.mask2;
  2223. multi->match2 = new_multi.match2;
  2224. if (multi->port2)
  2225. request_region(multi->port2,1,"serial(multiport2)");
  2226. if (multi->port3)
  2227. release_region(multi->port3,1);
  2228. multi->port3 = new_multi.port3;
  2229. multi->mask3 = new_multi.mask3;
  2230. multi->match3 = new_multi.match3;
  2231. if (multi->port3)
  2232. request_region(multi->port3,1,"serial(multiport3)");
  2233. if (multi->port4)
  2234. release_region(multi->port4,1);
  2235. multi->port4 = new_multi.port4;
  2236. multi->mask4 = new_multi.mask4;
  2237. multi->match4 = new_multi.match4;
  2238. if (multi->port4)
  2239. request_region(multi->port4,1,"serial(multiport4)");
  2240. now_multi = (multi->port1 != 0);
  2241. if (IRQ_ports[state->irq]->next_port &&
  2242.     (was_multi != now_multi)) {
  2243. free_irq(state->irq, &IRQ_ports[state->irq]);
  2244. if (now_multi)
  2245. handler = rs_interrupt_multi;
  2246. else
  2247. handler = rs_interrupt;
  2248. retval = request_irq(state->irq, handler, SA_SHIRQ,
  2249.      "serial", &IRQ_ports[state->irq]);
  2250. if (retval) {
  2251. printk("Couldn't reallocate serial interrupt "
  2252.        "driver!!n");
  2253. }
  2254. }
  2255. return 0;
  2256. }
  2257. #endif
  2258. static int rs_ioctl(struct tty_struct *tty, struct file * file,
  2259.     unsigned int cmd, unsigned long arg)
  2260. {
  2261. struct async_struct * info = (struct async_struct *)tty->driver_data;
  2262. struct async_icount cprev, cnow; /* kernel counter temps */
  2263. struct serial_icounter_struct icount;
  2264. unsigned long flags;
  2265. #if (LINUX_VERSION_CODE < 131394) /* Linux 2.1.66 */
  2266. int retval, tmp;
  2267. #endif
  2268. if (serial_paranoia_check(info, tty->device, "rs_ioctl"))
  2269. return -ENODEV;
  2270. if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
  2271.     (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) &&
  2272.     (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) {
  2273. if (tty->flags & (1 << TTY_IO_ERROR))
  2274.     return -EIO;
  2275. }
  2276. switch (cmd) {
  2277. #if (LINUX_VERSION_CODE < 131394) /* Linux 2.1.66 */
  2278. case TCSBRK: /* SVID version: non-zero arg --> no break */
  2279. retval = tty_check_change(tty);
  2280. if (retval)
  2281. return retval;
  2282. tty_wait_until_sent(tty, 0);
  2283. if (signal_pending(current))
  2284. return -EINTR;
  2285. if (!arg) {
  2286. send_break(info, HZ/4); /* 1/4 second */
  2287. if (signal_pending(current))
  2288. return -EINTR;
  2289. }
  2290. return 0;
  2291. case TCSBRKP: /* support for POSIX tcsendbreak() */
  2292. retval = tty_check_change(tty);
  2293. if (retval)
  2294. return retval;
  2295. tty_wait_until_sent(tty, 0);
  2296. if (signal_pending(current))
  2297. return -EINTR;
  2298. send_break(info, arg ? arg*(HZ/10) : HZ/4);
  2299. if (signal_pending(current))
  2300. return -EINTR;
  2301. return 0;
  2302. case TIOCGSOFTCAR:
  2303. tmp = C_CLOCAL(tty) ? 1 : 0;
  2304. if (copy_to_user((void *)arg, &tmp, sizeof(int)))
  2305. return -EFAULT;
  2306. return 0;
  2307. case TIOCSSOFTCAR:
  2308. if (copy_from_user(&tmp, (void *)arg, sizeof(int)))
  2309. return -EFAULT;
  2310. tty->termios->c_cflag =
  2311. ((tty->termios->c_cflag & ~CLOCAL) |
  2312.  (tmp ? CLOCAL : 0));
  2313. return 0;
  2314. #endif
  2315. case TIOCMGET:
  2316. return get_modem_info(info, (unsigned int *) arg);
  2317. case TIOCMBIS:
  2318. case TIOCMBIC:
  2319. case TIOCMSET:
  2320. return set_modem_info(info, cmd, (unsigned int *) arg);
  2321. case TIOCGSERIAL:
  2322. return get_serial_info(info,
  2323.        (struct serial_struct *) arg);
  2324. case TIOCSSERIAL:
  2325. return set_serial_info(info,
  2326.        (struct serial_struct *) arg);
  2327. case TIOCSERCONFIG:
  2328. return do_autoconfig(info);
  2329. case TIOCSERGETLSR: /* Get line status register */
  2330. return get_lsr_info(info, (unsigned int *) arg);
  2331. case TIOCSERGSTRUCT:
  2332. if (copy_to_user((struct async_struct *) arg,
  2333.  info, sizeof(struct async_struct)))
  2334. return -EFAULT;
  2335. return 0;
  2336. #ifdef CONFIG_SERIAL_MULTIPORT
  2337. case TIOCSERGETMULTI:
  2338. return get_multiport_struct(info,
  2339.        (struct serial_multiport_struct *) arg);
  2340. case TIOCSERSETMULTI:
  2341. return set_multiport_struct(info,
  2342.        (struct serial_multiport_struct *) arg);
  2343. #endif
  2344. /*
  2345.  * Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change
  2346.  * - mask passed in arg for lines of interest
  2347.    *   (use |'ed TIOCM_RNG/DSR/CD/CTS for masking)
  2348.  * Caller should use TIOCGICOUNT to see which one it was
  2349.  */
  2350. case TIOCMIWAIT:
  2351. save_flags(flags); cli();
  2352. /* note the counters on entry */
  2353. cprev = info->state->icount;
  2354. restore_flags(flags);
  2355. /* Force modem status interrupts on */
  2356. info->IER |= UART_IER_MSI;
  2357. serial_out(info, UART_IER, info->IER);
  2358. while (1) {
  2359. interruptible_sleep_on(&info->delta_msr_wait);
  2360. /* see if a signal did it */
  2361. if (signal_pending(current))
  2362. return -ERESTARTSYS;
  2363. save_flags(flags); cli();
  2364. cnow = info->state->icount; /* atomic copy */
  2365. restore_flags(flags);
  2366. if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && 
  2367.     cnow.dcd == cprev.dcd && cnow.cts == cprev.cts)
  2368. return -EIO; /* no change => error */
  2369. if ( ((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
  2370.      ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
  2371.      ((arg & TIOCM_CD)  && (cnow.dcd != cprev.dcd)) ||
  2372.      ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts)) ) {
  2373. return 0;
  2374. }
  2375. cprev = cnow;
  2376. }
  2377. /* NOTREACHED */
  2378. /* 
  2379.  * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
  2380.  * Return: write counters to the user passed counter struct
  2381.  * NB: both 1->0 and 0->1 transitions are counted except for
  2382.  *     RI where only 0->1 is counted.
  2383.  */
  2384. case TIOCGICOUNT:
  2385. save_flags(flags); cli();
  2386. cnow = info->state->icount;
  2387. restore_flags(flags);
  2388. icount.cts = cnow.cts;
  2389. icount.dsr = cnow.dsr;
  2390. icount.rng = cnow.rng;
  2391. icount.dcd = cnow.dcd;
  2392. icount.rx = cnow.rx;
  2393. icount.tx = cnow.tx;
  2394. icount.frame = cnow.frame;
  2395. icount.overrun = cnow.overrun;
  2396. icount.parity = cnow.parity;
  2397. icount.brk = cnow.brk;
  2398. icount.buf_overrun = cnow.buf_overrun;
  2399. if (copy_to_user((void *)arg, &icount, sizeof(icount)))
  2400. return -EFAULT;
  2401. return 0;
  2402. case TIOCSERGWILD:
  2403. case TIOCSERSWILD:
  2404. /* "setserial -W" is called in Debian boot */
  2405. printk ("TIOCSER?WILD ioctl obsolete, ignored.n");
  2406. return 0;
  2407. default:
  2408. return -ENOIOCTLCMD;
  2409. }
  2410. return 0;
  2411. }
  2412. static void rs_set_termios(struct tty_struct *tty, struct termios *old_termios)
  2413. {
  2414. struct async_struct *info = (struct async_struct *)tty->driver_data;
  2415. unsigned long flags;
  2416. unsigned int cflag = tty->termios->c_cflag;
  2417. if (   (cflag == old_termios->c_cflag)
  2418.     && (   RELEVANT_IFLAG(tty->termios->c_iflag) 
  2419. == RELEVANT_IFLAG(old_termios->c_iflag)))
  2420.   return;
  2421. change_speed(info, old_termios);
  2422. /* Handle transition to B0 status */
  2423. if ((old_termios->c_cflag & CBAUD) &&
  2424.     !(cflag & CBAUD)) {
  2425. info->MCR &= ~(UART_MCR_DTR|UART_MCR_RTS);
  2426. save_flags(flags); cli();
  2427. serial_out(info, UART_MCR, info->MCR);
  2428. restore_flags(flags);
  2429. }
  2430. /* Handle transition away from B0 status */
  2431. if (!(old_termios->c_cflag & CBAUD) &&
  2432.     (cflag & CBAUD)) {
  2433. info->MCR |= UART_MCR_DTR;
  2434. if (!(tty->termios->c_cflag & CRTSCTS) || 
  2435.     !test_bit(TTY_THROTTLED, &tty->flags)) {
  2436. info->MCR |= UART_MCR_RTS;
  2437. }
  2438. save_flags(flags); cli();
  2439. serial_out(info, UART_MCR, info->MCR);
  2440. restore_flags(flags);
  2441. }
  2442. /* Handle turning off CRTSCTS */
  2443. if ((old_termios->c_cflag & CRTSCTS) &&
  2444.     !(tty->termios->c_cflag & CRTSCTS)) {
  2445. tty->hw_stopped = 0;
  2446. rs_start(tty);
  2447. }
  2448. #if 0
  2449. /*
  2450.  * No need to wake up processes in open wait, since they
  2451.  * sample the CLOCAL flag once, and don't recheck it.
  2452.  * XXX  It's not clear whether the current behavior is correct
  2453.  * or not.  Hence, this may change.....
  2454.  */
  2455. if (!(old_termios->c_cflag & CLOCAL) &&
  2456.     (tty->termios->c_cflag & CLOCAL))
  2457. wake_up_interruptible(&info->open_wait);
  2458. #endif
  2459. }
  2460. /*
  2461.  * ------------------------------------------------------------
  2462.  * rs_close()
  2463.  * 
  2464.  * This routine is called when the serial port gets closed.  First, we
  2465.  * wait for the last remaining data to be sent.  Then, we unlink its
  2466.  * async structure from the interrupt chain if necessary, and we free
  2467.  * that IRQ if nothing is left in the chain.
  2468.  * ------------------------------------------------------------
  2469.  */
  2470. static void rs_close(struct tty_struct *tty, struct file * filp)
  2471. {
  2472. struct async_struct * info = (struct async_struct *)tty->driver_data;
  2473. struct serial_state *state;
  2474. unsigned long flags;
  2475. if (!info || serial_paranoia_check(info, tty->device, "rs_close"))
  2476. return;
  2477. state = info->state;
  2478. save_flags(flags); cli();
  2479. if (tty_hung_up_p(filp)) {
  2480. DBG_CNT("before DEC-hung");
  2481. MOD_DEC_USE_COUNT;
  2482. restore_flags(flags);
  2483. return;
  2484. }
  2485. #ifdef SERIAL_DEBUG_OPEN
  2486. printk("rs_close ttys%d, count = %dn", info->line, state->count);
  2487. #endif
  2488. if ((tty->count == 1) && (state->count != 1)) {
  2489. /*
  2490.  * Uh, oh.  tty->count is 1, which means that the tty
  2491.  * structure will be freed.  state->count should always
  2492.  * be one in these conditions.  If it's greater than
  2493.  * one, we've got real problems, since it means the
  2494.  * serial port won't be shutdown.
  2495.  */
  2496. printk("rs_close: bad serial port count; tty->count is 1, "
  2497.        "state->count is %dn", state->count);
  2498. state->count = 1;
  2499. }
  2500. if (--state->count < 0) {
  2501. printk("rs_close: bad serial port count for ttys%d: %dn",
  2502.        info->line, state->count);
  2503. state->count = 0;
  2504. }
  2505. if (state->count) {
  2506. DBG_CNT("before DEC-2");
  2507. MOD_DEC_USE_COUNT;
  2508. restore_flags(flags);
  2509. return;
  2510. }
  2511. info->flags |= ASYNC_CLOSING;
  2512. restore_flags(flags);
  2513. /*
  2514.  * Save the termios structure, since this port may have
  2515.  * separate termios for callout and dialin.
  2516.  */
  2517. if (info->flags & ASYNC_NORMAL_ACTIVE)
  2518. info->state->normal_termios = *tty->termios;
  2519. if (info->flags & ASYNC_CALLOUT_ACTIVE)
  2520. info->state->callout_termios = *tty->termios;
  2521. /*
  2522.  * Now we wait for the transmit buffer to clear; and we notify 
  2523.  * the line discipline to only process XON/XOFF characters.
  2524.  */
  2525. tty->closing = 1;
  2526. if (info->closing_wait != ASYNC_CLOSING_WAIT_NONE)
  2527. tty_wait_until_sent(tty, info->closing_wait);
  2528. /*
  2529.  * At this point we stop accepting input.  To do this, we
  2530.  * disable the receive line status interrupts, and tell the
  2531.  * interrupt driver to stop checking the data ready bit in the
  2532.  * line status register.
  2533.  */
  2534. info->IER &= ~UART_IER_RLSI;
  2535. info->read_status_mask &= ~UART_LSR_DR;
  2536. if (info->flags & ASYNC_INITIALIZED) {
  2537. serial_out(info, UART_IER, info->IER);
  2538. /*
  2539.  * Before we drop DTR, make sure the UART transmitter
  2540.  * has completely drained; this is especially
  2541.  * important if there is a transmit FIFO!
  2542.  */
  2543. rs_wait_until_sent(tty, info->timeout);
  2544. }
  2545. shutdown(info);
  2546. if (tty->driver.flush_buffer)
  2547. tty->driver.flush_buffer(tty);
  2548. if (tty->ldisc.flush_buffer)
  2549. tty->ldisc.flush_buffer(tty);
  2550. tty->closing = 0;
  2551. info->event = 0;
  2552. info->tty = 0;
  2553. if (info->blocked_open) {
  2554. if (info->close_delay) {
  2555. set_current_state(TASK_INTERRUPTIBLE);
  2556. schedule_timeout(info->close_delay);
  2557. }
  2558. wake_up_interruptible(&info->open_wait);
  2559. }
  2560. info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE|
  2561.  ASYNC_CLOSING);
  2562. wake_up_interruptible(&info->close_wait);
  2563. MOD_DEC_USE_COUNT;
  2564. }
  2565. /*
  2566.  * rs_wait_until_sent() --- wait until the transmitter is empty
  2567.  */
  2568. static void rs_wait_until_sent(struct tty_struct *tty, int timeout)
  2569. {
  2570. struct async_struct * info = (struct async_struct *)tty->driver_data;
  2571. unsigned long orig_jiffies, char_time;
  2572. int lsr;
  2573. if (serial_paranoia_check(info, tty->device, "rs_wait_until_sent"))
  2574. return;
  2575. if (info->state->type == PORT_UNKNOWN)
  2576. return;
  2577. if (info->xmit_fifo_size == 0)
  2578. return; /* Just in case.... */
  2579. orig_jiffies = jiffies;
  2580. /*
  2581.  * Set the check interval to be 1/5 of the estimated time to
  2582.  * send a single character, and make it at least 1.  The check
  2583.  * interval should also be less than the timeout.
  2584.  * 
  2585.  * Note: we have to use pretty tight timings here to satisfy
  2586.  * the NIST-PCTS.
  2587.  */
  2588. char_time = (info->timeout - HZ/50) / info->xmit_fifo_size;
  2589. char_time = char_time / 5;
  2590. if (char_time == 0)
  2591. char_time = 1;
  2592. if (timeout && timeout < char_time)
  2593. char_time = timeout;
  2594. /*
  2595.  * If the transmitter hasn't cleared in twice the approximate
  2596.  * amount of time to send the entire FIFO, it probably won't
  2597.  * ever clear.  This assumes the UART isn't doing flow
  2598.  * control, which is currently the case.  Hence, if it ever
  2599.  * takes longer than info->timeout, this is probably due to a
  2600.  * UART bug of some kind.  So, we clamp the timeout parameter at
  2601.  * 2*info->timeout.
  2602.  */
  2603. if (!timeout || timeout > 2*info->timeout)
  2604. timeout = 2*info->timeout;
  2605. #ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT
  2606. printk("In rs_wait_until_sent(%d) check=%lu...", timeout, char_time);
  2607. printk("jiff=%lu...", jiffies);
  2608. #endif
  2609. while (!((lsr = serial_inp(info, UART_LSR)) & UART_LSR_TEMT)) {
  2610. #ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT
  2611. printk("lsr = %d (jiff=%lu)...", lsr, jiffies);
  2612. #endif
  2613. set_current_state(TASK_INTERRUPTIBLE);
  2614. schedule_timeout(char_time);
  2615. if (signal_pending(current))
  2616. break;
  2617. if (timeout && time_after(jiffies, orig_jiffies + timeout))
  2618. break;
  2619. }
  2620. #ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT
  2621. printk("lsr = %d (jiff=%lu)...donen", lsr, jiffies);
  2622. #endif
  2623. }
  2624. /*
  2625.  * rs_hangup() --- called by tty_hangup() when a hangup is signaled.
  2626.  */
  2627. static void rs_hangup(struct tty_struct *tty)
  2628. {
  2629. struct async_struct * info = (struct async_struct *)tty->driver_data;
  2630. struct serial_state *state = info->state;
  2631. if (serial_paranoia_check(info, tty->device, "rs_hangup"))
  2632. return;
  2633. state = info->state;
  2634. rs_flush_buffer(tty);
  2635. if (info->flags & ASYNC_CLOSING)
  2636. return;
  2637. shutdown(info);
  2638. info->event = 0;
  2639. state->count = 0;
  2640. info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE);
  2641. info->tty = 0;
  2642. wake_up_interruptible(&info->open_wait);
  2643. }
  2644. /*
  2645.  * ------------------------------------------------------------
  2646.  * rs_open() and friends
  2647.  * ------------------------------------------------------------
  2648.  */
  2649. static int block_til_ready(struct tty_struct *tty, struct file * filp,
  2650.    struct async_struct *info)
  2651. {
  2652. DECLARE_WAITQUEUE(wait, current);
  2653. struct serial_state *state = info->state;
  2654. int retval;
  2655. int do_clocal = 0, extra_count = 0;
  2656. unsigned long flags;
  2657. /*
  2658.  * If the device is in the middle of being closed, then block
  2659.  * until it's done, and then try again.
  2660.  */
  2661. if (tty_hung_up_p(filp) ||
  2662.     (info->flags & ASYNC_CLOSING)) {
  2663. if (info->flags & ASYNC_CLOSING)
  2664. interruptible_sleep_on(&info->close_wait);
  2665. #ifdef SERIAL_DO_RESTART
  2666. return ((info->flags & ASYNC_HUP_NOTIFY) ?
  2667. -EAGAIN : -ERESTARTSYS);
  2668. #else
  2669. return -EAGAIN;
  2670. #endif
  2671. }
  2672. /*
  2673.  * If this is a callout device, then just make sure the normal
  2674.  * device isn't being used.
  2675.  */
  2676. if (tty->driver.subtype == SERIAL_TYPE_CALLOUT) {
  2677. if (info->flags & ASYNC_NORMAL_ACTIVE)
  2678. return -EBUSY;
  2679. if ((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  2680.     (info->flags & ASYNC_SESSION_LOCKOUT) &&
  2681.     (info->session != current->session))
  2682.     return -EBUSY;
  2683. if ((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  2684.     (info->flags & ASYNC_PGRP_LOCKOUT) &&
  2685.     (info->pgrp != current->pgrp))
  2686.     return -EBUSY;
  2687. info->flags |= ASYNC_CALLOUT_ACTIVE;
  2688. return 0;
  2689. }
  2690. /*
  2691.  * If non-blocking mode is set, or the port is not enabled,
  2692.  * then make the check up front and then exit.
  2693.  */
  2694. if ((filp->f_flags & O_NONBLOCK) ||
  2695.     (tty->flags & (1 << TTY_IO_ERROR))) {