Files
slimbootloader/BootloaderCommonPkg/Library/ConsoleInLib/ConsoleInLib.c
T
Aiden Park b6697f12a8 Enable DebugAgentLib to support source level debug over serial (#18)
* Enable DebugAgentLib to support source level debug over serial

By default, source level debug is NOT enabled. ENABLE_SOURCE_DEBUG
needs to be set to 1 in BoardConfig.py of each Platforms.
- self.ENABLE_SOURCE_DEBUG  = 1

As an initial drop, there are some limitations on APL platform.
- Stage1A does not include DebugAgentLib due to Stage1A size
  limitation(32KB). Further optimization is required.
- DebugAgentLib supports ONLY POSTMEM debugging on APL currently.

Refer to EDKII Debugging:
- https://github.com/tianocore/tianocore.github.io/wiki/EDK-II-Debugging
- https://github.com/tianocore/tianocore.github.io/wiki/SourceLevelDebugPkg

Change-Id: Ia28c5470bc5755768f2b380cc1dabbcb8ee60f0d
Signed-off-by: Aiden Park <aiden.park@intel.com>

* Additional changes for DebugAgent

- Adjust stage size depending on ENABLE_SOURCE_DEBUG Pcd value
- Add PeCoffFindAndReportImageInfo
- Fix debugger hang at Shell

Change-Id: I11b41e5ad610fcb2999e9d43e5dd8f8899e8265a
Signed-off-by: Aiden Park <aiden.park@intel.com>

* Move PeCoffFindAndReportImageInfo() from LitePeCoffLib to DebugAgentLib

Change-Id: I2c4ab4f9561dfd0536da1820048f0e5f2660e2ab
Signed-off-by: Aiden Park <aiden.park@intel.com>
2018-10-15 10:45:23 -07:00

94 lines
2.4 KiB
C

/** @file
Implementation for console input library
Copyright (c) 2018, Intel Corporation. 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
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#include <PiPei.h>
#include <Library/UsbKbLib.h>
#include <Library/SerialPortLib.h>
#include <Library/ConsoleInLib.h>
/**
Poll a console to see if there is any data waiting to be read.
@retval FALSE There is no data waiting to be read from the console.
@retval TRUE Data is waiting to be read from the console.
**/
BOOLEAN
EFIAPI
ConsolePoll (
VOID
)
{
if (FeaturePcdGet (PcdSourceDebugEnabled) != TRUE) {
if ((PcdGet32 (PcdConsoleInDeviceMask) & ConsoleInSerialPort) != 0) {
if (SerialPortPoll ()) {
return TRUE;
}
}
}
if ((PcdGet32 (PcdConsoleInDeviceMask) & ConsoleInUsbKeyboard) != 0) {
if (KeyboardPoll ()) {
return TRUE;
}
}
return FALSE;
}
/**
Read data from a console device into a buffer.
@param Buffer Pointer to the data buffer to store the data read from the console device.
@param NumberOfBytes Number of bytes to read from the console device.
@retval 0 NumberOfBytes is 0.
@retval >0 The number of bytes read from the console device.
If this value is less than NumberOfBytes, then the read operation failed.
**/
UINTN
EFIAPI
ConsoleRead (
OUT UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
volatile UINTN Count;
UINTN ReadCount;
Count = 0;
while (Count < NumberOfBytes) {
if ((PcdGet32 (PcdConsoleInDeviceMask) & ConsoleInSerialPort) != 0) {
if (FeaturePcdGet (PcdSourceDebugEnabled) != TRUE) {
if (SerialPortPoll ()) {
ReadCount = SerialPortRead (Buffer, 1);
Buffer += ReadCount;
Count += ReadCount;
}
}
}
if ((PcdGet32 (PcdConsoleInDeviceMask) & ConsoleInUsbKeyboard) != 0) {
if (KeyboardPoll () && (Count < NumberOfBytes)) {
ReadCount = KeyboardRead (Buffer, 1);
Buffer += ReadCount;
Count += ReadCount;
}
}
}
return NumberOfBytes;
}