git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2657 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			262 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			262 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Mde UEFI library API implemention.
 | |
|   Print to StdErr or ConOut defined in EFI_SYSTEM_TABLE
 | |
| 
 | |
|   Copyright (c) 2007, Intel Corporation<BR>
 | |
|   All rights reserved. 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 "UefiLibFramework.h"
 | |
| 
 | |
| /**
 | |
|   Internal function which prints a formatted Unicode string to the console output device
 | |
|   specified by Console
 | |
| 
 | |
|   This function prints a formatted Unicode string to the console output device
 | |
|   specified by Console and returns the number of Unicode characters that printed
 | |
|   to it.  If the length of the formatted Unicode string is greater than PcdUefiLibMaxPrintBufferSize,
 | |
|   then only the first PcdUefiLibMaxPrintBufferSize characters are sent to Console.
 | |
| 
 | |
|   @param Format   Null-terminated Unicode format string.
 | |
|   @param Console  The output console.
 | |
|   @param Marker   VA_LIST marker for the variable argument list.
 | |
| 
 | |
|   If Format is NULL, then ASSERT().
 | |
|   If Format is not aligned on a 16-bit boundary, then ASSERT().
 | |
| 
 | |
| **/
 | |
| 
 | |
| STATIC
 | |
| UINTN
 | |
| InternalPrint (
 | |
|   IN  CONST CHAR16                  *Format,
 | |
|   IN  EFI_SIMPLE_TEXT_OUT_PROTOCOL  *Console,
 | |
|   IN  VA_LIST                       Marker
 | |
|   )
 | |
| {
 | |
|   UINTN   Return;
 | |
|   CHAR16  *Buffer;
 | |
|   UINTN   BufferSize;
 | |
| 
 | |
|   ASSERT (Format != NULL);
 | |
|   ASSERT (((UINTN) Format & 0x01) == 0);
 | |
| 
 | |
|   BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);
 | |
| 
 | |
|   Buffer = (CHAR16 *) AllocatePool(BufferSize);
 | |
|   ASSERT (Buffer != NULL);
 | |
| 
 | |
|   Return = UnicodeVSPrint (Buffer, BufferSize, Format, Marker);
 | |
| 
 | |
|   if (Console != NULL) {
 | |
|     //
 | |
|     // To be extra safe make sure Console has been initialized
 | |
|     //
 | |
|     Console->OutputString (Console, Buffer);
 | |
|   }
 | |
| 
 | |
|   FreePool (Buffer);
 | |
| 
 | |
|   return Return;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Prints a formatted Unicode string to the console output device specified by
 | |
|   ConOut defined in the EFI_SYSTEM_TABLE.
 | |
| 
 | |
|   This function prints a formatted Unicode string to the console output device
 | |
|   specified by ConOut in EFI_SYSTEM_TABLE and returns the number of Unicode
 | |
|   characters that printed to ConOut.  If the length of the formatted Unicode
 | |
|   string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
 | |
|   PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.
 | |
| 
 | |
|   @param Format   Null-terminated Unicode format string.
 | |
|   @param ...      VARARG list consumed to process Format.
 | |
|   If Format is NULL, then ASSERT().
 | |
|   If Format is not aligned on a 16-bit boundary, then ASSERT().
 | |
| 
 | |
| **/
 | |
| UINTN
 | |
| EFIAPI
 | |
| Print (
 | |
|   IN CONST CHAR16  *Format,
 | |
|   ...
 | |
|   )
 | |
