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

View File

@@ -2,7 +2,7 @@
#
# Component discription file for NorFlashDxe module
#
# Copyright (c) 2010, ARM Ltd. All rights reserved.<BR>
# Copyright (c) 2011, 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
# which accompanies this distribution. The full text of the license may be found at
@@ -25,8 +25,14 @@
PL011SerialPortLib.c
[LibraryClasses]
IoLib
PL011UartLib
PcdLib
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
ArmPlatformPkg/ArmPlatformPkg.dec
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate