/** @file
Serial I/O Port library functions with no library constructor/destructor
-
Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
+ Copyright (c) 2012, ARM Ltd. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
**/
-#include <Include/Uefi.h>
-#include <Library/SerialPortLib.h>
+#include <Include/Base.h>
+
#include <Library/IoLib.h>
+#include <Library/PcdLib.h>
+#include <Library/SerialPortLib.h>
+
#include <Drivers/PL011Uart.h>
-#include <ArmPlatform.h>
+
/*
Programmed hardware of Serial port.
- @return Always return EFI_UNSUPPORTED.
+ @return Always return RETURN_UNSUPPORTED.
**/
RETURN_STATUS
VOID
)
{
- if (PL011_CONSOLE_UART_SPEED == 115200) {
- // Initialize baud rate generator
- MmioWrite32 (PL011_CONSOLE_UART_BASE + UARTIBRD, UART_115200_IDIV);
- MmioWrite32 (PL011_CONSOLE_UART_BASE + UARTFBRD, UART_115200_FDIV);
- } else if (PL011_CONSOLE_UART_SPEED == 38400) {
- // Initialize baud rate generator
- MmioWrite32 (PL011_CONSOLE_UART_BASE + UARTIBRD, UART_38400_IDIV);
- MmioWrite32 (PL011_CONSOLE_UART_BASE + UARTFBRD, UART_38400_FDIV);
- } else if (PL011_CONSOLE_UART_SPEED == 19200) {
- // Initialize baud rate generator
- MmioWrite32 (PL011_CONSOLE_UART_BASE + UARTIBRD, UART_19200_IDIV);
- MmioWrite32 (PL011_CONSOLE_UART_BASE + UARTFBRD, UART_19200_FDIV);
- } else {
- return EFI_INVALID_PARAMETER;
- }
-
- // No parity, 1 stop, no fifo, 8 data bits
- MmioWrite32 (PL011_CONSOLE_UART_BASE + UARTLCR_H, 0x60);
-
- // Clear any pending errors
- MmioWrite32 (PL011_CONSOLE_UART_BASE + UARTECR, 0);
-
- // enable tx, rx, and uart overall
- MmioWrite32 (PL011_CONSOLE_UART_BASE + UARTCR, 0x301);
-
- return EFI_SUCCESS;
+ return PL011UartInitializePort (
+ (UINTN)PcdGet64 (PcdSerialRegisterBase),
+ (UINTN)PcdGet64 (PcdUartDefaultBaudRate),
+ 0, // Use the default value for Fifo depth
+ 0, // Use the default value for Timeout,
+ (EFI_PARITY_TYPE)PcdGet8 (PcdUartDefaultParity),
+ PcdGet8 (PcdUartDefaultDataBits),
+ (EFI_STOP_BITS_TYPE) PcdGet8 (PcdUartDefaultStopBits));
}
/**
Write data to serial device.
- @param Buffer Point of data buffer which need to be writed.
+ @param Buffer Point of data buffer which need to be written.
@param NumberOfBytes Number of output bytes which are cached in Buffer.
@retval 0 Write data failed.
- @retval !0 Actual number of bytes writed to serial device.
+ @retval !0 Actual number of bytes written to serial device.
**/
UINTN
SerialPortWrite (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
-)
+ )
{
- UINTN Count;
-
- for (Count = 0; Count < NumberOfBytes; Count++, Buffer++) {
- while ((MmioRead32 (PL011_CONSOLE_UART_BASE + UARTFR) & UART_TX_EMPTY_FLAG_MASK) == 0);
- MmioWrite8 (PL011_CONSOLE_UART_BASE + UARTDR, *Buffer);
- }
-
- return NumberOfBytes;
+ return PL011UartWrite ((UINTN)PcdGet64 (PcdSerialRegisterBase), Buffer, NumberOfBytes);
}
/**
- Read data from serial device and save the datas in buffer.
+ Read data from serial device and save the data in buffer.
- @param Buffer Point of data buffer which need to be writed.
+ @param Buffer Point of data buffer which need to be written.
@param NumberOfBytes Number of output bytes which are cached in Buffer.
@retval 0 Read data failed.
- @retval !0 Aactual number of bytes read from serial device.
+ @retval !0 Actual number of bytes read from serial device.
**/
UINTN
IN UINTN NumberOfBytes
)
{
- UINTN Count;
-
- for (Count = 0; Count < NumberOfBytes; Count++, Buffer++) {
- while ((MmioRead32 (PL011_CONSOLE_UART_BASE + UARTFR) & UART_RX_EMPTY_FLAG_MASK) != 0);
- *Buffer = MmioRead8 (PL011_CONSOLE_UART_BASE + UARTDR);
- }
-
- return NumberOfBytes;
+ return PL011UartRead ((UINTN)PcdGet64 (PcdSerialRegisterBase), Buffer, NumberOfBytes);
}
/**
- Check to see if any data is avaiable to be read from the debug device.
+ Check to see if any data is available to be read from the debug device.
- @retval EFI_SUCCESS At least one byte of data is avaiable to be read
- @retval EFI_NOT_READY No data is avaiable to be read
+ @retval EFI_SUCCESS At least one byte of data is available to be read
+ @retval EFI_NOT_READY No data is available to be read
@retval EFI_DEVICE_ERROR The serial device is not functioning properly
**/
VOID
)
{
- return ((MmioRead32 (PL011_CONSOLE_UART_BASE + UARTFR) & UART_RX_EMPTY_FLAG_MASK) == 0);
+ return PL011UartPoll ((UINTN)PcdGet64 (PcdSerialRegisterBase));
}