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