3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
4 SPDX-License-Identifier: BSD-2-Clause-Patent
15 #ifndef _WIN_NT_SERIAL_IO_
16 #define _WIN_NT_SERIAL_IO_
19 // The package level header files this module uses
24 // The protocols, PPI and GUID defintions for this module
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>
32 // The Library classes this module consumes
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>
45 #define SERIAL_MAX_BUFFER_SIZE 256
46 #define TIMEOUT_STALL_INTERVAL 10
52 UINT8 Data
[SERIAL_MAX_BUFFER_SIZE
];
55 #define WIN_NT_SERIAL_IO_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('N', 'T', 's', 'i')
60 // Protocol data for the new handle we are going to add
63 EFI_SERIAL_IO_PROTOCOL SerialIo
;
64 EFI_SERIAL_IO_MODE SerialIoMode
;
65 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
70 EFI_HANDLE ControllerHandle
;
71 EFI_DEVICE_PATH_PROTOCOL
*ParentDevicePath
;
72 UART_DEVICE_PATH UartDevicePath
;
73 EFI_WIN_NT_THUNK_PROTOCOL
*WinNtThunk
;
75 EFI_UNICODE_STRING_TABLE
*ControllerNameTable
;
78 // Private NT type Data;
85 BOOLEAN SoftwareLoopbackEnable
;
86 BOOLEAN HardwareFlowControl
;
87 BOOLEAN HardwareLoopbackEnable
;
91 } WIN_NT_SERIAL_IO_PRIVATE_DATA
;
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)
97 // Global Protocol Variables
99 extern EFI_DRIVER_BINDING_PROTOCOL gWinNtSerialIoDriverBinding
;
100 extern EFI_COMPONENT_NAME_PROTOCOL gWinNtSerialIoComponentName
;
101 extern EFI_COMPONENT_NAME2_PROTOCOL gWinNtSerialIoComponentName2
;
104 // Macros to convert EFI serial types to NT serial types.
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
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)
128 #define ConvertBaud2Nt(x) (DWORD) x
129 #define ConvertData2Nt(x) (BYTE) x
131 #define ConvertParity2Nt(x) \
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 \
141 #define ConvertStop2Nt(x) \
143 x == DefaultParity ? ONESTOPBIT : \
144 x == OneFiveStopBits ? ONE5STOPBITS : \
145 x == TwoStopBits ? TWOSTOPBITS : 0 \
148 #define ConvertTime2Nt(x) ((x) / 1000)
151 // 115400 baud with rounding errors
153 #define SERIAL_PORT_MAX_BAUD_RATE 115400
155 #define SERIAL_PORT_MIN_BAUD_RATE 50
156 #define SERIAL_PORT_MAX_RECEIVE_FIFO_DEPTH 16
158 #define SERIAL_PORT_MIN_TIMEOUT 1 // 1 uS
159 #define SERIAL_PORT_MAX_TIMEOUT 100000000 // 100 seconds
162 // Function Prototypes
166 InitializeWinNtSerialIo (
167 IN EFI_HANDLE ImageHandle
,
168 IN EFI_SYSTEM_TABLE
*SystemTable
174 TODO: Add function description
178 ImageHandle - TODO: add argument description
179 SystemTable - TODO: add argument description
183 TODO: add return values
190 WinNtSerialIoDriverBindingSupported (
191 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
192 IN EFI_HANDLE Handle
,
193 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
199 TODO: Add function description
203 This - TODO: add argument description
204 Handle - TODO: add argument description
205 RemainingDevicePath - TODO: add argument description
209 TODO: add return values
216 WinNtSerialIoDriverBindingStart (
217 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
218 IN EFI_HANDLE Handle
,
219 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
225 TODO: Add function description
229 This - TODO: add argument description
230 Handle - TODO: add argument description
231 RemainingDevicePath - TODO: add argument description
235 TODO: add return values
242 WinNtSerialIoDriverBindingStop (
243 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
244 IN EFI_HANDLE Handle
,
245 IN UINTN NumberOfChildren
,
246 IN EFI_HANDLE
*ChildHandleBuffer
252 TODO: Add function description
256 This - TODO: add argument description
257 Handle - TODO: add argument description
258 NumberOfChildren - TODO: add argument description
259 ChildHandleBuffer - TODO: add argument description
263 TODO: add return values
271 IN EFI_SERIAL_IO_PROTOCOL
*This
277 TODO: Add function description
281 This - TODO: add argument description
285 TODO: add return values
292 WinNtSerialIoSetAttributes (
293 IN EFI_SERIAL_IO_PROTOCOL
*This
,
295 IN UINT32 ReceiveFifoDepth
,
297 IN EFI_PARITY_TYPE Parity
,
299 IN EFI_STOP_BITS_TYPE StopBits
305 TODO: Add function description
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
319 TODO: add return values
326 WinNtSerialIoSetControl (
327 IN EFI_SERIAL_IO_PROTOCOL
*This
,
334 TODO: Add function description
338 This - TODO: add argument description
339 Control - TODO: add argument description
343 TODO: add return values
350 WinNtSerialIoGetControl (
351 IN EFI_SERIAL_IO_PROTOCOL
*This
,
358 TODO: Add function description
362 This - TODO: add argument description
363 Control - TODO: add argument description
367 TODO: add return values
375 IN EFI_SERIAL_IO_PROTOCOL
*This
,
376 IN OUT UINTN
*BufferSize
,
383 TODO: Add function description
387 This - TODO: add argument description
388 BufferSize - TODO: add argument description
389 Buffer - TODO: add argument description
393 TODO: add return values
401 IN EFI_SERIAL_IO_PROTOCOL
*This
,
402 IN OUT UINTN
*BufferSize
,
409 TODO: Add function description
413 This - TODO: add argument description
414 BufferSize - TODO: add argument description
415 Buffer - TODO: add argument description
419 TODO: add return values
426 IN SERIAL_DEV_FIFO
*Fifo
432 TODO: Add function description
436 Fifo - TODO: add argument description
440 TODO: add return values
447 IN SERIAL_DEV_FIFO
*Fifo
453 TODO: Add function description
457 Fifo - TODO: add argument description
461 TODO: add return values
468 IN SERIAL_DEV_FIFO
*Fifo
,
475 TODO: Add function description
479 Fifo - TODO: add argument description
480 Data - TODO: add argument description
484 TODO: add return values
490 IsaSerialFifoRemove (
491 IN SERIAL_DEV_FIFO
*Fifo
,
498 TODO: Add function description
502 Fifo - TODO: add argument description
503 Data - TODO: add argument description
507 TODO: add return values
513 IsaSerialReceiveTransmit (
514 WIN_NT_SERIAL_IO_PRIVATE_DATA
*Private
520 TODO: Add function description
524 Private - TODO: add argument description
528 TODO: add return values