Merge branch 'master' of git://www.denx.de/git/u-boot-mips
[platform/kernel/u-boot.git] / board / bmw / ns16550.h
1 /*
2  * NS16550 Serial Port
3  * originally from linux source (arch/ppc/boot/ns16550.h)
4  * modified slightly to
5  * have addresses as offsets from CFG_ISA_BASE
6  * added a few more definitions
7  * added prototypes for ns16550.c
8  * reduced no of com ports to 2
9  * modifications (c) Rob Taylor, Flying Pig Systems. 2000.
10  * further modified to support the 8245 duart
11  * modifications (c) Paul Jimenez, Musenki, Inc. 2001.
12  */
13
14
15 struct NS16550 {
16         unsigned char rbrthrdlb;        /* 0 */
17         unsigned char ierdmb;           /* 1 */
18         unsigned char iirfcrafr;        /* 2 */
19         unsigned char lcr;              /* 3 */
20         unsigned char mcr;              /* 4 */
21         unsigned char lsr;              /* 5 */
22         unsigned char msr;              /* 6 */
23         unsigned char scr;              /* 7 */
24         unsigned char reserved[2];      /* 8 & 9 */
25         unsigned char dsr;              /* 10 */
26         unsigned char dcr;              /* 11 */
27 };
28
29
30 #define rbr rbrthrdlb
31 #define thr rbrthrdlb
32 #define dll rbrthrdlb
33 #define ier ierdmb
34 #define dlm ierdmb
35 #define iir iirfcrafr
36 #define fcr iirfcrafr
37 #define afr iirfcrafr
38
39 #define FCR_FIFO_EN     0x01    /*fifo enable */
40 #define FCR_RXSR        0x02    /*reciever soft reset */
41 #define FCR_TXSR        0x04    /*transmitter soft reset */
42 #define FCR_DMS         0x08    /* DMA Mode Select */
43
44 #define MCR_RTS         0x02    /* Readyu to Send */
45 #define MCR_LOOP        0x10    /* Local loopback mode enable */
46 /* #define MCR_DTR         0x01    noton 8245 duart */
47 /* #define MCR_DMA_EN      0x04    noton 8245 duart */
48 /* #define MCR_TX_DFR      0x08    noton 8245 duart */
49
50 #define LCR_WLS_MSK 0x03        /* character length slect mask */
51 #define LCR_WLS_5   0x00        /* 5 bit character length */
52 #define LCR_WLS_6   0x01        /* 6 bit character length */
53 #define LCR_WLS_7   0x02        /* 7 bit character length */
54 #define LCR_WLS_8   0x03        /* 8 bit character length */
55 #define LCR_STB     0x04        /* Number of stop Bits, off = 1, on = 1.5 or 2) */
56 #define LCR_PEN     0x08        /* Parity eneble */
57 #define LCR_EPS     0x10        /* Even Parity Select */
58 #define LCR_STKP    0x20        /* Stick Parity */
59 #define LCR_SBRK    0x40        /* Set Break */
60 #define LCR_BKSE    0x80        /* Bank select enable - aka DLAB on 8245 */
61
62 #define LSR_DR      0x01        /* Data ready */
63 #define LSR_OE      0x02        /* Overrun */
64 #define LSR_PE      0x04        /* Parity error */
65 #define LSR_FE      0x08        /* Framing error */
66 #define LSR_BI      0x10        /* Break */
67 #define LSR_THRE    0x20        /* Xmit holding register empty */
68 #define LSR_TEMT    0x40        /* Xmitter empty */
69 #define LSR_ERR     0x80        /* Error */
70
71 /* useful defaults for LCR*/
72 #define LCR_8N1     0x03
73
74
75 volatile struct NS16550 *NS16550_init (int chan, int baud_divisor);
76 void NS16550_putc (volatile struct NS16550 *com_port, unsigned char c);
77 unsigned char NS16550_getc (volatile struct NS16550 *com_port);
78 int NS16550_tstc (volatile struct NS16550 *com_port);
79 void NS16550_reinit (volatile struct NS16550 *com_port, int baud_divisor);