+/** @file\r
+ Serial I/O Port library functions with no library constructor/destructor\r
+\r
+ Copyright (c) 2012, ARM Ltd. All rights reserved.<BR>\r
+ \r
+ This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include <Base.h>\r
+\r
+#include <Library/IoLib.h>\r
+#include <Library/PcdLib.h>\r
+#include <Library/SerialPortExtLib.h>\r
+\r
+#include <Drivers/PL011Uart.h>\r
+\r
+/**\r
+ Set new attributes to PL011.\r
+\r
+ @param BaudRate The baud rate of the serial device. If the baud rate is not supported,\r
+ the speed will be reduced down to the nearest supported one and the\r
+ variable's value will be updated accordingly.\r
+ @param ReceiveFifoDepth The number of characters the device will buffer on input. If the specified\r
+ value is not supported, the variable's value will be reduced down to the\r
+ nearest supported one.\r
+ @param Timeout If applicable, the number of microseconds the device will wait\r
+ before timing out a Read or a Write operation.\r
+ @param Parity If applicable, this is the EFI_PARITY_TYPE that is computed or checked\r
+ as each character is transmitted or received. If the device does not\r
+ support parity, the value is the default parity value.\r
+ @param DataBits The number of data bits in each character\r
+ @param StopBits If applicable, the EFI_STOP_BITS_TYPE number of stop bits per character.\r
+ If the device does not support stop bits, the value is the default stop\r
+ bit value.\r
+\r
+ @retval EFI_SUCCESS All attributes were set correctly on the serial device.\r
+ @retval EFI_INVALID_PARAMETERS One or more of the attributes has an unsupported value.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+SerialPortSetAttributes (\r
+ IN UINT64 BaudRate,\r
+ IN UINT32 ReceiveFifoDepth,\r
+ IN UINT32 Timeout,\r
+ IN EFI_PARITY_TYPE Parity,\r
+ IN UINT8 DataBits,\r
+ IN EFI_STOP_BITS_TYPE StopBits\r
+ )\r
+{\r
+ return PL011UartInitializePort (\r
+ (UINTN)PcdGet64 (PcdSerialRegisterBase),\r
+ BaudRate,\r
+ ReceiveFifoDepth,\r
+ Parity,\r
+ DataBits,\r
+ StopBits);\r
+}\r
+\r
+/**\r
+ Set the serial device control bits.\r
+\r
+ @param Control Control bits which are to be set on the serial device.\r
+\r
+ @retval EFI_SUCCESS The new control bits were set on the serial device.\r
+ @retval EFI_UNSUPPORTED The serial device does not support this operation.\r
+ @retval EFI_DEVICE_ERROR The serial device is not functioning correctly.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+SerialPortSetControl (\r
+ IN UINT32 Control\r
+ )\r
+{\r
+ return PL011UartSetControl ((UINTN)PcdGet64 (PcdSerialRegisterBase), Control);\r
+}\r
+\r
+/**\r
+ Get the serial device control bits.\r
+\r
+ @param Control Control signals read from the serial device.\r
+\r
+ @retval EFI_SUCCESS The control bits were read from the serial device.\r
+ @retval EFI_DEVICE_ERROR The serial device is not functioning correctly.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+SerialPortGetControl (\r
+ OUT UINT32 *Control\r
+ )\r
+{\r
+ return PL011UartGetControl ((UINTN)PcdGet64 (PcdSerialRegisterBase), Control);\r
+}\r
+\r