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