3 Copyright (c) 2006 - 2009, Intel Corporation
4 Portions copyright (c) 2008-2009 Apple Inc.
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
22 #ifndef _UNIXPKG_SERIAL_IO_
23 #define _UNIXPKG_SERIAL_IO_
24 #include <sys/types.h>
38 #include <Protocol/SerialIo.h>
39 #include <Protocol/DevicePath.h>
41 #include <Library/DebugLib.h>
42 #include <Library/BaseLib.h>
43 #include <Library/UefiDriverEntryPoint.h>
44 #include <Library/UefiLib.h>
45 #include <Library/BaseMemoryLib.h>
46 #include <Library/UefiBootServicesTableLib.h>
47 #include <Library/DevicePathLib.h>
48 #include <Library/MemoryAllocationLib.h>
51 extern EFI_DRIVER_BINDING_PROTOCOL gUnixSerialIoDriverBinding
;
52 extern EFI_COMPONENT_NAME_PROTOCOL gUnixSerialIoComponentName
;
54 #define SERIAL_MAX_BUFFER_SIZE 256
55 #define TIMEOUT_STALL_INTERVAL 10
61 UINT8 Data
[SERIAL_MAX_BUFFER_SIZE
];
64 #define UNIX_SERIAL_IO_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('U', 'N', 's', 'i')
69 // Protocol data for the new handle we are going to add
72 EFI_SERIAL_IO_PROTOCOL SerialIo
;
73 EFI_SERIAL_IO_MODE SerialIoMode
;
74 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
79 EFI_HANDLE ControllerHandle
;
80 EFI_DEVICE_PATH_PROTOCOL
*ParentDevicePath
;
81 UART_DEVICE_PATH UartDevicePath
;
82 EFI_UNIX_THUNK_PROTOCOL
*UnixThunk
;
84 EFI_UNICODE_STRING_TABLE
*ControllerNameTable
;
87 // Private NT type Data;
90 struct termios UnixTermios
;
92 BOOLEAN SoftwareLoopbackEnable
;
93 BOOLEAN HardwareFlowControl
;
94 BOOLEAN HardwareLoopbackEnable
;
98 } UNIX_SERIAL_IO_PRIVATE_DATA
;
100 #define UNIX_SERIAL_IO_PRIVATE_DATA_FROM_THIS(a) \
101 CR(a, UNIX_SERIAL_IO_PRIVATE_DATA, SerialIo, UNIX_SERIAL_IO_PRIVATE_DATA_SIGNATURE)
104 // Global Protocol Variables
106 extern EFI_DRIVER_BINDING_PROTOCOL gUnixSerialIoDriverBinding
;
107 extern EFI_COMPONENT_NAME_PROTOCOL gUnixSerialIoComponentName
;
110 // Macros to convert EFI serial types to NT serial types.
116 #define SERIAL_TIMEOUT_DEFAULT (1000 * 1000)
117 #define SERIAL_BAUD_DEFAULT 115200
118 #define SERIAL_FIFO_DEFAULT 14
119 #define SERIAL_DATABITS_DEFAULT 8
120 #define SERIAL_PARITY_DEFAULT DefaultParity
121 #define SERIAL_STOPBITS_DEFAULT DefaultStopBits
123 #define SERIAL_CONTROL_MASK (EFI_SERIAL_CLEAR_TO_SEND | \
124 EFI_SERIAL_DATA_SET_READY | \
125 EFI_SERIAL_RING_INDICATE | \
126 EFI_SERIAL_CARRIER_DETECT | \
127 EFI_SERIAL_REQUEST_TO_SEND | \
128 EFI_SERIAL_DATA_TERMINAL_READY | \
129 EFI_SERIAL_INPUT_BUFFER_EMPTY)
131 #define ConvertBaud2Nt(x) (DWORD) x
132 #define ConvertData2Nt(x) (BYTE) x
134 #define ConvertParity2Nt(x) \
136 x == DefaultParity ? NOPARITY : \
137 x == NoParity ? NOPARITY : \
138 x == EvenParity ? EVENPARITY : \
139 x == OddParity ? ODDPARITY : \
140 x == MarkParity ? MARKPARITY : \
141 x == SpaceParity ? SPACEPARITY : 0 \
144 #define ConvertStop2Nt(x) \
146 x == DefaultParity ? ONESTOPBIT : \
147 x == OneFiveStopBits ? ONE5STOPBITS : \
148 x == TwoStopBits ? TWOSTOPBITS : 0 \
151 #define ConvertTime2Nt(x) ((x) / 1000)
154 // 115400 baud with rounding errors
156 #define SERIAL_PORT_MAX_BAUD_RATE 115400
159 // Fix the differences issue of linux header files termios.h
162 #define B460800 0010004
165 #define B500000 0010005
168 #define B576000 0010006
171 #define B921600 0010007
174 #define B1000000 0010010
177 #define B1152000 0010011
180 #define B1500000 0010012
183 #define B2000000 0010013
186 #define B2500000 0010014
189 #define B3000000 0010015
192 #define B3500000 0010016
195 #define B4000000 0010017
198 #define __MAX_BAUD B4000000
201 #define CMSPAR 010000000000 /* mark or space (stick) parity */
204 #define FIONREAD 0x541B
207 // Function Prototypes
211 InitializeUnixSerialIo (
212 IN EFI_HANDLE ImageHandle
,
213 IN EFI_SYSTEM_TABLE
*SystemTable
219 TODO: Add function description
223 ImageHandle - TODO: add argument description
224 SystemTable - TODO: add argument description
228 TODO: add return values
235 UnixSerialIoDriverBindingSupported (
236 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
237 IN EFI_HANDLE Handle
,
238 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
244 TODO: Add function description
248 This - TODO: add argument description
249 Handle - TODO: add argument description
250 RemainingDevicePath - TODO: add argument description
254 TODO: add return values
261 UnixSerialIoDriverBindingStart (
262 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
263 IN EFI_HANDLE Handle
,
264 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
270 TODO: Add function description
274 This - TODO: add argument description
275 Handle - TODO: add argument description
276 RemainingDevicePath - TODO: add argument description
280 TODO: add return values
287 UnixSerialIoDriverBindingStop (
288 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
289 IN EFI_HANDLE Handle
,
290 IN UINTN NumberOfChildren
,
291 IN EFI_HANDLE
*ChildHandleBuffer
297 TODO: Add function description
301 This - TODO: add argument description
302 Handle - TODO: add argument description
303 NumberOfChildren - TODO: add argument description
304 ChildHandleBuffer - TODO: add argument description
308 TODO: add return values
316 IN EFI_SERIAL_IO_PROTOCOL
*This
322 TODO: Add function description
326 This - TODO: add argument description
330 TODO: add return values
337 UnixSerialIoSetAttributes (
338 IN EFI_SERIAL_IO_PROTOCOL
*This
,
340 IN UINT32 ReceiveFifoDepth
,
342 IN EFI_PARITY_TYPE Parity
,
344 IN EFI_STOP_BITS_TYPE StopBits
350 TODO: Add function description
354 This - TODO: add argument description
355 BaudRate - TODO: add argument description
356 ReceiveFifoDepth - TODO: add argument description
357 Timeout - TODO: add argument description
358 Parity - TODO: add argument description
359 DataBits - TODO: add argument description
360 StopBits - TODO: add argument description
364 TODO: add return values
371 UnixSerialIoSetControl (
372 IN EFI_SERIAL_IO_PROTOCOL
*This
,
379 TODO: Add function description
383 This - TODO: add argument description
384 Control - TODO: add argument description
388 TODO: add return values
395 UnixSerialIoGetControl (
396 IN EFI_SERIAL_IO_PROTOCOL
*This
,
403 TODO: Add function description
407 This - TODO: add argument description
408 Control - TODO: add argument description
412 TODO: add return values
420 IN EFI_SERIAL_IO_PROTOCOL
*This
,
421 IN OUT UINTN
*BufferSize
,
428 TODO: Add function description
432 This - TODO: add argument description
433 BufferSize - TODO: add argument description
434 Buffer - TODO: add argument description
438 TODO: add return values
446 IN EFI_SERIAL_IO_PROTOCOL
*This
,
447 IN OUT UINTN
*BufferSize
,
454 TODO: Add function description
458 This - TODO: add argument description
459 BufferSize - TODO: add argument description
460 Buffer - TODO: add argument description
464 TODO: add return values
471 IN SERIAL_DEV_FIFO
*Fifo
477 TODO: Add function description
481 Fifo - TODO: add argument description
485 TODO: add return values
492 IN SERIAL_DEV_FIFO
*Fifo
498 TODO: Add function description
502 Fifo - TODO: add argument description
506 TODO: add return values
513 IN SERIAL_DEV_FIFO
*Fifo
,
520 TODO: Add function description
524 Fifo - TODO: add argument description
525 Data - TODO: add argument description
529 TODO: add return values
535 IsaSerialFifoRemove (
536 IN SERIAL_DEV_FIFO
*Fifo
,
543 TODO: Add function description
547 Fifo - TODO: add argument description
548 Data - TODO: add argument description
552 TODO: add return values
558 IsaSerialReceiveTransmit (
559 UNIX_SERIAL_IO_PRIVATE_DATA
*Private
565 TODO: Add function description
569 Private - TODO: add argument description
573 TODO: add return values