aboutsummaryrefslogtreecommitdiffstats
path: root/board/bmw/ns16550.h
blob: 0b7b3896f9c4b4cbb97d0fe5e5d354d5f19030d7 (plain)
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
 * NS16550 Serial Port
 * originally from linux source (arch/ppc/boot/ns16550.h)
 * modified slightly to
 * have addresses as offsets from CFG_ISA_BASE
 * added a few more definitions
 * added prototypes for ns16550.c
 * reduced no of com ports to 2
 * modifications (c) Rob Taylor, Flying Pig Systems. 2000.
 * further modified to support the 8245 duart
 * modifications (c) Paul Jimenez, Musenki, Inc. 2001.
 */


struct NS16550
 {
  unsigned char rbrthrdlb;  /* 0 */
  unsigned char ierdmb;     /* 1 */
  unsigned char iirfcrafr;  /* 2 */
  unsigned char lcr;         /* 3 */
  unsigned char mcr;         /* 4 */
  unsigned char lsr;         /* 5 */
  unsigned char msr;         /* 6 */
  unsigned char scr;         /* 7 */
  unsigned char reserved[2]; /* 8 & 9 */
  unsigned char dsr;         /* 10 */
  unsigned char dcr;         /* 11 */
 };


#define rbr rbrthrdlb
#define thr rbrthrdlb
#define dll rbrthrdlb
#define ier ierdmb
#define dlm ierdmb
#define iir iirfcrafr
#define fcr iirfcrafr
#define afr iirfcrafr

#define FCR_FIFO_EN     0x01    /*fifo enable*/
#define FCR_RXSR        0x02    /*reciever soft reset*/
#define FCR_TXSR        0x04    /*transmitter soft reset*/
#define FCR_DMS		0x08    /* DMA Mode Select */

#define MCR_RTS         0x02    /* Readyu to Send */
#define MCR_LOOP	0x10	/* Local loopback mode enable */
/* #define MCR_DTR         0x01    noton 8245 duart */
/* #define MCR_DMA_EN      0x04    noton 8245 duart */
/* #define MCR_TX_DFR      0x08    noton 8245 duart */

#define LCR_WLS_MSK 0x03    /* character length slect mask*/
#define LCR_WLS_5   0x00    /* 5 bit character length */
#define LCR_WLS_6   0x01    /* 6 bit character length */
#define LCR_WLS_7   0x02    /* 7 bit character length */
#define LCR_WLS_8   0x03    /* 8 bit character length */
#define LCR_STB     0x04    /* Number of stop Bits, off = 1, on = 1.5 or 2) */
#define LCR_PEN     0x08    /* Parity eneble*/
#define LCR_EPS     0x10    /* Even Parity Select*/
#define LCR_STKP    0x20    /* Stick Parity*/
#define LCR_SBRK    0x40    /* Set Break*/
#define LCR_BKSE    0x80    /* Bank select enable - aka DLAB on 8245 */

#define LSR_DR      0x01    /* Data ready */
#define LSR_OE      0x02    /* Overrun */
#define LSR_PE      0x04    /* Parity error */
#define LSR_FE      0x08    /* Framing error */
#define LSR_BI      0x10    /* Break */
#define LSR_THRE    0x20    /* Xmit holding register empty */
#define LSR_TEMT    0x40    /* Xmitter empty */
#define LSR_ERR     0x80    /* Error */

/* useful defaults for LCR*/
#define LCR_8N1     0x03


volatile struct NS16550 * NS16550_init(int chan, int baud_divisor);
void NS16550_putc(volatile struct NS16550 *com_port, unsigned char c);
unsigned char NS16550_getc(volatile struct NS16550 *com_port);
int NS16550_tstc(volatile struct NS16550 *com_port);
void NS16550_reinit(volatile struct NS16550 *com_port, int baud_divisor);