|
|
1.1 root 1: /*++
2:
3: Copyright (c) 1993 Microsoft Corporation
4: Copyright (c) 1993 Logitech Inc.
5:
6: Module Name:
7:
8: uart.h
9:
10: Abstract:
11:
12: Hardware dependent support for the serial port.
13:
14: Environment:
15:
16: Kernel mode only.
17:
18: Notes:
19:
20: Revision History:
21:
22: --*/
23:
24: #ifndef UART_H
25: #define UART_H
26:
27: //
28: // Constants
29: //
30:
31: //
32: // Define the INS8250 ACE Register Offsets And Bit Definitions
33: //
34:
35: #define ACE_RBR 0 // Receiver Buffer
36: #define ACE_THR 0 // Transmit Holding Register
37:
38: #define ACE_IER 1 // Interrupt Enable
39: #define ACE_ERBFI 0x01 // Received Data Available 00000001b
40: #define ACE_ETBEI 0x02 // Transmitter Holding Register Empty 00000010b
41: #define ACE_ELSI 0x04 // Receiver Line Status 00000100b
42: #define ACE_EDSSI 0x08 // Modem Status 00001000b
43:
44: #define ACE_IIDR 2 // Interrupt Identification
45: #define ACE_IIP 0x01 // Inverted Interrupt Pending (0=int) 00000001b
46: #define ACE_IID 0x06 // Interrupt ID 00000110b
47: #define ACE_MSI 0x00 // Modem Status 00000000b
48: #define ACE_THREI 0x02 // Transmitter Holding Register Empty 00000010b
49: #define ACE_RDAI 0x04 // Received Data Available 00000100b
50: #define ACE_RLSI 0x06 // Receiver Line Status 00000110b
51:
52: #define ACE_LCR 3 // Line Control
53: #define ACE_WLS 0x03 // Word Length Select Bits 00000011b
54: #define ACE_WLS0 0x01 // Word Length Select Bit 0 00000001b
55: #define ACE_WLS1 0x02 // Word Length Select Bit 1 00000010b
56: #define ACE_5BW 0x00 // 5 Bit Words 00000000b
57: #define ACE_6BW 0x01 // 6 Bit Words 00000001b
58: #define ACE_7BW 0x02 // 7 Bit Words 00000010b
59: #define ACE_8BW 0x03 // 8 Bit Words 00000011b
60: #define ACE_STB 0x04 // Stop Bits 00000100b
61: #define ACE_1SB 0x00 // 1 Stop Bits (1.5 for 5 bit words) 00000000b
62: #define ACE_2SB 0x04 // 2 Stop Bits 00000100b
63: #define ACE_PEN 0x08 // Parity Enable 00001000b
64: #define ACE_PSB 0x30 // Parity Select bits 00110000b
65: #define ACE_EPS 0x10 // Even Parity Select 00010000b
66: #define ACE_SP 0x20 // Stick Parity 00100000b
67: #define ACE_SB 0x40 // Set Break 01000000b
68: #define ACE_DLAB 0x80 // Divisor Latch Access Bit 10000000b
69:
70: #define ACE_MCR 4 // Modem Control
71: #define ACE_DTR 0x01 // Data Terminal ready 00000001b
72: #define ACE_RTS 0x02 // Request To Send 00000010b
73: #define ACE_OUT1 0x04 // Output Line 1 00000100b
74: #define ACE_OUT2 0x08 // Output Line 2 00001000b
75: #define ACE_LOOP 0x10 // Loopback 00010000b
76:
77: #define ACE_LSR 5 // Line Status
78: #define ACE_DR 0x01 // Data Ready 00000001b
79: #define ACE_OR 0x02 // Overrun Error 00000010b
80: #define ACE_PE 0x04 // Parity Error 00000100b
81: #define ACE_FE 0x08 // Framing Error 00001000b
82: #define ACE_BI 0x10 // Break Interrupt 00010000b
83: #define ACE_THRE 0x20 // Transmitter Holding Register Empty 00100000b
84: #define ACE_TSRE 0x40 // Transmitter Shift Register Empty 01000000b
85: #define ACE_LERR (ACE_OR | ACE_PE | ACE_FE | ACE_BI)
86:
87: #define ACE_MSR 6 // Modem Status
88: #define ACE_DCTS 0x01 // Delta Clear to Send 00000001b
89: #define ACE_DDSR 0x02 // Delta Data Set Ready 00000010b
90: #define ACE_TERI 0x04 // Trailing Edge Ring Indicator 00000100b
91: #define ACE_DRLSD 0x08 // Delta Receive Line Signal Detect 00001000b
92: #define ACE_CTS 0x10 // Clear To Send 00010000b
93: #define ACE_DSR 0x20 // Data Set ready 00100000b
94: #define ACE_RI 0x40 // Ring Indicator 01000000b
95: #define ACE_RLSD 0x80 // Receive Line Signal Detect 10000000b
96:
97: #define ACE_DLL 0 // LSB Baud Rate Divisor
98:
99: #define ACE_DLM 1 // MSB Baud Rate Divisor
100:
101: //
102: // Define the Baud Generator Divisor. BaudClock (a value known via the
103: // hardware registry) is actually BAUD_GENERATOR_DIVISOR times the baud rate.
104: // For example, if the output frequency of the Baud Generator is 16 times
105: // the baud rate, then BAUD_GENERATOR_DIVISOR is 16.
106: //
107: // The Baud Rate Factor is BaudClock/BAUD_GENERATOR_DIVISOR.
108: //
109: // The Baud Rate Divisor for the DLAB is Baud Rate Factor divided by the
110: // desired baud rate, where the desired baud rate is 1200, 2400, and so on.
111: //
112:
113: #define BAUD_GENERATOR_DIVISOR 16
114:
115: //
116: // Type definitions.
117: //
118:
119: //
120: // UART configuration
121: //
122: typedef struct _UART {
123: ULONG BaudRate;
124: UCHAR LineCtrl;
125: UCHAR ModemCtrl;
126: UCHAR InterruptCtrl;
127: } UART, *PUART;
128:
129:
130: //
131: // Function prototypes
132: //
133:
134: VOID
135: UARTSetFifo(
136: PUCHAR Port,
137: UCHAR Value
138: );
139:
140: UCHAR
141: UARTGetInterruptCtrl(
142: PUCHAR Port
143: );
144:
145: UCHAR
146: UARTSetInterruptCtrl(
147: PUCHAR Port,
148: UCHAR Value
149: );
150:
151: UCHAR
152: UARTGetLineCtrl(
153: PUCHAR Port
154: );
155:
156: UCHAR
157: UARTSetLineCtrl(
158: PUCHAR Port,
159: UCHAR Value
160: );
161:
162: UCHAR
163: UARTGetModemCtrl(
164: PUCHAR Port
165: );
166:
167: UCHAR
168: UARTSetModemCtrl(
169: PUCHAR Port,
170: UCHAR Value
171: );
172:
173: BOOLEAN
174: UARTSetDlab(
175: PUCHAR Port,
176: BOOLEAN Set
177: );
178:
179: ULONG
180: UARTGetBaudRate(
181: PUCHAR Port,
182: ULONG BaudClock
183: );
184:
185: VOID
186: UARTSetBaudRate(
187: PUCHAR Port,
188: ULONG BaudRate,
189: ULONG BaudClock
190: );
191:
192: VOID
193: UARTGetState(
194: PUCHAR Port,
195: PUART Uart,
196: ULONG BaudClock
197: );
198:
199: VOID
200: UARTSetState(
201: PUCHAR Port,
202: PUART Uart,
203: ULONG BaudClock
204: );
205:
206: BOOLEAN
207: UARTIsReceiveBufferFull(
208: PUCHAR Port
209: );
210:
211: BOOLEAN
212: UARTReadCharNoWait(
213: PUCHAR Port,
214: PUCHAR Value
215: );
216:
217: BOOLEAN
218: UARTReadChar(
219: PUCHAR Port,
220: PUCHAR Value,
221: ULONG Timeout
222: );
223:
224: BOOLEAN
225: UARTFlushReadBuffer(
226: PUCHAR Port
227: );
228:
229: BOOLEAN
230: UARTIsTransmitEmpty(
231: PUCHAR Port
232: );
233:
234: BOOLEAN
235: UARTWriteChar(
236: PUCHAR Port,
237: UCHAR Value
238: );
239:
240: BOOLEAN
241: UARTWriteString(
242: PUCHAR Port,
243: PSZ Buffer
244: );
245:
246: #endif // UART_H
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.