4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Mde UEFI library API implementation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print to StdErr or ConOut defined in EFI_SYSTEM_TABLE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "UefiLibInternal.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGLOBAL_REMOVE_IF_UNREFERENCED EFI_GRAPHICS_OUTPUT_BLT_PIXEL mEfiColors[16] = {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x00, 0x00, 0x00, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x98, 0x00, 0x00, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x00, 0x98, 0x00, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x98, 0x98, 0x00, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x00, 0x00, 0x98, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x98, 0x00, 0x98, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x00, 0x98, 0x98, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x98, 0x98, 0x98, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x10, 0x10, 0x10, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0xff, 0x10, 0x10, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x10, 0xff, 0x10, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0xff, 0xff, 0x10, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x10, 0x10, 0xff, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0xf0, 0x10, 0xff, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x10, 0xff, 0xff, 0x00 },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0xff, 0xff, 0xff, 0x00 }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Internal function which prints a formatted Unicode string to the console output device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Console
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function prints a formatted Unicode string to the console output device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Console and returns the number of Unicode characters that printed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to it. If the length of the formatted Unicode string is greater than PcdUefiLibMaxPrintBufferSize,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then only the first PcdUefiLibMaxPrintBufferSize characters are sent to Console.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Format is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Format is not aligned on a 16-bit boundary, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Format A Null-terminated Unicode format string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Console The output console.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Marker A VA_LIST marker for the variable argument list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The number of Unicode characters in the produced
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync output buffer, not including the Null-terminator.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalPrint (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR16 *Format,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Console,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VA_LIST Marker
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *Buffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN BufferSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Format != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (((UINTN) Format & BIT0) == 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Console != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Buffer = (CHAR16 *) AllocatePool(BufferSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Buffer != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Return = UnicodeVSPrint (Buffer, BufferSize, Format, Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Console != NULL && Return > 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // To be extra safe make sure Console has been initialized
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Console->OutputString (Console, Buffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Return = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (Buffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Prints a formatted Unicode string to the console output device specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConOut defined in the EFI_SYSTEM_TABLE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function prints a formatted Unicode string to the console output device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by ConOut in EFI_SYSTEM_TABLE and returns the number of Unicode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync characters that printed to ConOut. If the length of the formatted Unicode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Format is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Format is not aligned on a 16-bit boundary, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If gST->ConOut is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Format A Null-terminated Unicode format string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ... A Variable argument list whose contents are accessed based
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync on the format string specified by Format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The number of Unicode characters printed to ConOut.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPrint (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR16 *Format,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ...
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_LIST Marker;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_START (Marker, Format);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Return = InternalPrint (Format, gST->ConOut, Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_END (Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Prints a formatted Unicode string to the console output device specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StdErr defined in the EFI_SYSTEM_TABLE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function prints a formatted Unicode string to the console output device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by StdErr in EFI_SYSTEM_TABLE and returns the number of Unicode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync characters that printed to StdErr. If the length of the formatted Unicode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Format is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Format is not aligned on a 16-bit boundary, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If gST->StdErr is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Format A Null-terminated Unicode format string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ... Variable argument list whose contents are accessed based
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync on the format string specified by Format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The number of Unicode characters printed to StdErr.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncErrorPrint (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR16 *Format,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ...
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_LIST Marker;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_START (Marker, Format);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Return = InternalPrint( Format, gST->StdErr, Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_END (Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Internal function which prints a formatted ASCII string to the console output device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Console
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function prints a formatted ASCII string to the console output device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Console and returns the number of ASCII characters that printed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to it. If the length of the formatted ASCII string is greater than PcdUefiLibMaxPrintBufferSize,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then only the first PcdUefiLibMaxPrintBufferSize characters are sent to Console.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Format is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Format A Null-terminated ASCII format string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Console The output console.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Marker VA_LIST marker for the variable argument list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The number of Unicode characters in the produced
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync output buffer not including the Null-terminator.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAsciiInternalPrint (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *Format,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Console,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VA_LIST Marker
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *Buffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN BufferSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Format != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Console != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Buffer = (CHAR16 *) AllocatePool(BufferSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Buffer != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Return = UnicodeVSPrintAsciiFormat (Buffer, BufferSize, Format, Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Console != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // To be extra safe make sure Console has been initialized
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Console->OutputString (Console, Buffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Return = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (Buffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Prints a formatted ASCII string to the console output device specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConOut defined in the EFI_SYSTEM_TABLE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function prints a formatted ASCII string to the console output device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by ConOut in EFI_SYSTEM_TABLE and returns the number of ASCII
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync characters that printed to ConOut. If the length of the formatted ASCII
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Format is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If gST->ConOut is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Format A Null-terminated ASCII format string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ... Variable argument list whose contents are accessed based
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync on the format string specified by Format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The number of ASCII characters printed to ConOut.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAsciiPrint (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *Format,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ...
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_LIST Marker;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Format != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_START (Marker, Format);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Return = AsciiInternalPrint( Format, gST->ConOut, Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_END (Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Prints a formatted ASCII string to the console output device specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StdErr defined in the EFI_SYSTEM_TABLE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function prints a formatted ASCII string to the console output device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by StdErr in EFI_SYSTEM_TABLE and returns the number of ASCII
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync characters that printed to StdErr. If the length of the formatted ASCII
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Format is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If gST->StdErr is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Format A Null-terminated ASCII format string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ... Variable argument list whose contents are accessed based
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync on the format string specified by Format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The number of ASCII characters printed to ConErr.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAsciiErrorPrint (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *Format,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ...
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_LIST Marker;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Format != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_START (Marker, Format);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Return = AsciiInternalPrint( Format, gST->StdErr, Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_END (Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Internal function to print a formatted Unicode string to a graphics console device specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConsoleOutputHandle defined in the EFI_SYSTEM_TABLE at the given (X,Y) coordinates.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function prints a formatted Unicode string to the graphics console device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by ConsoleOutputHandle in EFI_SYSTEM_TABLE and returns the number of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Unicode characters printed. The EFI_HII_FONT_PROTOCOL is used to convert the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync string to a bitmap using the glyphs registered with the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HII database. No wrapping is performed, so any portions of the string the fall
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync outside the active display region will not be displayed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If a graphics console device is not associated with the ConsoleOutputHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync defined in the EFI_SYSTEM_TABLE then no string is printed, and 0 is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the EFI_HII_FONT_PROTOCOL is not present in the handle database, then no
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync string is printed, and 0 is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PointX An X coordinate to print the string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PointY A Y coordinate to print the string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Foreground The foreground color of the string being printed. This is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync an optional parameter that may be NULL. If it is NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then the foreground color of the current ConOut device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in the EFI_SYSTEM_TABLE is used.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Background The background color of the string being printed. This is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync an optional parameter that may be NULL. If it is NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then the background color of the current ConOut device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in the EFI_SYSTEM_TABLE is used.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Buffer A Null-terminated Unicode formatted string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PrintNum The number of Unicode formatted string to be printed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The number of Unicode Characters printed. Zero means no any character
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync displayed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalPrintGraphic (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN PointX,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN PointY,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Foreground,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Background,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Buffer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN PrintNum
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 HorizontalResolution;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 VerticalResolution;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ColorDepth;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RefreshRate;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_FONT_PROTOCOL *HiiFont;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IMAGE_OUTPUT *Blt;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_FONT_DISPLAY_INFO FontInfo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_ROW_INFO *RowInfoArray;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN RowInfoArraySize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UGA_DRAW_PROTOCOL *UgaDraw;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Sto;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE ConsoleHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Width;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Height;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Delta;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HorizontalResolution = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VerticalResolution = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Blt = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RowInfoArray = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConsoleHandle = gST->ConsoleOutHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT( ConsoleHandle != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->HandleProtocol (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConsoleHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiGraphicsOutputProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VOID **) &GraphicsOutput
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaDraw = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // If no GOP available, try to open UGA Draw protocol if supported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GraphicsOutput = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->HandleProtocol (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConsoleHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiUgaDrawProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VOID **) &UgaDraw
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Error;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->HandleProtocol (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConsoleHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiSimpleTextOutProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VOID **) &Sto
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Error;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (GraphicsOutput != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HorizontalResolution = GraphicsOutput->Mode->Info->HorizontalResolution;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VerticalResolution = GraphicsOutput->Mode->Info->VerticalResolution;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaDraw->GetMode (UgaDraw, &HorizontalResolution, &VerticalResolution, &ColorDepth, &RefreshRate);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Error;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT ((HorizontalResolution != 0) && (VerticalResolution !=0));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->LocateProtocol (&gEfiHiiFontProtocolGuid, NULL, (VOID **) &HiiFont);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Error;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Blt = (EFI_IMAGE_OUTPUT *) AllocateZeroPool (sizeof (EFI_IMAGE_OUTPUT));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Blt != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Blt->Width = (UINT16) (HorizontalResolution);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Blt->Height = (UINT16) (VerticalResolution);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&FontInfo, sizeof (EFI_FONT_DISPLAY_INFO));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Foreground != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyMem (&FontInfo.ForegroundColor, Foreground, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyMem (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &FontInfo.ForegroundColor,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &mEfiColors[Sto->Mode->Attribute & 0x0f],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Background != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyMem (&FontInfo.BackgroundColor, Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyMem (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &FontInfo.BackgroundColor,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &mEfiColors[Sto->Mode->Attribute >> 4],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (GraphicsOutput != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Blt->Image.Screen = GraphicsOutput;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = HiiFont->StringToImage (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HiiFont,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_IGNORE_IF_NO_GLYPH | EFI_HII_OUT_FLAG_CLIP |
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_OUT_FLAG_CLIP_CLEAN_X | EFI_HII_OUT_FLAG_CLIP_CLEAN_Y |
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_IGNORE_LINE_BREAK | EFI_HII_DIRECT_TO_SCREEN,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Buffer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &FontInfo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &Blt,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PointX,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PointY,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &RowInfoArray,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &RowInfoArraySize,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Error;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (UgaDraw!= NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Blt->Image.Bitmap = AllocateZeroPool (Blt->Width * Blt->Height * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Blt->Image.Bitmap != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // StringToImage only support blt'ing image to device using GOP protocol. If GOP is not supported in this platform,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // we ask StringToImage to print the string to blt buffer, then blt to device using UgaDraw.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = HiiFont->StringToImage (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HiiFont,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_IGNORE_IF_NO_GLYPH | EFI_HII_OUT_FLAG_CLIP |
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_OUT_FLAG_CLIP_CLEAN_X | EFI_HII_OUT_FLAG_CLIP_CLEAN_Y |
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_IGNORE_LINE_BREAK,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Buffer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &FontInfo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &Blt,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PointX,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PointY,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &RowInfoArray,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &RowInfoArraySize,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (RowInfoArray != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Explicit Line break characters are ignored, so the updated parameter RowInfoArraySize by StringToImage will
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // always be 1 or 0 (if there is no valid Unicode Char can be printed). ASSERT here to make sure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (RowInfoArraySize <= 1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (RowInfoArraySize != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Width = RowInfoArray[0].LineWidth;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Height = RowInfoArray[0].LineHeight;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Delta = Blt->Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Width = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Height = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Delta = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = UgaDraw->Blt (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaDraw,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (EFI_UGA_PIXEL *) Blt->Image.Bitmap,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiUgaBltBufferToVideo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PointX,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PointY,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PointX,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PointY,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Width,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Height,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Delta
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Error;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (Blt->Image.Bitmap);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Error;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Calculate the number of actual printed characters
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (RowInfoArraySize != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PrintNum = RowInfoArray[0].EndIndex - RowInfoArray[0].StartIndex + 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PrintNum = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (RowInfoArray);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (Blt);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return PrintNum;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncError:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Blt != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (Blt);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Prints a formatted Unicode string to a graphics console device specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConsoleOutputHandle defined in the EFI_SYSTEM_TABLE at the given (X,Y) coordinates.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function prints a formatted Unicode string to the graphics console device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by ConsoleOutputHandle in EFI_SYSTEM_TABLE and returns the number of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Unicode characters displayed, not including partial characters that may be clipped
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by the right edge of the display. If the length of the formatted Unicode string is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync greater than PcdUefiLibMaxPrintBufferSize, then at most the first
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdUefiLibMaxPrintBufferSize characters are printed.The EFI_HII_FONT_PROTOCOL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StringToImage() service is used to convert the string to a bitmap using the glyphs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync registered with the HII database. No wrapping is performed, so any portions of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync string the fall outside the active display region will not be displayed. Please see
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Section 27.2.6 of the UEFI Specification for a description of the supported string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync format including the set of control codes supported by the StringToImage() service.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If a graphics console device is not associated with the ConsoleOutputHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync defined in the EFI_SYSTEM_TABLE then no string is printed, and 0 is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the EFI_HII_FONT_PROTOCOL is not present in the handle database, then no
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync string is printed, and 0 is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Format is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Format is not aligned on a 16-bit boundary, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If gST->ConsoleOutputHandle is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PointX An X coordinate to print the string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PointY A Y coordinate to print the string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ForeGround The foreground color of the string being printed. This is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync an optional parameter that may be NULL. If it is NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then the foreground color of the current ConOut device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in the EFI_SYSTEM_TABLE is used.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param BackGround The background color of the string being printed. This is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync an optional parameter that may be NULL. If it is NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then the background color of the current ConOut device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in the EFI_SYSTEM_TABLE is used.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Format A Null-terminated Unicode format string. See Print Library
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for the supported format string syntax.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ... A Variable argument list whose contents are accessed based on
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the format string specified by Format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The number of Unicode characters printed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPrintXY (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN PointX,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN PointY,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *ForeGround, OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BackGround, OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR16 *Format,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ...
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_LIST Marker;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *Buffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN BufferSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN PrintNum;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ReturnNum;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Format != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (((UINTN) Format & BIT0) == 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_START (Marker, Format);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Buffer = (CHAR16 *) AllocatePool (BufferSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Buffer != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PrintNum = UnicodeVSPrint (Buffer, BufferSize, Format, Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_END (Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ReturnNum = InternalPrintGraphic (PointX, PointY, ForeGround, BackGround, Buffer, PrintNum);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (Buffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ReturnNum;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Prints a formatted ASCII string to a graphics console device specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConsoleOutputHandle defined in the EFI_SYSTEM_TABLE at the given (X,Y) coordinates.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function prints a formatted ASCII string to the graphics console device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by ConsoleOutputHandle in EFI_SYSTEM_TABLE and returns the number of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASCII characters displayed, not including partial characters that may be clipped
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by the right edge of the display. If the length of the formatted ASCII string is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync greater than PcdUefiLibMaxPrintBufferSize, then at most the first
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdUefiLibMaxPrintBufferSize characters are printed.The EFI_HII_FONT_PROTOCOL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StringToImage() service is used to convert the string to a bitmap using the glyphs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync registered with the HII database. No wrapping is performed, so any portions of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync string the fall outside the active display region will not be displayed. Please see
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Section 27.2.6 of the UEFI Specification for a description of the supported string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync format including the set of control codes supported by the StringToImage() service.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If a graphics console device is not associated with the ConsoleOutputHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync defined in the EFI_SYSTEM_TABLE then no string is printed, and 0 is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the EFI_HII_FONT_PROTOCOL is not present in the handle database, then no
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync string is printed, and 0 is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Format is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If gST->ConsoleOutputHandle is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PointX An X coordinate to print the string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PointY A Y coordinate to print the string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ForeGround The foreground color of the string being printed. This is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync an optional parameter that may be NULL. If it is NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then the foreground color of the current ConOut device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in the EFI_SYSTEM_TABLE is used.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param BackGround The background color of the string being printed. This is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync an optional parameter that may be NULL. If it is NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then the background color of the current ConOut device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in the EFI_SYSTEM_TABLE is used.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Format A Null-terminated ASCII format string. See Print Library
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for the supported format string syntax.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ... Variable argument list whose contents are accessed based on
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the format string specified by Format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The number of ASCII characters printed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAsciiPrintXY (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN PointX,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN PointY,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *ForeGround, OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BackGround, OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *Format,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ...
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_LIST Marker;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *Buffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN BufferSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN PrintNum;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ReturnNum;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Format != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_START (Marker, Format);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Buffer = (CHAR16 *) AllocatePool (BufferSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Buffer != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PrintNum = UnicodeSPrintAsciiFormat (Buffer, BufferSize, Format, Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_END (Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ReturnNum = InternalPrintGraphic (PointX, PointY, ForeGround, BackGround, Buffer, PrintNum);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (Buffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ReturnNum;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Appends a formatted Unicode string to a Null-terminated Unicode string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function appends a formatted Unicode string to the Null-terminated
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Unicode string specified by String. String is optional and may be NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Storage for the formatted Unicode string returned is allocated using
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AllocatePool(). The pointer to the appended string is returned. The caller
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is responsible for freeing the returned string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If String is not NULL and not aligned on a 16-bit boundary, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If FormatString is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If FormatString is not aligned on a 16-bit boundary, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] String A Null-terminated Unicode string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] FormatString A Null-terminated Unicode format string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Marker VA_LIST marker for the variable argument list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval NULL There was not enough available memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Null-terminated Unicode string is that is the formatted
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync string appended to String.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCHAR16*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCatVSPrint (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *String, OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR16 *FormatString,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VA_LIST Marker
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN CharactersRequired;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN SizeRequired;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *BufferToReturn;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_LIST ExtraMarker;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_COPY (ExtraMarker, Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CharactersRequired = SPrintLength(FormatString, ExtraMarker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_END (ExtraMarker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (String != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SizeRequired = StrSize(String) + (CharactersRequired * sizeof(CHAR16));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SizeRequired = sizeof(CHAR16) + (CharactersRequired * sizeof(CHAR16));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BufferToReturn = AllocateZeroPool(SizeRequired);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (BufferToReturn == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (String != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrCpy(BufferToReturn, String);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UnicodeVSPrint(BufferToReturn + StrLen(BufferToReturn), (CharactersRequired+1) * sizeof(CHAR16), FormatString, Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT(StrSize(BufferToReturn)==SizeRequired);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (BufferToReturn);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Appends a formatted Unicode string to a Null-terminated Unicode string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function appends a formatted Unicode string to the Null-terminated
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Unicode string specified by String. String is optional and may be NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Storage for the formatted Unicode string returned is allocated using
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AllocatePool(). The pointer to the appended string is returned. The caller
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is responsible for freeing the returned string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If String is not NULL and not aligned on a 16-bit boundary, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If FormatString is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If FormatString is not aligned on a 16-bit boundary, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] String A Null-terminated Unicode string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] FormatString A Null-terminated Unicode format string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ... The variable argument list whose contents are
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync accessed based on the format string specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FormatString.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval NULL There was not enough available memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Null-terminated Unicode string is that is the formatted
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync string appended to String.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCHAR16 *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCatSPrint (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *String, OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR16 *FormatString,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ...
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_LIST Marker;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *NewString;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_START (Marker, FormatString);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NewString = CatVSPrint(String, FormatString, Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VA_END (Marker);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return NewString;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync