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