| /*++ | |
| Copyright (c) 2006 - 2008, Intel Corporation | |
| All rights reserved. This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| Module Name: | |
| UnixSerialIo.h | |
| Abstract: | |
| --*/ | |
| #ifndef _UNIXPKG_SERIAL_IO_ | |
| #define _UNIXPKG_SERIAL_IO_ | |
| #include <sys/types.h> | |
| #include <sys/stat.h> | |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <termio.h> | |
| #include <fcntl.h> | |
| #include <errno.h> | |
| #include "PiDxe.h" | |
| #include <Protocol/SerialIo.h> | |
| #include <Protocol/DevicePath.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/BaseLib.h> | |
| #include <Library/UefiDriverEntryPoint.h> | |
| #include <Library/UefiLib.h> | |
| #include <Library/BaseMemoryLib.h> | |
| #include <Library/UefiBootServicesTableLib.h> | |
| #include <Library/DevicePathLib.h> | |
| #include <Library/MemoryAllocationLib.h> | |
| #include "UnixDxe.h" | |
| extern EFI_DRIVER_BINDING_PROTOCOL gUnixSerialIoDriverBinding; | |
| extern EFI_COMPONENT_NAME_PROTOCOL gUnixSerialIoComponentName; | |
| #define SERIAL_MAX_BUFFER_SIZE 256 | |
| #define TIMEOUT_STALL_INTERVAL 10 | |
| typedef struct { | |
| UINT32 First; | |
| UINT32 Last; | |
| UINT32 Surplus; | |
| UINT8 Data[SERIAL_MAX_BUFFER_SIZE]; | |
| } SERIAL_DEV_FIFO; | |
| #define UNIX_SERIAL_IO_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('U', 'N', 's', 'i') | |
| typedef struct { | |
| UINT64 Signature; | |
| // | |
| // Protocol data for the new handle we are going to add | |
| // | |
| EFI_HANDLE Handle; | |
| EFI_SERIAL_IO_PROTOCOL SerialIo; | |
| EFI_SERIAL_IO_MODE SerialIoMode; | |
| EFI_DEVICE_PATH_PROTOCOL *DevicePath; | |
| // | |
| // Private Data | |
| // | |
| EFI_HANDLE ControllerHandle; | |
| EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; | |
| UART_DEVICE_PATH UartDevicePath; | |
| EFI_UNIX_THUNK_PROTOCOL *UnixThunk; | |
| EFI_UNICODE_STRING_TABLE *ControllerNameTable; | |
| // | |
| // Private NT type Data; | |
| // | |
| UINTN UnixHandle; | |
| struct termios UnixTermios; | |
| BOOLEAN SoftwareLoopbackEnable; | |
| BOOLEAN HardwareFlowControl; | |
| BOOLEAN HardwareLoopbackEnable; | |
| SERIAL_DEV_FIFO Fifo; | |
| } UNIX_SERIAL_IO_PRIVATE_DATA; | |
| #define UNIX_SERIAL_IO_PRIVATE_DATA_FROM_THIS(a) \ | |
| CR(a, UNIX_SERIAL_IO_PRIVATE_DATA, SerialIo, UNIX_SERIAL_IO_PRIVATE_DATA_SIGNATURE) | |
| // | |
| // Global Protocol Variables | |
| // | |
| extern EFI_DRIVER_BINDING_PROTOCOL gUnixSerialIoDriverBinding; | |
| extern EFI_COMPONENT_NAME_PROTOCOL gUnixSerialIoComponentName; | |
| // | |
| // Macros to convert EFI serial types to NT serial types. | |
| // | |
| // | |
| // one second | |
| // | |
| #define SERIAL_TIMEOUT_DEFAULT (1000 * 1000) | |
| #define SERIAL_BAUD_DEFAULT 115200 | |
| #define SERIAL_FIFO_DEFAULT 14 | |
| #define SERIAL_DATABITS_DEFAULT 8 | |
| #define SERIAL_PARITY_DEFAULT DefaultParity | |
| #define SERIAL_STOPBITS_DEFAULT DefaultStopBits | |
| #define SERIAL_CONTROL_MASK (EFI_SERIAL_CLEAR_TO_SEND | \ | |
| EFI_SERIAL_DATA_SET_READY | \ | |
| EFI_SERIAL_RING_INDICATE | \ | |
| EFI_SERIAL_CARRIER_DETECT | \ | |
| EFI_SERIAL_REQUEST_TO_SEND | \ | |
| EFI_SERIAL_DATA_TERMINAL_READY | \ | |
| EFI_SERIAL_INPUT_BUFFER_EMPTY) | |
| #define ConvertBaud2Nt(x) (DWORD) x | |
| #define ConvertData2Nt(x) (BYTE) x | |
| #define ConvertParity2Nt(x) \ | |
| (BYTE) ( \ | |
| x == DefaultParity ? NOPARITY : \ | |
| x == NoParity ? NOPARITY : \ | |
| x == EvenParity ? EVENPARITY : \ | |
| x == OddParity ? ODDPARITY : \ | |
| x == MarkParity ? MARKPARITY : \ | |
| x == SpaceParity ? SPACEPARITY : 0 \ | |
| ) | |
| #define ConvertStop2Nt(x) \ | |
| (BYTE) ( \ | |
| x == DefaultParity ? ONESTOPBIT : \ | |
| x == OneFiveStopBits ? ONE5STOPBITS : \ | |
| x == TwoStopBits ? TWOSTOPBITS : 0 \ | |
| ) | |
| #define ConvertTime2Nt(x) ((x) / 1000) | |
| // | |
| // 115400 baud with rounding errors | |
| // | |
| #define SERIAL_PORT_MAX_BAUD_RATE 115400 | |
| // | |
| // Fix the differences issue of linux header files termios.h | |
| // | |
| #ifndef B460800 | |
| #define B460800 0010004 | |
| #endif | |
| #ifndef B500000 | |
| #define B500000 0010005 | |
| #endif | |
| #ifndef B576000 | |
| #define B576000 0010006 | |
| #endif | |
| #ifndef B921600 | |
| #define B921600 0010007 | |
| #endif | |
| #ifndef B1000000 | |
| #define B1000000 0010010 | |
| #endif | |
| #ifndef B1152000 | |
| #define B1152000 0010011 | |
| #endif | |
| #ifndef B1500000 | |
| #define B1500000 0010012 | |
| #endif | |
| #ifndef B2000000 | |
| #define B2000000 0010013 | |
| #endif | |
| #ifndef B2500000 | |
| #define B2500000 0010014 | |
| #endif | |
| #ifndef B3000000 | |
| #define B3000000 0010015 | |
| #endif | |
| #ifndef B3500000 | |
| #define B3500000 0010016 | |
| #endif | |
| #ifndef B4000000 | |
| #define B4000000 0010017 | |
| #endif | |
| #ifndef __MAX_BAUD | |
| #define __MAX_BAUD B4000000 | |
| #endif | |
| #ifndef CMSPAR | |
| #define CMSPAR 010000000000 /* mark or space (stick) parity */ | |
| #endif | |
| #ifndef FIONREAD | |
| #define FIONREAD 0x541B | |
| #endif | |
| // | |
| // Function Prototypes | |
| // | |
| EFI_STATUS | |
| EFIAPI | |
| InitializeUnixSerialIo ( | |
| IN EFI_HANDLE ImageHandle, | |
| IN EFI_SYSTEM_TABLE *SystemTable | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| ImageHandle - TODO: add argument description | |
| SystemTable - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| EFIAPI | |
| UnixSerialIoDriverBindingSupported ( | |
| IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
| IN EFI_HANDLE Handle, | |
| IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| This - TODO: add argument description | |
| Handle - TODO: add argument description | |
| RemainingDevicePath - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| EFIAPI | |
| UnixSerialIoDriverBindingStart ( | |
| IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
| IN EFI_HANDLE Handle, | |
| IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| This - TODO: add argument description | |
| Handle - TODO: add argument description | |
| RemainingDevicePath - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| EFIAPI | |
| UnixSerialIoDriverBindingStop ( | |
| IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
| IN EFI_HANDLE Handle, | |
| IN UINTN NumberOfChildren, | |
| IN EFI_HANDLE *ChildHandleBuffer | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| This - TODO: add argument description | |
| Handle - TODO: add argument description | |
| NumberOfChildren - TODO: add argument description | |
| ChildHandleBuffer - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| EFIAPI | |
| UnixSerialIoReset ( | |
| IN EFI_SERIAL_IO_PROTOCOL *This | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| This - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| EFIAPI | |
| UnixSerialIoSetAttributes ( | |
| IN EFI_SERIAL_IO_PROTOCOL *This, | |
| IN UINT64 BaudRate, | |
| IN UINT32 ReceiveFifoDepth, | |
| IN UINT32 Timeout, | |
| IN EFI_PARITY_TYPE Parity, | |
| IN UINT8 DataBits, | |
| IN EFI_STOP_BITS_TYPE StopBits | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| This - TODO: add argument description | |
| BaudRate - TODO: add argument description | |
| ReceiveFifoDepth - TODO: add argument description | |
| Timeout - TODO: add argument description | |
| Parity - TODO: add argument description | |
| DataBits - TODO: add argument description | |
| StopBits - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| EFIAPI | |
| UnixSerialIoSetControl ( | |
| IN EFI_SERIAL_IO_PROTOCOL *This, | |
| IN UINT32 Control | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| This - TODO: add argument description | |
| Control - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| EFIAPI | |
| UnixSerialIoGetControl ( | |
| IN EFI_SERIAL_IO_PROTOCOL *This, | |
| OUT UINT32 *Control | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| This - TODO: add argument description | |
| Control - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| EFIAPI | |
| UnixSerialIoWrite ( | |
| IN EFI_SERIAL_IO_PROTOCOL *This, | |
| IN OUT UINTN *BufferSize, | |
| IN VOID *Buffer | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| This - TODO: add argument description | |
| BufferSize - TODO: add argument description | |
| Buffer - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| EFIAPI | |
| UnixSerialIoRead ( | |
| IN EFI_SERIAL_IO_PROTOCOL *This, | |
| IN OUT UINTN *BufferSize, | |
| OUT VOID *Buffer | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| This - TODO: add argument description | |
| BufferSize - TODO: add argument description | |
| Buffer - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| BOOLEAN | |
| IsaSerialFifoFull ( | |
| IN SERIAL_DEV_FIFO *Fifo | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| Fifo - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| BOOLEAN | |
| IsaSerialFifoEmpty ( | |
| IN SERIAL_DEV_FIFO *Fifo | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| Fifo - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| IsaSerialFifoAdd ( | |
| IN SERIAL_DEV_FIFO *Fifo, | |
| IN UINT8 Data | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| Fifo - TODO: add argument description | |
| Data - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| IsaSerialFifoRemove ( | |
| IN SERIAL_DEV_FIFO *Fifo, | |
| OUT UINT8 *Data | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| Fifo - TODO: add argument description | |
| Data - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| IsaSerialReceiveTransmit ( | |
| UNIX_SERIAL_IO_PRIVATE_DATA *Private | |
| ) | |
| /*++ | |
| Routine Description: | |
| TODO: Add function description | |
| Arguments: | |
| Private - TODO: add argument description | |
| Returns: | |
| TODO: add return values | |
| --*/ | |
| ; | |
| #endif |