summaryrefslogtreecommitdiffstats
path: root/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c
diff options
context:
space:
mode:
Diffstat (limited to 'ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c')
-rw-r--r--ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c57
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));
}