diff options
Diffstat (limited to 'ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c')
-rw-r--r-- | ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c | 57 |
1 files changed, 13 insertions, 44 deletions
diff --git a/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c b/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c index 54ea28a769..842bbe005b 100644 --- a/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c +++ b/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c @@ -15,9 +15,13 @@ **/ #include <Include/Uefi.h> -#include <Library/SerialPortLib.h> + #include <Library/IoLib.h> +#include <Library/PcdLib.h> +#include <Library/SerialPortLib.h> + #include <Drivers/PL011Uart.h> + #include <ArmPlatform.h> /* @@ -33,32 +37,11 @@ SerialPortInitialize ( 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 PL011UartInitialize ( + (UINTN)PcdGet64 (PcdSerialRegisterBase), + (UINTN)PcdGet64 (PcdUartDefaultBaudRate), + PL011_UARTLCR_H_WLEN_8); } /** @@ -76,16 +59,9 @@ EFIAPI 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); } /** @@ -105,14 +81,7 @@ SerialPortRead ( 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); } /** @@ -129,5 +98,5 @@ SerialPortPoll ( VOID ) { - return ((MmioRead32 (PL011_CONSOLE_UART_BASE + UARTFR) & UART_RX_EMPTY_FLAG_MASK) == 0); + return PL011UartPoll ((UINTN)PcdGet64 (PcdSerialRegisterBase)); } |