3 Copyright (c) 2006 - 2008, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
21 #ifndef _UNIXPKG_SERIAL_IO_
22 #define _UNIXPKG_SERIAL_IO_
23 #include <sys/types.h>
33 #include <Protocol/SerialIo.h>
34 #include <Protocol/DevicePath.h>
36 #include <Library/DebugLib.h>
37 #include <Library/BaseLib.h>
38 #include <Library/UefiDriverEntryPoint.h>
39 #include <Library/UefiLib.h>
40 #include <Library/BaseMemoryLib.h>
41 #include <Library/UefiBootServicesTableLib.h>
42 #include <Library/DevicePathLib.h>
43 #include <Library/MemoryAllocationLib.h>
46 extern EFI_DRIVER_BINDING_PROTOCOL gUnixSerialIoDriverBinding
;
47 extern EFI_COMPONENT_NAME_PROTOCOL gUnixSerialIoComponentName
;
49 #define SERIAL_MAX_BUFFER_SIZE 256
50 #define TIMEOUT_STALL_INTERVAL 10
56 UINT8 Data
[SERIAL_MAX_BUFFER_SIZE
];
59 #define UNIX_SERIAL_IO_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('U', 'N', 's', 'i')
64 // Protocol data for the new handle we are going to add
67 EFI_SERIAL_IO_PROTOCOL SerialIo
;
68 EFI_SERIAL_IO_MODE SerialIoMode
;
69 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
74 EFI_HANDLE ControllerHandle
;
75 EFI_DEVICE_PATH_PROTOCOL
*ParentDevicePath
;
76 UART_DEVICE_PATH UartDevicePath
;
77 EFI_UNIX_THUNK_PROTOCOL
*UnixThunk
;
79 EFI_UNICODE_STRING_TABLE
*ControllerNameTable
;
82 // Private NT type Data;
85 struct termios UnixTermios
;
87 BOOLEAN SoftwareLoopbackEnable
;
88 BOOLEAN HardwareFlowControl
;
89 BOOLEAN HardwareLoopbackEnable
;
93 } UNIX_SERIAL_IO_PRIVATE_DATA
;
95 #define UNIX_SERIAL_IO_PRIVATE_DATA_FROM_THIS(a) \
96 CR(a, UNIX_SERIAL_IO_PRIVATE_DATA, SerialIo, UNIX_SERIAL_IO_PRIVATE_DATA_SIGNATURE)
99 // Global Protocol Variables
101 extern EFI_DRIVER_BINDING_PROTOCOL gUnixSerialIoDriverBinding
;
102 extern EFI_COMPONENT_NAME_PROTOCOL gUnixSerialIoComponentName
;
105 // Macros to convert EFI serial types to NT serial types.
111 #define SERIAL_TIMEOUT_DEFAULT (1000 * 1000)
112 #define SERIAL_BAUD_DEFAULT 115200
113 #define SERIAL_FIFO_DEFAULT 14
114 #define SERIAL_DATABITS_DEFAULT 8
115 #define SERIAL_PARITY_DEFAULT DefaultParity
116 #define SERIAL_STOPBITS_DEFAULT DefaultStopBits
118 #define SERIAL_CONTROL_MASK (EFI_SERIAL_CLEAR_TO_SEND | \
119 EFI_SERIAL_DATA_SET_READY | \
120 EFI_SERIAL_RING_INDICATE | \
121 EFI_SERIAL_CARRIER_DETECT | \
122 EFI_SERIAL_REQUEST_TO_SEND | \
123 EFI_SERIAL_DATA_TERMINAL_READY | \
124 EFI_SERIAL_INPUT_BUFFER_EMPTY)
126 #define ConvertBaud2Nt(x) (DWORD) x
127 #define ConvertData2Nt(x) (BYTE) x
129 #define ConvertParity2Nt(x) \
131 x == DefaultParity ? NOPARITY : \
132 x == NoParity ? NOPARITY : \
133 x == EvenParity ? EVENPARITY : \
134 x == OddParity ? ODDPARITY : \
135 x == MarkParity ? MARKPARITY : \
136 x == SpaceParity ? SPACEPARITY : 0 \
139 #define ConvertStop2Nt(x) \
141 x == DefaultParity ? ONESTOPBIT : \
142 x == OneFiveStopBits ? ONE5STOPBITS : \
143 x == TwoStopBits ? TWOSTOPBITS : 0 \
146 #define ConvertTime2Nt(x) ((x) / 1000)
149 // 115400 baud with rounding errors
151 #define SERIAL_PORT_MAX_BAUD_RATE 115400
154 // Fix the differences issue of linux header files termios.h
157 #define B460800 0010004
160 #define B500000 0010005
163 #define B576000 0010006
166 #define B921600 0010007
169 #define B1000000 0010010
172 #define B1152000 0010011
175 #define B1500000 0010012
178 #define B2000000 0010013
181 #define B2500000 0010014
184 #define B3000000 0010015
187 #define B3500000 0010016
190 #define B4000000 0010017
193 #define __MAX_BAUD B4000000
196 #define CMSPAR 010000000000 /* mark or space (stick) parity */
199 #define FIONREAD 0x541B
202 // Function Prototypes
206 InitializeUnixSerialIo (
207 IN EFI_HANDLE ImageHandle
,
208 IN EFI_SYSTEM_TABLE
*SystemTable
214 TODO: Add function description
218 ImageHandle - TODO: add argument description
219 SystemTable - TODO: add argument description
223 TODO: add return values
230 UnixSerialIoDriverBindingSupported (
231 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
232 IN EFI_HANDLE Handle
,
233 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
239 TODO: Add function description
243 This - TODO: add argument description
244 Handle - TODO: add argument description
245 RemainingDevicePath - TODO: add argument description
249 TODO: add return values
256 UnixSerialIoDriverBindingStart (
257 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
258 IN EFI_HANDLE Handle
,
259 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
265 TODO: Add function description
269 This - TODO: add argument description
270 Handle - TODO: add argument description
271 RemainingDevicePath - TODO: add argument description
275 TODO: add return values
282 UnixSerialIoDriverBindingStop (
283 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
284 IN EFI_HANDLE Handle
,
285 IN UINTN NumberOfChildren
,
286 IN EFI_HANDLE
*ChildHandleBuffer
292 TODO: Add function description
296 This - TODO: add argument description
297 Handle - TODO: add argument description
298 NumberOfChildren - TODO: add argument description
299 ChildHandleBuffer - TODO: add argument description
303 TODO: add return values
311 IN EFI_SERIAL_IO_PROTOCOL
*This
317 TODO: Add function description
321 This - TODO: add argument description
325 TODO: add return values
332 UnixSerialIoSetAttributes (
333 IN EFI_SERIAL_IO_PROTOCOL
*This
,
335 IN UINT32 ReceiveFifoDepth
,
337 IN EFI_PARITY_TYPE Parity
,
339 IN EFI_STOP_BITS_TYPE StopBits
345 TODO: Add function description
349 This - TODO: add argument description
350 BaudRate - TODO: add argument description
351 ReceiveFifoDepth - TODO: add argument description
352 Timeout - TODO: add argument description
353 Parity - TODO: add argument description
354 DataBits - TODO: add argument description
355 StopBits - TODO: add argument description
359 TODO: add return values
366 UnixSerialIoSetControl (
367 IN EFI_SERIAL_IO_PROTOCOL
*This
,
374 TODO: Add function description
378 This - TODO: add argument description
379 Control - TODO: add argument description
383 TODO: add return values
390 UnixSerialIoGetControl (
391 IN EFI_SERIAL_IO_PROTOCOL
*This
,
398 TODO: Add function description
402 This - TODO: add argument description
403 Control - TODO: add argument description
407 TODO: add return values
415 IN EFI_SERIAL_IO_PROTOCOL
*This
,
416 IN OUT UINTN
*BufferSize
,
423 TODO: Add function description
427 This - TODO: add argument description
428 BufferSize - TODO: add argument description
429 Buffer - TODO: add argument description
433 TODO: add return values
441 IN EFI_SERIAL_IO_PROTOCOL
*This
,
442 IN OUT UINTN
*BufferSize
,
449 TODO: Add function description
453 This - TODO: add argument description
454 BufferSize - TODO: add argument description
455 Buffer - TODO: add argument description
459 TODO: add return values
466 IN SERIAL_DEV_FIFO
*Fifo
472 TODO: Add function description
476 Fifo - TODO: add argument description
480 TODO: add return values
487 IN SERIAL_DEV_FIFO
*Fifo
493 TODO: Add function description
497 Fifo - TODO: add argument description
501 TODO: add return values
508 IN SERIAL_DEV_FIFO
*Fifo
,
515 TODO: Add function description
519 Fifo - TODO: add argument description
520 Data - TODO: add argument description
524 TODO: add return values
530 IsaSerialFifoRemove (
531 IN SERIAL_DEV_FIFO
*Fifo
,
538 TODO: Add function description
542 Fifo - TODO: add argument description
543 Data - TODO: add argument description
547 TODO: add return values
553 IsaSerialReceiveTransmit (
554 UNIX_SERIAL_IO_PRIVATE_DATA
*Private
560 TODO: Add function description
564 Private - TODO: add argument description
568 TODO: add return values