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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/drivers/char/serial_core.c
  3.  *
  4.  *  Driver core for serial ports
  5.  *
  6.  *  Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
  7.  *
  8.  *  Copyright 1999 ARM Limited
  9.  *  Copyright (C) 2000-2001 Deep Blue Solutions Ltd.
  10.  *
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License as published by
  13.  * the Free Software Foundation; either version 2 of the License, or
  14.  * (at your option) any later version.
  15.  *
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this program; if not, write to the Free Software
  23.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  24.  *
  25.  *  $Id: serial_core.c,v 1.20.2.5 2002/03/13 15:22:26 rmk Exp $
  26.  *
  27.  */
  28. #include <linux/config.h>
  29. #include <linux/module.h>
  30. #include <linux/errno.h>
  31. #include <linux/signal.h>
  32. #include <linux/sched.h>
  33. #include <linux/interrupt.h>
  34. #include <linux/tty.h>
  35. #include <linux/tty_flip.h>
  36. #include <linux/major.h>
  37. #include <linux/string.h>
  38. #include <linux/fcntl.h>
  39. #include <linux/ptrace.h>
  40. #include <linux/ioport.h>
  41. #include <linux/mm.h>
  42. #include <linux/slab.h>
  43. #include <linux/init.h>
  44. #include <linux/circ_buf.h>
  45. #include <linux/console.h>
  46. #include <linux/sysrq.h>
  47. #include <linux/pm.h>
  48. #include <linux/serial_core.h>
  49. #include <asm/system.h>
  50. #include <asm/io.h>
  51. #include <asm/irq.h>
  52. #include <asm/uaccess.h>
  53. #include <asm/bitops.h>
  54. #undef DEBUG
  55. #ifndef CONFIG_PM
  56. #define pm_access(pm) do { } while (0)
  57. #define pm_unregister(pm) do { } while (0)
  58. #endif
  59. /*
  60.  * tmp_buf is used as a temporary buffer by serial_write.  We need to
  61.  * lock it in case the copy_from_user blocks while swapping in a page,
  62.  * and some other program tries to do a serial write at the same time.
  63.  * Since the lock will only come under contention when the system is
  64.  * swapping and available memory is low, it makes sense to share one
  65.  * buffer across all the serial ports, since it significantly saves
  66.  * memory if large numbers of serial ports are open.
  67.  */
  68. static u_char *tmp_buf;
  69. static DECLARE_MUTEX(tmp_buf_sem);
  70. /*
  71.  * This is used to lock changes in serial line configuration.
  72.  */
  73. static DECLARE_MUTEX(port_sem);
  74. #define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8)
  75. static void uart_change_speed(struct uart_info *info, struct termios *old_termios);
  76. static void uart_wait_until_sent(struct tty_struct *tty, int timeout);
  77. /*
  78.  * This routine is used by the interrupt handler to schedule processing in
  79.  * the software interrupt portion of the driver.  It is expected that
  80.  * interrupts will be disabled (and so the tasklet will be prevented
  81.  * from running (CHECK)).
  82.  */
  83. void uart_event(struct uart_info *info, int event)
  84. {
  85. info->event |= 1 << event;
  86. tasklet_schedule(&info->tlet);
  87. }
  88. static void uart_stop(struct tty_struct *tty)
  89. {
  90. struct uart_info *info = tty->driver_data;
  91. unsigned long flags;
  92. spin_lock_irqsave(&info->lock, flags);
  93. info->ops->stop_tx(info->port, 1);
  94. spin_unlock_irqrestore(&info->lock, flags);
  95. }
  96. static void __uart_start(struct tty_struct *tty)
  97. {
  98. struct uart_info *info = tty->driver_data;
  99. if (info->xmit.head != info->xmit.tail && info->xmit.buf &&
  100.     !tty->stopped && !tty->hw_stopped)
  101. info->ops->start_tx(info->port, 1, 1);
  102. }
  103. static void uart_start(struct tty_struct *tty)
  104. {
  105. struct uart_info *info = tty->driver_data;
  106. unsigned long flags;
  107. pm_access(info->state->pm);
  108. spin_lock_irqsave(&info->lock, flags);
  109. __uart_start(tty);
  110. spin_unlock_irqrestore(&info->lock, flags);
  111. }
  112. static void uart_tasklet_action(unsigned long data)
  113. {
  114. struct uart_info *info = (struct uart_info *)data;
  115. struct tty_struct *tty;
  116. tty = info->tty;
  117. if (!tty || !test_and_clear_bit(EVT_WRITE_WAKEUP, &info->event))
  118. return;
  119. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  120.     tty->ldisc.write_wakeup)
  121. (tty->ldisc.write_wakeup)(tty);
  122. wake_up_interruptible(&tty->write_wait);
  123. }
  124. static inline void uart_update_altspeed(struct uart_info *info)
  125. {
  126. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
  127. info->tty->alt_speed = 57600;
  128. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
  129. info->tty->alt_speed = 115200;
  130. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)
  131. info->tty->alt_speed = 230400;
  132. if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
  133. info->tty->alt_speed = 460800;
  134. }
  135. static int uart_startup(struct uart_info *info)
  136. {
  137. unsigned long flags;
  138. unsigned long page;
  139. int retval = 0;
  140. page = get_zeroed_page(GFP_KERNEL);
  141. if (!page)
  142. return -ENOMEM;
  143. save_flags(flags); cli();
  144. if (info->flags & ASYNC_INITIALIZED) {
  145. free_page(page);
  146. goto errout;
  147. }
  148. if (info->port->type == PORT_UNKNOWN) {
  149. if (info->tty)
  150. set_bit(TTY_IO_ERROR, &info->tty->flags);
  151. free_page(page);
  152. goto errout;
  153. }
  154. if (info->xmit.buf)
  155. free_page(page);
  156. else
  157. info->xmit.buf = (unsigned char *) page;
  158. info->mctrl = 0;
  159. retval = info->ops->startup(info->port, info);
  160. if (retval) {
  161. if (capable(CAP_SYS_ADMIN)) {
  162. if (info->tty)
  163. set_bit(TTY_IO_ERROR, &info->tty->flags);
  164. retval = 0;
  165. }
  166. goto errout;
  167. }
  168. if (info->tty)
  169. clear_bit(TTY_IO_ERROR, &info->tty->flags);
  170. info->xmit.head = info->xmit.tail = 0;
  171. /*
  172.  * Set up the tty->alt_speed kludge
  173.  */
  174. if (info->tty)
  175. uart_update_altspeed(info);
  176. /*
  177.  * and set the speed of the serial port
  178.  */
  179. uart_change_speed(info, NULL);
  180. /*
  181.  * Setup the RTS and DTR signals once the port
  182.  * is open and ready to respond.
  183.  */
  184. if (info->tty->termios->c_cflag & CBAUD)
  185. info->mctrl |= TIOCM_RTS | TIOCM_DTR;
  186. info->ops->set_mctrl(info->port, info->mctrl);
  187. info->flags |= ASYNC_INITIALIZED;
  188. retval = 0;
  189. errout:
  190. restore_flags(flags);
  191. return retval;
  192. }
  193. /*
  194.  * This routine will shutdown a serial port; interrupts are disabled, and
  195.  * DTR is dropped if the hangup on close termio flag is on.
  196.  */
  197. static void uart_shutdown(struct uart_info *info)
  198. {
  199. unsigned long flags;
  200. if (!(info->flags & ASYNC_INITIALIZED))
  201. return;
  202. save_flags(flags); cli(); /* Disable interrupts */
  203. /*
  204.  * clear delta_msr_wait queue to avoid mem leaks: we may free the irq
  205.  * here so the queue might never be woken up
  206.  */
  207. wake_up_interruptible(&info->delta_msr_wait);
  208. /*
  209.  * Free the IRQ and disable the port
  210.  */
  211. info->ops->shutdown(info->port, info);
  212. if (info->xmit.buf) {
  213. unsigned long pg = (unsigned long) info->xmit.buf;
  214. info->xmit.buf = NULL;
  215. free_page(pg);
  216. }
  217. if (!info->tty || (info->tty->termios->c_cflag & HUPCL))
  218. info->mctrl &= ~(TIOCM_DTR|TIOCM_RTS);
  219. info->ops->set_mctrl(info->port, info->mctrl);
  220. /* kill off our tasklet */
  221. tasklet_kill(&info->tlet);
  222. if (info->tty)
  223. set_bit(TTY_IO_ERROR, &info->tty->flags);
  224. info->flags &= ~ASYNC_INITIALIZED;
  225. restore_flags(flags);
  226. }
  227. static inline u_int uart_calculate_quot(struct uart_info *info, u_int baud)
  228. {
  229. u_int quot;
  230. /* Special case: B0 rate */
  231. if (!baud)
  232. baud = 9600;
  233. /* Old HI/VHI/custom speed handling */
  234. if (baud == 38400 &&
  235.     ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST))
  236. quot = info->state->custom_divisor;
  237. else
  238. quot = info->port->uartclk / (16 * baud);
  239. return quot;
  240. }
  241. static void uart_change_speed(struct uart_info *info, struct termios *old_termios)
  242. {
  243. struct uart_port *port = info->port;
  244. u_int quot, baud, cflag, bits, try;
  245. /*
  246.  * If we have no tty, termios, or the port does not exist,
  247.  * then we can't set the parameters for this port.
  248.  */
  249. if (!info->tty || !info->tty->termios ||
  250.     info->port->type == PORT_UNKNOWN)
  251. return;
  252. cflag = info->tty->termios->c_cflag;
  253. /* byte size and parity */
  254. switch (cflag & CSIZE) {
  255. case CS5: bits = 7;  break;
  256. case CS6: bits = 8;  break;
  257. case CS7: bits = 9;  break;
  258. default:  bits = 10; break; // CS8
  259. }
  260. if (cflag & CSTOPB)
  261. bits++;
  262. if (cflag & PARENB)
  263. bits++;
  264. for (try = 0; try < 2; try ++) {
  265. /* Determine divisor based on baud rate */
  266. baud = tty_get_baud_rate(info->tty);
  267. quot = uart_calculate_quot(info, baud);
  268. if (quot)
  269. break;
  270. /*
  271.  * Oops, the quotient was zero.  Try again with
  272.  * the old baud rate if possible.
  273.  */
  274. info->tty->termios->c_cflag &= ~CBAUD;
  275. if (old_termios) {
  276. info->tty->termios->c_cflag |=
  277.  (old_termios->c_cflag & CBAUD);
  278. old_termios = NULL;
  279. continue;
  280. }
  281. /*
  282.  * As a last resort, if the quotient is zero,
  283.  * default to 9600 bps
  284.  */
  285. info->tty->termios->c_cflag |= B9600;
  286. }
  287. info->timeout = (port->fifosize * HZ * bits * quot) /
  288.  (port->uartclk / 16);
  289. info->timeout += HZ/50; /* Add .02 seconds of slop */
  290. if (cflag & CRTSCTS)
  291. info->flags |= ASYNC_CTS_FLOW;
  292. else
  293. info->flags &= ~ASYNC_CTS_FLOW;
  294. if (cflag & CLOCAL)
  295. info->flags &= ~ASYNC_CHECK_CD;
  296. else
  297. info->flags |= ASYNC_CHECK_CD;
  298. /*
  299.  * Set up parity check flag
  300.  */
  301. #define RELEVENT_IFLAG(iflag) ((iflag) & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
  302. pm_access(info->state->pm);
  303. info->ops->change_speed(port, cflag, info->tty->termios->c_iflag, quot);
  304. }
  305. static void uart_put_char(struct tty_struct *tty, u_char ch)
  306. {
  307. struct uart_info *info = tty->driver_data;
  308. unsigned long flags;
  309. if (!tty || !info->xmit.buf)
  310. return;
  311. spin_lock_irqsave(&info->lock, flags);
  312. if (CIRC_SPACE(info->xmit.head, info->xmit.tail, UART_XMIT_SIZE) != 0) {
  313. info->xmit.buf[info->xmit.head] = ch;
  314. info->xmit.head = (info->xmit.head + 1) & (UART_XMIT_SIZE - 1);
  315. }
  316. spin_unlock_irqrestore(&info->lock, flags);
  317. }
  318. static void uart_flush_chars(struct tty_struct *tty)
  319. {
  320. uart_start(tty);
  321. }
  322. static int uart_write(struct tty_struct *tty, int from_user,
  323.   const u_char * buf, int count)
  324. {
  325. struct uart_info *info = tty->driver_data;
  326. unsigned long flags;
  327. int c, ret = 0;
  328. if (!tty || !info->xmit.buf || !tmp_buf)
  329. return 0;
  330. if (from_user) {
  331. down(&tmp_buf_sem);
  332. while (1) {
  333. int c1;
  334. c = CIRC_SPACE_TO_END(info->xmit.head,
  335.       info->xmit.tail,
  336.       UART_XMIT_SIZE);
  337. if (count < c)
  338. c = count;
  339. if (c <= 0)
  340. break;
  341. c -= copy_from_user(tmp_buf, buf, c);
  342. if (!c) {
  343. if (!ret)
  344. ret = -EFAULT;
  345. break;
  346. }
  347. spin_lock_irqsave(&info->lock, flags);
  348. c1 = CIRC_SPACE_TO_END(info->xmit.head,
  349.        info->xmit.tail,
  350.        UART_XMIT_SIZE);
  351. if (c1 < c)
  352. c = c1;
  353. memcpy(info->xmit.buf + info->xmit.head, tmp_buf, c);
  354. info->xmit.head = (info->xmit.head + c) &
  355.   (UART_XMIT_SIZE - 1);
  356. spin_unlock_irqrestore(&info->lock, flags);
  357. buf += c;
  358. count -= c;
  359. ret += c;
  360. }
  361. up(&tmp_buf_sem);
  362. } else {
  363. spin_lock_irqsave(&info->lock, flags);
  364. while (1) {
  365. c = CIRC_SPACE_TO_END(info->xmit.head,
  366.       info->xmit.tail,
  367.       UART_XMIT_SIZE);
  368. if (count < c)
  369. c = count;
  370. if (c <= 0)
  371. break;
  372. memcpy(info->xmit.buf + info->xmit.head, buf, c);
  373. info->xmit.head = (info->xmit.head + c) &
  374.   (UART_XMIT_SIZE - 1);
  375. buf += c;
  376. count -= c;
  377. ret += c;
  378. }
  379. spin_unlock_irqrestore(&info->lock, flags);
  380. }
  381. uart_start(tty);
  382. return ret;
  383. }
  384. static int uart_write_room(struct tty_struct *tty)
  385. {
  386. struct uart_info *info = tty->driver_data;
  387. return CIRC_SPACE(info->xmit.head, info->xmit.tail, UART_XMIT_SIZE);
  388. }
  389. static int uart_chars_in_buffer(struct tty_struct *tty)
  390. {
  391. struct uart_info *info = tty->driver_data;
  392. return CIRC_CNT(info->xmit.head, info->xmit.tail, UART_XMIT_SIZE);
  393. }
  394. static void uart_flush_buffer(struct tty_struct *tty)
  395. {
  396. struct uart_info *info = tty->driver_data;
  397. unsigned long flags;
  398. #ifdef DEBUG
  399. printk("uart_flush_buffer(%d) calledn",
  400.        MINOR(tty->device) - tty->driver.minor_start);
  401. #endif
  402. spin_lock_irqsave(&info->lock, flags);
  403. info->xmit.head = info->xmit.tail = 0;
  404. spin_unlock_irqrestore(&info->lock, flags);
  405. wake_up_interruptible(&tty->write_wait);
  406. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  407.     tty->ldisc.write_wakeup)
  408. (tty->ldisc.write_wakeup)(tty);
  409. }
  410. /*
  411.  * This function is used to send a high-priority XON/XOFF character to
  412.  * the device
  413.  */
  414. static void uart_send_xchar(struct tty_struct *tty, char ch)
  415. {
  416. struct uart_info *info = tty->driver_data;
  417. info->port->x_char = ch;
  418. if (ch)
  419. info->ops->start_tx(info->port, 1, 0);
  420. }
  421. static void uart_throttle(struct tty_struct *tty)
  422. {
  423. struct uart_info *info = tty->driver_data;
  424. unsigned long flags;
  425. if (I_IXOFF(tty))
  426. uart_send_xchar(tty, STOP_CHAR(tty));
  427. if (tty->termios->c_cflag & CRTSCTS) {
  428. spin_lock_irqsave(&info->lock, flags);
  429. info->mctrl &= ~TIOCM_RTS;
  430. info->ops->set_mctrl(info->port, info->mctrl);
  431. spin_unlock_irqrestore(&info->lock, flags);
  432. }
  433. }
  434. static void uart_unthrottle(struct tty_struct *tty)
  435. {
  436. struct uart_info *info = (struct uart_info *) tty->driver_data;
  437. unsigned long flags;
  438. if (I_IXOFF(tty)) {
  439. if (info->port->x_char)
  440. info->port->x_char = 0;
  441. else
  442. uart_send_xchar(tty, START_CHAR(tty));
  443. }
  444. if (tty->termios->c_cflag & CRTSCTS) {
  445. spin_lock_irqsave(&info->lock, flags);
  446. info->mctrl |= TIOCM_RTS;
  447. info->ops->set_mctrl(info->port, info->mctrl);
  448. spin_unlock_irqrestore(&info->lock, flags);
  449. }
  450. }
  451. static int uart_get_info(struct uart_info *info, struct serial_struct *retinfo)
  452. {
  453. struct uart_state *state = info->state;
  454. struct uart_port *port = info->port;
  455. struct serial_struct tmp;
  456. memset(&tmp, 0, sizeof(tmp));
  457. tmp.type    = port->type;
  458. tmp.line    = port->line;
  459. tmp.port    = port->iobase;
  460. if (HIGH_BITS_OFFSET)
  461. tmp.port_high = port->iobase >> HIGH_BITS_OFFSET;
  462. tmp.irq    = port->irq;
  463. tmp.flags    = port->flags;
  464. tmp.xmit_fifo_size = port->fifosize;
  465. tmp.baud_base    = port->uartclk / 16;
  466. tmp.close_delay    = state->close_delay;
  467. tmp.closing_wait   = state->closing_wait;
  468. tmp.custom_divisor = state->custom_divisor;
  469. tmp.hub6    = port->hub6;
  470. tmp.io_type        = port->iotype;
  471. tmp.iomem_reg_shift= port->regshift;
  472. tmp.iomem_base     = (void *)port->mapbase;
  473. if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
  474. return -EFAULT;
  475. return 0;
  476. }
  477. static int uart_set_info(struct uart_info *info,
  478.  struct serial_struct *newinfo)
  479. {
  480. struct serial_struct new_serial;
  481. struct uart_state *state = info->state;
  482. struct uart_port *port = info->port;
  483. unsigned long new_port;
  484. unsigned int change_irq, change_port, old_flags;
  485. unsigned int old_custom_divisor;
  486. int retval = 0;
  487. if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
  488. return -EFAULT;
  489. new_port = new_serial.port;
  490. if (HIGH_BITS_OFFSET)
  491. new_port += (unsigned long) new_serial.port_high << HIGH_BITS_OFFSET;
  492. new_serial.irq = irq_cannonicalize(new_serial.irq);
  493. /*
  494.  * This semaphore protects state->count.  It is also
  495.  * very useful to prevent opens.  Also, take the
  496.  * port configuration semaphore to make sure that a
  497.  * module insertion/removal doesn't change anything
  498.  * under us.
  499.  */
  500. down(&port_sem);
  501. down(&state->count_sem);
  502. change_irq  = new_serial.irq != port->irq;
  503. /*
  504.  * Since changing the 'type' of the port changes its resource
  505.  * allocations, we should treat type changes the same as
  506.  * IO port changes.
  507.  */
  508. change_port = new_port != port->iobase ||
  509.       (unsigned long)new_serial.iomem_base != port->mapbase ||
  510.       new_serial.hub6 != port->hub6 ||
  511.       new_serial.io_type != port->iotype ||
  512.       new_serial.iomem_reg_shift != port->regshift ||
  513.       new_serial.type != port->type;
  514. old_flags = port->flags;
  515. old_custom_divisor = state->custom_divisor;
  516. if (!capable(CAP_SYS_ADMIN)) {
  517. retval = -EPERM;
  518. if (change_irq || change_port ||
  519.     (new_serial.baud_base != port->uartclk / 16) ||
  520.     (new_serial.close_delay != state->close_delay) ||
  521.     (new_serial.closing_wait != state->closing_wait) ||
  522.     (new_serial.xmit_fifo_size != port->fifosize) ||
  523.     ((new_serial.flags & ~ASYNC_USR_MASK) !=
  524.      (port->flags & ~ASYNC_USR_MASK)))
  525. goto exit;
  526. port->flags = ((port->flags & ~ASYNC_USR_MASK) |
  527.        (new_serial.flags & ASYNC_USR_MASK));
  528. info->flags = ((info->flags & ~ASYNC_USR_MASK) |
  529.        (new_serial.flags & ASYNC_USR_MASK));
  530. state->custom_divisor = new_serial.custom_divisor;
  531. goto check_and_exit;
  532. }
  533. /*
  534.  * Ask the low level driver to verify the settings.
  535.  */
  536. if (port->ops->verify_port)
  537. retval = port->ops->verify_port(port, &new_serial);
  538. if ((new_serial.irq >= NR_IRQS) || (new_serial.irq < 0) ||
  539.     (new_serial.baud_base < 9600))
  540. retval = -EINVAL;
  541. if (retval)
  542. goto exit;
  543. if (change_port || change_irq) {
  544. retval = -EBUSY;
  545. /*
  546.  * Make sure that we are the sole user of this port.
  547.  */
  548. if (state->count > 1)
  549. goto exit;
  550. /*
  551.  * We need to shutdown the serial port at the old
  552.  * port/type/irq combination.
  553.  */
  554. uart_shutdown(info);
  555. }
  556. if (change_port) {
  557. unsigned long old_iobase, old_mapbase;
  558. unsigned int old_type, old_iotype, old_hub6, old_shift;
  559. old_iobase = port->iobase;
  560. old_mapbase = port->mapbase;
  561. old_type = port->type;
  562. old_hub6 = port->hub6;
  563. old_iotype = port->iotype;
  564. old_shift = port->regshift;
  565. /*
  566.  * Free and release old regions
  567.  */
  568. if (old_type != PORT_UNKNOWN)
  569. port->ops->release_port(port);
  570. port->iobase = new_port;
  571. port->type = new_serial.type;
  572. port->hub6 = new_serial.hub6;
  573. port->iotype = new_serial.io_type;
  574. port->regshift = new_serial.iomem_reg_shift;
  575. port->mapbase = (unsigned long)new_serial.iomem_base;
  576. /*
  577.  * Claim and map the new regions
  578.  */
  579. if (port->type != PORT_UNKNOWN)
  580. retval = port->ops->request_port(port);
  581. /*
  582.  * If we fail to request resources for the
  583.  * new port, try to restore the old settings.
  584.  */
  585. if (retval && old_type != PORT_UNKNOWN) {
  586. port->iobase = old_iobase;
  587. port->type = old_type;
  588. port->hub6 = old_hub6;
  589. port->iotype = old_iotype;
  590. port->regshift = old_shift;
  591. port->mapbase = old_mapbase;
  592. retval = port->ops->request_port(port);
  593. /*
  594.  * If we failed to restore the old settings,
  595.  * we fail like this.
  596.  */
  597. if (retval)
  598. port->type = PORT_UNKNOWN;
  599. /*
  600.  * We failed anyway.
  601.  */
  602. retval = -EBUSY;
  603. }
  604. }
  605. port->irq  = new_serial.irq;
  606. port->uartclk = new_serial.baud_base * 16;
  607. port->flags = ((port->flags & ~ASYNC_FLAGS) |
  608. (new_serial.flags & ASYNC_FLAGS));
  609. info->flags = ((port->flags & ~ASYNC_INTERNAL_FLAGS) |
  610.        (info->flags & ASYNC_INTERNAL_FLAGS));
  611. state->custom_divisor = new_serial.custom_divisor;
  612. state->close_delay = new_serial.close_delay * HZ / 100;
  613. state->closing_wait = new_serial.closing_wait * HZ / 100;
  614. info->tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
  615. port->fifosize = new_serial.xmit_fifo_size;
  616. check_and_exit:
  617. retval = 0;
  618. if (port->type == PORT_UNKNOWN)
  619. goto exit;
  620. if (info->flags & ASYNC_INITIALIZED) {
  621. if (((old_flags & info->flags) & ASYNC_SPD_MASK) ||
  622.     old_custom_divisor != state->custom_divisor) {
  623. uart_update_altspeed(info);
  624. uart_change_speed(info, NULL);
  625. }
  626. } else
  627. retval = uart_startup(info);
  628. exit:
  629. up(&state->count_sem);
  630. up(&port_sem);
  631. return retval;
  632. }
  633. /*
  634.  * uart_get_lsr_info - get line status register info
  635.  */
  636. static int uart_get_lsr_info(struct uart_info *info, unsigned int *value)
  637. {
  638. u_int result;
  639. unsigned long flags;
  640. spin_lock_irqsave(&info->lock, flags);
  641. result = info->ops->tx_empty(info->port);
  642. spin_unlock_irqrestore(&info->lock, flags);
  643. /*
  644.  * If we're about to load something into the transmit
  645.  * register, we'll pretend the transmitter isn't empty to
  646.  * avoid a race condition (depending on when the transmit
  647.  * interrupt happens).
  648.  */
  649. if (info->port->x_char ||
  650.     ((CIRC_CNT(info->xmit.head, info->xmit.tail,
  651.        UART_XMIT_SIZE) > 0) &&
  652.      !info->tty->stopped && !info->tty->hw_stopped))
  653. result &= ~TIOCSER_TEMT;
  654. return put_user(result, value);
  655. }
  656. static int uart_get_modem_info(struct uart_info *info, unsigned int *value)
  657. {
  658. unsigned int result = info->mctrl;
  659. result |= info->ops->get_mctrl(info->port);
  660. return put_user(result, value);
  661. }
  662. static int uart_set_modem_info(struct uart_info *info, unsigned int cmd,
  663.   unsigned int *value)
  664. {
  665. unsigned int arg, old;
  666. int ret = 0;
  667. if (get_user(arg, value))
  668. return -EFAULT;
  669. spin_lock_irq(&info->lock);
  670. old = info->mctrl;
  671. switch (cmd) {
  672. case TIOCMBIS: info->mctrl |= arg; break;
  673. case TIOCMBIC: info->mctrl &= ~arg; break;
  674. case TIOCMSET: info->mctrl = arg; break;
  675. default: ret = -EINVAL; break;
  676. }
  677. if (old != info->mctrl)
  678. info->ops->set_mctrl(info->port, info->mctrl);
  679. spin_unlock_irq(&info->lock);
  680. return ret;
  681. }
  682. static void uart_break_ctl(struct tty_struct *tty, int break_state)
  683. {
  684. struct uart_info *info = tty->driver_data;
  685. unsigned long flags;
  686. if (info->port->type != PORT_UNKNOWN) {
  687. spin_lock_irqsave(&info->lock, flags);
  688. info->ops->break_ctl(info->port, break_state);
  689. spin_unlock_irqrestore(&info->lock, flags);
  690. }
  691. }
  692. static int uart_do_autoconfig(struct uart_info *info)
  693. {
  694. struct uart_port *port = info->port;
  695. int flags, ret;
  696. if (!capable(CAP_SYS_ADMIN))
  697. return -EPERM;
  698. /*
  699.  * Take the 'count' lock.  This prevents count
  700.  * from incrementing, and hence any extra opens
  701.  * of the port while we're auto-configging.
  702.  */
  703. down(&info->state->count_sem);
  704. ret = -EBUSY;
  705. if (info->state->count == 1) {
  706. uart_shutdown(info);
  707. /*
  708.  * If we already have a port type configured,
  709.  * we must release its resources.
  710.  */
  711. if (port->type != PORT_UNKNOWN)
  712. port->ops->release_port(port);
  713. flags = UART_CONFIG_TYPE;
  714. if (port->flags & ASYNC_AUTO_IRQ)
  715. flags |= UART_CONFIG_IRQ;
  716. /*
  717.  * This will claim the ports resources if
  718.  * a port is found.
  719.  */
  720. port->ops->config_port(port, flags);
  721. ret = uart_startup(info);
  722. }
  723. up(&info->state->count_sem);
  724. return ret;
  725. }
  726. /*
  727.  * Called from userspace.  We can use spin_lock_irq() here.
  728.  */
  729. static int uart_ioctl(struct tty_struct *tty, struct file *file,
  730.    unsigned int cmd, unsigned long arg)
  731. {
  732. struct uart_info *info = tty->driver_data;
  733. struct uart_icount cprev, cnow;
  734. struct serial_icounter_struct icount;
  735. int ret = -ENOIOCTLCMD;
  736. if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
  737.     (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) &&
  738.     (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) {
  739. if (tty->flags & (1 << TTY_IO_ERROR))
  740. return -EIO;
  741. }
  742. switch (cmd) {
  743. case TIOCMGET:
  744. ret = uart_get_modem_info(info, (unsigned int *)arg);
  745. break;
  746. case TIOCMBIS:
  747. case TIOCMBIC:
  748. case TIOCMSET:
  749. ret = uart_set_modem_info(info, cmd,
  750.   (unsigned int *)arg);
  751. break;
  752. case TIOCGSERIAL:
  753. ret = uart_get_info(info, (struct serial_struct *)arg);
  754. break;
  755. case TIOCSSERIAL:
  756. ret = uart_set_info(info, (struct serial_struct *)arg);
  757. break;
  758. case TIOCSERCONFIG:
  759. ret = uart_do_autoconfig(info);
  760. break;
  761. case TIOCSERGETLSR: /* Get line status register */
  762. ret = uart_get_lsr_info(info, (unsigned int *)arg);
  763. break;
  764. /*
  765.  * Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change
  766.  * - mask passed in arg for lines of interest
  767.  *   (use |'ed TIOCM_RNG/DSR/CD/CTS for masking)
  768.  * Caller should use TIOCGICOUNT to see which one it was
  769.  */
  770. case TIOCMIWAIT:
  771. spin_lock_irq(&info->lock);
  772. /* note the counters on entry */
  773. cprev = info->port->icount;
  774. /* Force modem status interrupts on */
  775. info->ops->enable_ms(info->port);
  776. spin_unlock_irq(&info->lock);
  777. while (1) {
  778. interruptible_sleep_on(&info->delta_msr_wait);
  779. /* see if a signal did it */
  780. if (signal_pending(current)) {
  781. ret = -ERESTARTSYS;
  782. break;
  783. }
  784. spin_lock_irq(&info->lock);
  785. cnow = info->port->icount; /* atomic copy */
  786. spin_unlock_irq(&info->lock);
  787. if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr &&
  788.     cnow.dcd == cprev.dcd && cnow.cts == cprev.cts) {
  789.      ret = -EIO; /* no change => error */
  790.      break;
  791. }
  792. if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
  793.     ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
  794.     ((arg & TIOCM_CD)  && (cnow.dcd != cprev.dcd)) ||
  795.     ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) {
  796.      ret = 0;
  797.      break;
  798. }
  799. cprev = cnow;
  800. }
  801. break;
  802. /*
  803.  * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
  804.  * Return: write counters to the user passed counter struct
  805.  * NB: both 1->0 and 0->1 transitions are counted except for
  806.  *     RI where only 0->1 is counted.
  807.  */
  808. case TIOCGICOUNT:
  809. spin_lock_irq(&info->lock);
  810. cnow = info->port->icount;
  811. spin_unlock_irq(&info->lock);
  812. icount.cts         = cnow.cts;
  813. icount.dsr         = cnow.dsr;
  814. icount.rng         = cnow.rng;
  815. icount.dcd         = cnow.dcd;
  816. icount.rx          = cnow.rx;
  817. icount.tx          = cnow.tx;
  818. icount.frame       = cnow.frame;
  819. icount.overrun     = cnow.overrun;
  820. icount.parity      = cnow.parity;
  821. icount.brk         = cnow.brk;
  822. icount.buf_overrun = cnow.buf_overrun;
  823. ret = copy_to_user((void *)arg, &icount, sizeof(icount))
  824. ? -EFAULT : 0;
  825. break;
  826. case TIOCSERGWILD: /* obsolete */
  827. case TIOCSERSWILD: /* obsolete */
  828. ret = 0;
  829. break;
  830. default:
  831. if (info->ops->ioctl)
  832. ret = info->ops->ioctl(info->port, cmd, arg);
  833. break;
  834. }
  835. return ret;
  836. }
  837. static void uart_set_termios(struct tty_struct *tty, struct termios *old_termios)
  838. {
  839. struct uart_info *info = tty->driver_data;
  840. unsigned long flags;
  841. unsigned int cflag = tty->termios->c_cflag;
  842. if ((cflag ^ old_termios->c_cflag) == 0 &&
  843.     RELEVENT_IFLAG(tty->termios->c_iflag ^ old_termios->c_iflag) == 0)
  844. return;
  845. uart_change_speed(info, old_termios);
  846. spin_lock_irqsave(&info->lock, flags);
  847. /* Handle transition to B0 status */
  848. if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD)) {
  849. info->mctrl &= ~(TIOCM_RTS | TIOCM_DTR);
  850. info->ops->set_mctrl(info->port, info->mctrl);
  851. }
  852. /* Handle transition away from B0 status */
  853. if (!(old_termios->c_cflag & CBAUD) && (cflag & CBAUD)) {
  854. info->mctrl |= TIOCM_DTR;
  855. if (!(cflag & CRTSCTS) ||
  856.     !test_bit(TTY_THROTTLED, &tty->flags))
  857. info->mctrl |= TIOCM_RTS;
  858. info->ops->set_mctrl(info->port, info->mctrl);
  859. }
  860. /* Handle turning off CRTSCTS */
  861. if ((old_termios->c_cflag & CRTSCTS) && !(cflag & CRTSCTS)) {
  862. tty->hw_stopped = 0;
  863. __uart_start(tty);
  864. }
  865. spin_unlock_irqrestore(&info->lock, flags);
  866. #if 0
  867. /*
  868.  * No need to wake up processes in open wait, since they
  869.  * sample the CLOCAL flag once, and don't recheck it.
  870.  * XXX  It's not clear whether the current behavior is correct
  871.  * or not.  Hence, this may change.....
  872.  */
  873. if (!(old_termios->c_cflag & CLOCAL) &&
  874.     (tty->termios->c_cflag & CLOCAL))
  875. wake_up_interruptible(&info->open_wait);
  876. #endif
  877. }
  878. /*
  879.  * In 2.4.5, calls to this will be serialized via the BKL in
  880.  *  linux/drivers/char/tty_io.c:tty_release()
  881.  *  linux/drivers/char/tty_io.c:do_tty_handup()
  882.  */
  883. static void uart_close(struct tty_struct *tty, struct file *filp)
  884. {
  885. struct uart_driver *drv = (struct uart_driver *)tty->driver.driver_state;
  886. struct uart_info *info = tty->driver_data;
  887. struct uart_state *state;
  888. unsigned long flags;
  889. if (!info)
  890. return;
  891. state = info->state;
  892. #ifdef DEBUG
  893. printk("uart_close() calledn");
  894. #endif
  895. /*
  896.  * This is safe, as long as the BKL exists in
  897.  * do_tty_hangup(), and we're protected by the BKL.
  898.  */
  899. if (tty_hung_up_p(filp))
  900. goto done;
  901. down(&state->count_sem);
  902. spin_lock_irqsave(&info->lock, flags);
  903. if ((tty->count == 1) && (state->count != 1)) {
  904. /*
  905.  * Uh, oh.  tty->count is 1, which means that the tty
  906.  * structure will be freed.  state->count should always
  907.  * be one in these conditions.  If it's greater than
  908.  * one, we've got real problems, since it means the
  909.  * serial port won't be shutdown.
  910.  */
  911. printk("uart_close: bad serial port count; tty->count is 1, "
  912.        "state->count is %dn", state->count);
  913. state->count = 1;
  914. }
  915. if (--state->count < 0) {
  916. printk("rs_close: bad serial port count for %s%d: %dn",
  917.        tty->driver.name, info->port->line, state->count);
  918. state->count = 0;
  919. }
  920. if (state->count) {
  921. spin_unlock_irqrestore(&info->lock, flags);
  922. up(&state->count_sem);
  923. goto done;
  924. }
  925. info->flags |= ASYNC_CLOSING;
  926. spin_unlock_irqrestore(&info->lock, flags);
  927. up(&state->count_sem);
  928. /*
  929.  * Save the termios structure, since this port may have
  930.  * separate termios for callout and dialin.
  931.  */
  932. if (info->flags & ASYNC_NORMAL_ACTIVE)
  933. info->state->normal_termios = *tty->termios;
  934. if (info->flags & ASYNC_CALLOUT_ACTIVE)
  935. info->state->callout_termios = *tty->termios;
  936. /*
  937.  * Now we wait for the transmit buffer to clear; and we notify
  938.  * the line discipline to only process XON/XOFF characters.
  939.  */
  940. tty->closing = 1;
  941. if (info->state->closing_wait != ASYNC_CLOSING_WAIT_NONE)
  942. tty_wait_until_sent(tty, info->state->closing_wait);
  943. /*
  944.  * At this point, we stop accepting input.  To do this, we
  945.  * disable the receive line status interrupts.
  946.  */
  947. if (info->flags & ASYNC_INITIALIZED) {
  948. info->ops->stop_rx(info->port);
  949. /*
  950.  * Before we drop DTR, make sure the UART transmitter
  951.  * has completely drained; this is especially
  952.  * important if there is a transmit FIFO!
  953.  */
  954. uart_wait_until_sent(tty, info->timeout);
  955. }
  956. uart_shutdown(info);
  957. if (tty->driver.flush_buffer)
  958. tty->driver.flush_buffer(tty);
  959. if (tty->ldisc.flush_buffer)
  960. tty->ldisc.flush_buffer(tty);
  961. tty->closing = 0;
  962. info->event = 0;
  963. info->tty = NULL;
  964. if (info->blocked_open) {
  965. if (info->state->close_delay) {
  966. set_current_state(TASK_INTERRUPTIBLE);
  967. schedule_timeout(info->state->close_delay);
  968. set_current_state(TASK_RUNNING);
  969. }
  970. wake_up_interruptible(&info->open_wait);
  971. } else {
  972. #ifdef CONFIG_PM
  973. /*
  974.  * Put device into D3 state.
  975.  */
  976. pm_send(info->state->pm, PM_SUSPEND, (void *)3);
  977. #else
  978. if (info->ops->pm)
  979. info->ops->pm(info->port, 3, 0);
  980. #endif
  981. }
  982. info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE|
  983.  ASYNC_CLOSING);
  984. wake_up_interruptible(&info->close_wait);
  985. done:
  986. if (drv->owner)
  987. __MOD_DEC_USE_COUNT(drv->owner);
  988. }
  989. static void uart_wait_until_sent(struct tty_struct *tty, int timeout)
  990. {
  991. struct uart_info *info = (struct uart_info *) tty->driver_data;
  992. unsigned long char_time, expire;
  993. if (info->port->type == PORT_UNKNOWN ||
  994.     info->port->fifosize == 0)
  995. return;
  996. /*
  997.  * Set the check interval to be 1/5 of the estimated time to
  998.  * send a single character, and make it at least 1.  The check
  999.  * interval should also be less than the timeout.
  1000.  *
  1001.  * Note: we have to use pretty tight timings here to satisfy
  1002.  * the NIST-PCTS.
  1003.  */
  1004. char_time = (info->timeout - HZ/50) / info->port->fifosize;
  1005. char_time = char_time / 5;
  1006. if (char_time == 0)
  1007. char_time = 1;
  1008. if (timeout && timeout < char_time)
  1009. char_time = timeout;
  1010. /*
  1011.  * If the transmitter hasn't cleared in twice the approximate
  1012.  * amount of time to send the entire FIFO, it probably won't
  1013.  * ever clear.  This assumes the UART isn't doing flow
  1014.  * control, which is currently the case.  Hence, if it ever
  1015.  * takes longer than info->timeout, this is probably due to a
  1016.  * UART bug of some kind.  So, we clamp the timeout parameter at
  1017.  * 2*info->timeout.
  1018.  */
  1019. if (!timeout || timeout > 2 * info->timeout)
  1020. timeout = 2 * info->timeout;
  1021. expire = jiffies + timeout;
  1022. #ifdef DEBUG
  1023. printk("uart_wait_until_sent(%d), jiff=%lu, expire=%lu...n",
  1024.        MINOR(tty->device) - tty->driver.minor_start, jiffies,
  1025.        expire);
  1026. #endif
  1027. while (!info->ops->tx_empty(info->port)) {
  1028. set_current_state(TASK_INTERRUPTIBLE);
  1029. schedule_timeout(char_time);
  1030. if (signal_pending(current))
  1031. break;
  1032. if (timeout && time_after(jiffies, expire))
  1033. break;
  1034. }
  1035. set_current_state(TASK_RUNNING); /* might not be needed */
  1036. }
  1037. /*
  1038.  * This is called with the BKL in effect
  1039.  *  linux/drivers/char/tty_io.c:do_tty_hangup()
  1040.  */
  1041. static void uart_hangup(struct tty_struct *tty)
  1042. {
  1043. struct uart_info *info = tty->driver_data;
  1044. struct uart_state *state = info->state;
  1045. uart_flush_buffer(tty);
  1046. if (info->flags & ASYNC_CLOSING)
  1047. return;
  1048. uart_shutdown(info);
  1049. info->event = 0;
  1050. state->count = 0;
  1051. info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE);
  1052. info->tty = NULL;
  1053. wake_up_interruptible(&info->open_wait);
  1054. }
  1055. static int uart_block_til_ready(struct tty_struct *tty, struct file *filp,
  1056. struct uart_info *info)
  1057. {
  1058. DECLARE_WAITQUEUE(wait, current);
  1059. struct uart_state *state = info->state;
  1060. unsigned long flags;
  1061. int do_clocal = 0, extra_count = 0, retval;
  1062. /*
  1063.  * If the device is in the middle of being closed, then block
  1064.  * until it's done, and then try again.
  1065.  */
  1066. if (tty_hung_up_p(filp) ||
  1067.     (info->flags & ASYNC_CLOSING)) {
  1068. if (info->flags & ASYNC_CLOSING)
  1069. interruptible_sleep_on(&info->close_wait);
  1070. return (info->flags & ASYNC_HUP_NOTIFY) ?
  1071. -EAGAIN : -ERESTARTSYS;
  1072. }
  1073. /*
  1074.  * If this is a callout device, then just make sure the normal
  1075.  * device isn't being used.
  1076.  */
  1077. if (tty->driver.subtype == SERIAL_TYPE_CALLOUT) {
  1078. if (info->flags & ASYNC_NORMAL_ACTIVE)
  1079. return -EBUSY;
  1080. if ((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1081.     (info->flags & ASYNC_SESSION_LOCKOUT) &&
  1082.     (info->session != current->session))
  1083. return -EBUSY;
  1084. if ((info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1085.     (info->flags & ASYNC_PGRP_LOCKOUT) &&
  1086.     (info->pgrp != current->pgrp))
  1087. return -EBUSY;
  1088. info->flags |= ASYNC_CALLOUT_ACTIVE;
  1089. return 0;
  1090. }
  1091. /*
  1092.  * If non-blocking mode is set, or the port is not enabled,
  1093.  * then make the check up front and then exit.  Note that
  1094.  * we have set TTY_IO_ERROR for a non-enabled port.
  1095.  */
  1096. if ((filp->f_flags & O_NONBLOCK) ||
  1097.     (tty->flags & (1 << TTY_IO_ERROR))) {
  1098. if (info->flags & ASYNC_CALLOUT_ACTIVE)
  1099. return -EBUSY;
  1100. info->flags |= ASYNC_NORMAL_ACTIVE;
  1101. return 0;
  1102. }
  1103. if (info->flags & ASYNC_CALLOUT_ACTIVE) {
  1104. if (state->normal_termios.c_cflag & CLOCAL)
  1105. do_clocal = 1;
  1106. } else {
  1107. if (tty->termios->c_cflag & CLOCAL)
  1108. do_clocal = 1;
  1109. }
  1110. /*
  1111.  * Block waiting for the carrier detect and the line to become
  1112.  * free (i.e., not in use by the callout).  While we are in
  1113.  * this loop, state->count is dropped by one, so that
  1114.  * rs_close() knows when to free things.  We restore it upon
  1115.  * exit, either normal or abnormal.
  1116.  */
  1117. retval = 0;
  1118. add_wait_queue(&info->open_wait, &wait);
  1119. down(&state->count_sem);
  1120. spin_lock_irqsave(&info->lock, flags);
  1121. if (!tty_hung_up_p(filp)) {
  1122. extra_count = 1;
  1123. state->count--;
  1124. }
  1125. spin_unlock_irqrestore(&info->lock, flags);
  1126. info->blocked_open++;
  1127. up(&state->count_sem);
  1128. while (1) {
  1129. spin_lock_irqsave(&info->lock, flags);
  1130. if (!(info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1131.     (tty->termios->c_cflag & CBAUD)) {
  1132. info->mctrl |= TIOCM_DTR | TIOCM_RTS;
  1133. info->ops->set_mctrl(info->port, info->mctrl);
  1134. }
  1135. spin_unlock_irqrestore(&info->lock, flags);
  1136. set_current_state(TASK_INTERRUPTIBLE);
  1137. if (tty_hung_up_p(filp) ||
  1138.     !(info->flags & ASYNC_INITIALIZED)) {
  1139. if (info->flags & ASYNC_HUP_NOTIFY)
  1140. retval = -EAGAIN;
  1141. else
  1142. retval = -ERESTARTSYS;
  1143. break;
  1144. }
  1145. if (!(info->flags & ASYNC_CALLOUT_ACTIVE) &&
  1146.     !(info->flags & ASYNC_CLOSING) &&
  1147.     (do_clocal ||
  1148.      (info->ops->get_mctrl(info->port) & TIOCM_CAR)))
  1149. break;
  1150. if (signal_pending(current)) {
  1151. retval = -ERESTARTSYS;
  1152. break;
  1153. }
  1154. schedule();
  1155. }
  1156. set_current_state(TASK_RUNNING);
  1157. remove_wait_queue(&info->open_wait, &wait);
  1158. down(&state->count_sem);
  1159. if (extra_count)
  1160. state->count++;
  1161. info->blocked_open--;
  1162. up(&state->count_sem);
  1163. if (retval)
  1164. return retval;
  1165. info->flags |= ASYNC_NORMAL_ACTIVE;
  1166. return 0;
  1167. }
  1168. static struct uart_info *uart_get(struct uart_driver *drv, int line)
  1169. {
  1170. struct uart_state *state = drv->state + line;
  1171. struct uart_info *info;
  1172. down(&state->count_sem);
  1173. state->count++;
  1174. if (state->info)
  1175. goto out;
  1176. info = kmalloc(sizeof(struct uart_info), GFP_KERNEL);
  1177. if (info) {
  1178. memset(info, 0, sizeof(struct uart_info));
  1179. init_waitqueue_head(&info->open_wait);
  1180. init_waitqueue_head(&info->close_wait);
  1181. init_waitqueue_head(&info->delta_msr_wait);
  1182. info->port  = state->port;
  1183. info->flags = info->port->flags;
  1184. info->ops   = info->port->ops;
  1185. info->state = state;
  1186. tasklet_init(&info->tlet, uart_tasklet_action,
  1187.      (unsigned long)info);
  1188. }
  1189. if (state->info)
  1190. kfree(info);
  1191. else
  1192. state->info = info;
  1193. out:
  1194. up(&state->count_sem);
  1195. return state->info;
  1196. }
  1197. /*
  1198.  * Make sure we have the temporary buffer allocated.  Note
  1199.  * that we set retval appropriately above, and we rely on
  1200.  * this.
  1201.  */
  1202. static inline int uart_alloc_tmpbuf(void)
  1203. {
  1204. if (!tmp_buf) {
  1205. unsigned long buf = get_zeroed_page(GFP_KERNEL);
  1206. if (!tmp_buf) {
  1207. if (buf)
  1208. tmp_buf = (u_char *)buf;
  1209. else
  1210. return -ENOMEM;
  1211. } else
  1212. free_page(buf);
  1213. }
  1214. return 0;
  1215. }
  1216. /*
  1217.  * In 2.4.5, calls to uart_open are serialised by the BKL in
  1218.  *   linux/fs/devices.c:chrdev_open()
  1219.  * Note that if this fails, then uart_close() _will_ be called.
  1220.  */
  1221. static int uart_open(struct tty_struct *tty, struct file *filp)
  1222. {
  1223. struct uart_driver *drv = (struct uart_driver *)tty->driver.driver_state;
  1224. struct uart_info *info;
  1225. int retval, line = MINOR(tty->device) - tty->driver.minor_start;
  1226. #ifdef DEBUG
  1227. printk("uart_open(%d) calledn", line);
  1228. #endif
  1229. retval = -ENODEV;
  1230. if (line >= tty->driver.num)
  1231. goto fail;
  1232. if (!try_inc_mod_count(drv->owner))
  1233. goto fail;
  1234. info = uart_get(drv, line);
  1235. retval = -ENOMEM;
  1236. if (!info)
  1237. goto out;
  1238. /*
  1239.  * Set the tty driver_data.  If we fail from this point on,
  1240.  * the generic tty layer will cause uart_close(), which will
  1241.  * decrement the module use count.
  1242.  */
  1243. tty->driver_data = info;
  1244. info->tty = tty;
  1245. info->tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
  1246. if (uart_alloc_tmpbuf())
  1247. goto fail;
  1248. /*
  1249.  * If the port is in the middle of closing, bail out now.
  1250.  */
  1251. if (tty_hung_up_p(filp) ||
  1252.     (info->flags & ASYNC_CLOSING)) {
  1253. if (info->flags & ASYNC_CLOSING)
  1254. interruptible_sleep_on(&info->close_wait);
  1255. retval = (info->flags & ASYNC_HUP_NOTIFY) ?
  1256. -EAGAIN : -ERESTARTSYS;
  1257. goto fail;
  1258. }
  1259. /*
  1260.  * Make sure the device is in D0 state.
  1261.  */
  1262. if (info->state->count == 1)
  1263. #ifdef CONFIG_PM
  1264. pm_send(info->state->pm, PM_RESUME, (void *)0);
  1265. #else
  1266. if (info->ops->pm)
  1267. info->ops->pm(info->port, 0, 3);
  1268. #endif
  1269. /*
  1270.  * Start up the serial port
  1271.  */
  1272. retval = uart_startup(info);
  1273. if (retval)
  1274. goto fail;
  1275. retval = uart_block_til_ready(tty, filp, info);
  1276. if (retval)
  1277. goto fail;
  1278. if (info->state->count == 1) {
  1279. int changed_termios = 0;
  1280. if (info->flags & ASYNC_SPLIT_TERMIOS) {
  1281. if (tty->driver.subtype == SERIAL_TYPE_NORMAL)
  1282. *tty->termios = info->state->normal_termios;
  1283. else
  1284. *tty->termios = info->state->callout_termios;
  1285. changed_termios = 1;
  1286. }
  1287. #ifdef CONFIG_SERIAL_CORE_CONSOLE
  1288. /*
  1289.  * Copy across the serial console cflag setting
  1290.  */
  1291. {
  1292. struct console *c = drv->cons;
  1293. if (c && c->cflag && c->index == line) {
  1294. tty->termios->c_cflag = c->cflag;
  1295. c->cflag = 0;
  1296. changed_termios = 1;
  1297. }
  1298. }
  1299. #endif
  1300. if (changed_termios)
  1301. uart_change_speed(info, NULL);
  1302. }
  1303. info->session = current->session;
  1304. info->pgrp = current->pgrp;
  1305. return 0;
  1306. out:
  1307. if (drv->owner)
  1308. __MOD_DEC_USE_COUNT(drv->owner);
  1309. fail:
  1310. return retval;
  1311. }
  1312. #ifdef CONFIG_PROC_FS
  1313. static const char *uart_type(struct uart_port *port)
  1314. {
  1315. const char *str = NULL;
  1316. if (port->ops->type)
  1317. str = port->ops->type(port);
  1318. if (!str)
  1319. str = "unknown";
  1320. return str;
  1321. }
  1322. static int uart_line_info(char *buf, struct uart_driver *drv, int i)
  1323. {
  1324. struct uart_state *state = drv->state + i;
  1325. struct uart_port *port = state->port;
  1326. char stat_buf[32];
  1327. u_int status;
  1328. int ret;
  1329. ret = sprintf(buf, "%d: uart:%s port:%08X irq:%d",
  1330. port->line, uart_type(port),
  1331. port->iobase, port->irq);
  1332. if (port->type == PORT_UNKNOWN) {
  1333. strcat(buf, "n");
  1334. return ret + 1;
  1335. }
  1336. status = port->ops->get_mctrl(port);
  1337. ret += sprintf(buf + ret, " tx:%d rx:%d",
  1338. port->icount.tx, port->icount.rx);
  1339. if (port->icount.frame)
  1340. ret += sprintf(buf + ret, " fe:%d",
  1341. port->icount.frame);
  1342. if (port->icount.parity)
  1343. ret += sprintf(buf + ret, " pe:%d",
  1344. port->icount.parity);
  1345. if (port->icount.brk)
  1346. ret += sprintf(buf + ret, " brk:%d",
  1347. port->icount.brk);
  1348. if (port->icount.overrun)
  1349. ret += sprintf(buf + ret, " oe:%d",
  1350. port->icount.overrun);
  1351. #define INFOBIT(bit,str) 
  1352. if (state->info && state->info->mctrl & (bit)) 
  1353. strcat(stat_buf, (str))
  1354. #define STATBIT(bit,str) 
  1355. if (status & (bit)) 
  1356. strcat(stat_buf, (str))
  1357. stat_buf[0] = '';
  1358. stat_buf[1] = '';
  1359. INFOBIT(TIOCM_RTS, "|RTS");
  1360. STATBIT(TIOCM_CTS, "|CTS");
  1361. INFOBIT(TIOCM_DTR, "|DTR");
  1362. STATBIT(TIOCM_DSR, "|DSR");
  1363. STATBIT(TIOCM_CAR, "|CD");
  1364. STATBIT(TIOCM_RNG, "|RI");
  1365. if (stat_buf[0])
  1366. stat_buf[0] = ' ';
  1367. strcat(stat_buf, "n");
  1368. ret += sprintf(buf + ret, stat_buf);
  1369. return ret;
  1370. }
  1371. static int uart_read_proc(char *page, char **start, off_t off,
  1372.   int count, int *eof, void *data)
  1373. {
  1374. struct tty_driver *ttydrv = data;
  1375. struct uart_driver *drv = ttydrv->driver_state;
  1376. int i, len = 0, l;
  1377. off_t begin = 0;
  1378. len += sprintf(page, "serinfo:1.0 driver%s%s revision:%sn",
  1379. "", "", "");
  1380. for (i = 0; i < drv->nr && len < PAGE_SIZE - 96; i++) {
  1381. l = uart_line_info(page + len, drv, i);
  1382. len += l;
  1383. if (len + begin > off + count)
  1384. goto done;
  1385. if (len + begin < off) {
  1386. begin += len;
  1387. len = 0;
  1388. }
  1389. }
  1390. *eof = 1;
  1391. done:
  1392. if (off >= len + begin)
  1393. return 0;
  1394. *start = page + (off - begin);
  1395. return (count < begin + len - off) ? count : (begin + len - off);
  1396. }
  1397. #endif
  1398. #ifdef CONFIG_SERIAL_CORE_CONSOLE
  1399. /*
  1400.  * Check whether an invalid uart number has been specified, and
  1401.  * if so, search for the first available port that does have
  1402.  * console support.
  1403.  */
  1404. struct uart_port * __init
  1405. uart_get_console(struct uart_port *ports, int nr, struct console *co)
  1406. {
  1407. int idx = co->index;
  1408. if (idx < 0 || idx >= nr || (ports[idx].iobase == 0 &&
  1409.      ports[idx].membase == NULL))
  1410. for (idx = 0; idx < nr; idx++)
  1411. if (ports[idx].iobase != 0 ||
  1412.     ports[idx].membase != NULL)
  1413. break;
  1414. co->index = idx;
  1415. return ports + idx;
  1416. }
  1417. /**
  1418.  * uart_parse_options - Parse serial port baud/parity/bits/flow contro.
  1419.  * @options: pointer to option string
  1420.  * @baud: pointer to an 'int' variable for the baud rate.
  1421.  * @parity: pointer to an 'int' variable for the parity.
  1422.  * @bits: pointer to an 'int' variable for the number of data bits.
  1423.  * @flow: pointer to an 'int' variable for the flow control character.
  1424.  *
  1425.  * uart_parse_options decodes a string containing the serial console
  1426.  * options.  The format of the string is <baud><parity><bits><flow>,
  1427.  * eg: 115200n8r
  1428.  */
  1429. void __init
  1430. uart_parse_options(char *options, int *baud, int *parity, int *bits, int *flow)
  1431. {
  1432. char *s = options;
  1433. *baud = simple_strtoul(s, NULL, 10);
  1434. while (*s >= '0' && *s <= '9')
  1435. s++;
  1436. if (*s)
  1437. *parity = *s++;
  1438. if (*s)
  1439. *bits = *s++ - '0';
  1440. if (*s)
  1441. *flow = *s;
  1442. }
  1443. /**
  1444.  * uart_set_options - setup the serial console parameters
  1445.  * @port: pointer to the serial ports uart_port structure
  1446.  * @co: console pointer
  1447.  * @baud: baud rate
  1448.  * @parity: parity character - 'n' (none), 'o' (odd), 'e' (even)
  1449.  * @bits: number of data bits
  1450.  * @flow: flow control character - 'r' (rts)
  1451.  */
  1452. int __init
  1453. uart_set_options(struct uart_port *port, struct console *co,
  1454.  int baud, int parity, int bits, int flow)
  1455. {
  1456. u_int cflag = CREAD | HUPCL | CLOCAL;
  1457. u_int quot;
  1458. /*
  1459.  * Construct a cflag setting.
  1460.  */
  1461. switch (baud) {
  1462. case 1200: cflag |= B1200; break;
  1463. case 2400: cflag |= B2400; break;
  1464. case 4800: cflag |= B4800; break;
  1465. case 9600: cflag |= B9600; break;
  1466. case 19200: cflag |= B19200; break;
  1467. default: cflag |= B38400;  baud = 38400; break;
  1468. case 57600: cflag |= B57600; break;
  1469. case 115200: cflag |= B115200; break;
  1470. case 230400: cflag |= B230400; break;
  1471. case 460800: cflag |= B460800; break;
  1472. }
  1473. if (bits == 7)
  1474. cflag |= CS7;
  1475. else
  1476. cflag |= CS8;
  1477. switch (parity) {
  1478. case 'o': case 'O':
  1479. cflag |= PARODD;
  1480. /*fall through*/
  1481. case 'e': case 'E':
  1482. cflag |= PARENB;
  1483. break;
  1484. }
  1485. co->cflag = cflag;
  1486. quot = (port->uartclk / (16 * baud));
  1487. port->ops->change_speed(port, cflag, 0, quot);
  1488. return 0;
  1489. }
  1490. extern void ambauart_console_init(void);
  1491. extern void anakin_console_init(void);
  1492. extern void clps711xuart_console_init(void);
  1493. extern void rs285_console_init(void);
  1494. extern void sa1100_rs_console_init(void);
  1495. extern void serial8250_console_init(void);
  1496. extern void s3c2400_console_init(void);
  1497. extern void s3c2410_console_init(void);
  1498. /*
  1499.  * Central "initialise all serial consoles" container.  Needs to be killed.
  1500.  */
  1501. void __init uart_console_init(void)
  1502. {
  1503. #ifdef CONFIG_SERIAL_AMBA_CONSOLE
  1504. ambauart_console_init();
  1505. #endif
  1506. #ifdef CONFIG_SERIAL_ANAKIN_CONSOLE
  1507. anakin_console_init();
  1508. #endif
  1509. #ifdef CONFIG_SERIAL_CLPS711X_CONSOLE
  1510. clps711xuart_console_init();
  1511. #endif
  1512. #ifdef CONFIG_SERIAL_21285_CONSOLE
  1513. rs285_console_init();
  1514. #endif
  1515. #ifdef CONFIG_SERIAL_SA1100_CONSOLE
  1516. sa1100_rs_console_init();
  1517. #endif
  1518. #ifdef CONFIG_SERIAL_8250_CONSOLE
  1519. serial8250_console_init();
  1520. #endif
  1521. #ifdef CONFIG_SERIAL_UART00_CONSOLE
  1522. uart00_console_init();
  1523. #endif
  1524. #ifdef CONFIG_SERIAL_S3C2400_CONSOLE
  1525. s3c2400_console_init();
  1526. #endif
  1527. #ifdef CONFIG_SERIAL_S3C2410_CONSOLE
  1528. s3c2410_console_init();
  1529. #endif
  1530. }
  1531. #endif /* CONFIG_SERIAL_CORE_CONSOLE */
  1532. #ifdef CONFIG_PM
  1533. /*
  1534.  *  Serial port power management.
  1535.  *
  1536.  * This is pretty coarse at the moment - either all on or all off.  We
  1537.  * should probably some day do finer power management here some day.
  1538.  *
  1539.  * We don't actually save any state; the serial driver has enough
  1540.  * state held internally to re-setup the port when we come out of D3.
  1541.  */
  1542. static int uart_pm_set_state(struct uart_state *state, int pm_state, int oldstate)
  1543. {
  1544. struct uart_port *port = state->port;
  1545. struct uart_ops *ops = port->ops;
  1546. int running = state->info &&
  1547.       state->info->flags & ASYNC_INITIALIZED;
  1548. if (port->type == PORT_UNKNOWN)
  1549. return 0;
  1550. //printk("pm: %08x: %d -> %d, %srunningn", port->iobase, dev->state, pm_state, running ? "" : "not ");
  1551. if (pm_state == 0) {
  1552. if (ops->pm)
  1553. ops->pm(port, pm_state, oldstate);
  1554. if (running) {
  1555. ops->set_mctrl(port, 0);
  1556. ops->startup(port, state->info);
  1557. uart_change_speed(state->info, NULL);
  1558. ops->set_mctrl(port, state->info->mctrl);
  1559. ops->start_tx(port, 1, 0);
  1560. }
  1561. /*
  1562.  * Re-enable the console device after suspending.
  1563.  */
  1564. if (state->cons && state->cons->index == port->line)
  1565. state->cons->flags |= CON_ENABLED;
  1566. } else if (pm_state == 1) {
  1567. if (ops->pm)
  1568. ops->pm(port, pm_state, oldstate);
  1569. } else {
  1570. /*
  1571.  * Disable the console device before suspending.
  1572.  */
  1573. if (state->cons && state->cons->index == port->line)
  1574. state->cons->flags &= ~CON_ENABLED;
  1575. if (running) {
  1576. ops->stop_tx(port, 0);
  1577. ops->set_mctrl(port, 0);
  1578. ops->stop_rx(port);
  1579. ops->shutdown(port, state->info);
  1580. }
  1581. if (ops->pm)
  1582. ops->pm(port, pm_state, oldstate);
  1583. }
  1584. return 0;
  1585. }
  1586. /*
  1587.  *  Wakeup support.
  1588.  */
  1589. static int uart_pm_set_wakeup(struct uart_state *state, int data)
  1590. {
  1591. int err = 0;
  1592. if (state->port->ops->set_wake)
  1593. err = state->port->ops->set_wake(state->port, data);
  1594. return err;
  1595. }
  1596. static int uart_pm(struct pm_dev *dev, pm_request_t rqst, void *data)
  1597. {
  1598. struct uart_state *state = dev->data;
  1599. int err = 0;
  1600. switch (rqst) {
  1601. case PM_SUSPEND:
  1602. case PM_RESUME:
  1603. err = uart_pm_set_state(state, (int)data, dev->state);
  1604. break;
  1605. case PM_SET_WAKEUP:
  1606. err = uart_pm_set_wakeup(state, (int)data);
  1607. break;
  1608. }
  1609. return err;
  1610. }
  1611. #endif
  1612. static inline void
  1613. uart_report_port(struct uart_driver *drv, struct uart_port *port)
  1614. {
  1615. printk("%s%d at ", drv->normal_name, port->line);
  1616. switch (port->iotype) {
  1617. case SERIAL_IO_PORT:
  1618. printk("I/O 0x%x", port->iobase);
  1619. break;
  1620. case SERIAL_IO_HUB6:
  1621. printk("I/O 0x%x offset 0x%x", port->iobase, port->hub6);
  1622. break;
  1623. case SERIAL_IO_MEM:
  1624. printk("MEM 0x%lx", port->mapbase);
  1625. break;
  1626. }
  1627. printk(" (irq = %d) is a %sn", port->irq, uart_type(port));
  1628. }
  1629. static void
  1630. uart_setup_port(struct uart_driver *drv, struct uart_state *state)
  1631. {
  1632. struct uart_port *port = state->port;
  1633. int flags = UART_CONFIG_TYPE;
  1634. init_MUTEX(&state->count_sem);
  1635. state->close_delay = 5 * HZ / 10;
  1636. state->closing_wait = 30 * HZ;
  1637. port->type = PORT_UNKNOWN;
  1638. #ifdef CONFIG_PM
  1639. state->cons = drv->cons;
  1640. state->pm = pm_register(PM_SYS_DEV, PM_SYS_COM, uart_pm);
  1641. if (state->pm)
  1642. state->pm->data = state;
  1643. #endif
  1644. /*
  1645.  * If there isn't a port here, don't do anything further.
  1646.  */
  1647. if (!port->iobase && !port->mapbase)
  1648. return;
  1649. /*
  1650.  * Now do the auto configuration stuff.  Note that config_port
  1651.  * is expected to claim the resources and map the port for us.
  1652.  */
  1653. if (port->flags & ASYNC_AUTO_IRQ)
  1654. flags |= UART_CONFIG_IRQ;
  1655. if (port->flags & ASYNC_BOOT_AUTOCONF)
  1656. port->ops->config_port(port, flags);
  1657. /*
  1658.  * Only register this port if it is detected.
  1659.  */
  1660. if (port->type != PORT_UNKNOWN) {
  1661. tty_register_devfs(drv->normal_driver, 0, drv->minor +
  1662. state->port->line);
  1663. tty_register_devfs(drv->callout_driver, 0, drv->minor +
  1664. state->port->line);
  1665. uart_report_port(drv, port);
  1666. }
  1667. #ifdef CONFIG_PM
  1668. /*
  1669.  * Power down all ports by default, except the console if we have one.
  1670.  */
  1671. if (state->pm && (!drv->cons || port->line != drv->cons->index))
  1672. pm_send(state->pm, PM_SUSPEND, (void *)3);
  1673. #endif
  1674. }
  1675. /*
  1676.  * Register a set of ports with the core driver.  Note that we don't
  1677.  * printk any information about the ports; that is up to the low level
  1678.  * driver to do if they so wish.
  1679.  */
  1680. int uart_register_driver(struct uart_driver *drv)
  1681. {
  1682. struct tty_driver *normal, *callout;
  1683. int i, retval;
  1684. if (drv->state)
  1685. panic("drv->state already allocatedn");
  1686. /*
  1687.  * Maybe we should be using a slab cache for this, especially if
  1688.  * we have a large number of ports to handle.  Note that we also
  1689.  * allocate space for an integer for reference counting.
  1690.  */
  1691. drv->state = kmalloc(sizeof(struct uart_state) * drv->nr +
  1692.      sizeof(int), GFP_KERNEL);
  1693. retval = -ENOMEM;
  1694. if (!drv->state)
  1695. goto out;
  1696. memset(drv->state, 0, sizeof(struct uart_state) * drv->nr +
  1697. sizeof(int));
  1698. normal  = drv->normal_driver;
  1699. callout = drv->callout_driver;
  1700. normal->magic = TTY_DRIVER_MAGIC;
  1701. normal->driver_name = drv->normal_name;
  1702. normal->name = drv->normal_name;
  1703. normal->major = drv->normal_major;
  1704. normal->minor_start = drv->minor;
  1705. normal->num = drv->nr;
  1706. normal->type = TTY_DRIVER_TYPE_SERIAL;
  1707. normal->subtype = SERIAL_TYPE_NORMAL;
  1708. normal->init_termios = tty_std_termios;
  1709. normal->init_termios.c_cflag = B38400 | CS8 | CREAD | HUPCL | CLOCAL;
  1710. normal->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS;
  1711. normal->refcount = (int *)(drv->state + drv->nr);
  1712. normal->table = drv->table;
  1713. normal->termios = drv->termios;
  1714. normal->termios_locked = drv->termios_locked;
  1715. normal->driver_state    = drv;
  1716. normal->open = uart_open;
  1717. normal->close = uart_close;
  1718. normal->write = uart_write;
  1719. normal->put_char = uart_put_char;
  1720. normal->flush_chars = uart_flush_chars;
  1721. normal->write_room = uart_write_room;
  1722. normal->chars_in_buffer = uart_chars_in_buffer;
  1723. normal->flush_buffer = uart_flush_buffer;
  1724. normal->ioctl = uart_ioctl;
  1725. normal->throttle = uart_throttle;
  1726. normal->unthrottle = uart_unthrottle;
  1727. normal->send_xchar = uart_send_xchar;
  1728. normal->set_termios = uart_set_termios;
  1729. normal->stop = uart_stop;
  1730. normal->start = uart_start;
  1731. normal->hangup = uart_hangup;
  1732. normal->break_ctl = uart_break_ctl;
  1733. normal->wait_until_sent = uart_wait_until_sent;
  1734. #ifdef CONFIG_PROC_FS
  1735. normal->read_proc = uart_read_proc;
  1736. #endif
  1737. /*
  1738.  * The callout device is just like the normal device except for
  1739.  * the major number and the subtype code.
  1740.  */
  1741. *callout = *normal;
  1742. callout->name = drv->callout_name;
  1743. callout->major = drv->callout_major;
  1744. callout->subtype = SERIAL_TYPE_CALLOUT;
  1745. callout->read_proc = NULL;
  1746. callout->proc_entry = NULL;
  1747. for (i = 0; i < drv->nr; i++) {
  1748. struct uart_state *state = drv->state + i;
  1749. state->callout_termios = callout->init_termios;
  1750. state->normal_termios = normal->init_termios;
  1751. state->port = drv->port + i;
  1752. state->port->line = i;
  1753. uart_setup_port(drv, state);
  1754. }
  1755. retval = tty_register_driver(normal);
  1756. if (retval)
  1757. goto out;
  1758. retval = tty_register_driver(callout);
  1759. if (retval)
  1760. tty_unregister_driver(normal);
  1761. out:
  1762. if (retval && drv->state)
  1763. kfree(drv->state);
  1764. return retval;
  1765. }
  1766. void uart_unregister_driver(struct uart_driver *drv)
  1767. {
  1768. int i;
  1769. for (i = 0; i < drv->nr; i++) {
  1770. struct uart_state *state = drv->state + i;
  1771. if (state->info && state->info->tty)
  1772. tty_hangup(state->info->tty);
  1773. pm_unregister(state->pm);
  1774. if (state->port->type != PORT_UNKNOWN)
  1775. state->port->ops->release_port(state->port);
  1776. if (state->info) {
  1777. tasklet_kill(&state->info->tlet);
  1778. kfree(state->info);
  1779. }
  1780. }
  1781. tty_unregister_driver(drv->normal_driver);
  1782. tty_unregister_driver(drv->callout_driver);
  1783. kfree(drv->state);
  1784. }
  1785. static int uart_match_port(struct uart_port *port1, struct uart_port *port2)
  1786. {
  1787. if (port1->iotype != port2->iotype)
  1788. return 0;
  1789. switch (port1->iotype) {
  1790. case SERIAL_IO_PORT: return (port1->iobase == port2->iobase);
  1791. case SERIAL_IO_MEM: return (port1->membase == port2->membase);
  1792. }
  1793. return 0;
  1794. }
  1795. /**
  1796.  * uart_register_port: register a port with the generic uart driver
  1797.  * @reg: pointer to the uart low level driver structure for this port
  1798.  * @port: uart port structure describing the port
  1799.  *
  1800.  * Register a UART with the specified low level driver.  Detect the
  1801.  * type of the port if ASYNC_BOOT_AUTOCONF is set, and detect the IRQ
  1802.  * if ASYNC_AUTO_IRQ is set.
  1803.  *
  1804.  * Returns negative error, or positive line number.
  1805.  */
  1806. int uart_register_port(struct uart_driver *drv, struct uart_port *port)
  1807. {
  1808. struct uart_state *state = NULL;
  1809. int i, flags = UART_CONFIG_TYPE;
  1810. /*
  1811.  * First, find a port entry which matches.  Note: if we do
  1812.  * find a matching entry, and it has a non-zero use count,
  1813.  * then we can't register the port.
  1814.  */
  1815. down(&port_sem);
  1816. for (i = 0; i < drv->nr; i++) {
  1817. if (uart_match_port(drv->state[i].port, port)) {
  1818. down(&drv->state[i].count_sem);
  1819. state = &drv->state[i];
  1820. break;
  1821. }
  1822. }
  1823. /*
  1824.  * If we didn't find a matching entry, look for the first
  1825.  * free entry.  We look for one which hasn't been previously
  1826.  * used (indicated by zero iobase).
  1827.  */
  1828. if (!state) {
  1829. for (i = 0; i < drv->nr; i++) {
  1830. if (drv->state[i].port->type == PORT_UNKNOWN &&
  1831.     drv->state[i].port->iobase == 0) {
  1832. down(&drv->state[i].count_sem);
  1833. if (drv->state[i].count == 0) {
  1834. state = &drv->state[i];
  1835. break;
  1836. }
  1837. }
  1838. }
  1839. }
  1840. /*
  1841.  * Ok, that also failed.  Find the first unused entry, which
  1842.  * may be previously in use.
  1843.  */
  1844. if (!state) {
  1845. for (i = 0; i < drv->nr; i++) {
  1846. if (drv->state[i].port->type == PORT_UNKNOWN) {
  1847. down(&drv->state[i].count_sem);
  1848. if (drv->state[i].count == 0) {
  1849. state = &drv->state[i];
  1850. break;
  1851. }
  1852. }
  1853. }
  1854. }
  1855. up(&port_sem);
  1856. if (!state)
  1857. return -ENOSPC;
  1858. /*
  1859.  * If we find a port that matches this one, and it appears to
  1860.  * be in-use (even if it doesn't have a type) we shouldn't alter
  1861.  * it underneath itself - the port may be open and trying to do
  1862.  * useful work.
  1863.  */
  1864. if (state->count != 0 ||
  1865.     (state->info && state->info->blocked_open != 0)) {
  1866. up(&state->count_sem);
  1867. return -EBUSY;
  1868. }
  1869. /*
  1870.  * We're holding the lock for this port.  Copy the relevant data
  1871.  * into the port structure.
  1872.  */
  1873. state->port->iobase   = port->iobase;
  1874. state->port->membase  = port->membase;
  1875. state->port->irq      = port->irq;
  1876. state->port->uartclk  = port->uartclk;
  1877. state->port->fifosize = port->fifosize;
  1878. state->port->regshift = port->regshift;
  1879. state->port->iotype   = port->iotype;
  1880. state->port->flags    = port->flags;
  1881. #if 0 //def CONFIG_PM
  1882. /* we have already registered the power management handlers */
  1883. state->pm = pm_register(PM_SYS_DEV, PM_SYS_COM, uart_pm);
  1884. if (state->pm) {
  1885. state->pm->data = state;
  1886. /*
  1887.  * Power down all ports by default, except
  1888.  * the console if we have one.
  1889.  */
  1890. if (!drv->cons || state->port->line != drv->cons->index)
  1891. pm_send(state->pm, PM_SUSPEND, (void *)3);
  1892. }
  1893. #endif
  1894. if (state->port->flags & ASYNC_AUTO_IRQ)
  1895. flags |= UART_CONFIG_IRQ;
  1896. if (state->port->flags & ASYNC_BOOT_AUTOCONF)
  1897. state->port->ops->config_port(state->port, flags);
  1898. tty_register_devfs(drv->normal_driver, 0, drv->minor +
  1899. state->port->line);
  1900. tty_register_devfs(drv->callout_driver, 0, drv->minor +
  1901. state->port->line);
  1902. uart_report_port(drv, state->port);
  1903. up(&state->count_sem);
  1904. return i;
  1905. }
  1906. /*
  1907.  * Unregister the specified port index on the specified driver.
  1908.  */
  1909. void uart_unregister_port(struct uart_driver *drv, int line)
  1910. {
  1911. struct uart_state *state;
  1912. if (line < 0 || line >= drv->nr) {
  1913. printk(KERN_ERR "Attempt to unregister %s%dn",
  1914. drv->normal_name, line);
  1915. return;
  1916. }
  1917. state = drv->state + line;
  1918. down(&state->count_sem);
  1919. /*
  1920.  * The port has already gone.  We have to hang up the line
  1921.  * to kill all usage of this port.
  1922.  */
  1923. if (state->info && state->info->tty)
  1924. tty_hangup(state->info->tty);
  1925. /*
  1926.  * Free the ports resources, if any.
  1927.  */
  1928. state->port->ops->release_port(state->port);
  1929. /*
  1930.  * Indicate that there isn't a port here anymore.
  1931.  */
  1932. state->port->type = PORT_UNKNOWN;
  1933. #if 0 // not yet
  1934. /*
  1935.  * No point in doing power management for hardware that
  1936.  * isn't present.
  1937.  */
  1938. pm_unregister(state->pm);
  1939. #endif
  1940. /*
  1941.  * Remove the devices from devfs
  1942.  */
  1943. tty_unregister_devfs(drv->normal_driver, drv->minor + line);
  1944. tty_unregister_devfs(drv->callout_driver, drv->minor + line);
  1945. up(&state->count_sem);
  1946. }
  1947. EXPORT_SYMBOL(uart_event);
  1948. EXPORT_SYMBOL(uart_register_driver);
  1949. EXPORT_SYMBOL(uart_unregister_driver);
  1950. EXPORT_SYMBOL(uart_register_port);
  1951. EXPORT_SYMBOL(uart_unregister_port);
  1952. static int __init uart_init(void)
  1953. {
  1954. return 0;
  1955. }
  1956. static void __exit uart_exit(void)
  1957. {
  1958. free_page((unsigned long)tmp_buf);
  1959. tmp_buf = NULL;
  1960. }
  1961. module_init(uart_init);
  1962. module_exit(uart_exit);
  1963. MODULE_DESCRIPTION("Serial driver core");
  1964. MODULE_LICENSE("GPL");