]> git.proxmox.com Git - mirror_edk2.git/blame - Nt32Pkg/WinNtSerialIoDxe/WinNtSerialIo.h
IntelFrameworkModulePkg: Refine casting expression result to bigger size
[mirror_edk2.git] / Nt32Pkg / WinNtSerialIoDxe / WinNtSerialIo.h
CommitLineData
6ae81428 1/**@file\r
5f44f5b9 2\r
8f2a5f80
HT
3Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>\r
4This program and the accompanying materials \r
5f44f5b9 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
6ae81428 19**/\r
5f44f5b9 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
99e1dd89 61#define WIN_NT_SERIAL_IO_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('N', 'T', 's', 'i')\r
5f44f5b9 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
04369cd8 105extern EFI_DRIVER_BINDING_PROTOCOL gWinNtSerialIoDriverBinding;\r
106extern EFI_COMPONENT_NAME_PROTOCOL gWinNtSerialIoComponentName;\r
107extern EFI_COMPONENT_NAME2_PROTOCOL gWinNtSerialIoComponentName2;\r
5f44f5b9 108\r
109//\r
110// Macros to convert EFI serial types to NT serial types.\r
111//\r
112\r
113//\r
114// one second\r
115//\r
116#define SERIAL_TIMEOUT_DEFAULT (1000 * 1000) \r
117#define SERIAL_BAUD_DEFAULT 115200\r
118#define SERIAL_FIFO_DEFAULT 14\r
119#define SERIAL_DATABITS_DEFAULT 8\r
120#define SERIAL_PARITY_DEFAULT DefaultParity\r
121#define SERIAL_STOPBITS_DEFAULT DefaultStopBits\r
122\r
ff72001b
RN
123#define SERIAL_CONTROL_MASK (EFI_SERIAL_CLEAR_TO_SEND | \\r
124 EFI_SERIAL_DATA_SET_READY | \\r
125 EFI_SERIAL_RING_INDICATE | \\r
126 EFI_SERIAL_CARRIER_DETECT | \\r
127 EFI_SERIAL_REQUEST_TO_SEND | \\r
128 EFI_SERIAL_DATA_TERMINAL_READY | \\r
129 EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE | \\r
130 EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE | \\r
131 EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE | \\r
5f44f5b9 132 EFI_SERIAL_INPUT_BUFFER_EMPTY)\r
133\r
134#define ConvertBaud2Nt(x) (DWORD) x\r
135#define ConvertData2Nt(x) (BYTE) x\r
136\r
137#define ConvertParity2Nt(x) \\r
138 (BYTE) ( \\r
139 x == DefaultParity ? NOPARITY : \\r
140 x == NoParity ? NOPARITY : \\r
141 x == EvenParity ? EVENPARITY : \\r
142 x == OddParity ? ODDPARITY : \\r
143 x == MarkParity ? MARKPARITY : \\r
144 x == SpaceParity ? SPACEPARITY : 0 \\r
145 )\r
146\r
147#define ConvertStop2Nt(x) \\r
148 (BYTE) ( \\r
149 x == DefaultParity ? ONESTOPBIT : \\r
150 x == OneFiveStopBits ? ONE5STOPBITS : \\r
151 x == TwoStopBits ? TWOSTOPBITS : 0 \\r
152 )\r
153\r
154#define ConvertTime2Nt(x) ((x) / 1000)\r
155\r
156//\r
157// 115400 baud with rounding errors\r
158//\r
159#define SERIAL_PORT_MAX_BAUD_RATE 115400 \r
160\r
82408a47 161#define SERIAL_PORT_MIN_BAUD_RATE 50\r
162#define SERIAL_PORT_MAX_RECEIVE_FIFO_DEPTH 16\r
163\r
164#define SERIAL_PORT_MIN_TIMEOUT 1 // 1 uS\r
165#define SERIAL_PORT_MAX_TIMEOUT 100000000 // 100 seconds\r
166\r
5f44f5b9 167//\r
168// Function Prototypes\r
169//\r
170EFI_STATUS\r
171EFIAPI\r
172InitializeWinNtSerialIo (\r
173 IN EFI_HANDLE ImageHandle,\r
174 IN EFI_SYSTEM_TABLE *SystemTable\r
175 )\r
176/*++\r
177\r
178Routine Description:\r
179\r
180 TODO: Add function description\r
181\r
182Arguments:\r
183\r
184 ImageHandle - TODO: add argument description\r
185 SystemTable - TODO: add argument description\r
186\r
187Returns:\r
188\r
189 TODO: add return values\r
190\r
191--*/\r
192;\r
193\r
5f44f5b9 194EFI_STATUS\r
195EFIAPI\r
196WinNtSerialIoDriverBindingSupported (\r
197 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
198 IN EFI_HANDLE Handle,\r
199 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
200 )\r
201/*++\r
202\r
203Routine Description:\r
204\r
205 TODO: Add function description\r
206\r
207Arguments:\r
208\r
209 This - TODO: add argument description\r
210 Handle - TODO: add argument description\r
211 RemainingDevicePath - TODO: add argument description\r
212\r
213Returns:\r
214\r
215 TODO: add return values\r
216\r
217--*/\r
218;\r
219\r
5f44f5b9 220EFI_STATUS\r
221EFIAPI\r
222WinNtSerialIoDriverBindingStart (\r
223 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
224 IN EFI_HANDLE Handle,\r
225 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
226 )\r
227/*++\r
228\r
229Routine Description:\r
230\r
231 TODO: Add function description\r
232\r
233Arguments:\r
234\r
235 This - TODO: add argument description\r
236 Handle - TODO: add argument description\r
237 RemainingDevicePath - TODO: add argument description\r
238\r
239Returns:\r
240\r
241 TODO: add return values\r
242\r
243--*/\r
244;\r
245\r
5f44f5b9 246EFI_STATUS\r
247EFIAPI\r
248WinNtSerialIoDriverBindingStop (\r
249 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
250 IN EFI_HANDLE Handle,\r
251 IN UINTN NumberOfChildren,\r
252 IN EFI_HANDLE *ChildHandleBuffer\r
253 )\r
254/*++\r
255\r
256Routine Description:\r
257\r
258 TODO: Add function description\r
259\r
260Arguments:\r
261\r
262 This - TODO: add argument description\r
263 Handle - TODO: add argument description\r
264 NumberOfChildren - TODO: add argument description\r
265 ChildHandleBuffer - TODO: add argument description\r
266\r
267Returns:\r
268\r
269 TODO: add return values\r
270\r
271--*/\r
272;\r
273\r
5f44f5b9 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
5f44f5b9 296EFI_STATUS\r
297EFIAPI\r
298WinNtSerialIoSetAttributes (\r
299 IN EFI_SERIAL_IO_PROTOCOL *This,\r
300 IN UINT64 BaudRate,\r
301 IN UINT32 ReceiveFifoDepth,\r
302 IN UINT32 Timeout,\r
303 IN EFI_PARITY_TYPE Parity,\r
304 IN UINT8 DataBits,\r
305 IN EFI_STOP_BITS_TYPE StopBits\r
306 )\r
307/*++\r
308\r
309Routine Description:\r
310\r
311 TODO: Add function description\r
312\r
313Arguments:\r
314\r
315 This - TODO: add argument description\r
316 BaudRate - TODO: add argument description\r
317 ReceiveFifoDepth - TODO: add argument description\r
318 Timeout - TODO: add argument description\r
319 Parity - TODO: add argument description\r
320 DataBits - TODO: add argument description\r
321 StopBits - TODO: add argument description\r
322\r
323Returns:\r
324\r
325 TODO: add return values\r
326\r
327--*/\r
328;\r
329\r
5f44f5b9 330EFI_STATUS\r
331EFIAPI\r
332WinNtSerialIoSetControl (\r
333 IN EFI_SERIAL_IO_PROTOCOL *This,\r
334 IN UINT32 Control\r
335 )\r
336/*++\r
337\r
338Routine Description:\r
339\r
340 TODO: Add function description\r
341\r
342Arguments:\r
343\r
344 This - TODO: add argument description\r
345 Control - TODO: add argument description\r
346\r
347Returns:\r
348\r
349 TODO: add return values\r
350\r
351--*/\r
352;\r
353\r
5f44f5b9 354EFI_STATUS\r
355EFIAPI\r
356WinNtSerialIoGetControl (\r
357 IN EFI_SERIAL_IO_PROTOCOL *This,\r
358 OUT UINT32 *Control\r
359 )\r
360/*++\r
361\r
362Routine Description:\r
363\r
364 TODO: Add function description\r
365\r
366Arguments:\r
367\r
368 This - TODO: add argument description\r
369 Control - TODO: add argument description\r
370\r
371Returns:\r
372\r
373 TODO: add return values\r
374\r
375--*/\r
376;\r
377\r
5f44f5b9 378EFI_STATUS\r
379EFIAPI\r
380WinNtSerialIoWrite (\r
381 IN EFI_SERIAL_IO_PROTOCOL *This,\r
382 IN OUT UINTN *BufferSize,\r
383 IN VOID *Buffer\r
384 )\r
385/*++\r
386\r
387Routine Description:\r
388\r
389 TODO: Add function description\r
390\r
391Arguments:\r
392\r
393 This - TODO: add argument description\r
394 BufferSize - TODO: add argument description\r
395 Buffer - TODO: add argument description\r
396\r
397Returns:\r
398\r
399 TODO: add return values\r
400\r
401--*/\r
402;\r
403\r
5f44f5b9 404EFI_STATUS\r
405EFIAPI\r
406WinNtSerialIoRead (\r
407 IN EFI_SERIAL_IO_PROTOCOL *This,\r
408 IN OUT UINTN *BufferSize,\r
409 OUT VOID *Buffer\r
410 )\r
411/*++\r
412\r
413Routine Description:\r
414\r
415 TODO: Add function description\r
416\r
417Arguments:\r
418\r
419 This - TODO: add argument description\r
420 BufferSize - TODO: add argument description\r
421 Buffer - TODO: add argument description\r
422\r
423Returns:\r
424\r
425 TODO: add return values\r
426\r
427--*/\r
428;\r
429\r
430BOOLEAN\r
431IsaSerialFifoFull (\r
432 IN SERIAL_DEV_FIFO *Fifo\r
433 )\r
434/*++\r
435\r
436Routine Description:\r
437\r
438 TODO: Add function description\r
439\r
440Arguments:\r
441\r
442 Fifo - TODO: add argument description\r
443\r
444Returns:\r
445\r
446 TODO: add return values\r
447\r
448--*/\r
449;\r
450\r
451BOOLEAN\r
452IsaSerialFifoEmpty (\r
453 IN SERIAL_DEV_FIFO *Fifo\r
454 )\r
455/*++\r
456\r
457Routine Description:\r
458\r
459 TODO: Add function description\r
460\r
461Arguments:\r
462\r
463 Fifo - TODO: add argument description\r
464\r
465Returns:\r
466\r
467 TODO: add return values\r
468\r
469--*/\r
470;\r
471\r
472EFI_STATUS\r
473IsaSerialFifoAdd (\r
474 IN SERIAL_DEV_FIFO *Fifo,\r
475 IN UINT8 Data\r
476 )\r
477/*++\r
478\r
479Routine Description:\r
480\r
481 TODO: Add function description\r
482\r
483Arguments:\r
484\r
485 Fifo - TODO: add argument description\r
486 Data - TODO: add argument description\r
487\r
488Returns:\r
489\r
490 TODO: add return values\r
491\r
492--*/\r
493;\r
494\r
495EFI_STATUS\r
496IsaSerialFifoRemove (\r
497 IN SERIAL_DEV_FIFO *Fifo,\r
498 OUT UINT8 *Data\r
499 )\r
500/*++\r
501\r
502Routine Description:\r
503\r
504 TODO: Add function description\r
505\r
506Arguments:\r
507\r
508 Fifo - TODO: add argument description\r
509 Data - TODO: add argument description\r
510\r
511Returns:\r
512\r
513 TODO: add return values\r
514\r
515--*/\r
516;\r
517\r
518EFI_STATUS\r
519IsaSerialReceiveTransmit (\r
520 WIN_NT_SERIAL_IO_PRIVATE_DATA *Private\r
521 )\r
522/*++\r
523\r
524Routine Description:\r
525\r
526 TODO: Add function description\r
527\r
528Arguments:\r
529\r
530 Private - TODO: add argument description\r
531\r
532Returns:\r
533\r
534 TODO: add return values\r
535\r
536--*/\r
537;\r
538\r
539#endif\r