Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
serial_core.c
Go to the documentation of this file.
1 /*
2  * Driver core for serial ports
3  *
4  * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
5  *
6  * Copyright 1999 ARM Limited
7  * Copyright (C) 2000-2001 Deep Blue Solutions Ltd.
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22  */
23 #include <linux/module.h>
24 #include <linux/tty.h>
25 #include <linux/tty_flip.h>
26 #include <linux/slab.h>
27 #include <linux/init.h>
28 #include <linux/console.h>
29 #include <linux/proc_fs.h>
30 #include <linux/seq_file.h>
31 #include <linux/device.h>
32 #include <linux/serial.h> /* for serial_state and serial_icounter_struct */
33 #include <linux/serial_core.h>
34 #include <linux/delay.h>
35 #include <linux/mutex.h>
36 
37 #include <asm/irq.h>
38 #include <asm/uaccess.h>
39 
40 /*
41  * This is used to lock changes in serial line configuration.
42  */
43 static DEFINE_MUTEX(port_mutex);
44 
45 /*
46  * lockdep: port->lock is initialized in two places, but we
47  * want only one lock-class:
48  */
49 static struct lock_class_key port_lock_key;
50 
51 #define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8)
52 
53 #ifdef CONFIG_SERIAL_CORE_CONSOLE
54 #define uart_console(port) ((port)->cons && (port)->cons->index == (port)->line)
55 #else
56 #define uart_console(port) (0)
57 #endif
58 
59 static void uart_change_speed(struct tty_struct *tty, struct uart_state *state,
60  struct ktermios *old_termios);
61 static void uart_wait_until_sent(struct tty_struct *tty, int timeout);
62 static void uart_change_pm(struct uart_state *state, int pm_state);
63 
64 static void uart_port_shutdown(struct tty_port *port);
65 
66 /*
67  * This routine is used by the interrupt handler to schedule processing in
68  * the software interrupt portion of the driver.
69  */
71 {
72  struct uart_state *state = port->state;
73  /*
74  * This means you called this function _after_ the port was
75  * closed. No cookie for you.
76  */
77  BUG_ON(!state);
78  tty_wakeup(state->port.tty);
79 }
80 
81 static void uart_stop(struct tty_struct *tty)
82 {
83  struct uart_state *state = tty->driver_data;
84  struct uart_port *port = state->uart_port;
85  unsigned long flags;
86 
87  spin_lock_irqsave(&port->lock, flags);
88  port->ops->stop_tx(port);
89  spin_unlock_irqrestore(&port->lock, flags);
90 }
91 
92 static void __uart_start(struct tty_struct *tty)
93 {
94  struct uart_state *state = tty->driver_data;
95  struct uart_port *port = state->uart_port;
96 
97  if (!uart_circ_empty(&state->xmit) && state->xmit.buf &&
98  !tty->stopped && !tty->hw_stopped)
99  port->ops->start_tx(port);
100 }
101 
102 static void uart_start(struct tty_struct *tty)
103 {
104  struct uart_state *state = tty->driver_data;
105  struct uart_port *port = state->uart_port;
106  unsigned long flags;
107 
108  spin_lock_irqsave(&port->lock, flags);
109  __uart_start(tty);
110  spin_unlock_irqrestore(&port->lock, flags);
111 }
112 
113 static inline void
114 uart_update_mctrl(struct uart_port *port, unsigned int set, unsigned int clear)
115 {
116  unsigned long flags;
117  unsigned int old;
118 
119  spin_lock_irqsave(&port->lock, flags);
120  old = port->mctrl;
121  port->mctrl = (old & ~clear) | set;
122  if (old != port->mctrl)
123  port->ops->set_mctrl(port, port->mctrl);
124  spin_unlock_irqrestore(&port->lock, flags);
125 }
126 
127 #define uart_set_mctrl(port, set) uart_update_mctrl(port, set, 0)
128 #define uart_clear_mctrl(port, clear) uart_update_mctrl(port, 0, clear)
129 
130 /*
131  * Startup the port. This will be called once per open. All calls
132  * will be serialised by the per-port mutex.
133  */
134 static int uart_port_startup(struct tty_struct *tty, struct uart_state *state,
135  int init_hw)
136 {
137  struct uart_port *uport = state->uart_port;
138  struct tty_port *port = &state->port;
139  unsigned long page;
140  int retval = 0;
141 
142  if (uport->type == PORT_UNKNOWN)
143  return 1;
144 
145  /*
146  * Initialise and allocate the transmit and temporary
147  * buffer.
148  */
149  if (!state->xmit.buf) {
150  /* This is protected by the per port mutex */
151  page = get_zeroed_page(GFP_KERNEL);
152  if (!page)
153  return -ENOMEM;
154 
155  state->xmit.buf = (unsigned char *) page;
156  uart_circ_clear(&state->xmit);
157  }
158 
159  retval = uport->ops->startup(uport);
160  if (retval == 0) {
161  if (uart_console(uport) && uport->cons->cflag) {
162  tty->termios.c_cflag = uport->cons->cflag;
163  uport->cons->cflag = 0;
164  }
165  /*
166  * Initialise the hardware port settings.
167  */
168  uart_change_speed(tty, state, NULL);
169 
170  if (init_hw) {
171  /*
172  * Setup the RTS and DTR signals once the
173  * port is open and ready to respond.
174  */
175  if (tty->termios.c_cflag & CBAUD)
177  }
178 
179  if (tty_port_cts_enabled(port)) {
180  spin_lock_irq(&uport->lock);
181  if (!(uport->ops->get_mctrl(uport) & TIOCM_CTS))
182  tty->hw_stopped = 1;
183  spin_unlock_irq(&uport->lock);
184  }
185  }
186 
187  /*
188  * This is to allow setserial on this port. People may want to set
189  * port/irq/type and then reconfigure the port properly if it failed
190  * now.
191  */
192  if (retval && capable(CAP_SYS_ADMIN))
193  return 1;
194 
195  return retval;
196 }
197 
198 static int uart_startup(struct tty_struct *tty, struct uart_state *state,
199  int init_hw)
200 {
201  struct tty_port *port = &state->port;
202  int retval;
203 
204  if (port->flags & ASYNC_INITIALIZED)
205  return 0;
206 
207  /*
208  * Set the TTY IO error marker - we will only clear this
209  * once we have successfully opened the port.
210  */
211  set_bit(TTY_IO_ERROR, &tty->flags);
212 
213  retval = uart_port_startup(tty, state, init_hw);
214  if (!retval) {
216  clear_bit(TTY_IO_ERROR, &tty->flags);
217  } else if (retval > 0)
218  retval = 0;
219 
220  return retval;
221 }
222 
223 /*
224  * This routine will shutdown a serial port; interrupts are disabled, and
225  * DTR is dropped if the hangup on close termio flag is on. Calls to
226  * uart_shutdown are serialised by the per-port semaphore.
227  */
228 static void uart_shutdown(struct tty_struct *tty, struct uart_state *state)
229 {
230  struct uart_port *uport = state->uart_port;
231  struct tty_port *port = &state->port;
232 
233  /*
234  * Set the TTY IO error marker
235  */
236  if (tty)
237  set_bit(TTY_IO_ERROR, &tty->flags);
238 
240  /*
241  * Turn off DTR and RTS early.
242  */
243  if (!tty || (tty->termios.c_cflag & HUPCL))
245 
246  uart_port_shutdown(port);
247  }
248 
249  /*
250  * It's possible for shutdown to be called after suspend if we get
251  * a DCD drop (hangup) at just the right time. Clear suspended bit so
252  * we don't try to resume a port that has been shutdown.
253  */
255 
256  /*
257  * Free the transmit buffer page.
258  */
259  if (state->xmit.buf) {
260  free_page((unsigned long)state->xmit.buf);
261  state->xmit.buf = NULL;
262  }
263 }
264 
274 void
275 uart_update_timeout(struct uart_port *port, unsigned int cflag,
276  unsigned int baud)
277 {
278  unsigned int bits;
279 
280  /* byte size and parity */
281  switch (cflag & CSIZE) {
282  case CS5:
283  bits = 7;
284  break;
285  case CS6:
286  bits = 8;
287  break;
288  case CS7:
289  bits = 9;
290  break;
291  default:
292  bits = 10;
293  break; /* CS8 */
294  }
295 
296  if (cflag & CSTOPB)
297  bits++;
298  if (cflag & PARENB)
299  bits++;
300 
301  /*
302  * The total number of bits to be transmitted in the fifo.
303  */
304  bits = bits * port->fifosize;
305 
306  /*
307  * Figure the timeout to send the above number of bits.
308  * Add .02 seconds of slop
309  */
310  port->timeout = (HZ * bits) / baud + HZ/50;
311 }
312 
314 
334 unsigned int
336  struct ktermios *old, unsigned int min, unsigned int max)
337 {
338  unsigned int try, baud, altbaud = 38400;
339  int hung_up = 0;
340  upf_t flags = port->flags & UPF_SPD_MASK;
341 
342  if (flags == UPF_SPD_HI)
343  altbaud = 57600;
344  else if (flags == UPF_SPD_VHI)
345  altbaud = 115200;
346  else if (flags == UPF_SPD_SHI)
347  altbaud = 230400;
348  else if (flags == UPF_SPD_WARP)
349  altbaud = 460800;
350 
351  for (try = 0; try < 2; try++) {
352  baud = tty_termios_baud_rate(termios);
353 
354  /*
355  * The spd_hi, spd_vhi, spd_shi, spd_warp kludge...
356  * Die! Die! Die!
357  */
358  if (baud == 38400)
359  baud = altbaud;
360 
361  /*
362  * Special case: B0 rate.
363  */
364  if (baud == 0) {
365  hung_up = 1;
366  baud = 9600;
367  }
368 
369  if (baud >= min && baud <= max)
370  return baud;
371 
372  /*
373  * Oops, the quotient was zero. Try again with
374  * the old baud rate if possible.
375  */
376  termios->c_cflag &= ~CBAUD;
377  if (old) {
378  baud = tty_termios_baud_rate(old);
379  if (!hung_up)
381  baud, baud);
382  old = NULL;
383  continue;
384  }
385 
386  /*
387  * As a last resort, if the range cannot be met then clip to
388  * the nearest chip supported rate.
389  */
390  if (!hung_up) {
391  if (baud <= min)
393  min + 1, min + 1);
394  else
396  max - 1, max - 1);
397  }
398  }
399  /* Should never happen */
400  WARN_ON(1);
401  return 0;
402 }
403 
405 
413 unsigned int
414 uart_get_divisor(struct uart_port *port, unsigned int baud)
415 {
416  unsigned int quot;
417 
418  /*
419  * Old custom speed handling.
420  */
421  if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST)
422  quot = port->custom_divisor;
423  else
424  quot = DIV_ROUND_CLOSEST(port->uartclk, 16 * baud);
425 
426  return quot;
427 }
428 
430 
431 /* FIXME: Consistent locking policy */
432 static void uart_change_speed(struct tty_struct *tty, struct uart_state *state,
433  struct ktermios *old_termios)
434 {
435  struct tty_port *port = &state->port;
436  struct uart_port *uport = state->uart_port;
437  struct ktermios *termios;
438 
439  /*
440  * If we have no tty, termios, or the port does not exist,
441  * then we can't set the parameters for this port.
442  */
443  if (!tty || uport->type == PORT_UNKNOWN)
444  return;
445 
446  termios = &tty->termios;
447 
448  /*
449  * Set flags based on termios cflag
450  */
451  if (termios->c_cflag & CRTSCTS)
452  set_bit(ASYNCB_CTS_FLOW, &port->flags);
453  else
455 
456  if (termios->c_cflag & CLOCAL)
458  else
459  set_bit(ASYNCB_CHECK_CD, &port->flags);
460 
461  uport->ops->set_termios(uport, termios, old_termios);
462 }
463 
464 static inline int __uart_put_char(struct uart_port *port,
465  struct circ_buf *circ, unsigned char c)
466 {
467  unsigned long flags;
468  int ret = 0;
469 
470  if (!circ->buf)
471  return 0;
472 
473  spin_lock_irqsave(&port->lock, flags);
474  if (uart_circ_chars_free(circ) != 0) {
475  circ->buf[circ->head] = c;
476  circ->head = (circ->head + 1) & (UART_XMIT_SIZE - 1);
477  ret = 1;
478  }
479  spin_unlock_irqrestore(&port->lock, flags);
480  return ret;
481 }
482 
483 static int uart_put_char(struct tty_struct *tty, unsigned char ch)
484 {
485  struct uart_state *state = tty->driver_data;
486 
487  return __uart_put_char(state->uart_port, &state->xmit, ch);
488 }
489 
490 static void uart_flush_chars(struct tty_struct *tty)
491 {
492  uart_start(tty);
493 }
494 
495 static int uart_write(struct tty_struct *tty,
496  const unsigned char *buf, int count)
497 {
498  struct uart_state *state = tty->driver_data;
499  struct uart_port *port;
500  struct circ_buf *circ;
501  unsigned long flags;
502  int c, ret = 0;
503 
504  /*
505  * This means you called this function _after_ the port was
506  * closed. No cookie for you.
507  */
508  if (!state) {
509  WARN_ON(1);
510  return -EL3HLT;
511  }
512 
513  port = state->uart_port;
514  circ = &state->xmit;
515 
516  if (!circ->buf)
517  return 0;
518 
519  spin_lock_irqsave(&port->lock, flags);
520  while (1) {
521  c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE);
522  if (count < c)
523  c = count;
524  if (c <= 0)
525  break;
526  memcpy(circ->buf + circ->head, buf, c);
527  circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1);
528  buf += c;
529  count -= c;
530  ret += c;
531  }
532  spin_unlock_irqrestore(&port->lock, flags);
533 
534  uart_start(tty);
535  return ret;
536 }
537 
538 static int uart_write_room(struct tty_struct *tty)
539 {
540  struct uart_state *state = tty->driver_data;
541  unsigned long flags;
542  int ret;
543 
544  spin_lock_irqsave(&state->uart_port->lock, flags);
545  ret = uart_circ_chars_free(&state->xmit);
546  spin_unlock_irqrestore(&state->uart_port->lock, flags);
547  return ret;
548 }
549 
550 static int uart_chars_in_buffer(struct tty_struct *tty)
551 {
552  struct uart_state *state = tty->driver_data;
553  unsigned long flags;
554  int ret;
555 
556  spin_lock_irqsave(&state->uart_port->lock, flags);
557  ret = uart_circ_chars_pending(&state->xmit);
558  spin_unlock_irqrestore(&state->uart_port->lock, flags);
559  return ret;
560 }
561 
562 static void uart_flush_buffer(struct tty_struct *tty)
563 {
564  struct uart_state *state = tty->driver_data;
565  struct uart_port *port;
566  unsigned long flags;
567 
568  /*
569  * This means you called this function _after_ the port was
570  * closed. No cookie for you.
571  */
572  if (!state) {
573  WARN_ON(1);
574  return;
575  }
576 
577  port = state->uart_port;
578  pr_debug("uart_flush_buffer(%d) called\n", tty->index);
579 
580  spin_lock_irqsave(&port->lock, flags);
581  uart_circ_clear(&state->xmit);
582  if (port->ops->flush_buffer)
583  port->ops->flush_buffer(port);
584  spin_unlock_irqrestore(&port->lock, flags);
585  tty_wakeup(tty);
586 }
587 
588 /*
589  * This function is used to send a high-priority XON/XOFF character to
590  * the device
591  */
592 static void uart_send_xchar(struct tty_struct *tty, char ch)
593 {
594  struct uart_state *state = tty->driver_data;
595  struct uart_port *port = state->uart_port;
596  unsigned long flags;
597 
598  if (port->ops->send_xchar)
599  port->ops->send_xchar(port, ch);
600  else {
601  port->x_char = ch;
602  if (ch) {
603  spin_lock_irqsave(&port->lock, flags);
604  port->ops->start_tx(port);
605  spin_unlock_irqrestore(&port->lock, flags);
606  }
607  }
608 }
609 
610 static void uart_throttle(struct tty_struct *tty)
611 {
612  struct uart_state *state = tty->driver_data;
613 
614  if (I_IXOFF(tty))
615  uart_send_xchar(tty, STOP_CHAR(tty));
616 
617  if (tty->termios.c_cflag & CRTSCTS)
619 }
620 
621 static void uart_unthrottle(struct tty_struct *tty)
622 {
623  struct uart_state *state = tty->driver_data;
624  struct uart_port *port = state->uart_port;
625 
626  if (I_IXOFF(tty)) {
627  if (port->x_char)
628  port->x_char = 0;
629  else
630  uart_send_xchar(tty, START_CHAR(tty));
631  }
632 
633  if (tty->termios.c_cflag & CRTSCTS)
634  uart_set_mctrl(port, TIOCM_RTS);
635 }
636 
637 static void uart_get_info(struct tty_port *port,
638  struct uart_state *state,
639  struct serial_struct *retinfo)
640 {
641  struct uart_port *uport = state->uart_port;
642 
643  memset(retinfo, 0, sizeof(*retinfo));
644 
645  retinfo->type = uport->type;
646  retinfo->line = uport->line;
647  retinfo->port = uport->iobase;
648  if (HIGH_BITS_OFFSET)
649  retinfo->port_high = (long) uport->iobase >> HIGH_BITS_OFFSET;
650  retinfo->irq = uport->irq;
651  retinfo->flags = uport->flags;
652  retinfo->xmit_fifo_size = uport->fifosize;
653  retinfo->baud_base = uport->uartclk / 16;
654  retinfo->close_delay = jiffies_to_msecs(port->close_delay) / 10;
657  jiffies_to_msecs(port->closing_wait) / 10;
658  retinfo->custom_divisor = uport->custom_divisor;
659  retinfo->hub6 = uport->hub6;
660  retinfo->io_type = uport->iotype;
661  retinfo->iomem_reg_shift = uport->regshift;
662  retinfo->iomem_base = (void *)(unsigned long)uport->mapbase;
663 }
664 
665 static int uart_get_info_user(struct uart_state *state,
666  struct serial_struct __user *retinfo)
667 {
668  struct tty_port *port = &state->port;
669  struct serial_struct tmp;
670 
671  /* Ensure the state we copy is consistent and no hardware changes
672  occur as we go */
673  mutex_lock(&port->mutex);
674  uart_get_info(port, state, &tmp);
675  mutex_unlock(&port->mutex);
676 
677  if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
678  return -EFAULT;
679  return 0;
680 }
681 
682 static int uart_set_info(struct tty_struct *tty, struct tty_port *port,
683  struct uart_state *state,
684  struct serial_struct *new_info)
685 {
686  struct uart_port *uport = state->uart_port;
687  unsigned long new_port;
688  unsigned int change_irq, change_port, closing_wait;
689  unsigned int old_custom_divisor, close_delay;
690  upf_t old_flags, new_flags;
691  int retval = 0;
692 
693  new_port = new_info->port;
694  if (HIGH_BITS_OFFSET)
695  new_port += (unsigned long) new_info->port_high << HIGH_BITS_OFFSET;
696 
697  new_info->irq = irq_canonicalize(new_info->irq);
698  close_delay = msecs_to_jiffies(new_info->close_delay * 10);
699  closing_wait = new_info->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
701  msecs_to_jiffies(new_info->closing_wait * 10);
702 
703 
704  change_irq = !(uport->flags & UPF_FIXED_PORT)
705  && new_info->irq != uport->irq;
706 
707  /*
708  * Since changing the 'type' of the port changes its resource
709  * allocations, we should treat type changes the same as
710  * IO port changes.
711  */
712  change_port = !(uport->flags & UPF_FIXED_PORT)
713  && (new_port != uport->iobase ||
714  (unsigned long)new_info->iomem_base != uport->mapbase ||
715  new_info->hub6 != uport->hub6 ||
716  new_info->io_type != uport->iotype ||
717  new_info->iomem_reg_shift != uport->regshift ||
718  new_info->type != uport->type);
719 
720  old_flags = uport->flags;
721  new_flags = new_info->flags;
722  old_custom_divisor = uport->custom_divisor;
723 
724  if (!capable(CAP_SYS_ADMIN)) {
725  retval = -EPERM;
726  if (change_irq || change_port ||
727  (new_info->baud_base != uport->uartclk / 16) ||
728  (close_delay != port->close_delay) ||
729  (closing_wait != port->closing_wait) ||
730  (new_info->xmit_fifo_size &&
731  new_info->xmit_fifo_size != uport->fifosize) ||
732  (((new_flags ^ old_flags) & ~UPF_USR_MASK) != 0))
733  goto exit;
734  uport->flags = ((uport->flags & ~UPF_USR_MASK) |
735  (new_flags & UPF_USR_MASK));
736  uport->custom_divisor = new_info->custom_divisor;
737  goto check_and_exit;
738  }
739 
740  /*
741  * Ask the low level driver to verify the settings.
742  */
743  if (uport->ops->verify_port)
744  retval = uport->ops->verify_port(uport, new_info);
745 
746  if ((new_info->irq >= nr_irqs) || (new_info->irq < 0) ||
747  (new_info->baud_base < 9600))
748  retval = -EINVAL;
749 
750  if (retval)
751  goto exit;
752 
753  if (change_port || change_irq) {
754  retval = -EBUSY;
755 
756  /*
757  * Make sure that we are the sole user of this port.
758  */
759  if (tty_port_users(port) > 1)
760  goto exit;
761 
762  /*
763  * We need to shutdown the serial port at the old
764  * port/type/irq combination.
765  */
766  uart_shutdown(tty, state);
767  }
768 
769  if (change_port) {
770  unsigned long old_iobase, old_mapbase;
771  unsigned int old_type, old_iotype, old_hub6, old_shift;
772 
773  old_iobase = uport->iobase;
774  old_mapbase = uport->mapbase;
775  old_type = uport->type;
776  old_hub6 = uport->hub6;
777  old_iotype = uport->iotype;
778  old_shift = uport->regshift;
779 
780  /*
781  * Free and release old regions
782  */
783  if (old_type != PORT_UNKNOWN)
784  uport->ops->release_port(uport);
785 
786  uport->iobase = new_port;
787  uport->type = new_info->type;
788  uport->hub6 = new_info->hub6;
789  uport->iotype = new_info->io_type;
790  uport->regshift = new_info->iomem_reg_shift;
791  uport->mapbase = (unsigned long)new_info->iomem_base;
792 
793  /*
794  * Claim and map the new regions
795  */
796  if (uport->type != PORT_UNKNOWN) {
797  retval = uport->ops->request_port(uport);
798  } else {
799  /* Always success - Jean II */
800  retval = 0;
801  }
802 
803  /*
804  * If we fail to request resources for the
805  * new port, try to restore the old settings.
806  */
807  if (retval && old_type != PORT_UNKNOWN) {
808  uport->iobase = old_iobase;
809  uport->type = old_type;
810  uport->hub6 = old_hub6;
811  uport->iotype = old_iotype;
812  uport->regshift = old_shift;
813  uport->mapbase = old_mapbase;
814  retval = uport->ops->request_port(uport);
815  /*
816  * If we failed to restore the old settings,
817  * we fail like this.
818  */
819  if (retval)
820  uport->type = PORT_UNKNOWN;
821 
822  /*
823  * We failed anyway.
824  */
825  retval = -EBUSY;
826  /* Added to return the correct error -Ram Gupta */
827  goto exit;
828  }
829  }
830 
831  if (change_irq)
832  uport->irq = new_info->irq;
833  if (!(uport->flags & UPF_FIXED_PORT))
834  uport->uartclk = new_info->baud_base * 16;
835  uport->flags = (uport->flags & ~UPF_CHANGE_MASK) |
836  (new_flags & UPF_CHANGE_MASK);
837  uport->custom_divisor = new_info->custom_divisor;
838  port->close_delay = close_delay;
839  port->closing_wait = closing_wait;
840  if (new_info->xmit_fifo_size)
841  uport->fifosize = new_info->xmit_fifo_size;
842  if (port->tty)
843  port->tty->low_latency =
844  (uport->flags & UPF_LOW_LATENCY) ? 1 : 0;
845 
846  check_and_exit:
847  retval = 0;
848  if (uport->type == PORT_UNKNOWN)
849  goto exit;
850  if (port->flags & ASYNC_INITIALIZED) {
851  if (((old_flags ^ uport->flags) & UPF_SPD_MASK) ||
852  old_custom_divisor != uport->custom_divisor) {
853  /*
854  * If they're setting up a custom divisor or speed,
855  * instead of clearing it, then bitch about it. No
856  * need to rate-limit; it's CAP_SYS_ADMIN only.
857  */
858  if (uport->flags & UPF_SPD_MASK) {
859  char buf[64];
861  "%s sets custom speed on %s. This "
862  "is deprecated.\n", current->comm,
863  tty_name(port->tty, buf));
864  }
865  uart_change_speed(tty, state, NULL);
866  }
867  } else
868  retval = uart_startup(tty, state, 1);
869  exit:
870  return retval;
871 }
872 
873 static int uart_set_info_user(struct tty_struct *tty, struct uart_state *state,
874  struct serial_struct __user *newinfo)
875 {
876  struct serial_struct new_serial;
877  struct tty_port *port = &state->port;
878  int retval;
879 
880  if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
881  return -EFAULT;
882 
883  /*
884  * This semaphore protects port->count. It is also
885  * very useful to prevent opens. Also, take the
886  * port configuration semaphore to make sure that a
887  * module insertion/removal doesn't change anything
888  * under us.
889  */
890  mutex_lock(&port->mutex);
891  retval = uart_set_info(tty, port, state, &new_serial);
892  mutex_unlock(&port->mutex);
893  return retval;
894 }
895 
904 static int uart_get_lsr_info(struct tty_struct *tty,
905  struct uart_state *state, unsigned int __user *value)
906 {
907  struct uart_port *uport = state->uart_port;
908  unsigned int result;
909 
910  result = uport->ops->tx_empty(uport);
911 
912  /*
913  * If we're about to load something into the transmit
914  * register, we'll pretend the transmitter isn't empty to
915  * avoid a race condition (depending on when the transmit
916  * interrupt happens).
917  */
918  if (uport->x_char ||
919  ((uart_circ_chars_pending(&state->xmit) > 0) &&
920  !tty->stopped && !tty->hw_stopped))
921  result &= ~TIOCSER_TEMT;
922 
923  return put_user(result, value);
924 }
925 
926 static int uart_tiocmget(struct tty_struct *tty)
927 {
928  struct uart_state *state = tty->driver_data;
929  struct tty_port *port = &state->port;
930  struct uart_port *uport = state->uart_port;
931  int result = -EIO;
932 
933  mutex_lock(&port->mutex);
934  if (!(tty->flags & (1 << TTY_IO_ERROR))) {
935  result = uport->mctrl;
936  spin_lock_irq(&uport->lock);
937  result |= uport->ops->get_mctrl(uport);
938  spin_unlock_irq(&uport->lock);
939  }
940  mutex_unlock(&port->mutex);
941 
942  return result;
943 }
944 
945 static int
946 uart_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear)
947 {
948  struct uart_state *state = tty->driver_data;
949  struct uart_port *uport = state->uart_port;
950  struct tty_port *port = &state->port;
951  int ret = -EIO;
952 
953  mutex_lock(&port->mutex);
954  if (!(tty->flags & (1 << TTY_IO_ERROR))) {
955  uart_update_mctrl(uport, set, clear);
956  ret = 0;
957  }
958  mutex_unlock(&port->mutex);
959  return ret;
960 }
961 
962 static int uart_break_ctl(struct tty_struct *tty, int break_state)
963 {
964  struct uart_state *state = tty->driver_data;
965  struct tty_port *port = &state->port;
966  struct uart_port *uport = state->uart_port;
967 
968  mutex_lock(&port->mutex);
969 
970  if (uport->type != PORT_UNKNOWN)
971  uport->ops->break_ctl(uport, break_state);
972 
973  mutex_unlock(&port->mutex);
974  return 0;
975 }
976 
977 static int uart_do_autoconfig(struct tty_struct *tty,struct uart_state *state)
978 {
979  struct uart_port *uport = state->uart_port;
980  struct tty_port *port = &state->port;
981  int flags, ret;
982 
983  if (!capable(CAP_SYS_ADMIN))
984  return -EPERM;
985 
986  /*
987  * Take the per-port semaphore. This prevents count from
988  * changing, and hence any extra opens of the port while
989  * we're auto-configuring.
990  */
991  if (mutex_lock_interruptible(&port->mutex))
992  return -ERESTARTSYS;
993 
994  ret = -EBUSY;
995  if (tty_port_users(port) == 1) {
996  uart_shutdown(tty, state);
997 
998  /*
999  * If we already have a port type configured,
1000  * we must release its resources.
1001  */
1002  if (uport->type != PORT_UNKNOWN)
1003  uport->ops->release_port(uport);
1004 
1005  flags = UART_CONFIG_TYPE;
1006  if (uport->flags & UPF_AUTO_IRQ)
1007  flags |= UART_CONFIG_IRQ;
1008 
1009  /*
1010  * This will claim the ports resources if
1011  * a port is found.
1012  */
1013  uport->ops->config_port(uport, flags);
1014 
1015  ret = uart_startup(tty, state, 1);
1016  }
1017  mutex_unlock(&port->mutex);
1018  return ret;
1019 }
1020 
1021 /*
1022  * Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change
1023  * - mask passed in arg for lines of interest
1024  * (use |'ed TIOCM_RNG/DSR/CD/CTS for masking)
1025  * Caller should use TIOCGICOUNT to see which one it was
1026  *
1027  * FIXME: This wants extracting into a common all driver implementation
1028  * of TIOCMWAIT using tty_port.
1029  */
1030 static int
1031 uart_wait_modem_status(struct uart_state *state, unsigned long arg)
1032 {
1033  struct uart_port *uport = state->uart_port;
1034  struct tty_port *port = &state->port;
1036  struct uart_icount cprev, cnow;
1037  int ret;
1038 
1039  /*
1040  * note the counters on entry
1041  */
1042  spin_lock_irq(&uport->lock);
1043  memcpy(&cprev, &uport->icount, sizeof(struct uart_icount));
1044 
1045  /*
1046  * Force modem status interrupts on
1047  */
1048  uport->ops->enable_ms(uport);
1049  spin_unlock_irq(&uport->lock);
1050 
1052  for (;;) {
1053  spin_lock_irq(&uport->lock);
1054  memcpy(&cnow, &uport->icount, sizeof(struct uart_icount));
1055  spin_unlock_irq(&uport->lock);
1056 
1058 
1059  if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
1060  ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
1061  ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) ||
1062  ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) {
1063  ret = 0;
1064  break;
1065  }
1066 
1067  schedule();
1068 
1069  /* see if a signal did it */
1070  if (signal_pending(current)) {
1071  ret = -ERESTARTSYS;
1072  break;
1073  }
1074 
1075  cprev = cnow;
1076  }
1077 
1078  current->state = TASK_RUNNING;
1080 
1081  return ret;
1082 }
1083 
1084 /*
1085  * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
1086  * Return: write counters to the user passed counter struct
1087  * NB: both 1->0 and 0->1 transitions are counted except for
1088  * RI where only 0->1 is counted.
1089  */
1090 static int uart_get_icount(struct tty_struct *tty,
1091  struct serial_icounter_struct *icount)
1092 {
1093  struct uart_state *state = tty->driver_data;
1094  struct uart_icount cnow;
1095  struct uart_port *uport = state->uart_port;
1096 
1097  spin_lock_irq(&uport->lock);
1098  memcpy(&cnow, &uport->icount, sizeof(struct uart_icount));
1099  spin_unlock_irq(&uport->lock);
1100 
1101  icount->cts = cnow.cts;
1102  icount->dsr = cnow.dsr;
1103  icount->rng = cnow.rng;
1104  icount->dcd = cnow.dcd;
1105  icount->rx = cnow.rx;
1106  icount->tx = cnow.tx;
1107  icount->frame = cnow.frame;
1108  icount->overrun = cnow.overrun;
1109  icount->parity = cnow.parity;
1110  icount->brk = cnow.brk;
1111  icount->buf_overrun = cnow.buf_overrun;
1112 
1113  return 0;
1114 }
1115 
1116 /*
1117  * Called via sys_ioctl. We can use spin_lock_irq() here.
1118  */
1119 static int
1120 uart_ioctl(struct tty_struct *tty, unsigned int cmd,
1121  unsigned long arg)
1122 {
1123  struct uart_state *state = tty->driver_data;
1124  struct tty_port *port = &state->port;
1125  void __user *uarg = (void __user *)arg;
1126  int ret = -ENOIOCTLCMD;
1127 
1128 
1129  /*
1130  * These ioctls don't rely on the hardware to be present.
1131  */
1132  switch (cmd) {
1133  case TIOCGSERIAL:
1134  ret = uart_get_info_user(state, uarg);
1135  break;
1136 
1137  case TIOCSSERIAL:
1138  ret = uart_set_info_user(tty, state, uarg);
1139  break;
1140 
1141  case TIOCSERCONFIG:
1142  ret = uart_do_autoconfig(tty, state);
1143  break;
1144 
1145  case TIOCSERGWILD: /* obsolete */
1146  case TIOCSERSWILD: /* obsolete */
1147  ret = 0;
1148  break;
1149  }
1150 
1151  if (ret != -ENOIOCTLCMD)
1152  goto out;
1153 
1154  if (tty->flags & (1 << TTY_IO_ERROR)) {
1155  ret = -EIO;
1156  goto out;
1157  }
1158 
1159  /*
1160  * The following should only be used when hardware is present.
1161  */
1162  switch (cmd) {
1163  case TIOCMIWAIT:
1164  ret = uart_wait_modem_status(state, arg);
1165  break;
1166  }
1167 
1168  if (ret != -ENOIOCTLCMD)
1169  goto out;
1170 
1171  mutex_lock(&port->mutex);
1172 
1173  if (tty->flags & (1 << TTY_IO_ERROR)) {
1174  ret = -EIO;
1175  goto out_up;
1176  }
1177 
1178  /*
1179  * All these rely on hardware being present and need to be
1180  * protected against the tty being hung up.
1181  */
1182  switch (cmd) {
1183  case TIOCSERGETLSR: /* Get line status register */
1184  ret = uart_get_lsr_info(tty, state, uarg);
1185  break;
1186 
1187  default: {
1188  struct uart_port *uport = state->uart_port;
1189  if (uport->ops->ioctl)
1190  ret = uport->ops->ioctl(uport, cmd, arg);
1191  break;
1192  }
1193  }
1194 out_up:
1195  mutex_unlock(&port->mutex);
1196 out:
1197  return ret;
1198 }
1199 
1200 static void uart_set_ldisc(struct tty_struct *tty)
1201 {
1202  struct uart_state *state = tty->driver_data;
1203  struct uart_port *uport = state->uart_port;
1204 
1205  if (uport->ops->set_ldisc)
1206  uport->ops->set_ldisc(uport, tty->termios.c_line);
1207 }
1208 
1209 static void uart_set_termios(struct tty_struct *tty,
1210  struct ktermios *old_termios)
1211 {
1212  struct uart_state *state = tty->driver_data;
1213  unsigned long flags;
1214  unsigned int cflag = tty->termios.c_cflag;
1215 
1216 
1217  /*
1218  * These are the bits that are used to setup various
1219  * flags in the low level driver. We can ignore the Bfoo
1220  * bits in c_cflag; c_[io]speed will always be set
1221  * appropriately by set_termios() in tty_ioctl.c
1222  */
1223 #define RELEVANT_IFLAG(iflag) ((iflag) & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
1224  if ((cflag ^ old_termios->c_cflag) == 0 &&
1225  tty->termios.c_ospeed == old_termios->c_ospeed &&
1226  tty->termios.c_ispeed == old_termios->c_ispeed &&
1227  RELEVANT_IFLAG(tty->termios.c_iflag ^ old_termios->c_iflag) == 0) {
1228  return;
1229  }
1230 
1231  uart_change_speed(tty, state, old_termios);
1232 
1233  /* Handle transition to B0 status */
1234  if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD))
1236  /* Handle transition away from B0 status */
1237  else if (!(old_termios->c_cflag & CBAUD) && (cflag & CBAUD)) {
1238  unsigned int mask = TIOCM_DTR;
1239  if (!(cflag & CRTSCTS) ||
1240  !test_bit(TTY_THROTTLED, &tty->flags))
1241  mask |= TIOCM_RTS;
1242  uart_set_mctrl(state->uart_port, mask);
1243  }
1244 
1245  /* Handle turning off CRTSCTS */
1246  if ((old_termios->c_cflag & CRTSCTS) && !(cflag & CRTSCTS)) {
1247  spin_lock_irqsave(&state->uart_port->lock, flags);
1248  tty->hw_stopped = 0;
1249  __uart_start(tty);
1250  spin_unlock_irqrestore(&state->uart_port->lock, flags);
1251  }
1252  /* Handle turning on CRTSCTS */
1253  else if (!(old_termios->c_cflag & CRTSCTS) && (cflag & CRTSCTS)) {
1254  spin_lock_irqsave(&state->uart_port->lock, flags);
1255  if (!(state->uart_port->ops->get_mctrl(state->uart_port) & TIOCM_CTS)) {
1256  tty->hw_stopped = 1;
1257  state->uart_port->ops->stop_tx(state->uart_port);
1258  }
1259  spin_unlock_irqrestore(&state->uart_port->lock, flags);
1260  }
1261 }
1262 
1263 /*
1264  * In 2.4.5, calls to this will be serialized via the BKL in
1265  * linux/drivers/char/tty_io.c:tty_release()
1266  * linux/drivers/char/tty_io.c:do_tty_handup()
1267  */
1268 static void uart_close(struct tty_struct *tty, struct file *filp)
1269 {
1270  struct uart_state *state = tty->driver_data;
1271  struct tty_port *port;
1272  struct uart_port *uport;
1273  unsigned long flags;
1274 
1275  if (!state)
1276  return;
1277 
1278  uport = state->uart_port;
1279  port = &state->port;
1280 
1281  pr_debug("uart_close(%d) called\n", uport->line);
1282 
1283  if (tty_port_close_start(port, tty, filp) == 0)
1284  return;
1285 
1286  /*
1287  * At this point, we stop accepting input. To do this, we
1288  * disable the receive line status interrupts.
1289  */
1290  if (port->flags & ASYNC_INITIALIZED) {
1291  unsigned long flags;
1292  spin_lock_irqsave(&uport->lock, flags);
1293  uport->ops->stop_rx(uport);
1294  spin_unlock_irqrestore(&uport->lock, flags);
1295  /*
1296  * Before we drop DTR, make sure the UART transmitter
1297  * has completely drained; this is especially
1298  * important if there is a transmit FIFO!
1299  */
1300  uart_wait_until_sent(tty, uport->timeout);
1301  }
1302 
1303  mutex_lock(&port->mutex);
1304  uart_shutdown(tty, state);
1305  uart_flush_buffer(tty);
1306 
1307  tty_ldisc_flush(tty);
1308 
1309  tty_port_tty_set(port, NULL);
1310  spin_lock_irqsave(&port->lock, flags);
1311  tty->closing = 0;
1312 
1313  if (port->blocked_open) {
1314  spin_unlock_irqrestore(&port->lock, flags);
1315  if (port->close_delay)
1317  jiffies_to_msecs(port->close_delay));
1318  spin_lock_irqsave(&port->lock, flags);
1319  } else if (!uart_console(uport)) {
1320  spin_unlock_irqrestore(&port->lock, flags);
1321  uart_change_pm(state, 3);
1322  spin_lock_irqsave(&port->lock, flags);
1323  }
1324 
1325  /*
1326  * Wake up anyone trying to open this port.
1327  */
1329  clear_bit(ASYNCB_CLOSING, &port->flags);
1330  spin_unlock_irqrestore(&port->lock, flags);
1333 
1334  mutex_unlock(&port->mutex);
1335 }
1336 
1337 static void uart_wait_until_sent(struct tty_struct *tty, int timeout)
1338 {
1339  struct uart_state *state = tty->driver_data;
1340  struct uart_port *port = state->uart_port;
1341  unsigned long char_time, expire;
1342 
1343  if (port->type == PORT_UNKNOWN || port->fifosize == 0)
1344  return;
1345 
1346  /*
1347  * Set the check interval to be 1/5 of the estimated time to
1348  * send a single character, and make it at least 1. The check
1349  * interval should also be less than the timeout.
1350  *
1351  * Note: we have to use pretty tight timings here to satisfy
1352  * the NIST-PCTS.
1353  */
1354  char_time = (port->timeout - HZ/50) / port->fifosize;
1355  char_time = char_time / 5;
1356  if (char_time == 0)
1357  char_time = 1;
1358  if (timeout && timeout < char_time)
1359  char_time = timeout;
1360 
1361  /*
1362  * If the transmitter hasn't cleared in twice the approximate
1363  * amount of time to send the entire FIFO, it probably won't
1364  * ever clear. This assumes the UART isn't doing flow
1365  * control, which is currently the case. Hence, if it ever
1366  * takes longer than port->timeout, this is probably due to a
1367  * UART bug of some kind. So, we clamp the timeout parameter at
1368  * 2*port->timeout.
1369  */
1370  if (timeout == 0 || timeout > 2 * port->timeout)
1371  timeout = 2 * port->timeout;
1372 
1373  expire = jiffies + timeout;
1374 
1375  pr_debug("uart_wait_until_sent(%d), jiffies=%lu, expire=%lu...\n",
1376  port->line, jiffies, expire);
1377 
1378  /*
1379  * Check whether the transmitter is empty every 'char_time'.
1380  * 'timeout' / 'expire' give us the maximum amount of time
1381  * we wait.
1382  */
1383  while (!port->ops->tx_empty(port)) {
1385  if (signal_pending(current))
1386  break;
1387  if (time_after(jiffies, expire))
1388  break;
1389  }
1390 }
1391 
1392 /*
1393  * This is called with the BKL held in
1394  * linux/drivers/char/tty_io.c:do_tty_hangup()
1395  * We're called from the eventd thread, so we can sleep for
1396  * a _short_ time only.
1397  */
1398 static void uart_hangup(struct tty_struct *tty)
1399 {
1400  struct uart_state *state = tty->driver_data;
1401  struct tty_port *port = &state->port;
1402  unsigned long flags;
1403 
1404  pr_debug("uart_hangup(%d)\n", state->uart_port->line);
1405 
1406  mutex_lock(&port->mutex);
1407  if (port->flags & ASYNC_NORMAL_ACTIVE) {
1408  uart_flush_buffer(tty);
1409  uart_shutdown(tty, state);
1410  spin_lock_irqsave(&port->lock, flags);
1411  port->count = 0;
1413  spin_unlock_irqrestore(&port->lock, flags);
1414  tty_port_tty_set(port, NULL);
1417  }
1418  mutex_unlock(&port->mutex);
1419 }
1420 
1421 static int uart_port_activate(struct tty_port *port, struct tty_struct *tty)
1422 {
1423  return 0;
1424 }
1425 
1426 static void uart_port_shutdown(struct tty_port *port)
1427 {
1428  struct uart_state *state = container_of(port, struct uart_state, port);
1429  struct uart_port *uport = state->uart_port;
1430 
1431  /*
1432  * clear delta_msr_wait queue to avoid mem leaks: we may free
1433  * the irq here so the queue might never be woken up. Note
1434  * that we won't end up waiting on delta_msr_wait again since
1435  * any outstanding file descriptors should be pointing at
1436  * hung_up_tty_fops now.
1437  */
1439 
1440  /*
1441  * Free the IRQ and disable the port.
1442  */
1443  uport->ops->shutdown(uport);
1444 
1445  /*
1446  * Ensure that the IRQ handler isn't running on another CPU.
1447  */
1448  synchronize_irq(uport->irq);
1449 }
1450 
1451 static int uart_carrier_raised(struct tty_port *port)
1452 {
1453  struct uart_state *state = container_of(port, struct uart_state, port);
1454  struct uart_port *uport = state->uart_port;
1455  int mctrl;
1456  spin_lock_irq(&uport->lock);
1457  uport->ops->enable_ms(uport);
1458  mctrl = uport->ops->get_mctrl(uport);
1459  spin_unlock_irq(&uport->lock);
1460  if (mctrl & TIOCM_CAR)
1461  return 1;
1462  return 0;
1463 }
1464 
1465 static void uart_dtr_rts(struct tty_port *port, int onoff)
1466 {
1467  struct uart_state *state = container_of(port, struct uart_state, port);
1468  struct uart_port *uport = state->uart_port;
1469 
1470  if (onoff)
1472  else
1474 }
1475 
1476 /*
1477  * calls to uart_open are serialised by the BKL in
1478  * fs/char_dev.c:chrdev_open()
1479  * Note that if this fails, then uart_close() _will_ be called.
1480  *
1481  * In time, we want to scrap the "opening nonpresent ports"
1482  * behaviour and implement an alternative way for setserial
1483  * to set base addresses/ports/types. This will allow us to
1484  * get rid of a certain amount of extra tests.
1485  */
1486 static int uart_open(struct tty_struct *tty, struct file *filp)
1487 {
1488  struct uart_driver *drv = (struct uart_driver *)tty->driver->driver_state;
1489  int retval, line = tty->index;
1490  struct uart_state *state = drv->state + line;
1491  struct tty_port *port = &state->port;
1492 
1493  pr_debug("uart_open(%d) called\n", line);
1494 
1495  /*
1496  * We take the semaphore here to guarantee that we won't be re-entered
1497  * while allocating the state structure, or while we request any IRQs
1498  * that the driver may need. This also has the nice side-effect that
1499  * it delays the action of uart_hangup, so we can guarantee that
1500  * state->port.tty will always contain something reasonable.
1501  */
1502  if (mutex_lock_interruptible(&port->mutex)) {
1503  retval = -ERESTARTSYS;
1504  goto end;
1505  }
1506 
1507  port->count++;
1508  if (!state->uart_port || state->uart_port->flags & UPF_DEAD) {
1509  retval = -ENXIO;
1510  goto err_dec_count;
1511  }
1512 
1513  /*
1514  * Once we set tty->driver_data here, we are guaranteed that
1515  * uart_close() will decrement the driver module use count.
1516  * Any failures from here onwards should not touch the count.
1517  */
1518  tty->driver_data = state;
1519  state->uart_port->state = state;
1520  tty->low_latency = (state->uart_port->flags & UPF_LOW_LATENCY) ? 1 : 0;
1521  tty_port_tty_set(port, tty);
1522 
1523  /*
1524  * If the port is in the middle of closing, bail out now.
1525  */
1526  if (tty_hung_up_p(filp)) {
1527  retval = -EAGAIN;
1528  goto err_dec_count;
1529  }
1530 
1531  /*
1532  * Make sure the device is in D0 state.
1533  */
1534  if (port->count == 1)
1535  uart_change_pm(state, 0);
1536 
1537  /*
1538  * Start up the serial port.
1539  */
1540  retval = uart_startup(tty, state, 0);
1541 
1542  /*
1543  * If we succeeded, wait until the port is ready.
1544  */
1545  mutex_unlock(&port->mutex);
1546  if (retval == 0)
1547  retval = tty_port_block_til_ready(port, tty, filp);
1548 
1549 end:
1550  return retval;
1551 err_dec_count:
1552  port->count--;
1553  mutex_unlock(&port->mutex);
1554  goto end;
1555 }
1556 
1557 static const char *uart_type(struct uart_port *port)
1558 {
1559  const char *str = NULL;
1560 
1561  if (port->ops->type)
1562  str = port->ops->type(port);
1563 
1564  if (!str)
1565  str = "unknown";
1566 
1567  return str;
1568 }
1569 
1570 #ifdef CONFIG_PROC_FS
1571 
1572 static void uart_line_info(struct seq_file *m, struct uart_driver *drv, int i)
1573 {
1574  struct uart_state *state = drv->state + i;
1575  struct tty_port *port = &state->port;
1576  int pm_state;
1577  struct uart_port *uport = state->uart_port;
1578  char stat_buf[32];
1579  unsigned int status;
1580  int mmio;
1581 
1582  if (!uport)
1583  return;
1584 
1585  mmio = uport->iotype >= UPIO_MEM;
1586  seq_printf(m, "%d: uart:%s %s%08llX irq:%d",
1587  uport->line, uart_type(uport),
1588  mmio ? "mmio:0x" : "port:",
1589  mmio ? (unsigned long long)uport->mapbase
1590  : (unsigned long long)uport->iobase,
1591  uport->irq);
1592 
1593  if (uport->type == PORT_UNKNOWN) {
1594  seq_putc(m, '\n');
1595  return;
1596  }
1597 
1598  if (capable(CAP_SYS_ADMIN)) {
1599  mutex_lock(&port->mutex);
1600  pm_state = state->pm_state;
1601  if (pm_state)
1602  uart_change_pm(state, 0);
1603  spin_lock_irq(&uport->lock);
1604  status = uport->ops->get_mctrl(uport);
1605  spin_unlock_irq(&uport->lock);
1606  if (pm_state)
1607  uart_change_pm(state, pm_state);
1608  mutex_unlock(&port->mutex);
1609 
1610  seq_printf(m, " tx:%d rx:%d",
1611  uport->icount.tx, uport->icount.rx);
1612  if (uport->icount.frame)
1613  seq_printf(m, " fe:%d",
1614  uport->icount.frame);
1615  if (uport->icount.parity)
1616  seq_printf(m, " pe:%d",
1617  uport->icount.parity);
1618  if (uport->icount.brk)
1619  seq_printf(m, " brk:%d",
1620  uport->icount.brk);
1621  if (uport->icount.overrun)
1622  seq_printf(m, " oe:%d",
1623  uport->icount.overrun);
1624 
1625 #define INFOBIT(bit, str) \
1626  if (uport->mctrl & (bit)) \
1627  strncat(stat_buf, (str), sizeof(stat_buf) - \
1628  strlen(stat_buf) - 2)
1629 #define STATBIT(bit, str) \
1630  if (status & (bit)) \
1631  strncat(stat_buf, (str), sizeof(stat_buf) - \
1632  strlen(stat_buf) - 2)
1633 
1634  stat_buf[0] = '\0';
1635  stat_buf[1] = '\0';
1636  INFOBIT(TIOCM_RTS, "|RTS");
1637  STATBIT(TIOCM_CTS, "|CTS");
1638  INFOBIT(TIOCM_DTR, "|DTR");
1639  STATBIT(TIOCM_DSR, "|DSR");
1640  STATBIT(TIOCM_CAR, "|CD");
1641  STATBIT(TIOCM_RNG, "|RI");
1642  if (stat_buf[0])
1643  stat_buf[0] = ' ';
1644 
1645  seq_puts(m, stat_buf);
1646  }
1647  seq_putc(m, '\n');
1648 #undef STATBIT
1649 #undef INFOBIT
1650 }
1651 
1652 static int uart_proc_show(struct seq_file *m, void *v)
1653 {
1654  struct tty_driver *ttydrv = m->private;
1655  struct uart_driver *drv = ttydrv->driver_state;
1656  int i;
1657 
1658  seq_printf(m, "serinfo:1.0 driver%s%s revision:%s\n",
1659  "", "", "");
1660  for (i = 0; i < drv->nr; i++)
1661  uart_line_info(m, drv, i);
1662  return 0;
1663 }
1664 
1665 static int uart_proc_open(struct inode *inode, struct file *file)
1666 {
1667  return single_open(file, uart_proc_show, PDE(inode)->data);
1668 }
1669 
1670 static const struct file_operations uart_proc_fops = {
1671  .owner = THIS_MODULE,
1672  .open = uart_proc_open,
1673  .read = seq_read,
1674  .llseek = seq_lseek,
1675  .release = single_release,
1676 };
1677 #endif
1678 
1679 #if defined(CONFIG_SERIAL_CORE_CONSOLE) || defined(CONFIG_CONSOLE_POLL)
1680 /*
1681  * uart_console_write - write a console message to a serial port
1682  * @port: the port to write the message
1683  * @s: array of characters
1684  * @count: number of characters in string to write
1685  * @write: function to write character to port
1686  */
1687 void uart_console_write(struct uart_port *port, const char *s,
1688  unsigned int count,
1689  void (*putchar)(struct uart_port *, int))
1690 {
1691  unsigned int i;
1692 
1693  for (i = 0; i < count; i++, s++) {
1694  if (*s == '\n')
1695  putchar(port, '\r');
1696  putchar(port, *s);
1697  }
1698 }
1700 
1701 /*
1702  * Check whether an invalid uart number has been specified, and
1703  * if so, search for the first available port that does have
1704  * console support.
1705  */
1706 struct uart_port * __init
1707 uart_get_console(struct uart_port *ports, int nr, struct console *co)
1708 {
1709  int idx = co->index;
1710 
1711  if (idx < 0 || idx >= nr || (ports[idx].iobase == 0 &&
1712  ports[idx].membase == NULL))
1713  for (idx = 0; idx < nr; idx++)
1714  if (ports[idx].iobase != 0 ||
1715  ports[idx].membase != NULL)
1716  break;
1717 
1718  co->index = idx;
1719 
1720  return ports + idx;
1721 }
1722 
1735 void
1736 uart_parse_options(char *options, int *baud, int *parity, int *bits, int *flow)
1737 {
1738  char *s = options;
1739 
1740  *baud = simple_strtoul(s, NULL, 10);
1741  while (*s >= '0' && *s <= '9')
1742  s++;
1743  if (*s)
1744  *parity = *s++;
1745  if (*s)
1746  *bits = *s++ - '0';
1747  if (*s)
1748  *flow = *s;
1749 }
1751 
1752 struct baud_rates {
1753  unsigned int rate;
1754  unsigned int cflag;
1755 };
1756 
1757 static const struct baud_rates baud_rates[] = {
1758  { 921600, B921600 },
1759  { 460800, B460800 },
1760  { 230400, B230400 },
1761  { 115200, B115200 },
1762  { 57600, B57600 },
1763  { 38400, B38400 },
1764  { 19200, B19200 },
1765  { 9600, B9600 },
1766  { 4800, B4800 },
1767  { 2400, B2400 },
1768  { 1200, B1200 },
1769  { 0, B38400 }
1770 };
1771 
1781 int
1782 uart_set_options(struct uart_port *port, struct console *co,
1783  int baud, int parity, int bits, int flow)
1784 {
1785  struct ktermios termios;
1786  static struct ktermios dummy;
1787  int i;
1788 
1789  /*
1790  * Ensure that the serial console lock is initialised
1791  * early.
1792  */
1793  spin_lock_init(&port->lock);
1794  lockdep_set_class(&port->lock, &port_lock_key);
1795 
1796  memset(&termios, 0, sizeof(struct ktermios));
1797 
1798  termios.c_cflag = CREAD | HUPCL | CLOCAL;
1799 
1800  /*
1801  * Construct a cflag setting.
1802  */
1803  for (i = 0; baud_rates[i].rate; i++)
1804  if (baud_rates[i].rate <= baud)
1805  break;
1806 
1807  termios.c_cflag |= baud_rates[i].cflag;
1808 
1809  if (bits == 7)
1810  termios.c_cflag |= CS7;
1811  else
1812  termios.c_cflag |= CS8;
1813 
1814  switch (parity) {
1815  case 'o': case 'O':
1816  termios.c_cflag |= PARODD;
1817  /*fall through*/
1818  case 'e': case 'E':
1819  termios.c_cflag |= PARENB;
1820  break;
1821  }
1822 
1823  if (flow == 'r')
1824  termios.c_cflag |= CRTSCTS;
1825 
1826  /*
1827  * some uarts on other side don't support no flow control.
1828  * So we set * DTR in host uart to make them happy
1829  */
1830  port->mctrl |= TIOCM_DTR;
1831 
1832  port->ops->set_termios(port, &termios, &dummy);
1833  /*
1834  * Allow the setting of the UART parameters with a NULL console
1835  * too:
1836  */
1837  if (co)
1838  co->cflag = termios.c_cflag;
1839 
1840  return 0;
1841 }
1843 #endif /* CONFIG_SERIAL_CORE_CONSOLE */
1844 
1853 static void uart_change_pm(struct uart_state *state, int pm_state)
1854 {
1855  struct uart_port *port = state->uart_port;
1856 
1857  if (state->pm_state != pm_state) {
1858  if (port->ops->pm)
1859  port->ops->pm(port, pm_state, state->pm_state);
1860  state->pm_state = pm_state;
1861  }
1862 }
1863 
1864 struct uart_match {
1865  struct uart_port *port;
1867 };
1868 
1869 static int serial_match_port(struct device *dev, void *data)
1870 {
1871  struct uart_match *match = data;
1872  struct tty_driver *tty_drv = match->driver->tty_driver;
1873  dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) +
1874  match->port->line;
1875 
1876  return dev->devt == devt; /* Actually, only one tty per port */
1877 }
1878 
1879 int uart_suspend_port(struct uart_driver *drv, struct uart_port *uport)
1880 {
1881  struct uart_state *state = drv->state + uport->line;
1882  struct tty_port *port = &state->port;
1883  struct device *tty_dev;
1884  struct uart_match match = {uport, drv};
1885 
1886  mutex_lock(&port->mutex);
1887 
1888  tty_dev = device_find_child(uport->dev, &match, serial_match_port);
1889  if (device_may_wakeup(tty_dev)) {
1890  if (!enable_irq_wake(uport->irq))
1891  uport->irq_wake = 1;
1892  put_device(tty_dev);
1893  mutex_unlock(&port->mutex);
1894  return 0;
1895  }
1896  if (console_suspend_enabled || !uart_console(uport))
1897  uport->suspended = 1;
1898 
1899  if (port->flags & ASYNC_INITIALIZED) {
1900  const struct uart_ops *ops = uport->ops;
1901  int tries;
1902 
1903  if (console_suspend_enabled || !uart_console(uport)) {
1904  set_bit(ASYNCB_SUSPENDED, &port->flags);
1906 
1907  spin_lock_irq(&uport->lock);
1908  ops->stop_tx(uport);
1909  ops->set_mctrl(uport, 0);
1910  ops->stop_rx(uport);
1911  spin_unlock_irq(&uport->lock);
1912  }
1913 
1914  /*
1915  * Wait for the transmitter to empty.
1916  */
1917  for (tries = 3; !ops->tx_empty(uport) && tries; tries--)
1918  msleep(10);
1919  if (!tries)
1920  printk(KERN_ERR "%s%s%s%d: Unable to drain "
1921  "transmitter\n",
1922  uport->dev ? dev_name(uport->dev) : "",
1923  uport->dev ? ": " : "",
1924  drv->dev_name,
1925  drv->tty_driver->name_base + uport->line);
1926 
1927  if (console_suspend_enabled || !uart_console(uport))
1928  ops->shutdown(uport);
1929  }
1930 
1931  /*
1932  * Disable the console device before suspending.
1933  */
1934  if (console_suspend_enabled && uart_console(uport))
1935  console_stop(uport->cons);
1936 
1937  if (console_suspend_enabled || !uart_console(uport))
1938  uart_change_pm(state, 3);
1939 
1940  mutex_unlock(&port->mutex);
1941 
1942  return 0;
1943 }
1944 
1945 int uart_resume_port(struct uart_driver *drv, struct uart_port *uport)
1946 {
1947  struct uart_state *state = drv->state + uport->line;
1948  struct tty_port *port = &state->port;
1949  struct device *tty_dev;
1950  struct uart_match match = {uport, drv};
1951  struct ktermios termios;
1952 
1953  mutex_lock(&port->mutex);
1954 
1955  tty_dev = device_find_child(uport->dev, &match, serial_match_port);
1956  if (!uport->suspended && device_may_wakeup(tty_dev)) {
1957  if (uport->irq_wake) {
1958  disable_irq_wake(uport->irq);
1959  uport->irq_wake = 0;
1960  }
1961  mutex_unlock(&port->mutex);
1962  return 0;
1963  }
1964  uport->suspended = 0;
1965 
1966  /*
1967  * Re-enable the console device after suspending.
1968  */
1969  if (uart_console(uport)) {
1970  /*
1971  * First try to use the console cflag setting.
1972  */
1973  memset(&termios, 0, sizeof(struct ktermios));
1974  termios.c_cflag = uport->cons->cflag;
1975 
1976  /*
1977  * If that's unset, use the tty termios setting.
1978  */
1979  if (port->tty && termios.c_cflag == 0)
1980  termios = port->tty->termios;
1981 
1983  uart_change_pm(state, 0);
1984  uport->ops->set_termios(uport, &termios, NULL);
1986  console_start(uport->cons);
1987  }
1988 
1989  if (port->flags & ASYNC_SUSPENDED) {
1990  const struct uart_ops *ops = uport->ops;
1991  int ret;
1992 
1993  uart_change_pm(state, 0);
1994  spin_lock_irq(&uport->lock);
1995  ops->set_mctrl(uport, 0);
1996  spin_unlock_irq(&uport->lock);
1997  if (console_suspend_enabled || !uart_console(uport)) {
1998  /* Protected by port mutex for now */
1999  struct tty_struct *tty = port->tty;
2000  ret = ops->startup(uport);
2001  if (ret == 0) {
2002  if (tty)
2003  uart_change_speed(tty, state, NULL);
2004  spin_lock_irq(&uport->lock);
2005  ops->set_mctrl(uport, uport->mctrl);
2006  ops->start_tx(uport);
2007  spin_unlock_irq(&uport->lock);
2008  set_bit(ASYNCB_INITIALIZED, &port->flags);
2009  } else {
2010  /*
2011  * Failed to resume - maybe hardware went away?
2012  * Clear the "initialized" flag so we won't try
2013  * to call the low level drivers shutdown method.
2014  */
2015  uart_shutdown(tty, state);
2016  }
2017  }
2018 
2019  clear_bit(ASYNCB_SUSPENDED, &port->flags);
2020  }
2021 
2022  mutex_unlock(&port->mutex);
2023 
2024  return 0;
2025 }
2026 
2027 static inline void
2028 uart_report_port(struct uart_driver *drv, struct uart_port *port)
2029 {
2030  char address[64];
2031 
2032  switch (port->iotype) {
2033  case UPIO_PORT:
2034  snprintf(address, sizeof(address), "I/O 0x%lx", port->iobase);
2035  break;
2036  case UPIO_HUB6:
2037  snprintf(address, sizeof(address),
2038  "I/O 0x%lx offset 0x%x", port->iobase, port->hub6);
2039  break;
2040  case UPIO_MEM:
2041  case UPIO_MEM32:
2042  case UPIO_AU:
2043  case UPIO_TSI:
2044  snprintf(address, sizeof(address),
2045  "MMIO 0x%llx", (unsigned long long)port->mapbase);
2046  break;
2047  default:
2048  strlcpy(address, "*unknown*", sizeof(address));
2049  break;
2050  }
2051 
2052  printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n",
2053  port->dev ? dev_name(port->dev) : "",
2054  port->dev ? ": " : "",
2055  drv->dev_name,
2056  drv->tty_driver->name_base + port->line,
2057  address, port->irq, uart_type(port));
2058 }
2059 
2060 static void
2061 uart_configure_port(struct uart_driver *drv, struct uart_state *state,
2062  struct uart_port *port)
2063 {
2064  unsigned int flags;
2065 
2066  /*
2067  * If there isn't a port here, don't do anything further.
2068  */
2069  if (!port->iobase && !port->mapbase && !port->membase)
2070  return;
2071 
2072  /*
2073  * Now do the auto configuration stuff. Note that config_port
2074  * is expected to claim the resources and map the port for us.
2075  */
2076  flags = 0;
2077  if (port->flags & UPF_AUTO_IRQ)
2078  flags |= UART_CONFIG_IRQ;
2079  if (port->flags & UPF_BOOT_AUTOCONF) {
2080  if (!(port->flags & UPF_FIXED_TYPE)) {
2081  port->type = PORT_UNKNOWN;
2082  flags |= UART_CONFIG_TYPE;
2083  }
2084  port->ops->config_port(port, flags);
2085  }
2086 
2087  if (port->type != PORT_UNKNOWN) {
2088  unsigned long flags;
2089 
2090  uart_report_port(drv, port);
2091 
2092  /* Power up port for set_mctrl() */
2093  uart_change_pm(state, 0);
2094 
2095  /*
2096  * Ensure that the modem control lines are de-activated.
2097  * keep the DTR setting that is set in uart_set_options()
2098  * We probably don't need a spinlock around this, but
2099  */
2100  spin_lock_irqsave(&port->lock, flags);
2101  port->ops->set_mctrl(port, port->mctrl & TIOCM_DTR);
2102  spin_unlock_irqrestore(&port->lock, flags);
2103 
2104  /*
2105  * If this driver supports console, and it hasn't been
2106  * successfully registered yet, try to re-register it.
2107  * It may be that the port was not available.
2108  */
2109  if (port->cons && !(port->cons->flags & CON_ENABLED))
2110  register_console(port->cons);
2111 
2112  /*
2113  * Power down all ports by default, except the
2114  * console if we have one.
2115  */
2116  if (!uart_console(port))
2117  uart_change_pm(state, 3);
2118  }
2119 }
2120 
2121 #ifdef CONFIG_CONSOLE_POLL
2122 
2123 static int uart_poll_init(struct tty_driver *driver, int line, char *options)
2124 {
2125  struct uart_driver *drv = driver->driver_state;
2126  struct uart_state *state = drv->state + line;
2127  struct uart_port *port;
2128  int baud = 9600;
2129  int bits = 8;
2130  int parity = 'n';
2131  int flow = 'n';
2132  int ret;
2133 
2134  if (!state || !state->uart_port)
2135  return -1;
2136 
2137  port = state->uart_port;
2138  if (!(port->ops->poll_get_char && port->ops->poll_put_char))
2139  return -1;
2140 
2141  if (port->ops->poll_init) {
2142  struct tty_port *tport = &state->port;
2143 
2144  ret = 0;
2145  mutex_lock(&tport->mutex);
2146  /*
2147  * We don't set ASYNCB_INITIALIZED as we only initialized the
2148  * hw, e.g. state->xmit is still uninitialized.
2149  */
2150  if (!test_bit(ASYNCB_INITIALIZED, &tport->flags))
2151  ret = port->ops->poll_init(port);
2152  mutex_unlock(&tport->mutex);
2153  if (ret)
2154  return ret;
2155  }
2156 
2157  if (options) {
2158  uart_parse_options(options, &baud, &parity, &bits, &flow);
2159  return uart_set_options(port, NULL, baud, parity, bits, flow);
2160  }
2161 
2162  return 0;
2163 }
2164 
2165 static int uart_poll_get_char(struct tty_driver *driver, int line)
2166 {
2167  struct uart_driver *drv = driver->driver_state;
2168  struct uart_state *state = drv->state + line;
2169  struct uart_port *port;
2170 
2171  if (!state || !state->uart_port)
2172  return -1;
2173 
2174  port = state->uart_port;
2175  return port->ops->poll_get_char(port);
2176 }
2177 
2178 static void uart_poll_put_char(struct tty_driver *driver, int line, char ch)
2179 {
2180  struct uart_driver *drv = driver->driver_state;
2181  struct uart_state *state = drv->state + line;
2182  struct uart_port *port;
2183 
2184  if (!state || !state->uart_port)
2185  return;
2186 
2187  port = state->uart_port;
2188  port->ops->poll_put_char(port, ch);
2189 }
2190 #endif
2191 
2192 static const struct tty_operations uart_ops = {
2193  .open = uart_open,
2194  .close = uart_close,
2195  .write = uart_write,
2196  .put_char = uart_put_char,
2197  .flush_chars = uart_flush_chars,
2198  .write_room = uart_write_room,
2199  .chars_in_buffer= uart_chars_in_buffer,
2200  .flush_buffer = uart_flush_buffer,
2201  .ioctl = uart_ioctl,
2202  .throttle = uart_throttle,
2203  .unthrottle = uart_unthrottle,
2204  .send_xchar = uart_send_xchar,
2205  .set_termios = uart_set_termios,
2206  .set_ldisc = uart_set_ldisc,
2207  .stop = uart_stop,
2208  .start = uart_start,
2209  .hangup = uart_hangup,
2210  .break_ctl = uart_break_ctl,
2211  .wait_until_sent= uart_wait_until_sent,
2212 #ifdef CONFIG_PROC_FS
2213  .proc_fops = &uart_proc_fops,
2214 #endif
2215  .tiocmget = uart_tiocmget,
2216  .tiocmset = uart_tiocmset,
2217  .get_icount = uart_get_icount,
2218 #ifdef CONFIG_CONSOLE_POLL
2219  .poll_init = uart_poll_init,
2220  .poll_get_char = uart_poll_get_char,
2221  .poll_put_char = uart_poll_put_char,
2222 #endif
2223 };
2224 
2225 static const struct tty_port_operations uart_port_ops = {
2226  .activate = uart_port_activate,
2227  .shutdown = uart_port_shutdown,
2228  .carrier_raised = uart_carrier_raised,
2229  .dtr_rts = uart_dtr_rts,
2230 };
2231 
2246 {
2247  struct tty_driver *normal;
2248  int i, retval;
2249 
2250  BUG_ON(drv->state);
2251 
2252  /*
2253  * Maybe we should be using a slab cache for this, especially if
2254  * we have a large number of ports to handle.
2255  */
2256  drv->state = kzalloc(sizeof(struct uart_state) * drv->nr, GFP_KERNEL);
2257  if (!drv->state)
2258  goto out;
2259 
2260  normal = alloc_tty_driver(drv->nr);
2261  if (!normal)
2262  goto out_kfree;
2263 
2264  drv->tty_driver = normal;
2265 
2266  normal->driver_name = drv->driver_name;
2267  normal->name = drv->dev_name;
2268  normal->major = drv->major;
2269  normal->minor_start = drv->minor;
2270  normal->type = TTY_DRIVER_TYPE_SERIAL;
2271  normal->subtype = SERIAL_TYPE_NORMAL;
2272  normal->init_termios = tty_std_termios;
2273  normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
2274  normal->init_termios.c_ispeed = normal->init_termios.c_ospeed = 9600;
2276  normal->driver_state = drv;
2277  tty_set_operations(normal, &uart_ops);
2278 
2279  /*
2280  * Initialise the UART state(s).
2281  */
2282  for (i = 0; i < drv->nr; i++) {
2283  struct uart_state *state = drv->state + i;
2284  struct tty_port *port = &state->port;
2285 
2286  tty_port_init(port);
2287  port->ops = &uart_port_ops;
2288  port->close_delay = HZ / 2; /* .5 seconds */
2289  port->closing_wait = 30 * HZ;/* 30 seconds */
2290  }
2291 
2292  retval = tty_register_driver(normal);
2293  if (retval >= 0)
2294  return retval;
2295 
2296  put_tty_driver(normal);
2297 out_kfree:
2298  kfree(drv->state);
2299 out:
2300  return -ENOMEM;
2301 }
2302 
2313 {
2314  struct tty_driver *p = drv->tty_driver;
2316  put_tty_driver(p);
2317  kfree(drv->state);
2318  drv->state = NULL;
2319  drv->tty_driver = NULL;
2320 }
2321 
2322 struct tty_driver *uart_console_device(struct console *co, int *index)
2323 {
2324  struct uart_driver *p = co->data;
2325  *index = co->index;
2326  return p->tty_driver;
2327 }
2328 
2329 static ssize_t uart_get_attr_uartclk(struct device *dev,
2330  struct device_attribute *attr, char *buf)
2331 {
2332  int ret;
2333  struct tty_port *port = dev_get_drvdata(dev);
2334  struct uart_state *state = container_of(port, struct uart_state, port);
2335 
2336  mutex_lock(&state->port.mutex);
2337  ret = snprintf(buf, PAGE_SIZE, "%d\n", state->uart_port->uartclk);
2338  mutex_unlock(&state->port.mutex);
2339 
2340  return ret;
2341 }
2342 
2343 static DEVICE_ATTR(uartclk, S_IRUSR | S_IRGRP, uart_get_attr_uartclk, NULL);
2344 
2345 static struct attribute *tty_dev_attrs[] = {
2346  &dev_attr_uartclk.attr,
2347  NULL,
2348  };
2349 
2350 static const struct attribute_group tty_dev_attr_group = {
2351  .attrs = tty_dev_attrs,
2352  };
2353 
2354 static const struct attribute_group *tty_dev_attr_groups[] = {
2355  &tty_dev_attr_group,
2356  NULL
2357  };
2358 
2369 int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
2370 {
2371  struct uart_state *state;
2372  struct tty_port *port;
2373  int ret = 0;
2374  struct device *tty_dev;
2375 
2376  BUG_ON(in_interrupt());
2377 
2378  if (uport->line >= drv->nr)
2379  return -EINVAL;
2380 
2381  state = drv->state + uport->line;
2382  port = &state->port;
2383 
2384  mutex_lock(&port_mutex);
2385  mutex_lock(&port->mutex);
2386  if (state->uart_port) {
2387  ret = -EINVAL;
2388  goto out;
2389  }
2390 
2391  state->uart_port = uport;
2392  state->pm_state = -1;
2393 
2394  uport->cons = drv->cons;
2395  uport->state = state;
2396 
2397  /*
2398  * If this port is a console, then the spinlock is already
2399  * initialised.
2400  */
2401  if (!(uart_console(uport) && (uport->cons->flags & CON_ENABLED))) {
2402  spin_lock_init(&uport->lock);
2403  lockdep_set_class(&uport->lock, &port_lock_key);
2404  }
2405 
2406  uart_configure_port(drv, state, uport);
2407 
2408  /*
2409  * Register the port whether it's detected or not. This allows
2410  * setserial to be used to alter this ports parameters.
2411  */
2412  tty_dev = tty_port_register_device_attr(port, drv->tty_driver,
2413  uport->line, uport->dev, port, tty_dev_attr_groups);
2414  if (likely(!IS_ERR(tty_dev))) {
2415  device_set_wakeup_capable(tty_dev, 1);
2416  } else {
2417  printk(KERN_ERR "Cannot register tty device on line %d\n",
2418  uport->line);
2419  }
2420 
2421  /*
2422  * Ensure UPF_DEAD is not set.
2423  */
2424  uport->flags &= ~UPF_DEAD;
2425 
2426  out:
2427  mutex_unlock(&port->mutex);
2428  mutex_unlock(&port_mutex);
2429 
2430  return ret;
2431 }
2432 
2442 int uart_remove_one_port(struct uart_driver *drv, struct uart_port *uport)
2443 {
2444  struct uart_state *state = drv->state + uport->line;
2445  struct tty_port *port = &state->port;
2446 
2447  BUG_ON(in_interrupt());
2448 
2449  if (state->uart_port != uport)
2450  printk(KERN_ALERT "Removing wrong port: %p != %p\n",
2451  state->uart_port, uport);
2452 
2453  mutex_lock(&port_mutex);
2454 
2455  /*
2456  * Mark the port "dead" - this prevents any opens from
2457  * succeeding while we shut down the port.
2458  */
2459  mutex_lock(&port->mutex);
2460  uport->flags |= UPF_DEAD;
2461  mutex_unlock(&port->mutex);
2462 
2463  /*
2464  * Remove the devices from the tty layer
2465  */
2466  tty_unregister_device(drv->tty_driver, uport->line);
2467 
2468  if (port->tty)
2469  tty_vhangup(port->tty);
2470 
2471  /*
2472  * Free the port IO and memory resources, if any.
2473  */
2474  if (uport->type != PORT_UNKNOWN)
2475  uport->ops->release_port(uport);
2476 
2477  /*
2478  * Indicate that there isn't a port here anymore.
2479  */
2480  uport->type = PORT_UNKNOWN;
2481 
2482  state->uart_port = NULL;
2483  mutex_unlock(&port_mutex);
2484 
2485  return 0;
2486 }
2487 
2488 /*
2489  * Are the two ports equivalent?
2490  */
2491 int uart_match_port(struct uart_port *port1, struct uart_port *port2)
2492 {
2493  if (port1->iotype != port2->iotype)
2494  return 0;
2495 
2496  switch (port1->iotype) {
2497  case UPIO_PORT:
2498  return (port1->iobase == port2->iobase);
2499  case UPIO_HUB6:
2500  return (port1->iobase == port2->iobase) &&
2501  (port1->hub6 == port2->hub6);
2502  case UPIO_MEM:
2503  case UPIO_MEM32:
2504  case UPIO_AU:
2505  case UPIO_TSI:
2506  return (port1->mapbase == port2->mapbase);
2507  }
2508  return 0;
2509 }
2511 
2517 void uart_handle_dcd_change(struct uart_port *uport, unsigned int status)
2518 {
2519  struct uart_state *state = uport->state;
2520  struct tty_port *port = &state->port;
2521  struct tty_ldisc *ld = NULL;
2522  struct pps_event_time ts;
2523  struct tty_struct *tty = port->tty;
2524 
2525  if (tty)
2526  ld = tty_ldisc_ref(tty);
2527  if (ld && ld->ops->dcd_change)
2528  pps_get_ts(&ts);
2529 
2530  uport->icount.dcd++;
2531 #ifdef CONFIG_HARD_PPS
2532  if ((uport->flags & UPF_HARDPPS_CD) && status)
2533  hardpps();
2534 #endif
2535 
2536  if (port->flags & ASYNC_CHECK_CD) {
2537  if (status)
2539  else if (tty)
2540  tty_hangup(tty);
2541  }
2542 
2543  if (ld && ld->ops->dcd_change)
2544  ld->ops->dcd_change(tty, status, &ts);
2545  if (ld)
2546  tty_ldisc_deref(ld);
2547 }
2549 
2555 void uart_handle_cts_change(struct uart_port *uport, unsigned int status)
2556 {
2557  struct tty_port *port = &uport->state->port;
2558  struct tty_struct *tty = port->tty;
2559 
2560  uport->icount.cts++;
2561 
2562  if (tty_port_cts_enabled(port)) {
2563  if (tty->hw_stopped) {
2564  if (status) {
2565  tty->hw_stopped = 0;
2566  uport->ops->start_tx(uport);
2567  uart_write_wakeup(uport);
2568  }
2569  } else {
2570  if (!status) {
2571  tty->hw_stopped = 1;
2572  uport->ops->stop_tx(uport);
2573  }
2574  }
2575  }
2576 }
2578 
2591 void uart_insert_char(struct uart_port *port, unsigned int status,
2592  unsigned int overrun, unsigned int ch, unsigned int flag)
2593 {
2594  struct tty_struct *tty = port->state->port.tty;
2595 
2596  if ((status & port->ignore_status_mask & ~overrun) == 0)
2597  if (tty_insert_flip_char(tty, ch, flag) == 0)
2598  ++port->icount.buf_overrun;
2599 
2600  /*
2601  * Overrun is special. Since it's reported immediately,
2602  * it doesn't affect the current character.
2603  */
2604  if (status & ~port->ignore_status_mask & overrun)
2605  if (tty_insert_flip_char(tty, 0, TTY_OVERRUN) == 0)
2606  ++port->icount.buf_overrun;
2607 }
2609 
2617 
2618 MODULE_DESCRIPTION("Serial driver core");
2619 MODULE_LICENSE("GPL");