]> git.proxmox.com Git - mirror_edk2.git/blame - Nt32Pkg/WinNtSerialIoDxe/WinNtSerialIo.h
Update to support to produce Component Name and & Component Name 2 protocol based...
[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
82408a47 157#define SERIAL_PORT_MIN_BAUD_RATE 50\r
158#define SERIAL_PORT_MAX_RECEIVE_FIFO_DEPTH 16\r
159\r
160#define SERIAL_PORT_MIN_TIMEOUT 1 // 1 uS\r
161#define SERIAL_PORT_MAX_TIMEOUT 100000000 // 100 seconds\r
162\r
5f44f5b9 163//\r
164// Function Prototypes\r
165//\r
166EFI_STATUS\r
167EFIAPI\r
168InitializeWinNtSerialIo (\r
169 IN EFI_HANDLE ImageHandle,\r
170 IN EFI_SYSTEM_TABLE *SystemTable\r
171 )\r
172/*++\r
173\r
174Routine Description:\r
175\r
176 TODO: Add function description\r
177\r
178Arguments:\r
179\r
180 ImageHandle - TODO: add argument description\r
181 SystemTable - TODO: add argument description\r
182\r
183Returns:\r
184\r
185 TODO: add return values\r
186\r
187--*/\r
188;\r
189\r
190STATIC\r
191EFI_STATUS\r
192EFIAPI\r
193WinNtSerialIoDriverBindingSupported (\r
194 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
195 IN EFI_HANDLE Handle,\r
196 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
197 )\r
198/*++\r
199\r
200Routine Description:\r
201\r
202 TODO: Add function description\r
203\r
204Arguments:\r
205\r
206 This - TODO: add argument description\r
207 Handle - TODO: add argument description\r
208 RemainingDevicePath - TODO: add argument description\r
209\r
210Returns:\r
211\r
212 TODO: add return values\r
213\r
214--*/\r
215;\r
216\r
217STATIC\r
218EFI_STATUS\r
219EFIAPI\r
220WinNtSerialIoDriverBindingStart (\r
221 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
222 IN EFI_HANDLE Handle,\r
223 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
224 )\r
225/*++\r
226\r
227Routine Description:\r
228\r
229 TODO: Add function description\r
230\r
231Arguments:\r
232\r
233 This - TODO: add argument description\r
234 Handle - TODO: add argument description\r
235 RemainingDevicePath - TODO: add argument description\r
236\r
237Returns:\r
238\r
239 TODO: add return values\r
240\r
241--*/\r
242;\r
243\r
244STATIC\r
245EFI_STATUS\r
246EFIAPI\r
247WinNtSerialIoDriverBindingStop (\r
248 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
249 IN EFI_HANDLE Handle,\r
250 IN UINTN NumberOfChildren,\r
251 IN EFI_HANDLE *ChildHandleBuffer\r
252 )\r
253/*++\r
254\r
255Routine Description:\r
256\r
257 TODO: Add function description\r
258\r
259Arguments:\r
260\r
261 This - TODO: add argument description\r
262 Handle - TODO: add argument description\r
263 NumberOfChildren - TODO: add argument description\r
264 ChildHandleBuffer - TODO: add argument description\r
265\r
266Returns:\r
267\r
268 TODO: add return values\r
269\r
270--*/\r
271;\r
272\r
273STATIC\r
274EFI_STATUS\r
275EFIAPI\r
276WinNtSerialIoReset (\r
277 IN EFI_SERIAL_IO_PROTOCOL *This\r
278 )\r
279/*++\r
280\r
281Routine Description:\r
282\r
283 TODO: Add function description\r
284\r
285Arguments:\r
286\r
287 This - TODO: add argument description\r
288\r
289Returns:\r
290\r
291 TODO: add return values\r
292\r
293--*/\r
294;\r
295\r
296STATIC\r
297EFI_STATUS\r
298EFIAPI\r
299WinNtSerialIoSetAttributes (\r
300 IN EFI_SERIAL_IO_PROTOCOL *This,\r
301 IN UINT64 BaudRate,\r
302 IN UINT32 ReceiveFifoDepth,\r
303 IN UINT32 Timeout,\r
304 IN EFI_PARITY_TYPE Parity,\r
305 IN UINT8 DataBits,\r
306 IN EFI_STOP_BITS_TYPE StopBits\r
307 )\r
308/*++\r
309\r
310Routine Description:\r
311\r
312 TODO: Add function description\r
313\r
314Arguments:\r
315\r
316 This - TODO: add argument description\r
317 BaudRate - TODO: add argument description\r
318 ReceiveFifoDepth - TODO: add argument description\r
319 Timeout - TODO: add argument description\r
320 Parity - TODO: add argument description\r
321 DataBits - TODO: add argument description\r
322 StopBits - TODO: add argument description\r
323\r
324Returns:\r
325\r
326 TODO: add return values\r
327\r
328--*/\r
329;\r
330\r
331STATIC\r
332EFI_STATUS\r
333EFIAPI\r
334WinNtSerialIoSetControl (\r
335 IN EFI_SERIAL_IO_PROTOCOL *This,\r
336 IN UINT32 Control\r
337 )\r
338/*++\r
339\r
340Routine Description:\r
341\r
342 TODO: Add function description\r
343\r
344Arguments:\r
345\r
346 This - TODO: add argument description\r
347 Control - TODO: add argument description\r
348\r
349Returns:\r
350\r
351 TODO: add return values\r
352\r
353--*/\r
354;\r
355\r
356STATIC\r
357EFI_STATUS\r
358EFIAPI\r
359WinNtSerialIoGetControl (\r
360 IN EFI_SERIAL_IO_PROTOCOL *This,\r
361 OUT UINT32 *Control\r
362 )\r
363/*++\r
364\r
365Routine Description:\r
366\r
367 TODO: Add function description\r
368\r
369Arguments:\r
370\r
371 This - TODO: add argument description\r
372 Control - TODO: add argument description\r
373\r
374Returns:\r
375\r
376 TODO: add return values\r
377\r
378--*/\r
379;\r
380\r
381STATIC\r
382EFI_STATUS\r
383EFIAPI\r
384WinNtSerialIoWrite (\r
385 IN EFI_SERIAL_IO_PROTOCOL *This,\r
386 IN OUT UINTN *BufferSize,\r
387 IN VOID *Buffer\r
388 )\r
389/*++\r
390\r
391Routine Description:\r
392\r
393 TODO: Add function description\r
394\r
395Arguments:\r
396\r
397 This - TODO: add argument description\r
398 BufferSize - TODO: add argument description\r
399 Buffer - TODO: add argument description\r
400\r
401Returns:\r
402\r
403 TODO: add return values\r
404\r
405--*/\r
406;\r
407\r
408STATIC\r
409EFI_STATUS\r
410EFIAPI\r
411WinNtSerialIoRead (\r
412 IN EFI_SERIAL_IO_PROTOCOL *This,\r
413 IN OUT UINTN *BufferSize,\r
414 OUT VOID *Buffer\r
415 )\r
416/*++\r
417\r
418Routine Description:\r
419\r
420 TODO: Add function description\r
421\r
422Arguments:\r
423\r
424 This - TODO: add argument description\r
425 BufferSize - TODO: add argument description\r
426 Buffer - TODO: add argument description\r
427\r
428Returns:\r
429\r
430 TODO: add return values\r
431\r
432--*/\r
433;\r
434\r
435BOOLEAN\r
436IsaSerialFifoFull (\r
437 IN SERIAL_DEV_FIFO *Fifo\r
438 )\r
439/*++\r
440\r
441Routine Description:\r
442\r
443 TODO: Add function description\r
444\r
445Arguments:\r
446\r
447 Fifo - TODO: add argument description\r
448\r
449Returns:\r
450\r
451 TODO: add return values\r
452\r
453--*/\r
454;\r
455\r
456BOOLEAN\r
457IsaSerialFifoEmpty (\r
458 IN SERIAL_DEV_FIFO *Fifo\r
459 )\r
460/*++\r
461\r
462Routine Description:\r
463\r
464 TODO: Add function description\r
465\r
466Arguments:\r
467\r
468 Fifo - TODO: add argument description\r
469\r
470Returns:\r
471\r
472 TODO: add return values\r
473\r
474--*/\r
475;\r
476\r
477EFI_STATUS\r
478IsaSerialFifoAdd (\r
479 IN SERIAL_DEV_FIFO *Fifo,\r
480 IN UINT8 Data\r
481 )\r
482/*++\r
483\r
484Routine Description:\r
485\r
486 TODO: Add function description\r
487\r
488Arguments:\r
489\r
490 Fifo - TODO: add argument description\r
491 Data - TODO: add argument description\r
492\r
493Returns:\r
494\r
495 TODO: add return values\r
496\r
497--*/\r
498;\r
499\r
500EFI_STATUS\r
501IsaSerialFifoRemove (\r
502 IN SERIAL_DEV_FIFO *Fifo,\r
503 OUT UINT8 *Data\r
504 )\r
505/*++\r
506\r
507Routine Description:\r
508\r
509 TODO: Add function description\r
510\r
511Arguments:\r
512\r
513 Fifo - TODO: add argument description\r
514 Data - TODO: add argument description\r
515\r
516Returns:\r
517\r
518 TODO: add return values\r
519\r
520--*/\r
521;\r
522\r
523EFI_STATUS\r
524IsaSerialReceiveTransmit (\r
525 WIN_NT_SERIAL_IO_PRIVATE_DATA *Private\r
526 )\r
527/*++\r
528\r
529Routine Description:\r
530\r
531 TODO: Add function description\r
532\r
533Arguments:\r
534\r
535 Private - TODO: add argument description\r
536\r
537Returns:\r
538\r
539 TODO: add return values\r
540\r
541--*/\r
542;\r
543\r
544#endif\r