]> git.proxmox.com Git - mirror_edk2.git/blob - Nt32Pkg/WinNtSerialIoDxe/WinNtSerialIo.h
Nt32SerialIo driver was changed to produce the flow control device path node when...
[mirror_edk2.git] / Nt32Pkg / WinNtSerialIoDxe / WinNtSerialIo.h
1 /**@file
2
3 Copyright (c) 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 WinNtSerialIo.h
15
16 Abstract:
17
18
19 **/
20
21 #ifndef _WIN_NT_SERIAL_IO_
22 #define _WIN_NT_SERIAL_IO_
23
24 //
25 // The package level header files this module uses
26 //
27 #include <Uefi.h>
28 #include <WinNtDxe.h>
29 //
30 // The protocols, PPI and GUID defintions for this module
31 //
32 #include <Protocol/WinNtIo.h>
33 #include <Protocol/ComponentName.h>
34 #include <Protocol/SerialIo.h>
35 #include <Protocol/DriverBinding.h>
36 #include <Protocol/DevicePath.h>
37 //
38 // The Library classes this module consumes
39 //
40 #include <Library/DebugLib.h>
41 #include <Library/BaseLib.h>
42 #include <Library/UefiDriverEntryPoint.h>
43 #include <Library/UefiLib.h>
44 #include <Library/BaseMemoryLib.h>
45 #include <Library/UefiBootServicesTableLib.h>
46 #include <Library/DevicePathLib.h>
47 #include <Library/MemoryAllocationLib.h>
48 #include <Library/PcdLib.h>
49
50
51 #define SERIAL_MAX_BUFFER_SIZE 256
52 #define TIMEOUT_STALL_INTERVAL 10
53
54 typedef struct {
55 UINT32 First;
56 UINT32 Last;
57 UINT32 Surplus;
58 UINT8 Data[SERIAL_MAX_BUFFER_SIZE];
59 } SERIAL_DEV_FIFO;
60
61 #define WIN_NT_SERIAL_IO_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('N', 'T', 's', 'i')
62 typedef struct {
63 UINT64 Signature;
64
65 //
66 // Protocol data for the new handle we are going to add
67 //
68 EFI_HANDLE Handle;
69 EFI_SERIAL_IO_PROTOCOL SerialIo;
70 EFI_SERIAL_IO_MODE SerialIoMode;
71 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
72
73 //
74 // Private Data
75 //
76 EFI_HANDLE ControllerHandle;
77 EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
78 UART_DEVICE_PATH UartDevicePath;
79 EFI_WIN_NT_THUNK_PROTOCOL *WinNtThunk;
80
81 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
82
83 //
84 // Private NT type Data;
85 //
86 HANDLE NtHandle;
87 DCB NtDCB;
88 DWORD NtError;
89 COMSTAT NtComStatus;
90
91 BOOLEAN SoftwareLoopbackEnable;
92 BOOLEAN HardwareFlowControl;
93 BOOLEAN HardwareLoopbackEnable;
94
95 SERIAL_DEV_FIFO Fifo;
96
97 } WIN_NT_SERIAL_IO_PRIVATE_DATA;
98
99 #define WIN_NT_SERIAL_IO_PRIVATE_DATA_FROM_THIS(a) \
100 CR(a, WIN_NT_SERIAL_IO_PRIVATE_DATA, SerialIo, WIN_NT_SERIAL_IO_PRIVATE_DATA_SIGNATURE)
101
102 //
103 // Global Protocol Variables
104 //
105 extern EFI_DRIVER_BINDING_PROTOCOL gWinNtSerialIoDriverBinding;
106 extern EFI_COMPONENT_NAME_PROTOCOL gWinNtSerialIoComponentName;
107 extern EFI_COMPONENT_NAME2_PROTOCOL gWinNtSerialIoComponentName2;
108
109 //
110 // Macros to convert EFI serial types to NT serial types.
111 //
112
113 //
114 // one second
115 //
116 #define SERIAL_TIMEOUT_DEFAULT (1000 * 1000)
117 #define SERIAL_BAUD_DEFAULT 115200
118 #define SERIAL_FIFO_DEFAULT 14
119 #define SERIAL_DATABITS_DEFAULT 8
120 #define SERIAL_PARITY_DEFAULT DefaultParity
121 #define SERIAL_STOPBITS_DEFAULT DefaultStopBits
122
123 #define SERIAL_CONTROL_MASK (EFI_SERIAL_CLEAR_TO_SEND | \
124 EFI_SERIAL_DATA_SET_READY | \
125 EFI_SERIAL_RING_INDICATE | \
126 EFI_SERIAL_CARRIER_DETECT | \
127 EFI_SERIAL_REQUEST_TO_SEND | \
128 EFI_SERIAL_DATA_TERMINAL_READY | \
129 EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE | \
130 EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE | \
131 EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE | \
132 EFI_SERIAL_INPUT_BUFFER_EMPTY)
133
134 #define ConvertBaud2Nt(x) (DWORD) x
135 #define ConvertData2Nt(x) (BYTE) x
136
137 #define ConvertParity2Nt(x) \
138 (BYTE) ( \
139 x == DefaultParity ? NOPARITY : \
140 x == NoParity ? NOPARITY : \
141 x == EvenParity ? EVENPARITY : \
142 x == OddParity ? ODDPARITY : \
143 x == MarkParity ? MARKPARITY : \
144 x == SpaceParity ? SPACEPARITY : 0 \
145 )
146
147 #define ConvertStop2Nt(x) \
148 (BYTE) ( \
149 x == DefaultParity ? ONESTOPBIT : \
150 x == OneFiveStopBits ? ONE5STOPBITS : \
151 x == TwoStopBits ? TWOSTOPBITS : 0 \
152 )
153
154 #define ConvertTime2Nt(x) ((x) / 1000)
155
156 //
157 // 115400 baud with rounding errors
158 //
159 #define SERIAL_PORT_MAX_BAUD_RATE 115400
160
161 #define SERIAL_PORT_MIN_BAUD_RATE 50
162 #define SERIAL_PORT_MAX_RECEIVE_FIFO_DEPTH 16
163
164 #define SERIAL_PORT_MIN_TIMEOUT 1 // 1 uS
165 #define SERIAL_PORT_MAX_TIMEOUT 100000000 // 100 seconds
166
167 //
168 // Function Prototypes
169 //
170 EFI_STATUS
171 EFIAPI
172 InitializeWinNtSerialIo (
173 IN EFI_HANDLE ImageHandle,
174 IN EFI_SYSTEM_TABLE *SystemTable
175 )
176 /*++
177
178 Routine Description:
179
180 TODO: Add function description
181
182 Arguments:
183
184 ImageHandle - TODO: add argument description
185 SystemTable - TODO: add argument description
186
187 Returns:
188
189 TODO: add return values
190
191 --*/
192 ;
193
194 EFI_STATUS
195 EFIAPI
196 WinNtSerialIoDriverBindingSupported (
197 IN EFI_DRIVER_BINDING_PROTOCOL *This,
198 IN EFI_HANDLE Handle,
199 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
200 )
201 /*++
202
203 Routine Description:
204
205 TODO: Add function description
206
207 Arguments:
208
209 This - TODO: add argument description
210 Handle - TODO: add argument description
211 RemainingDevicePath - TODO: add argument description
212
213 Returns:
214
215 TODO: add return values
216
217 --*/
218 ;
219
220 EFI_STATUS
221 EFIAPI
222 WinNtSerialIoDriverBindingStart (
223 IN EFI_DRIVER_BINDING_PROTOCOL *This,
224 IN EFI_HANDLE Handle,
225 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
226 )
227 /*++
228
229 Routine Description:
230
231 TODO: Add function description
232
233 Arguments:
234
235 This - TODO: add argument description
236 Handle - TODO: add argument description
237 RemainingDevicePath - TODO: add argument description
238
239 Returns:
240
241 TODO: add return values
242
243 --*/
244 ;
245
246 EFI_STATUS
247 EFIAPI
248 WinNtSerialIoDriverBindingStop (
249 IN EFI_DRIVER_BINDING_PROTOCOL *This,
250 IN EFI_HANDLE Handle,
251 IN UINTN NumberOfChildren,
252 IN EFI_HANDLE *ChildHandleBuffer
253 )
254 /*++
255
256 Routine Description:
257
258 TODO: Add function description
259
260 Arguments:
261
262 This - TODO: add argument description
263 Handle - TODO: add argument description
264 NumberOfChildren - TODO: add argument description
265 ChildHandleBuffer - TODO: add argument description
266
267 Returns:
268
269 TODO: add return values
270
271 --*/
272 ;
273
274 EFI_STATUS
275 EFIAPI
276 WinNtSerialIoReset (
277 IN EFI_SERIAL_IO_PROTOCOL *This
278 )
279 /*++
280
281 Routine Description:
282
283 TODO: Add function description
284
285 Arguments:
286
287 This - TODO: add argument description
288
289 Returns:
290
291 TODO: add return values
292
293 --*/
294 ;
295
296 EFI_STATUS
297 EFIAPI
298 WinNtSerialIoSetAttributes (
299 IN EFI_SERIAL_IO_PROTOCOL *This,
300 IN UINT64 BaudRate,
301 IN UINT32 ReceiveFifoDepth,
302 IN UINT32 Timeout,
303 IN EFI_PARITY_TYPE Parity,
304 IN UINT8 DataBits,
305 IN EFI_STOP_BITS_TYPE StopBits
306 )
307 /*++
308
309 Routine Description:
310
311 TODO: Add function description
312
313 Arguments:
314
315 This - TODO: add argument description
316 BaudRate - TODO: add argument description
317 ReceiveFifoDepth - TODO: add argument description
318 Timeout - TODO: add argument description
319 Parity - TODO: add argument description
320 DataBits - TODO: add argument description
321 StopBits - TODO: add argument description
322
323 Returns:
324
325 TODO: add return values
326
327 --*/
328 ;
329
330 EFI_STATUS
331 EFIAPI
332 WinNtSerialIoSetControl (
333 IN EFI_SERIAL_IO_PROTOCOL *This,
334 IN UINT32 Control
335 )
336 /*++
337
338 Routine Description:
339
340 TODO: Add function description
341
342 Arguments:
343
344 This - TODO: add argument description
345 Control - TODO: add argument description
346
347 Returns:
348
349 TODO: add return values
350
351 --*/
352 ;
353
354 EFI_STATUS
355 EFIAPI
356 WinNtSerialIoGetControl (
357 IN EFI_SERIAL_IO_PROTOCOL *This,
358 OUT UINT32 *Control
359 )
360 /*++
361
362 Routine Description:
363
364 TODO: Add function description
365
366 Arguments:
367
368 This - TODO: add argument description
369 Control - TODO: add argument description
370
371 Returns:
372
373 TODO: add return values
374
375 --*/
376 ;
377
378 EFI_STATUS
379 EFIAPI
380 WinNtSerialIoWrite (
381 IN EFI_SERIAL_IO_PROTOCOL *This,
382 IN OUT UINTN *BufferSize,
383 IN VOID *Buffer
384 )
385 /*++
386
387 Routine Description:
388
389 TODO: Add function description
390
391 Arguments:
392
393 This - TODO: add argument description
394 BufferSize - TODO: add argument description
395 Buffer - TODO: add argument description
396
397 Returns:
398
399 TODO: add return values
400
401 --*/
402 ;
403
404 EFI_STATUS
405 EFIAPI
406 WinNtSerialIoRead (
407 IN EFI_SERIAL_IO_PROTOCOL *This,
408 IN OUT UINTN *BufferSize,
409 OUT VOID *Buffer
410 )
411 /*++
412
413 Routine Description:
414
415 TODO: Add function description
416
417 Arguments:
418
419 This - TODO: add argument description
420 BufferSize - TODO: add argument description
421 Buffer - TODO: add argument description
422
423 Returns:
424
425 TODO: add return values
426
427 --*/
428 ;
429
430 BOOLEAN
431 IsaSerialFifoFull (
432 IN SERIAL_DEV_FIFO *Fifo
433 )
434 /*++
435
436 Routine Description:
437
438 TODO: Add function description
439
440 Arguments:
441
442 Fifo - TODO: add argument description
443
444 Returns:
445
446 TODO: add return values
447
448 --*/
449 ;
450
451 BOOLEAN
452 IsaSerialFifoEmpty (
453 IN SERIAL_DEV_FIFO *Fifo
454 )
455 /*++
456
457 Routine Description:
458
459 TODO: Add function description
460
461 Arguments:
462
463 Fifo - TODO: add argument description
464
465 Returns:
466
467 TODO: add return values
468
469 --*/
470 ;
471
472 EFI_STATUS
473 IsaSerialFifoAdd (
474 IN SERIAL_DEV_FIFO *Fifo,
475 IN UINT8 Data
476 )
477 /*++
478
479 Routine Description:
480
481 TODO: Add function description
482
483 Arguments:
484
485 Fifo - TODO: add argument description
486 Data - TODO: add argument description
487
488 Returns:
489
490 TODO: add return values
491
492 --*/
493 ;
494
495 EFI_STATUS
496 IsaSerialFifoRemove (
497 IN SERIAL_DEV_FIFO *Fifo,
498 OUT UINT8 *Data
499 )
500 /*++
501
502 Routine Description:
503
504 TODO: Add function description
505
506 Arguments:
507
508 Fifo - TODO: add argument description
509 Data - TODO: add argument description
510
511 Returns:
512
513 TODO: add return values
514
515 --*/
516 ;
517
518 EFI_STATUS
519 IsaSerialReceiveTransmit (
520 WIN_NT_SERIAL_IO_PRIVATE_DATA *Private
521 )
522 /*++
523
524 Routine Description:
525
526 TODO: Add function description
527
528 Arguments:
529
530 Private - TODO: add argument description
531
532 Returns:
533
534 TODO: add return values
535
536 --*/
537 ;
538
539 #endif