1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include <linux/module.h>
26#include <linux/tty.h>
27#include <linux/slab.h>
28#include <linux/init.h>
29#include <linux/console.h>
30#include <linux/serial_core.h>
31#include <linux/smp_lock.h>
32#include <linux/device.h>
33#include <linux/serial.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
42
43static DEFINE_MUTEX(port_mutex);
44
45
46
47
48
49static struct lock_class_key port_lock_key;
50
51#define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8)
52
53#define uart_users(state) ((state)->count + ((state)->info ? (state)->info->port.blocked_open : 0))
54
55#ifdef CONFIG_SERIAL_CORE_CONSOLE
56#define uart_console(port) ((port)->cons && (port)->cons->index == (port)->line)
57#else
58#define uart_console(port) (0)
59#endif
60
61static void uart_change_speed(struct uart_state *state,
62 struct ktermios *old_termios);
63static void uart_wait_until_sent(struct tty_struct *tty, int timeout);
64static void uart_change_pm(struct uart_state *state, int pm_state);
65
66
67
68
69
70void uart_write_wakeup(struct uart_port *port)
71{
72 struct uart_info *info = port->info;
73
74
75
76
77 BUG_ON(!info);
78 tasklet_schedule(&info->tlet);
79}
80
81static void uart_stop(struct tty_struct *tty)
82{
83 struct uart_state *state = tty->driver_data;
84 struct uart_port *port = state->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
92static void __uart_start(struct tty_struct *tty)
93{
94 struct uart_state *state = tty->driver_data;
95 struct uart_port *port = state->port;
96
97 if (!uart_circ_empty(&state->info->xmit) && state->info->xmit.buf &&
98 !tty->stopped && !tty->hw_stopped)
99 port->ops->start_tx(port);
100}
101
102static void uart_start(struct tty_struct *tty)
103{
104 struct uart_state *state = tty->driver_data;
105 struct uart_port *port = state->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
113static void uart_tasklet_action(unsigned long data)
114{
115 struct uart_state *state = (struct uart_state *)data;
116 tty_wakeup(state->info->port.tty);
117}
118
119static inline void
120uart_update_mctrl(struct uart_port *port, unsigned int set, unsigned int clear)
121{
122 unsigned long flags;
123 unsigned int old;
124
125 spin_lock_irqsave(&port->lock, flags);
126 old = port->mctrl;
127 port->mctrl = (old & ~clear) | set;
128 if (old != port->mctrl)
129 port->ops->set_mctrl(port, port->mctrl);
130 spin_unlock_irqrestore(&port->lock, flags);
131}
132
133#define uart_set_mctrl(port, set) uart_update_mctrl(port, set, 0)
134#define uart_clear_mctrl(port, clear) uart_update_mctrl(port, 0, clear)
135
136
137
138
139
140static int uart_startup(struct uart_state *state, int init_hw)
141{
142 struct uart_info *info = state->info;
143 struct uart_port *port = state->port;
144 unsigned long page;
145 int retval = 0;
146
147 if (info->flags & UIF_INITIALIZED)
148 return 0;
149
150
151
152
153
154
155 set_bit(TTY_IO_ERROR, &info->port.tty->flags);
156
157 if (port->type == PORT_UNKNOWN)
158 return 0;
159
160
161
162
163
164 if (!info->xmit.buf) {
165
166 page = get_zeroed_page(GFP_KERNEL);
167 if (!page)
168 return -ENOMEM;
169
170 info->xmit.buf = (unsigned char *) page;
171 uart_circ_clear(&info->xmit);
172 }
173
174 retval = port->ops->startup(port);
175 if (retval == 0) {
176 if (init_hw) {
177
178
179
180 uart_change_speed(state, NULL);
181
182
183
184
185
186 if (info->port.tty->termios->c_cflag & CBAUD)
187 uart_set_mctrl(port, TIOCM_RTS | TIOCM_DTR);
188 }
189
190 if (info->flags & UIF_CTS_FLOW) {
191 spin_lock_irq(&port->lock);
192 if (!(port->ops->get_mctrl(port) & TIOCM_CTS))
193 info->port.tty->hw_stopped = 1;
194 spin_unlock_irq(&port->lock);
195 }
196
197 info->flags |= UIF_INITIALIZED;
198
199 clear_bit(TTY_IO_ERROR, &info->port.tty->flags);
200 }
201
202 if (retval && capable(CAP_SYS_ADMIN))
203 retval = 0;
204
205 return retval;
206}
207
208
209
210
211
212
213static void uart_shutdown(struct uart_state *state)
214{
215 struct uart_info *info = state->info;
216 struct uart_port *port = state->port;
217
218
219
220
221 if (info->port.tty)
222 set_bit(TTY_IO_ERROR, &info->port.tty->flags);
223
224 if (info->flags & UIF_INITIALIZED) {
225 info->flags &= ~UIF_INITIALIZED;
226
227
228
229
230 if (!info->port.tty || (info->port.tty->termios->c_cflag & HUPCL))
231 uart_clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
232
233
234
235
236
237
238
239
240 wake_up_interruptible(&info->delta_msr_wait);
241
242
243
244
245 port->ops->shutdown(port);
246
247
248
249
250 synchronize_irq(port->irq);
251 }
252
253
254
255
256 tasklet_kill(&info->tlet);
257
258
259
260
261 if (info->xmit.buf) {
262 free_page((unsigned long)info->xmit.buf);
263 info->xmit.buf = NULL;
264 }
265}
266
267
268
269
270
271
272
273
274
275
276void
277uart_update_timeout(struct uart_port *port, unsigned int cflag,
278 unsigned int baud)
279{
280 unsigned int bits;
281
282
283 switch (cflag & CSIZE) {
284 case CS5:
285 bits = 7;
286 break;
287 case CS6:
288 bits = 8;
289 break;
290 case CS7:
291 bits = 9;
292 break;
293 default:
294 bits = 10;
295 break;
296 }
297
298 if (cflag & CSTOPB)
299 bits++;
300 if (cflag & PARENB)
301 bits++;
302
303
304
305
306 bits = bits * port->fifosize;
307
308
309
310
311
312 port->timeout = (HZ * bits) / baud + HZ/50;
313}
314
315EXPORT_SYMBOL(uart_update_timeout);
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336unsigned int
337uart_get_baud_rate(struct uart_port *port, struct ktermios *termios,
338 struct ktermios *old, unsigned int min, unsigned int max)
339{
340 unsigned int try, baud, altbaud = 38400;
341 int hung_up = 0;
342 upf_t flags = port->flags & UPF_SPD_MASK;
343
344 if (flags == UPF_SPD_HI)
345 altbaud = 57600;
346 if (flags == UPF_SPD_VHI)
347 altbaud = 115200;
348 if (flags == UPF_SPD_SHI)
349 altbaud = 230400;
350 if (flags == UPF_SPD_WARP)
351 altbaud = 460800;
352
353 for (try = 0; try < 2; try++) {
354 baud = tty_termios_baud_rate(termios);
355
356
357
358
359
360 if (baud == 38400)
361 baud = altbaud;
362
363
364
365
366 if (baud == 0) {
367 hung_up = 1;
368 baud = 9600;
369 }
370
371 if (baud >= min && baud <= max)
372 return baud;
373
374
375
376
377
378 termios->c_cflag &= ~CBAUD;
379 if (old) {
380 baud = tty_termios_baud_rate(old);
381 if (!hung_up)
382 tty_termios_encode_baud_rate(termios,
383 baud, baud);
384 old = NULL;
385 continue;
386 }
387
388
389
390
391
392 if (!hung_up)
393 tty_termios_encode_baud_rate(termios, 9600, 9600);
394 }
395
396 return 0;
397}
398
399EXPORT_SYMBOL(uart_get_baud_rate);
400
401
402
403
404
405
406
407
408unsigned int
409uart_get_divisor(struct uart_port *port, unsigned int baud)
410{
411 unsigned int quot;
412
413
414
415
416 if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST)
417 quot = port->custom_divisor;
418 else
419 quot = (port->uartclk + (8 * baud)) / (16 * baud);
420
421 return quot;
422}
423
424EXPORT_SYMBOL(uart_get_divisor);
425
426
427static void
428uart_change_speed(struct uart_state *state, struct ktermios *old_termios)
429{
430 struct tty_struct *tty = state->info->port.tty;
431 struct uart_port *port = state->port;
432 struct ktermios *termios;
433
434
435
436
437
438 if (!tty || !tty->termios || port->type == PORT_UNKNOWN)
439 return;
440
441 termios = tty->termios;
442
443
444
445
446 if (termios->c_cflag & CRTSCTS)
447 state->info->flags |= UIF_CTS_FLOW;
448 else
449 state->info->flags &= ~UIF_CTS_FLOW;
450
451 if (termios->c_cflag & CLOCAL)
452 state->info->flags &= ~UIF_CHECK_CD;
453 else
454 state->info->flags |= UIF_CHECK_CD;
455
456 port->ops->set_termios(port, termios, old_termios);
457}
458
459static inline int
460__uart_put_char(struct uart_port *port, struct circ_buf *circ, unsigned char c)
461{
462 unsigned long flags;
463 int ret = 0;
464
465 if (!circ->buf)
466 return 0;
467
468 spin_lock_irqsave(&port->lock, flags);
469 if (uart_circ_chars_free(circ) != 0) {
470 circ->buf[circ->head] = c;
471 circ->head = (circ->head + 1) & (UART_XMIT_SIZE - 1);
472 ret = 1;
473 }
474 spin_unlock_irqrestore(&port->lock, flags);
475 return ret;
476}
477
478static int uart_put_char(struct tty_struct *tty, unsigned char ch)
479{
480 struct uart_state *state = tty->driver_data;
481
482 return __uart_put_char(state->port, &state->info->xmit, ch);
483}
484
485static void uart_flush_chars(struct tty_struct *tty)
486{
487 uart_start(tty);
488}
489
490static int
491uart_write(struct tty_struct *tty, const unsigned char *buf, int count)
492{
493 struct uart_state *state = tty->driver_data;
494 struct uart_port *port;
495 struct circ_buf *circ;
496 unsigned long flags;
497 int c, ret = 0;
498
499
500
501
502
503 if (!state || !state->info) {
504 WARN_ON(1);
505 return -EL3HLT;
506 }
507
508 port = state->port;
509 circ = &state->info->xmit;
510
511 if (!circ->buf)
512 return 0;
513
514 spin_lock_irqsave(&port->lock, flags);
515 while (1) {
516 c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE);
517 if (count < c)
518 c = count;
519 if (c <= 0)
520 break;
521 memcpy(circ->buf + circ->head, buf, c);
522 circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1);
523 buf += c;
524 count -= c;
525 ret += c;
526 }
527 spin_unlock_irqrestore(&port->lock, flags);
528
529 uart_start(tty);
530 return ret;
531}
532
533static int uart_write_room(struct tty_struct *tty)
534{
535 struct uart_state *state = tty->driver_data;
536 unsigned long flags;
537 int ret;
538
539 spin_lock_irqsave(&state->port->lock, flags);
540 ret = uart_circ_chars_free(&state->info->xmit);
541 spin_unlock_irqrestore(&state->port->lock, flags);
542 return ret;
543}
544
545static int uart_chars_in_buffer(struct tty_struct *tty)
546{
547 struct uart_state *state = tty->driver_data;
548 unsigned long flags;
549 int ret;
550
551 spin_lock_irqsave(&state->port->lock, flags);
552 ret = uart_circ_chars_pending(&state->info->xmit);
553 spin_unlock_irqrestore(&state->port->lock, flags);
554 return ret;
555}
556
557static void uart_flush_buffer(struct tty_struct *tty)
558{
559 struct uart_state *state = tty->driver_data;
560 struct uart_port *port;
561 unsigned long flags;
562
563
564
565
566
567 if (!state || !state->info) {
568 WARN_ON(1);
569 return;
570 }
571
572 port = state->port;
573 pr_debug("uart_flush_buffer(%d) called\n", tty->index);
574
575 spin_lock_irqsave(&port->lock, flags);
576 uart_circ_clear(&state->info->xmit);
577 if (port->ops->flush_buffer)
578 port->ops->flush_buffer(port);
579 spin_unlock_irqrestore(&port->lock, flags);
580 tty_wakeup(tty);
581}
582
583
584
585
586
587static void uart_send_xchar(struct tty_struct *tty, char ch)
588{
589 struct uart_state *state = tty->driver_data;
590 struct uart_port *port = state->port;
591 unsigned long flags;
592
593 if (port->ops->send_xchar)
594 port->ops->send_xchar(port, ch);
595 else {
596 port->x_char = ch;
597 if (ch) {
598 spin_lock_irqsave(&port->lock, flags);
599 port->ops->start_tx(port);
600 spin_unlock_irqrestore(&port->lock, flags);
601 }
602 }
603}
604
605static void uart_throttle(struct tty_struct *tty)
606{
607 struct uart_state *state = tty->driver_data;
608
609 if (I_IXOFF(tty))
610 uart_send_xchar(tty, STOP_CHAR(tty));
611
612 if (tty->termios->c_cflag & CRTSCTS)
613 uart_clear_mctrl(state->port, TIOCM_RTS);
614}
615
616static void uart_unthrottle(struct tty_struct *tty)
617{
618 struct uart_state *state = tty->driver_data;
619 struct uart_port *port = state->port;
620
621 if (I_IXOFF(tty)) {
622 if (port->x_char)
623 port->x_char = 0;
624 else
625 uart_send_xchar(tty, START_CHAR(tty));
626 }
627
628 if (tty->termios->c_cflag & CRTSCTS)
629 uart_set_mctrl(port, TIOCM_RTS);
630}
631
632static int uart_get_info(struct uart_state *state,
633 struct serial_struct __user *retinfo)
634{
635 struct uart_port *port = state->port;
636 struct serial_struct tmp;
637
638 memset(&tmp, 0, sizeof(tmp));
639
640
641
642 mutex_lock(&state->mutex);
643
644 tmp.type = port->type;
645 tmp.line = port->line;
646 tmp.port = port->iobase;
647 if (HIGH_BITS_OFFSET)
648 tmp.port_high = (long) port->iobase >> HIGH_BITS_OFFSET;
649 tmp.irq = port->irq;
650 tmp.flags = port->flags;
651 tmp.xmit_fifo_size = port->fifosize;
652 tmp.baud_base = port->uartclk / 16;
653 tmp.close_delay = state->close_delay / 10;
654 tmp.closing_wait = state->closing_wait == USF_CLOSING_WAIT_NONE ?
655 ASYNC_CLOSING_WAIT_NONE :
656 state->closing_wait / 10;
657 tmp.custom_divisor = port->custom_divisor;
658 tmp.hub6 = port->hub6;
659 tmp.io_type = port->iotype;
660 tmp.iomem_reg_shift = port->regshift;
661 tmp.iomem_base = (void *)(unsigned long)port->mapbase;
662
663 mutex_unlock(&state->mutex);
664
665 if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
666 return -EFAULT;
667 return 0;
668}
669
670static int uart_set_info(struct uart_state *state,
671 struct serial_struct __user *newinfo)
672{
673 struct serial_struct new_serial;
674 struct uart_port *port = state->port;
675 unsigned long new_port;
676 unsigned int change_irq, change_port, closing_wait;
677 unsigned int old_custom_divisor, close_delay;
678 upf_t old_flags, new_flags;
679 int retval = 0;
680
681 if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
682 return -EFAULT;
683
684 new_port = new_serial.port;
685 if (HIGH_BITS_OFFSET)
686 new_port += (unsigned long) new_serial.port_high << HIGH_BITS_OFFSET;
687
688 new_serial.irq = irq_canonicalize(new_serial.irq);
689 close_delay = new_serial.close_delay * 10;
690 closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
691 USF_CLOSING_WAIT_NONE : new_serial.closing_wait * 10;
692
693
694
695
696
697
698
699
700 mutex_lock(&state->mutex);
701
702 change_irq = !(port->flags & UPF_FIXED_PORT)
703 && new_serial.irq != port->irq;
704
705
706
707
708
709
710 change_port = !(port->flags & UPF_FIXED_PORT)
711 && (new_port != port->iobase ||
712 (unsigned long)new_serial.iomem_base != port->mapbase ||
713 new_serial.hub6 != port->hub6 ||
714 new_serial.io_type != port->iotype ||
715 new_serial.iomem_reg_shift != port->regshift ||
716 new_serial.type != port->type);
717
718 old_flags = port->flags;
719 new_flags = new_serial.flags;
720 old_custom_divisor = port->custom_divisor;
721
722 if (!capable(CAP_SYS_ADMIN)) {
723 retval = -EPERM;
724 if (change_irq || change_port ||
725 (new_serial.baud_base != port->uartclk / 16) ||
726 (close_delay != state->close_delay) ||
727 (closing_wait != state->closing_wait) ||
728 (new_serial.xmit_fifo_size &&
729 new_serial.xmit_fifo_size != port->fifosize) ||
730 (((new_flags ^ old_flags) & ~UPF_USR_MASK) != 0))
731 goto exit;
732 port->flags = ((port->flags & ~UPF_USR_MASK) |
733 (new_flags & UPF_USR_MASK));
734 port->custom_divisor = new_serial.custom_divisor;
735 goto check_and_exit;
736 }
737
738
739
740
741 if (port->ops->verify_port)
742 retval = port->ops->verify_port(port, &new_serial);
743
744 if ((new_serial.irq >= nr_irqs) || (new_serial.irq < 0) ||
745 (new_serial.baud_base < 9600))
746 retval = -EINVAL;
747
748 if (retval)
749 goto exit;
750
751 if (change_port || change_irq) {
752 retval = -EBUSY;
753
754
755
756
757 if (uart_users(state) > 1)
758 goto exit;
759
760
761
762
763
764 uart_shutdown(state);
765 }
766
767 if (change_port) {
768 unsigned long old_iobase, old_mapbase;
769 unsigned int old_type, old_iotype, old_hub6, old_shift;
770
771 old_iobase = port->iobase;
772 old_mapbase = port->mapbase;
773 old_type = port->type;
774 old_hub6 = port->hub6;
775 old_iotype = port->iotype;
776 old_shift = port->regshift;
777
778
779
780
781 if (old_type != PORT_UNKNOWN)
782 port->ops->release_port(port);
783
784 port->iobase = new_port;
785 port->type = new_serial.type;
786 port->hub6 = new_serial.hub6;
787 port->iotype = new_serial.io_type;
788 port->regshift = new_serial.iomem_reg_shift;
789 port->mapbase = (unsigned long)new_serial.iomem_base;
790
791
792
793
794 if (port->type != PORT_UNKNOWN) {
795 retval = port->ops->request_port(port);
796 } else {
797
798 retval = 0;
799 }
800
801
802
803
804
805 if (retval && old_type != PORT_UNKNOWN) {
806 port->iobase = old_iobase;
807 port->type = old_type;
808 port->hub6 = old_hub6;
809 port->iotype = old_iotype;
810 port->regshift = old_shift;
811 port->mapbase = old_mapbase;
812 retval = port->ops->request_port(port);
813
814
815
816
817 if (retval)
818 port->type = PORT_UNKNOWN;
819
820
821
822
823 retval = -EBUSY;
824
825 goto exit;
826 }
827 }
828
829 if (change_irq)
830 port->irq = new_serial.irq;
831 if (!(port->flags & UPF_FIXED_PORT))
832 port->uartclk = new_serial.baud_base * 16;
833 port->flags = (port->flags & ~UPF_CHANGE_MASK) |
834 (new_flags & UPF_CHANGE_MASK);
835 port->custom_divisor = new_serial.custom_divisor;
836 state->close_delay = close_delay;
837 state->closing_wait = closing_wait;
838 if (new_serial.xmit_fifo_size)
839 port->fifosize = new_serial.xmit_fifo_size;
840 if (state->info->port.tty)
841 state->info->port.tty->low_latency =
842 (port->flags & UPF_LOW_LATENCY) ? 1 : 0;
843
844 check_and_exit:
845 retval = 0;
846 if (port->type == PORT_UNKNOWN)
847 goto exit;
848 if (state->info->flags & UIF_INITIALIZED) {
849 if (((old_flags ^ port->flags) & UPF_SPD_MASK) ||
850 old_custom_divisor != port->custom_divisor) {
851
852
853
854
855
856 if (port->flags & UPF_SPD_MASK) {
857 char buf[64];
858 printk(KERN_NOTICE
859 "%s sets custom speed on %s. This "
860 "is deprecated.\n", current->comm,
861 tty_name(state->info->port.tty, buf));
862 }
863 uart_change_speed(state, NULL);
864 }
865 } else
866 retval = uart_startup(state, 1);
867 exit:
868 mutex_unlock(&state->mutex);
869 return retval;
870}
871
872
873
874
875
876
877static int uart_get_lsr_info(struct uart_state *state,
878 unsigned int __user *value)
879{
880 struct uart_port *port = state->port;
881 unsigned int result;
882
883 result = port->ops->tx_empty(port);
884
885
886
887
888
889
890
891 if (port->x_char ||
892 ((uart_circ_chars_pending(&state->info->xmit) > 0) &&
893 !state->info->port.tty->stopped && !state->info->port.tty->hw_stopped))
894 result &= ~TIOCSER_TEMT;
895
896 return put_user(result, value);
897}
898
899static int uart_tiocmget(struct tty_struct *tty, struct file *file)
900{
901 struct uart_state *state = tty->driver_data;
902 struct uart_port *port = state->port;
903 int result = -EIO;
904
905 mutex_lock(&state->mutex);
906 if ((!file || !tty_hung_up_p(file)) &&
907 !(tty->flags & (1 << TTY_IO_ERROR))) {
908 result = port->mctrl;
909
910 spin_lock_irq(&port->lock);
911 result |= port->ops->get_mctrl(port);
912 spin_unlock_irq(&port->lock);
913 }
914 mutex_unlock(&state->mutex);
915
916 return result;
917}
918
919static int
920uart_tiocmset(struct tty_struct *tty, struct file *file,
921 unsigned int set, unsigned int clear)
922{
923 struct uart_state *state = tty->driver_data;
924 struct uart_port *port = state->port;
925 int ret = -EIO;
926
927 mutex_lock(&state->mutex);
928 if ((!file || !tty_hung_up_p(file)) &&
929 !(tty->flags & (1 << TTY_IO_ERROR))) {
930 uart_update_mctrl(port, set, clear);
931 ret = 0;
932 }
933 mutex_unlock(&state->mutex);
934 return ret;
935}
936
937static int uart_break_ctl(struct tty_struct *tty, int break_state)
938{
939 struct uart_state *state = tty->driver_data;
940 struct uart_port *port = state->port;
941
942 mutex_lock(&state->mutex);
943
944 if (port->type != PORT_UNKNOWN)
945 port->ops->break_ctl(port, break_state);
946
947 mutex_unlock(&state->mutex);
948 return 0;
949}
950
951static int uart_do_autoconfig(struct uart_state *state)
952{
953 struct uart_port *port = state->port;
954 int flags, ret;
955
956 if (!capable(CAP_SYS_ADMIN))
957 return -EPERM;
958
959
960
961
962
963
964 if (mutex_lock_interruptible(&state->mutex))
965 return -ERESTARTSYS;
966
967 ret = -EBUSY;
968 if (uart_users(state) == 1) {
969 uart_shutdown(state);
970
971
972
973
974
975 if (port->type != PORT_UNKNOWN)
976 port->ops->release_port(port);
977
978 flags = UART_CONFIG_TYPE;
979 if (port->flags & UPF_AUTO_IRQ)
980 flags |= UART_CONFIG_IRQ;
981
982
983
984
985
986 port->ops->config_port(port, flags);
987
988 ret = uart_startup(state, 1);
989 }
990 mutex_unlock(&state->mutex);
991 return ret;
992}
993
994
995
996
997
998
999
1000static int
1001uart_wait_modem_status(struct uart_state *state, unsigned long arg)
1002{
1003 struct uart_port *port = state->port;
1004 DECLARE_WAITQUEUE(wait, current);
1005 struct uart_icount cprev, cnow;
1006 int ret;
1007
1008
1009
1010
1011 spin_lock_irq(&port->lock);
1012 memcpy(&cprev, &port->icount, sizeof(struct uart_icount));
1013
1014
1015
1016
1017 port->ops->enable_ms(port);
1018 spin_unlock_irq(&port->lock);
1019
1020 add_wait_queue(&state->info->delta_msr_wait, &wait);
1021 for (;;) {
1022 spin_lock_irq(&port->lock);
1023 memcpy(&cnow, &port->icount, sizeof(struct uart_icount));
1024 spin_unlock_irq(&port->lock);
1025
1026 set_current_state(TASK_INTERRUPTIBLE);
1027
1028 if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
1029 ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
1030 ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) ||
1031 ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) {
1032 ret = 0;
1033 break;
1034 }
1035
1036 schedule();
1037
1038
1039 if (signal_pending(current)) {
1040 ret = -ERESTARTSYS;
1041 break;
1042 }
1043
1044 cprev = cnow;
1045 }
1046
1047 current->state = TASK_RUNNING;
1048 remove_wait_queue(&state->info->delta_msr_wait, &wait);
1049
1050 return ret;
1051}
1052
1053
1054
1055
1056
1057
1058
1059static int uart_get_count(struct uart_state *state,
1060 struct serial_icounter_struct __user *icnt)
1061{
1062 struct serial_icounter_struct icount;
1063 struct uart_icount cnow;
1064 struct uart_port *port = state->port;
1065
1066 spin_lock_irq(&port->lock);
1067 memcpy(&cnow, &port->icount, sizeof(struct uart_icount));
1068 spin_unlock_irq(&port->lock);
1069
1070 icount.cts = cnow.cts;
1071 icount.dsr = cnow.dsr;
1072 icount.rng = cnow.rng;
1073 icount.dcd = cnow.dcd;
1074 icount.rx = cnow.rx;
1075 icount.tx = cnow.tx;
1076 icount.frame = cnow.frame;
1077 icount.overrun = cnow.overrun;
1078 icount.parity = cnow.parity;
1079 icount.brk = cnow.brk;
1080 icount.buf_overrun = cnow.buf_overrun;
1081
1082 return copy_to_user(icnt, &icount, sizeof(icount)) ? -EFAULT : 0;
1083}
1084
1085
1086
1087
1088static int
1089uart_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd,
1090 unsigned long arg)
1091{
1092 struct uart_state *state = tty->driver_data;
1093 void __user *uarg = (void __user *)arg;
1094 int ret = -ENOIOCTLCMD;
1095
1096
1097
1098
1099
1100 switch (cmd) {
1101 case TIOCGSERIAL:
1102 ret = uart_get_info(state, uarg);
1103 break;
1104
1105 case TIOCSSERIAL:
1106 ret = uart_set_info(state, uarg);
1107 break;
1108
1109 case TIOCSERCONFIG:
1110 ret = uart_do_autoconfig(state);
1111 break;
1112
1113 case TIOCSERGWILD:
1114 case TIOCSERSWILD:
1115 ret = 0;
1116 break;
1117 }
1118
1119 if (ret != -ENOIOCTLCMD)
1120 goto out;
1121
1122 if (tty->flags & (1 << TTY_IO_ERROR)) {
1123 ret = -EIO;
1124 goto out;
1125 }
1126
1127
1128
1129
1130 switch (cmd) {
1131 case TIOCMIWAIT:
1132 ret = uart_wait_modem_status(state, arg);
1133 break;
1134
1135 case TIOCGICOUNT:
1136 ret = uart_get_count(state, uarg);
1137 break;
1138 }
1139
1140 if (ret != -ENOIOCTLCMD)
1141 goto out;
1142
1143 mutex_lock(&state->mutex);
1144
1145 if (tty_hung_up_p(filp)) {
1146 ret = -EIO;
1147 goto out_up;
1148 }
1149
1150
1151
1152
1153
1154 switch (cmd) {
1155 case TIOCSERGETLSR:
1156 ret = uart_get_lsr_info(state, uarg);
1157 break;
1158
1159 default: {
1160 struct uart_port *port = state->port;
1161 if (port->ops->ioctl)
1162 ret = port->ops->ioctl(port, cmd, arg);
1163 break;
1164 }
1165 }
1166out_up:
1167 mutex_unlock(&state->mutex);
1168out:
1169 return ret;
1170}
1171
1172static void uart_set_ldisc(struct tty_struct *tty)
1173{
1174 struct uart_state *state = tty->driver_data;
1175 struct uart_port *port = state->port;
1176
1177 if (port->ops->set_ldisc)
1178 port->ops->set_ldisc(port);
1179}
1180
1181static void uart_set_termios(struct tty_struct *tty,
1182 struct ktermios *old_termios)
1183{
1184 struct uart_state *state = tty->driver_data;
1185 unsigned long flags;
1186 unsigned int cflag = tty->termios->c_cflag;
1187
1188
1189
1190
1191
1192
1193
1194
1195#define RELEVANT_IFLAG(iflag) ((iflag) & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
1196 if ((cflag ^ old_termios->c_cflag) == 0 &&
1197 tty->termios->c_ospeed == old_termios->c_ospeed &&
1198 tty->termios->c_ispeed == old_termios->c_ispeed &&
1199 RELEVANT_IFLAG(tty->termios->c_iflag ^ old_termios->c_iflag) == 0) {
1200 return;
1201 }
1202
1203 uart_change_speed(state, old_termios);
1204
1205
1206 if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD))
1207 uart_clear_mctrl(state->port, TIOCM_RTS | TIOCM_DTR);
1208
1209
1210 if (!(old_termios->c_cflag & CBAUD) && (cflag & CBAUD)) {
1211 unsigned int mask = TIOCM_DTR;
1212 if (!(cflag & CRTSCTS) ||
1213 !test_bit(TTY_THROTTLED, &tty->flags))
1214 mask |= TIOCM_RTS;
1215 uart_set_mctrl(state->port, mask);
1216 }
1217
1218
1219 if ((old_termios->c_cflag & CRTSCTS) && !(cflag & CRTSCTS)) {
1220 spin_lock_irqsave(&state->port->lock, flags);
1221 tty->hw_stopped = 0;
1222 __uart_start(tty);
1223 spin_unlock_irqrestore(&state->port->lock, flags);
1224 }
1225
1226
1227 if (!(old_termios->c_cflag & CRTSCTS) && (cflag & CRTSCTS)) {
1228 spin_lock_irqsave(&state->port->lock, flags);
1229 if (!(state->port->ops->get_mctrl(state->port) & TIOCM_CTS)) {
1230 tty->hw_stopped = 1;
1231 state->port->ops->stop_tx(state->port);
1232 }
1233 spin_unlock_irqrestore(&state->port->lock, flags);
1234 }
1235#if 0
1236
1237
1238
1239
1240
1241
1242 if (!(old_termios->c_cflag & CLOCAL) &&
1243 (tty->termios->c_cflag & CLOCAL))
1244 wake_up_interruptible(&state->info->port.open_wait);
1245#endif
1246}
1247
1248
1249
1250
1251
1252
1253static void uart_close(struct tty_struct *tty, struct file *filp)
1254{
1255 struct uart_state *state = tty->driver_data;
1256 struct uart_port *port;
1257
1258 BUG_ON(!kernel_locked());
1259
1260 if (!state || !state->port)
1261 return;
1262
1263 port = state->port;
1264
1265 pr_debug("uart_close(%d) called\n", port->line);
1266
1267 mutex_lock(&state->mutex);
1268
1269 if (tty_hung_up_p(filp))
1270 goto done;
1271
1272 if ((tty->count == 1) && (state->count != 1)) {
1273
1274
1275
1276
1277
1278
1279
1280 printk(KERN_ERR "uart_close: bad serial port count; tty->count is 1, "
1281 "state->count is %d\n", state->count);
1282 state->count = 1;
1283 }
1284 if (--state->count < 0) {
1285 printk(KERN_ERR "uart_close: bad serial port count for %s: %d\n",
1286 tty->name, state->count);
1287 state->count = 0;
1288 }
1289 if (state->count)
1290 goto done;
1291
1292
1293
1294
1295
1296
1297 tty->closing = 1;
1298
1299 if (state->closing_wait != USF_CLOSING_WAIT_NONE)
1300 tty_wait_until_sent(tty, msecs_to_jiffies(state->closing_wait));
1301
1302
1303
1304
1305
1306 if (state->info->flags & UIF_INITIALIZED) {
1307 unsigned long flags;
1308 spin_lock_irqsave(&port->lock, flags);
1309 port->ops->stop_rx(port);
1310 spin_unlock_irqrestore(&port->lock, flags);
1311
1312
1313
1314
1315
1316 uart_wait_until_sent(tty, port->timeout);
1317 }
1318
1319 uart_shutdown(state);
1320 uart_flush_buffer(tty);
1321
1322 tty_ldisc_flush(tty);
1323
1324 tty->closing = 0;
1325 state->info->port.tty = NULL;
1326
1327 if (state->info->port.blocked_open) {
1328 if (state->close_delay)
1329 msleep_interruptible(state->close_delay);
1330 } else if (!uart_console(port)) {
1331 uart_change_pm(state, 3);
1332 }
1333
1334
1335
1336
1337 state->info->flags &= ~UIF_NORMAL_ACTIVE;
1338 wake_up_interruptible(&state->info->port.open_wait);
1339
1340 done:
1341 mutex_unlock(&state->mutex);
1342}
1343
1344static void uart_wait_until_sent(struct tty_struct *tty, int timeout)
1345{
1346 struct uart_state *state = tty->driver_data;
1347 struct uart_port *port = state->port;
1348 unsigned long char_time, expire;
1349
1350 if (port->type == PORT_UNKNOWN || port->fifosize == 0)
1351 return;
1352
1353 lock_kernel();
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363 char_time = (port->timeout - HZ/50) / port->fifosize;
1364 char_time = char_time / 5;
1365 if (char_time == 0)
1366 char_time = 1;
1367 if (timeout && timeout < char_time)
1368 char_time = timeout;
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379 if (timeout == 0 || timeout > 2 * port->timeout)
1380 timeout = 2 * port->timeout;
1381
1382 expire = jiffies + timeout;
1383
1384 pr_debug("uart_wait_until_sent(%d), jiffies=%lu, expire=%lu...\n",
1385 port->line, jiffies, expire);
1386
1387
1388
1389
1390
1391
1392 while (!port->ops->tx_empty(port)) {
1393 msleep_interruptible(jiffies_to_msecs(char_time));
1394 if (signal_pending(current))
1395 break;
1396 if (time_after(jiffies, expire))
1397 break;
1398 }
1399 set_current_state(TASK_RUNNING);
1400 unlock_kernel();
1401}
1402
1403
1404
1405
1406
1407
1408
1409static void uart_hangup(struct tty_struct *tty)
1410{
1411 struct uart_state *state = tty->driver_data;
1412
1413 BUG_ON(!kernel_locked());
1414 pr_debug("uart_hangup(%d)\n", state->port->line);
1415
1416 mutex_lock(&state->mutex);
1417 if (state->info && state->info->flags & UIF_NORMAL_ACTIVE) {
1418 uart_flush_buffer(tty);
1419 uart_shutdown(state);
1420 state->count = 0;
1421 state->info->flags &= ~UIF_NORMAL_ACTIVE;
1422 state->info->port.tty = NULL;
1423 wake_up_interruptible(&state->info->port.open_wait);
1424 wake_up_interruptible(&state->info->delta_msr_wait);
1425 }
1426 mutex_unlock(&state->mutex);
1427}
1428
1429
1430
1431
1432
1433
1434
1435static void uart_update_termios(struct uart_state *state)
1436{
1437 struct tty_struct *tty = state->info->port.tty;
1438 struct uart_port *port = state->port;
1439
1440 if (uart_console(port) && port->cons->cflag) {
1441 tty->termios->c_cflag = port->cons->cflag;
1442 port->cons->cflag = 0;
1443 }
1444
1445
1446
1447
1448
1449
1450 if (!(tty->flags & (1 << TTY_IO_ERROR))) {
1451
1452
1453
1454 uart_change_speed(state, NULL);
1455
1456
1457
1458
1459 if (tty->termios->c_cflag & CBAUD)
1460 uart_set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
1461 }
1462}
1463
1464
1465
1466
1467
1468static int
1469uart_block_til_ready(struct file *filp, struct uart_state *state)
1470{
1471 DECLARE_WAITQUEUE(wait, current);
1472 struct uart_info *info = state->info;
1473 struct uart_port *port = state->port;
1474 unsigned int mctrl;
1475
1476 info->port.blocked_open++;
1477 state->count--;
1478
1479 add_wait_queue(&info->port.open_wait, &wait);
1480 while (1) {
1481 set_current_state(TASK_INTERRUPTIBLE);
1482
1483
1484
1485
1486 if (tty_hung_up_p(filp) || info->port.tty == NULL)
1487 break;
1488
1489
1490
1491
1492 if (!(info->flags & UIF_INITIALIZED))
1493 break;
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504 if ((filp->f_flags & O_NONBLOCK) ||
1505 (info->port.tty->termios->c_cflag & CLOCAL) ||
1506 (info->port.tty->flags & (1 << TTY_IO_ERROR)))
1507 break;
1508
1509
1510
1511
1512
1513
1514 if (info->port.tty->termios->c_cflag & CBAUD)
1515 uart_set_mctrl(port, TIOCM_DTR);
1516
1517
1518
1519
1520
1521 spin_lock_irq(&port->lock);
1522 port->ops->enable_ms(port);
1523 mctrl = port->ops->get_mctrl(port);
1524 spin_unlock_irq(&port->lock);
1525 if (mctrl & TIOCM_CAR)
1526 break;
1527
1528 mutex_unlock(&state->mutex);
1529 schedule();
1530 mutex_lock(&state->mutex);
1531
1532 if (signal_pending(current))
1533 break;
1534 }
1535 set_current_state(TASK_RUNNING);
1536 remove_wait_queue(&info->port.open_wait, &wait);
1537
1538 state->count++;
1539 info->port.blocked_open--;
1540
1541 if (signal_pending(current))
1542 return -ERESTARTSYS;
1543
1544 if (!info->port.tty || tty_hung_up_p(filp))
1545 return -EAGAIN;
1546
1547 return 0;
1548}
1549
1550static struct uart_state *uart_get(struct uart_driver *drv, int line)
1551{
1552 struct uart_state *state;
1553 int ret = 0;
1554
1555 state = drv->state + line;
1556 if (mutex_lock_interruptible(&state->mutex)) {
1557 ret = -ERESTARTSYS;
1558 goto err;
1559 }
1560
1561 state->count++;
1562 if (!state->port || state->port->flags & UPF_DEAD) {
1563 ret = -ENXIO;
1564 goto err_unlock;
1565 }
1566
1567
1568
1569
1570 if (!state->info) {
1571 state->info = kzalloc(sizeof(struct uart_info), GFP_KERNEL);
1572 if (state->info) {
1573 init_waitqueue_head(&state->info->port.open_wait);
1574 init_waitqueue_head(&state->info->delta_msr_wait);
1575
1576
1577
1578
1579 state->port->info = state->info;
1580
1581 tasklet_init(&state->info->tlet, uart_tasklet_action,
1582 (unsigned long)state);
1583 } else {
1584 ret = -ENOMEM;
1585 goto err_unlock;
1586 }
1587 }
1588 return state;
1589
1590 err_unlock:
1591 state->count--;
1592 mutex_unlock(&state->mutex);
1593 err:
1594 return ERR_PTR(ret);
1595}
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607static int uart_open(struct tty_struct *tty, struct file *filp)
1608{
1609 struct uart_driver *drv = (struct uart_driver *)tty->driver->driver_state;
1610 struct uart_state *state;
1611 int retval, line = tty->index;
1612
1613 BUG_ON(!kernel_locked());
1614 pr_debug("uart_open(%d) called\n", line);
1615
1616
1617
1618
1619
1620
1621 retval = -ENODEV;
1622 if (line >= tty->driver->num)
1623 goto fail;
1624
1625
1626
1627
1628
1629
1630
1631
1632 state = uart_get(drv, line);
1633 if (IS_ERR(state)) {
1634 retval = PTR_ERR(state);
1635 goto fail;
1636 }
1637
1638
1639
1640
1641
1642
1643 tty->driver_data = state;
1644 tty->low_latency = (state->port->flags & UPF_LOW_LATENCY) ? 1 : 0;
1645 tty->alt_speed = 0;
1646 state->info->port.tty = tty;
1647
1648
1649
1650
1651 if (tty_hung_up_p(filp)) {
1652 retval = -EAGAIN;
1653 state->count--;
1654 mutex_unlock(&state->mutex);
1655 goto fail;
1656 }
1657
1658
1659
1660
1661 if (state->count == 1)
1662 uart_change_pm(state, 0);
1663
1664
1665
1666
1667 retval = uart_startup(state, 0);
1668
1669
1670
1671
1672 if (retval == 0)
1673 retval = uart_block_til_ready(filp, state);
1674 mutex_unlock(&state->mutex);
1675
1676
1677
1678
1679 if (retval == 0 && !(state->info->flags & UIF_NORMAL_ACTIVE)) {
1680 state->info->flags |= UIF_NORMAL_ACTIVE;
1681
1682 uart_update_termios(state);
1683 }
1684
1685 fail:
1686 return retval;
1687}
1688
1689static const char *uart_type(struct uart_port *port)
1690{
1691 const char *str = NULL;
1692
1693 if (port->ops->type)
1694 str = port->ops->type(port);
1695
1696 if (!str)
1697 str = "unknown";
1698
1699 return str;
1700}
1701
1702#ifdef CONFIG_PROC_FS
1703
1704static int uart_line_info(char *buf, struct uart_driver *drv, int i)
1705{
1706 struct uart_state *state = drv->state + i;
1707 int pm_state;
1708 struct uart_port *port = state->port;
1709 char stat_buf[32];
1710 unsigned int status;
1711 int mmio, ret;
1712
1713 if (!port)
1714 return 0;
1715
1716 mmio = port->iotype >= UPIO_MEM;
1717 ret = sprintf(buf, "%d: uart:%s %s%08llX irq:%d",
1718 port->line, uart_type(port),
1719 mmio ? "mmio:0x" : "port:",
1720 mmio ? (unsigned long long)port->mapbase
1721 : (unsigned long long) port->iobase,
1722 port->irq);
1723
1724 if (port->type == PORT_UNKNOWN) {
1725 strcat(buf, "\n");
1726 return ret + 1;
1727 }
1728
1729 if (capable(CAP_SYS_ADMIN)) {
1730 mutex_lock(&state->mutex);
1731 pm_state = state->pm_state;
1732 if (pm_state)
1733 uart_change_pm(state, 0);
1734 spin_lock_irq(&port->lock);
1735 status = port->ops->get_mctrl(port);
1736 spin_unlock_irq(&port->lock);
1737 if (pm_state)
1738 uart_change_pm(state, pm_state);
1739 mutex_unlock(&state->mutex);
1740
1741 ret += sprintf(buf + ret, " tx:%d rx:%d",
1742 port->icount.tx, port->icount.rx);
1743 if (port->icount.frame)
1744 ret += sprintf(buf + ret, " fe:%d",
1745 port->icount.frame);
1746 if (port->icount.parity)
1747 ret += sprintf(buf + ret, " pe:%d",
1748 port->icount.parity);
1749 if (port->icount.brk)
1750 ret += sprintf(buf + ret, " brk:%d",
1751 port->icount.brk);
1752 if (port->icount.overrun)
1753 ret += sprintf(buf + ret, " oe:%d",
1754 port->icount.overrun);
1755
1756#define INFOBIT(bit, str) \
1757 if (port->mctrl & (bit)) \
1758 strncat(stat_buf, (str), sizeof(stat_buf) - \
1759 strlen(stat_buf) - 2)
1760#define STATBIT(bit, str) \
1761 if (status & (bit)) \
1762 strncat(stat_buf, (str), sizeof(stat_buf) - \
1763 strlen(stat_buf) - 2)
1764
1765 stat_buf[0] = '\0';
1766 stat_buf[1] = '\0';
1767 INFOBIT(TIOCM_RTS, "|RTS");
1768 STATBIT(TIOCM_CTS, "|CTS");
1769 INFOBIT(TIOCM_DTR, "|DTR");
1770 STATBIT(TIOCM_DSR, "|DSR");
1771 STATBIT(TIOCM_CAR, "|CD");
1772 STATBIT(TIOCM_RNG, "|RI");
1773 if (stat_buf[0])
1774 stat_buf[0] = ' ';
1775 strcat(stat_buf, "\n");
1776
1777 ret += sprintf(buf + ret, stat_buf);
1778 } else {
1779 strcat(buf, "\n");
1780 ret++;
1781 }
1782#undef STATBIT
1783#undef INFOBIT
1784 return ret;
1785}
1786
1787static int uart_read_proc(char *page, char **start, off_t off,
1788 int count, int *eof, void *data)
1789{
1790 struct tty_driver *ttydrv = data;
1791 struct uart_driver *drv = ttydrv->driver_state;
1792 int i, len = 0, l;
1793 off_t begin = 0;
1794
1795 len += sprintf(page, "serinfo:1.0 driver%s%s revision:%s\n",
1796 "", "", "");
1797 for (i = 0; i < drv->nr && len < PAGE_SIZE - 96; i++) {
1798 l = uart_line_info(page + len, drv, i);
1799 len += l;
1800 if (len + begin > off + count)
1801 goto done;
1802 if (len + begin < off) {
1803 begin += len;
1804 len = 0;
1805 }
1806 }
1807 *eof = 1;
1808 done:
1809 if (off >= len + begin)
1810 return 0;
1811 *start = page + (off - begin);
1812 return (count < begin + len - off) ? count : (begin + len - off);
1813}
1814#endif
1815
1816#if defined(CONFIG_SERIAL_CORE_CONSOLE) || defined(CONFIG_CONSOLE_POLL)
1817
1818
1819
1820
1821
1822
1823
1824void uart_console_write(struct uart_port *port, const char *s,
1825 unsigned int count,
1826 void (*putchar)(struct uart_port *, int))
1827{
1828 unsigned int i;
1829
1830 for (i = 0; i < count; i++, s++) {
1831 if (*s == '\n')
1832 putchar(port, '\r');
1833 putchar(port, *s);
1834 }
1835}
1836EXPORT_SYMBOL_GPL(uart_console_write);
1837
1838
1839
1840
1841
1842
1843struct uart_port * __init
1844uart_get_console(struct uart_port *ports, int nr, struct console *co)
1845{
1846 int idx = co->index;
1847
1848 if (idx < 0 || idx >= nr || (ports[idx].iobase == 0 &&
1849 ports[idx].membase == NULL))
1850 for (idx = 0; idx < nr; idx++)
1851 if (ports[idx].iobase != 0 ||
1852 ports[idx].membase != NULL)
1853 break;
1854
1855 co->index = idx;
1856
1857 return ports + idx;
1858}
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872void
1873uart_parse_options(char *options, int *baud, int *parity, int *bits, int *flow)
1874{
1875 char *s = options;
1876
1877 *baud = simple_strtoul(s, NULL, 10);
1878 while (*s >= '0' && *s <= '9')
1879 s++;
1880 if (*s)
1881 *parity = *s++;
1882 if (*s)
1883 *bits = *s++ - '0';
1884 if (*s)
1885 *flow = *s;
1886}
1887EXPORT_SYMBOL_GPL(uart_parse_options);
1888
1889struct baud_rates {
1890 unsigned int rate;
1891 unsigned int cflag;
1892};
1893
1894static const struct baud_rates baud_rates[] = {
1895 { 921600, B921600 },
1896 { 460800, B460800 },
1897 { 230400, B230400 },
1898 { 115200, B115200 },
1899 { 57600, B57600 },
1900 { 38400, B38400 },
1901 { 19200, B19200 },
1902 { 9600, B9600 },
1903 { 4800, B4800 },
1904 { 2400, B2400 },
1905 { 1200, B1200 },
1906 { 0, B38400 }
1907};
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918int
1919uart_set_options(struct uart_port *port, struct console *co,
1920 int baud, int parity, int bits, int flow)
1921{
1922 struct ktermios termios;
1923 static struct ktermios dummy;
1924 int i;
1925
1926
1927
1928
1929
1930 spin_lock_init(&port->lock);
1931 lockdep_set_class(&port->lock, &port_lock_key);
1932
1933 memset(&termios, 0, sizeof(struct ktermios));
1934
1935 termios.c_cflag = CREAD | HUPCL | CLOCAL;
1936
1937
1938
1939
1940 for (i = 0; baud_rates[i].rate; i++)
1941 if (baud_rates[i].rate <= baud)
1942 break;
1943
1944 termios.c_cflag |= baud_rates[i].cflag;
1945
1946 if (bits == 7)
1947 termios.c_cflag |= CS7;
1948 else
1949 termios.c_cflag |= CS8;
1950
1951 switch (parity) {
1952 case 'o': case 'O':
1953 termios.c_cflag |= PARODD;
1954
1955 case 'e': case 'E':
1956 termios.c_cflag |= PARENB;
1957 break;
1958 }
1959
1960 if (flow == 'r')
1961 termios.c_cflag |= CRTSCTS;
1962
1963
1964
1965
1966
1967 port->mctrl |= TIOCM_DTR;
1968
1969 port->ops->set_termios(port, &termios, &dummy);
1970
1971
1972
1973
1974 if (co)
1975 co->cflag = termios.c_cflag;
1976
1977 return 0;
1978}
1979EXPORT_SYMBOL_GPL(uart_set_options);
1980#endif
1981
1982static void uart_change_pm(struct uart_state *state, int pm_state)
1983{
1984 struct uart_port *port = state->port;
1985
1986 if (state->pm_state != pm_state) {
1987 if (port->ops->pm)
1988 port->ops->pm(port, pm_state, state->pm_state);
1989 state->pm_state = pm_state;
1990 }
1991}
1992
1993struct uart_match {
1994 struct uart_port *port;
1995 struct uart_driver *driver;
1996};
1997
1998static int serial_match_port(struct device *dev, void *data)
1999{
2000 struct uart_match *match = data;
2001 struct tty_driver *tty_drv = match->driver->tty_driver;
2002 dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) +
2003 match->port->line;
2004
2005 return dev->devt == devt;
2006}
2007
2008int uart_suspend_port(struct uart_driver *drv, struct uart_port *port)
2009{
2010 struct uart_state *state = drv->state + port->line;
2011 struct device *tty_dev;
2012 struct uart_match match = {port, drv};
2013
2014 mutex_lock(&state->mutex);
2015
2016 if (!console_suspend_enabled && uart_console(port)) {
2017
2018 mutex_unlock(&state->mutex);
2019 return 0;
2020 }
2021
2022 tty_dev = device_find_child(port->dev, &match, serial_match_port);
2023 if (device_may_wakeup(tty_dev)) {
2024 enable_irq_wake(port->irq);
2025 put_device(tty_dev);
2026 mutex_unlock(&state->mutex);
2027 return 0;
2028 }
2029 port->suspended = 1;
2030
2031 if (state->info && state->info->flags & UIF_INITIALIZED) {
2032 const struct uart_ops *ops = port->ops;
2033 int tries;
2034
2035 state->info->flags = (state->info->flags & ~UIF_INITIALIZED)
2036 | UIF_SUSPENDED;
2037
2038 spin_lock_irq(&port->lock);
2039 ops->stop_tx(port);
2040 ops->set_mctrl(port, 0);
2041 ops->stop_rx(port);
2042 spin_unlock_irq(&port->lock);
2043
2044
2045
2046
2047 for (tries = 3; !ops->tx_empty(port) && tries; tries--)
2048 msleep(10);
2049 if (!tries)
2050 printk(KERN_ERR "%s%s%s%d: Unable to drain "
2051 "transmitter\n",
2052 port->dev ? port->dev->bus_id : "",
2053 port->dev ? ": " : "",
2054 drv->dev_name,
2055 drv->tty_driver->name_base + port->line);
2056
2057 ops->shutdown(port);
2058 }
2059
2060
2061
2062
2063 if (uart_console(port))
2064 console_stop(port->cons);
2065
2066 uart_change_pm(state, 3);
2067
2068 mutex_unlock(&state->mutex);
2069
2070 return 0;
2071}
2072
2073int uart_resume_port(struct uart_driver *drv, struct uart_port *port)
2074{
2075 struct uart_state *state = drv->state + port->line;
2076 struct device *tty_dev;
2077 struct uart_match match = {port, drv};
2078
2079 mutex_lock(&state->mutex);
2080
2081 if (!console_suspend_enabled && uart_console(port)) {
2082
2083 mutex_unlock(&state->mutex);
2084 return 0;
2085 }
2086
2087 tty_dev = device_find_child(port->dev, &match, serial_match_port);
2088 if (!port->suspended && device_may_wakeup(tty_dev)) {
2089 disable_irq_wake(port->irq);
2090 mutex_unlock(&state->mutex);
2091 return 0;
2092 }
2093 port->suspended = 0;
2094
2095
2096
2097
2098 if (uart_console(port)) {
2099 struct ktermios termios;
2100
2101
2102
2103
2104 memset(&termios, 0, sizeof(struct ktermios));
2105 termios.c_cflag = port->cons->cflag;
2106
2107
2108
2109
2110 if (state->info && state->info->port.tty && termios.c_cflag == 0)
2111 termios = *state->info->port.tty->termios;
2112
2113 uart_change_pm(state, 0);
2114 port->ops->set_termios(port, &termios, NULL);
2115 console_start(port->cons);
2116 }
2117
2118 if (state->info && state->info->flags & UIF_SUSPENDED) {
2119 const struct uart_ops *ops = port->ops;
2120 int ret;
2121
2122 uart_change_pm(state, 0);
2123 spin_lock_irq(&port->lock);
2124 ops->set_mctrl(port, 0);
2125 spin_unlock_irq(&port->lock);
2126 ret = ops->startup(port);
2127 if (ret == 0) {
2128 uart_change_speed(state, NULL);
2129 spin_lock_irq(&port->lock);
2130 ops->set_mctrl(port, port->mctrl);
2131 ops->start_tx(port);
2132 spin_unlock_irq(&port->lock);
2133 state->info->flags |= UIF_INITIALIZED;
2134 } else {
2135
2136
2137
2138
2139
2140 uart_shutdown(state);
2141 }
2142
2143 state->info->flags &= ~UIF_SUSPENDED;
2144 }
2145
2146 mutex_unlock(&state->mutex);
2147
2148 return 0;
2149}
2150
2151static inline void
2152uart_report_port(struct uart_driver *drv, struct uart_port *port)
2153{
2154 char address[64];
2155
2156 switch (port->iotype) {
2157 case UPIO_PORT:
2158 snprintf(address, sizeof(address), "I/O 0x%lx", port->iobase);
2159 break;
2160 case UPIO_HUB6:
2161 snprintf(address, sizeof(address),
2162 "I/O 0x%lx offset 0x%x", port->iobase, port->hub6);
2163 break;
2164 case UPIO_MEM:
2165 case UPIO_MEM32:
2166 case UPIO_AU:
2167 case UPIO_TSI:
2168 case UPIO_DWAPB:
2169 snprintf(address, sizeof(address),
2170 "MMIO 0x%llx", (unsigned long long)port->mapbase);
2171 break;
2172 default:
2173 strlcpy(address, "*unknown*", sizeof(address));
2174 break;
2175 }
2176
2177 printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n",
2178 port->dev ? port->dev->bus_id : "",
2179 port->dev ? ": " : "",
2180 drv->dev_name,
2181 drv->tty_driver->name_base + port->line,
2182 address, port->irq, uart_type(port));
2183}
2184
2185static void
2186uart_configure_port(struct uart_driver *drv, struct uart_state *state,
2187 struct uart_port *port)
2188{
2189 unsigned int flags;
2190
2191
2192
2193
2194 if (!port->iobase && !port->mapbase && !port->membase)
2195 return;
2196
2197
2198
2199
2200
2201 flags = UART_CONFIG_TYPE;
2202 if (port->flags & UPF_AUTO_IRQ)
2203 flags |= UART_CONFIG_IRQ;
2204 if (port->flags & UPF_BOOT_AUTOCONF) {
2205 port->type = PORT_UNKNOWN;
2206 port->ops->config_port(port, flags);
2207 }
2208
2209 if (port->type != PORT_UNKNOWN) {
2210 unsigned long flags;
2211
2212 uart_report_port(drv, port);
2213
2214
2215 uart_change_pm(state, 0);
2216
2217
2218
2219
2220
2221
2222 spin_lock_irqsave(&port->lock, flags);
2223 port->ops->set_mctrl(port, port->mctrl & TIOCM_DTR);
2224 spin_unlock_irqrestore(&port->lock, flags);
2225
2226
2227
2228
2229
2230
2231 if (port->cons && !(port->cons->flags & CON_ENABLED))
2232 register_console(port->cons);
2233
2234
2235
2236
2237
2238 if (!uart_console(port))
2239 uart_change_pm(state, 3);
2240 }
2241}
2242
2243#ifdef CONFIG_CONSOLE_POLL
2244
2245static int uart_poll_init(struct tty_driver *driver, int line, char *options)
2246{
2247 struct uart_driver *drv = driver->driver_state;
2248 struct uart_state *state = drv->state + line;
2249 struct uart_port *port;
2250 int baud = 9600;
2251 int bits = 8;
2252 int parity = 'n';
2253 int flow = 'n';
2254
2255 if (!state || !state->port)
2256 return -1;
2257
2258 port = state->port;
2259 if (!(port->ops->poll_get_char && port->ops->poll_put_char))
2260 return -1;
2261
2262 if (options) {
2263 uart_parse_options(options, &baud, &parity, &bits, &flow);
2264 return uart_set_options(port, NULL, baud, parity, bits, flow);
2265 }
2266
2267 return 0;
2268}
2269
2270static int uart_poll_get_char(struct tty_driver *driver, int line)
2271{
2272 struct uart_driver *drv = driver->driver_state;
2273 struct uart_state *state = drv->state + line;
2274 struct uart_port *port;
2275
2276 if (!state || !state->port)
2277 return -1;
2278
2279 port = state->port;
2280 return port->ops->poll_get_char(port);
2281}
2282
2283static void uart_poll_put_char(struct tty_driver *driver, int line, char ch)
2284{
2285 struct uart_driver *drv = driver->driver_state;
2286 struct uart_state *state = drv->state + line;
2287 struct uart_port *port;
2288
2289 if (!state || !state->port)
2290 return;
2291
2292 port = state->port;
2293 port->ops->poll_put_char(port, ch);
2294}
2295#endif
2296
2297static const struct tty_operations uart_ops = {
2298 .open = uart_open,
2299 .close = uart_close,
2300 .write = uart_write,
2301 .put_char = uart_put_char,
2302 .flush_chars = uart_flush_chars,
2303 .write_room = uart_write_room,
2304 .chars_in_buffer= uart_chars_in_buffer,
2305 .flush_buffer = uart_flush_buffer,
2306 .ioctl = uart_ioctl,
2307 .throttle = uart_throttle,
2308 .unthrottle = uart_unthrottle,
2309 .send_xchar = uart_send_xchar,
2310 .set_termios = uart_set_termios,
2311 .set_ldisc = uart_set_ldisc,
2312 .stop = uart_stop,
2313 .start = uart_start,
2314 .hangup = uart_hangup,
2315 .break_ctl = uart_break_ctl,
2316 .wait_until_sent= uart_wait_until_sent,
2317#ifdef CONFIG_PROC_FS
2318 .read_proc = uart_read_proc,
2319#endif
2320 .tiocmget = uart_tiocmget,
2321 .tiocmset = uart_tiocmset,
2322#ifdef CONFIG_CONSOLE_POLL
2323 .poll_init = uart_poll_init,
2324 .poll_get_char = uart_poll_get_char,
2325 .poll_put_char = uart_poll_put_char,
2326#endif
2327};
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342int uart_register_driver(struct uart_driver *drv)
2343{
2344 struct tty_driver *normal = NULL;
2345 int i, retval;
2346
2347 BUG_ON(drv->state);
2348
2349
2350
2351
2352
2353 drv->state = kzalloc(sizeof(struct uart_state) * drv->nr, GFP_KERNEL);
2354 retval = -ENOMEM;
2355 if (!drv->state)
2356 goto out;
2357
2358 normal = alloc_tty_driver(drv->nr);
2359 if (!normal)
2360 goto out;
2361
2362 drv->tty_driver = normal;
2363
2364 normal->owner = drv->owner;
2365 normal->driver_name = drv->driver_name;
2366 normal->name = drv->dev_name;
2367 normal->major = drv->major;
2368 normal->minor_start = drv->minor;
2369 normal->type = TTY_DRIVER_TYPE_SERIAL;
2370 normal->subtype = SERIAL_TYPE_NORMAL;
2371 normal->init_termios = tty_std_termios;
2372 normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
2373 normal->init_termios.c_ispeed = normal->init_termios.c_ospeed = 9600;
2374 normal->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
2375 normal->driver_state = drv;
2376 tty_set_operations(normal, &uart_ops);
2377
2378
2379
2380
2381 for (i = 0; i < drv->nr; i++) {
2382 struct uart_state *state = drv->state + i;
2383
2384 state->close_delay = 500;
2385 state->closing_wait = 30000;
2386
2387 mutex_init(&state->mutex);
2388 }
2389
2390 retval = tty_register_driver(normal);
2391 out:
2392 if (retval < 0) {
2393 put_tty_driver(normal);
2394 kfree(drv->state);
2395 }
2396 return retval;
2397}
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408void uart_unregister_driver(struct uart_driver *drv)
2409{
2410 struct tty_driver *p = drv->tty_driver;
2411 tty_unregister_driver(p);
2412 put_tty_driver(p);
2413 kfree(drv->state);
2414 drv->tty_driver = NULL;
2415}
2416
2417struct tty_driver *uart_console_device(struct console *co, int *index)
2418{
2419 struct uart_driver *p = co->data;
2420 *index = co->index;
2421 return p->tty_driver;
2422}
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434int uart_add_one_port(struct uart_driver *drv, struct uart_port *port)
2435{
2436 struct uart_state *state;
2437 int ret = 0;
2438 struct device *tty_dev;
2439
2440 BUG_ON(in_interrupt());
2441
2442 if (port->line >= drv->nr)
2443 return -EINVAL;
2444
2445 state = drv->state + port->line;
2446
2447 mutex_lock(&port_mutex);
2448 mutex_lock(&state->mutex);
2449 if (state->port) {
2450 ret = -EINVAL;
2451 goto out;
2452 }
2453
2454 state->port = port;
2455 state->pm_state = -1;
2456
2457 port->cons = drv->cons;
2458 port->info = state->info;
2459
2460
2461
2462
2463
2464 if (!(uart_console(port) && (port->cons->flags & CON_ENABLED))) {
2465 spin_lock_init(&port->lock);
2466 lockdep_set_class(&port->lock, &port_lock_key);
2467 }
2468
2469 uart_configure_port(drv, state, port);
2470
2471
2472
2473
2474
2475 tty_dev = tty_register_device(drv->tty_driver, port->line, port->dev);
2476 if (likely(!IS_ERR(tty_dev))) {
2477 device_init_wakeup(tty_dev, 1);
2478 device_set_wakeup_enable(tty_dev, 0);
2479 } else
2480 printk(KERN_ERR "Cannot register tty device on line %d\n",
2481 port->line);
2482
2483
2484
2485
2486 port->flags &= ~UPF_DEAD;
2487
2488 out:
2489 mutex_unlock(&state->mutex);
2490 mutex_unlock(&port_mutex);
2491
2492 return ret;
2493}
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504int uart_remove_one_port(struct uart_driver *drv, struct uart_port *port)
2505{
2506 struct uart_state *state = drv->state + port->line;
2507 struct uart_info *info;
2508
2509 BUG_ON(in_interrupt());
2510
2511 if (state->port != port)
2512 printk(KERN_ALERT "Removing wrong port: %p != %p\n",
2513 state->port, port);
2514
2515 mutex_lock(&port_mutex);
2516
2517
2518
2519
2520
2521 mutex_lock(&state->mutex);
2522 port->flags |= UPF_DEAD;
2523 mutex_unlock(&state->mutex);
2524
2525
2526
2527
2528 tty_unregister_device(drv->tty_driver, port->line);
2529
2530 info = state->info;
2531 if (info && info->port.tty)
2532 tty_vhangup(info->port.tty);
2533
2534
2535
2536
2537
2538
2539 state->info = NULL;
2540
2541
2542
2543
2544 if (port->type != PORT_UNKNOWN)
2545 port->ops->release_port(port);
2546
2547
2548
2549
2550 port->type = PORT_UNKNOWN;
2551
2552
2553
2554
2555 if (info) {
2556 tasklet_kill(&info->tlet);
2557 kfree(info);
2558 }
2559
2560 state->port = NULL;
2561 mutex_unlock(&port_mutex);
2562
2563 return 0;
2564}
2565
2566
2567
2568
2569int uart_match_port(struct uart_port *port1, struct uart_port *port2)
2570{
2571 if (port1->iotype != port2->iotype)
2572 return 0;
2573
2574 switch (port1->iotype) {
2575 case UPIO_PORT:
2576 return (port1->iobase == port2->iobase);
2577 case UPIO_HUB6:
2578 return (port1->iobase == port2->iobase) &&
2579 (port1->hub6 == port2->hub6);
2580 case UPIO_MEM:
2581 case UPIO_MEM32:
2582 case UPIO_AU:
2583 case UPIO_TSI:
2584 case UPIO_DWAPB:
2585 return (port1->mapbase == port2->mapbase);
2586 }
2587 return 0;
2588}
2589EXPORT_SYMBOL(uart_match_port);
2590
2591EXPORT_SYMBOL(uart_write_wakeup);
2592EXPORT_SYMBOL(uart_register_driver);
2593EXPORT_SYMBOL(uart_unregister_driver);
2594EXPORT_SYMBOL(uart_suspend_port);
2595EXPORT_SYMBOL(uart_resume_port);
2596EXPORT_SYMBOL(uart_add_one_port);
2597EXPORT_SYMBOL(uart_remove_one_port);
2598
2599MODULE_DESCRIPTION("Serial driver core");
2600MODULE_LICENSE("GPL");
2601