summaryrefslogtreecommitdiffstats
path: root/OvmfPkg
diff options
context:
space:
mode:
authorLaszlo Ersek <lersek@redhat.com>2017-09-04 16:30:40 +0200
committerLaszlo Ersek <lersek@redhat.com>2017-09-11 22:28:25 +0200
commit80886a695377dfe421ae93887b85e37982c1f1c3 (patch)
tree930466e137d3ed0f8a996151ada6c9966c866885 /OvmfPkg
parent98a4d04e8fda7c23c0cce1ac65597e8144bcb5b8 (diff)
downloadedk2-80886a695377dfe421ae93887b85e37982c1f1c3.tar.gz
edk2-80886a695377dfe421ae93887b85e37982c1f1c3.tar.bz2
edk2-80886a695377dfe421ae93887b85e37982c1f1c3.zip
OvmfPkg/PlatformDebugLibIoPort: write messages with IoWriteFifo8()
Since commit 19c6d9feaaf8 ("MdePkg: Expand BaseIoLibIntrinsic (IoLib class) library", 2017-01-14), IoWriteFifo8() has been widely available to modules. Use it to print debug messages and assertion failures to the QEMU debug port, rather than open-coded loops. In the general case this speeds up logging, because debug messages will now trap to QEMU once per message (as opposed to once per character), due to "REP OUTSB" in "MdePkg/Library/BaseIoLibIntrinsic/*/IoFifoSev.nasm". In SEV guests, there is no speedup (SEV doesn't support the REP prefix). SEV is detected internally to BaseIoLibIntrinsic. Cc: Brijesh Singh <brijesh.singh@amd.com> Cc: Jordan Justen <jordan.l.justen@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Acked-by: Brijesh Singh <brijesh.singh@amd.com>
Diffstat (limited to 'OvmfPkg')
-rw-r--r--OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c
index 44850a9dba..5435767c1c 100644
--- a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c
+++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c
@@ -69,7 +69,7 @@ DebugPrint (
{
CHAR8 Buffer[MAX_DEBUG_MESSAGE_LENGTH];
VA_LIST Marker;
- UINT8 *Ptr;
+ UINTN Length;
//
// If Format is NULL, then ASSERT().
@@ -87,15 +87,13 @@ DebugPrint (
// Convert the DEBUG() message to an ASCII String
//
VA_START (Marker, Format);
- AsciiVSPrint (Buffer, sizeof (Buffer), Format, Marker);
+ Length = AsciiVSPrint (Buffer, sizeof (Buffer), Format, Marker);
VA_END (Marker);
//
// Send the print string to the debug I/O port
//
- for (Ptr = (UINT8 *) Buffer; *Ptr; Ptr++) {
- IoWrite8 (PcdGet16(PcdDebugIoPort), *Ptr);
- }
+ IoWriteFifo8 (PcdGet16 (PcdDebugIoPort), Length, Buffer);
}
@@ -129,20 +127,18 @@ DebugAssert (
)
{
CHAR8 Buffer[MAX_DEBUG_MESSAGE_LENGTH];
- UINT8 *Ptr;
+ UINTN Length;
//
// Generate the ASSERT() message in Ascii format
//
- AsciiSPrint (Buffer, sizeof Buffer, "ASSERT %a(%Lu): %a\n", FileName,
- (UINT64)LineNumber, Description);
+ Length = AsciiSPrint (Buffer, sizeof Buffer, "ASSERT %a(%Lu): %a\n",
+ FileName, (UINT64)LineNumber, Description);
//
- // Send the print string to the Console Output device
+ // Send the print string to the debug I/O port
//
- for (Ptr = (UINT8 *) Buffer; *Ptr; Ptr++) {
- IoWrite8 (PcdGet16(PcdDebugIoPort), *Ptr);
- }
+ IoWriteFifo8 (PcdGet16 (PcdDebugIoPort), Length, Buffer);
//
// Generate a Breakpoint, DeadLoop, or NOP based on PCD settings