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

嵌入式Linux

开发平台:

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