ArmPlatformPkg/PL011Uart: Create PL011 UART driver

This library makes the interface with the PL011 UART controller.
This library can be linked to different types of driver (Serial Console,
debugger, etc) using PL011 UART controller.


ArmPlatformPkg/PL011SerialPortLib: Use Drivers/PL011Uart

Remove the direct accesses to the PL011 UART controller to use the PL011Uart
library.



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11743 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
oliviermartin
2011-06-03 09:31:02 +00:00
parent f0a7a8ce23
commit 9dcfb8e5c8
8 changed files with 295 additions and 56 deletions

View File

@@ -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));
}