1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#ifndef __NS16550_H__
16#define __NS16550_H__
17
18
19
20struct NS16550
21{
22 unsigned char rbr;
23 int pad1:24;
24
25 unsigned char ier;
26 int pad2:24;
27
28 unsigned char fcr;
29 int pad3:24;
30
31 unsigned char lcr;
32 int pad4:24;
33
34 unsigned char mcr;
35 int pad5:24;
36
37 unsigned char lsr;
38 int pad6:24;
39
40 unsigned char msr;
41 int pad7:24;
42
43 unsigned char scr;
44 int pad8:24;
45} __attribute__ ((packed));
46
47
48#define thr rbr
49#define iir fcr
50#define dll rbr
51#define dlm ier
52
53#define FCR_FIFO_EN 0x01
54#define FCR_RXSR 0x02
55#define FCR_TXSR 0x04
56
57
58#define MCR_DTR 0x01
59#define MCR_RTS 0x02
60#define MCR_DMA_EN 0x04
61#define MCR_TX_DFR 0x08
62
63
64#define LCR_WLS_MSK 0x03
65#define LCR_WLS_5 0x00
66#define LCR_WLS_6 0x01
67#define LCR_WLS_7 0x02
68#define LCR_WLS_8 0x03
69#define LCR_STB 0x04
70#define LCR_PEN 0x08
71#define LCR_EPS 0x10
72#define LCR_STKP 0x20
73#define LCR_SBRK 0x40
74#define LCR_BKSE 0x80
75
76#define LSR_DR 0x01
77#define LSR_OE 0x02
78#define LSR_PE 0x04
79#define LSR_FE 0x08
80#define LSR_BI 0x10
81#define LSR_THRE 0x20
82#define LSR_TEMT 0x40
83#define LSR_ERR 0x80
84
85
86#define LCR_8N1 0x03
87
88
89#define COM1 0x03F8
90#define COM2 0x02F8
91
92volatile struct NS16550 * NS16550_init(int chan, int baud_divisor);
93void NS16550_putc(volatile struct NS16550 *com_port, unsigned char c);
94unsigned char NS16550_getc(volatile struct NS16550 *com_port);
95int NS16550_tstc(volatile struct NS16550 *com_port);
96void NS16550_reinit(volatile struct NS16550 *com_port, int baud_divisor);
97
98typedef struct NS16550 *NS16550_t;
99
100extern const NS16550_t COM_PORTS[];
101
102#endif
103