recognize another memory MCP chip
[pandora-x-loader.git] / drivers / serial.c
1 /*
2  * (C) Copyright 2000
3  * Rob Taylor, Flying Pig Systems. robt@flyingpig.com.
4  *
5  * See file CREDITS for list of people who contributed to this
6  * project.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License as
10  * published by the Free Software Foundation; either version 2 of
11  * the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21  * MA 02111-1307 USA
22  */
23
24 #include <common.h>
25
26 #ifdef CFG_PRINTF
27 #ifdef CFG_NS16550_SERIAL
28
29 #include <ns16550.h>
30 #ifdef CFG_NS87308
31 #include <ns87308.h>
32 #endif
33
34 #if CONFIG_CONS_INDEX == 1
35 static NS16550_t console = (NS16550_t) CFG_NS16550_COM1;
36 #elif CONFIG_CONS_INDEX == 2
37 static NS16550_t console = (NS16550_t) CFG_NS16550_COM2;
38 #elif CONFIG_CONS_INDEX == 3
39 static NS16550_t console = (NS16550_t) CFG_NS16550_COM3;
40 #elif CONFIG_CONS_INDEX == 4
41 static NS16550_t console = (NS16550_t) CFG_NS16550_COM4;
42 #else
43 #error no valid console defined
44 #endif
45
46 static int calc_divisor (void)
47 {
48         return (CFG_NS16550_CLK / 16 / CONFIG_BAUDRATE);
49 }
50
51 int serial_init (void)
52 {
53         int clock_divisor = calc_divisor();
54
55 #ifdef CFG_NS87308
56         initialise_ns87308();
57 #endif
58
59         NS16550_init(console, clock_divisor);
60
61         return (0);
62 }
63
64 void
65 serial_putc(const char c)
66 {
67         if (c == '\n')
68                 NS16550_putc(console, '\r');
69
70         NS16550_putc(console, c);
71 }
72
73 void
74 serial_puts (const char *s)
75 {
76         while (*s) {
77                 serial_putc (*s++);
78         }
79 }
80
81
82 int
83 serial_getc(void)
84 {
85         return NS16550_getc(console);
86 }
87
88 int
89 serial_tstc(void)
90 {
91         return NS16550_tstc(console);
92 }
93
94 void
95 serial_setbrg (void)
96 {
97         int clock_divisor;
98
99     clock_divisor = calc_divisor();
100         NS16550_reinit(console, clock_divisor);
101 }
102
103 #endif
104 #endif