| {
 | |
|   VA_LIST Marker;
 | |
|   UINTN   Return;
 | |
| 
 | |
|   VA_START (Marker, Format);
 | |
| 
 | |
|   Return = InternalPrint (Format, gST->ConOut, Marker);
 | |
| 
 | |
|   VA_END (Marker);
 | |
| 
 | |
|   return Return;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Prints a formatted Unicode string to the console output device specified by
 | |
|   StdErr defined in the EFI_SYSTEM_TABLE.
 | |
| 
 | |
|   This function prints a formatted Unicode string to the console output device
 | |
|   specified by StdErr in EFI_SYSTEM_TABLE and returns the number of Unicode
 | |
|   characters that printed to StdErr.  If the length of the formatted Unicode
 | |
|   string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
 | |
|   PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.
 | |
| 
 | |
|   @param Format   Null-terminated Unicode format string.
 | |
|   @param ...      VARARG list consumed to process Format.
 | |
|   If Format is NULL, then ASSERT().
 | |
|   If Format is not aligned on a 16-bit boundary, then ASSERT().
 | |
| 
 | |
| **/
 | |
| 
 | |
| UINTN
 | |
| EFIAPI
 | |
| ErrorPrint (
 | |
|   IN CONST CHAR16  *Format,
 | |
|   ...
 | |
|   )
 | |
| {
 | |
|   VA_LIST Marker;
 | |
|   UINTN   Return;
 | |
| 
 | |
|   VA_START (Marker, Format);
 | |
| 
 | |
|   Return = InternalPrint( Format, gST->StdErr, Marker);
 | |
| 
 | |
|   VA_END (Marker);
 | |
| 
 | |
|   return Return;
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Internal function which prints a formatted ASCII string to the console output device
 | |
|   specified by Console
 | |
| 
 | |
|   This function prints a formatted ASCII string to the console output device
 | |
|   specified by Console and returns the number of ASCII characters that printed
 | |
|   to it.  If the length of the formatted ASCII string is greater than PcdUefiLibMaxPrintBufferSize,
 | |
|   then only the first PcdUefiLibMaxPrintBufferSize characters are sent to Console.
 | |
| 
 | |
|   @param Format   Null-terminated ASCII format string.
 | |
|   @param Console  The output console.
 | |
|   @param Marker   VA_LIST marker for the variable argument list.
 | |
| 
 | |
|   If Format is NULL, then ASSERT().
 | |
| 
 | |
| **/
 | |
| 
 | |
| STATIC
 | |
| UINTN
 | |
| AsciiInternalPrint (
 | |
|   IN  CONST CHAR8                   *Format,
 | |
|   IN  EFI_SIMPLE_TEXT_OUT_PROTOCOL  *Console,
 | |
|   IN  VA_LIST                       Marker
 | |
|   )
 | |
| {
 | |
|   UINTN   Return;
 | |
|   CHAR16  *Buffer;
 | |
|   UINTN   BufferSize;
 | |
| 
 | |
|   ASSERT (Format != NULL);
 | |
| 
 | |
|   BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);
 | |
| 
 | |
|   Buffer = (CHAR16 *) AllocatePool(BufferSize);
 | |
|   ASSERT (Buffer != NULL);
 | |
| 
 | |
|   Return = UnicodeVSPrintAsciiFormat (Buffer, BufferSize, Format, Marker);
 | |
| 
 | |
|   if (Console != NULL) {
 | |
|     //
 | |
|     // To be extra safe make sure Console has been initialized
 | |
|     //
 | |
|     Console->OutputString (Console, Buffer);
 | |
|   }
 | |
| 
 | |
|   FreePool (Buffer);
 | |
| 
 | |
|   return Return;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Prints a formatted ASCII string to the console output device specified by
 | |
|   ConOut defined in the EFI_SYSTEM_TABLE.
 | |
| 
 | |
|   This function prints a formatted ASCII string to the console output device
 | |
|   specified by ConOut in EFI_SYSTEM_TABLE and returns the number of ASCII
 | |
|   characters that printed to ConOut.  If the length of the formatted ASCII
 | |
|   string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
 | |
|   PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.
 | |
| 
 | |
|   @param Format   Null-terminated ASCII format string.
 | |
|   @param ...      VARARG list consumed to process Format.
 | |
|   If Format is NULL, then ASSERT().
 | |
|   If Format is not aligned on a 16-bit boundary, then ASSERT().
 | |
| 
 | |
| **/
 | |
| UINTN
 | |
| EFIAPI
 | |
| AsciiPrint (
 | |
|   IN CONST CHAR8  *Format,
 | |
|   ...
 | |
|   )
 | |
| {
 | |
|   VA_LIST Marker;
 | |
|   UINTN   Return;
 | |
| 
 | |
|   VA_START (Marker, Format);
 | |
| 
 | |
|   Return = AsciiInternalPrint( Format, gST->ConOut, Marker);
 | |
| 
 | |
|   VA_END (Marker);
 | |
| 
 | |
|   return Return;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Prints a formatted ASCII string to the console output device specified by
 | |
|   StdErr defined in the EFI_SYSTEM_TABLE.
 | |
| 
 | |
|   This function prints a formatted ASCII string to the console output device
 | |
|   specified by StdErr in EFI_SYSTEM_TABLE and returns the number of ASCII
 | |
|   characters that printed to StdErr.  If the length of the formatted ASCII
 | |
|   string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
 | |
|   PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.
 | |
| 
 | |
|   @param Format   Null-terminated ASCII format string.
 | |
|   @param ...      VARARG list consumed to process Format.
 | |
|   If Format is NULL, then ASSERT().
 | |
|   If Format is not aligned on a 16-bit boundary, then ASSERT().
 | |
| 
 | |
| **/
 | |
| UINTN
 | |
| EFIAPI
 | |
| AsciiErrorPrint (
 | |
|   IN CONST CHAR8  *Format,
 | |
|   ...
 | |
|   )
 | |
| {
 | |
|   VA_LIST Marker;
 | |
|   UINTN   Return;
 | |
| 
 | |
|   VA_START (Marker, Format);
 | |
| 
 | |
|   Return = AsciiInternalPrint( Format, gST->StdErr, Marker);
 | |
| 
 | |
|   VA_END (Marker);
 | |
| 
 | |
|   return Return;
 | |
| }
 | |
| 
 |