From nobody Sat Nov 2 16:30:26 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Authentication-Results: mx.zoho.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1486620181080438.3600257080624; Wed, 8 Feb 2017 22:03:01 -0800 (PST) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 225E2820B7; Wed, 8 Feb 2017 22:02:58 -0800 (PST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 5B7ED8208E for ; Wed, 8 Feb 2017 22:02:57 -0800 (PST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga104.jf.intel.com with ESMTP; 08 Feb 2017 22:02:57 -0800 Received: from shwdeopenpsi014.ccr.corp.intel.com ([10.239.9.13]) by orsmga001.jf.intel.com with ESMTP; 08 Feb 2017 22:02:56 -0800 X-Original-To: edk2-devel@lists.01.org X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.35,349,1484035200"; d="scan'208";a="1092615583" From: Hao Wu To: edk2-devel@lists.01.org Date: Thu, 9 Feb 2017 14:02:48 +0800 Message-Id: <1486620170-38136-3-git-send-email-hao.a.wu@intel.com> X-Mailer: git-send-email 1.9.5.msysgit.0 In-Reply-To: <1486620170-38136-1-git-send-email-hao.a.wu@intel.com> References: <1486620170-38136-1-git-send-email-hao.a.wu@intel.com> Subject: [edk2] [PATCH v2 2/4] MdeModulePkg: Add the EFI_PRINT2S_PROTOCOL X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Hao Wu , Michael Kinney , Jiewen Yao , Liming Gao MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Add the EFI_PRINT2S_PROTOCOL as a safe version of the EFI_PRINT2_PROTOCOL, the EFI_PRINT2S_PROTOCOL replaces the following 2 services in EFI_PRINT2_PROTOCOL: UNICODE_VALUE_TO_STRING ASCII_VALUE_TO_STRING with: UNICODE_VALUE_TO_STRING_S ASCII_VALUE_TO_STRING_S The 2 new services perform checks to the input parameters and will return relative status to reflect the check result. Return RETURN_INVALID_PARAMETER when: 1). The input Buffer is NULL. 2). The input BufferSize is greater than (PcdMaximumUnicodeStringLength * sizeof (CHAR16) + 1) for UnicodeValueToStringS or greater than PcdMaximumAsciiStringLength for AsciiValueToStringS. 3). The input Flags is not set properly. 4). The input Width is not smaller than MAXIMUM_VALUE_CHARACTERS. Return RETURN_BUFFER_TOO_SMALL when: 1). The input BufferSize cannot hold the converted value. Cc: Jiewen Yao Cc: Liming Gao Cc: Michael Kinney Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu --- MdeModulePkg/Include/Protocol/Print2.h | 150 +++++++++++++++++++- MdeModulePkg/MdeModulePkg.dec | 3 +- MdeModulePkg/Universal/PrintDxe/Print.c | 18 ++- MdeModulePkg/Universal/PrintDxe/PrintDxe.inf | 7 +- MdeModulePkg/Universal/PrintDxe/PrintDxe.uni | 10 +- 5 files changed, 175 insertions(+), 13 deletions(-) diff --git a/MdeModulePkg/Include/Protocol/Print2.h b/MdeModulePkg/Include/= Protocol/Print2.h index 8cad6fd..e4dd6f2 100644 --- a/MdeModulePkg/Include/Protocol/Print2.h +++ b/MdeModulePkg/Include/Protocol/Print2.h @@ -1,7 +1,8 @@ /** @file =20 - This print protocol defines six basic print functions to=20 - print the format unicode and ascii string. + Produces EFI_PRINT2_PROTOCOL and EFI_PRINT2S_PROTOCOL. + These protocols define basic print functions to print the format unicod= e and + ascii string. =20 Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made availabl= e under=20 @@ -515,4 +516,149 @@ struct _EFI_PRINT2_PROTOCOL { =20 extern EFI_GUID gEfiPrint2ProtocolGuid; =20 + +#define EFI_PRINT2S_PROTOCOL_GUID \ + { 0xcc252d2, 0xc106, 0x4661, { 0xb5, 0xbd, 0x31, 0x47, 0xa4, 0xf8, 0x1f,= 0x92 } } + +// +// Forward reference for pure ANSI compatability +// +typedef struct _EFI_PRINT2S_PROTOCOL EFI_PRINT2S_PROTOCOL; + +/** + Converts a decimal value to a Null-terminated Unicode string. + + Converts the decimal number specified by Value to a Null-terminated Unic= ode + string specified by Buffer containing at most Width characters. No paddi= ng of + spaces is ever performed. If Width is 0 then a width of + MAXIMUM_VALUE_CHARACTERS is assumed. If the conversion contains more than + Width characters, then only the first Width characters are placed in Buf= fer. + Additional conversion parameters are specified in Flags. + + The Flags bit LEFT_JUSTIFY is always ignored. + All conversions are left justified in Buffer. + If Width is 0, PREFIX_ZERO is ignored in Flags. + If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and + commas are inserted every 3rd digit starting from the right. + If RADIX_HEX is set in Flags, then the output buffer will be formatted in + hexadecimal format. + If Value is < 0 and RADIX_HEX is not set in Flags, then the fist charact= er in + Buffer is a '-'. + If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored, then + Buffer is padded with '0' characters so the combination of the optional = '-' + sign character, '0' characters, digit characters for Value, and the + Null-terminator add up to Width characters. + + If Buffer is not aligned on a 16-bit boundary, then ASSERT(). + If an error would be returned, then the function will also ASSERT(). + + @param Buffer The pointer to the output buffer for the produced + Null-terminated Unicode string. + @param BufferSize The size of Buffer in bytes, including the + Null-terminator. + @param Flags The bitmask of flags that specify left justification, + zero pad, and commas. + @param Value The 64-bit signed value to convert to a string. + @param Width The maximum number of Unicode characters to place in + Buffer, not including the Null-terminator. + + @retval RETURN_SUCCESS The decimal value is converted. + @retval RETURN_BUFFER_TOO_SMALL If BufferSize cannot hold the converted + value. + @retval RETURN_INVALID_PARAMETER If Buffer is NULL. + If PcdMaximumUnicodeStringLength is not + zero, and BufferSize is greater than + (PcdMaximumUnicodeStringLength * + sizeof (CHAR16) + 1). + If unsupported bits are set in Flags. + If both COMMA_TYPE and RADIX_HEX are se= t in + Flags. + If Width >=3D MAXIMUM_VALUE_CHARACTERS. + +**/ +typedef +RETURN_STATUS +(EFIAPI *UNICODE_VALUE_TO_STRING_S)( + IN OUT CHAR16 *Buffer, + IN UINTN BufferSize, + IN UINTN Flags, + IN INT64 Value, + IN UINTN Width + ); + +/** + Converts a decimal value to a Null-terminated Ascii string. + + Converts the decimal number specified by Value to a Null-terminated Ascii + string specified by Buffer containing at most Width characters. No paddi= ng of + spaces is ever performed. If Width is 0 then a width of + MAXIMUM_VALUE_CHARACTERS is assumed. If the conversion contains more than + Width characters, then only the first Width characters are placed in Buf= fer. + Additional conversion parameters are specified in Flags. + + The Flags bit LEFT_JUSTIFY is always ignored. + All conversions are left justified in Buffer. + If Width is 0, PREFIX_ZERO is ignored in Flags. + If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and + commas are inserted every 3rd digit starting from the right. + If RADIX_HEX is set in Flags, then the output buffer will be formatted in + hexadecimal format. + If Value is < 0 and RADIX_HEX is not set in Flags, then the fist charact= er in + Buffer is a '-'. + If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored, then + Buffer is padded with '0' characters so the combination of the optional = '-' + sign character, '0' characters, digit characters for Value, and the + Null-terminator add up to Width characters. + + If Buffer is not aligned on a 16-bit boundary, then ASSERT(). + If an error would be returned, then the function will also ASSERT(). + + @param Buffer The pointer to the output buffer for the produced + Null-terminated Ascii string. + @param BufferSize The size of Buffer in bytes, including the + Null-terminator. + @param Flags The bitmask of flags that specify left justification, + zero pad, and commas. + @param Value The 64-bit signed value to convert to a string. + @param Width The maximum number of Ascii characters to place in + Buffer, not including the Null-terminator. + + @retval RETURN_SUCCESS The decimal value is converted. + @retval RETURN_BUFFER_TOO_SMALL If BufferSize cannot hold the converted + value. + @retval RETURN_INVALID_PARAMETER If Buffer is NULL. + If PcdMaximumAsciiStringLength is not + zero, and BufferSize is greater than + PcdMaximumAsciiStringLength. + If unsupported bits are set in Flags. + If both COMMA_TYPE and RADIX_HEX are se= t in + Flags. + If Width >=3D MAXIMUM_VALUE_CHARACTERS. + +**/ +typedef +RETURN_STATUS +(EFIAPI *ASCII_VALUE_TO_STRING_S)( + IN OUT CHAR8 *Buffer, + IN UINTN BufferSize, + IN UINTN Flags, + IN INT64 Value, + IN UINTN Width + ); + +struct _EFI_PRINT2S_PROTOCOL { + UNICODE_BS_PRINT UnicodeBSPrint; + UNICODE_S_PRINT UnicodeSPrint; + UNICODE_BS_PRINT_ASCII_FORMAT UnicodeBSPrintAsciiFormat; + UNICODE_S_PRINT_ASCII_FORMAT UnicodeSPrintAsciiFormat; + UNICODE_VALUE_TO_STRING_S UnicodeValueToStringS; + ASCII_BS_PRINT AsciiBSPrint; + ASCII_S_PRINT AsciiSPrint; + ASCII_BS_PRINT_UNICODE_FORMAT AsciiBSPrintUnicodeFormat; + ASCII_S_PRINT_UNICODE_FORMAT AsciiSPrintUnicodeFormat; + ASCII_VALUE_TO_STRING_S AsciiValueToStringS; +}; + +extern EFI_GUID gEfiPrint2SProtocolGuid; + #endif diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec index 273cd7e..c95633c 100644 --- a/MdeModulePkg/MdeModulePkg.dec +++ b/MdeModulePkg/MdeModulePkg.dec @@ -427,9 +427,10 @@ # If developer need implement such functionality, they should use BaseP= eCoffLib. gEfiLoadPeImageProtocolGuid =3D { 0x5CB5C776, 0x60D5, 0x45EE, { 0x88,= 0x3C, 0x45, 0x27, 0x08, 0xCD, 0x74, 0x3F }} =20 - ## Print protocol defines basic print functions to print the format unic= ode and ascii string. + ## Print protocols define basic print functions to print the format unic= ode and ascii string. # Include/Protocol/Print2.h gEfiPrint2ProtocolGuid =3D { 0xf05976ef, 0x83f1, 0x4f3d, { 0x86= , 0x19, 0xf7, 0x59, 0x5d, 0x41, 0xe5, 0x38 } } + gEfiPrint2SProtocolGuid =3D { 0xcc252d2, 0xc106, 0x4661, { 0xb5,= 0xbd, 0x31, 0x47, 0xa4, 0xf8, 0x1f, 0x92 } } =20 ## This protocol defines the generic memory test interfaces in Dxe phase. # Include/Protocol/GenericMemoryTest.h diff --git a/MdeModulePkg/Universal/PrintDxe/Print.c b/MdeModulePkg/Univers= al/PrintDxe/Print.c index af55acf..85bc724 100644 --- a/MdeModulePkg/Universal/PrintDxe/Print.c +++ b/MdeModulePkg/Universal/PrintDxe/Print.c @@ -1,7 +1,7 @@ /** @file - This driver produces Print2 protocol layered on top of the PrintLib from= the MdePkg. + This driver produces Print2 protocols layered on top of the PrintLib fro= m the MdePkg. =20 -Copyright (c) 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2017, Intel Corporation. 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 @@ -35,6 +35,19 @@ CONST EFI_PRINT2_PROTOCOL mPrint2Protocol =3D { AsciiValueToString }; =20 +CONST EFI_PRINT2S_PROTOCOL mPrint2SProtocol =3D { + UnicodeBSPrint, + UnicodeSPrint, + UnicodeBSPrintAsciiFormat, + UnicodeSPrintAsciiFormat, + UnicodeValueToStringS, + AsciiBSPrint, + AsciiSPrint, + AsciiBSPrintUnicodeFormat, + AsciiSPrintUnicodeFormat, + AsciiValueToStringS +}; + /** The user Entry Point for Print module. =20 @@ -59,6 +72,7 @@ PrintEntryPoint ( Status =3D gBS->InstallMultipleProtocolInterfaces ( &mPrintThunkHandle, &gEfiPrint2ProtocolGuid, &mPrint2Protocol, + &gEfiPrint2SProtocolGuid, &mPrint2SProtocol, NULL ); ASSERT_EFI_ERROR (Status); diff --git a/MdeModulePkg/Universal/PrintDxe/PrintDxe.inf b/MdeModulePkg/Un= iversal/PrintDxe/PrintDxe.inf index 9ea0652..19eef5a 100644 --- a/MdeModulePkg/Universal/PrintDxe/PrintDxe.inf +++ b/MdeModulePkg/Universal/PrintDxe/PrintDxe.inf @@ -1,9 +1,9 @@ ## @file -# Print DXE driver that produces Print2 Protocol. +# Print DXE driver that produces Print2 Protocols. # -# This driver produces Print2 protocol layered on top of the PrintLib fro= m the MdePkg. +# This driver produces Print2 protocols layered on top of the PrintLib fr= om the MdePkg. # -# Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.
+# Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the B= SD License # which accompanies this distribution. The full text of the license may = be found at @@ -44,6 +44,7 @@ =20 [Protocols] gEfiPrint2ProtocolGuid ## PRODUCES + gEfiPrint2SProtocolGuid ## PRODUCES =20 [Depex] TRUE diff --git a/MdeModulePkg/Universal/PrintDxe/PrintDxe.uni b/MdeModulePkg/Un= iversal/PrintDxe/PrintDxe.uni index accb114..10f0ff8 100644 --- a/MdeModulePkg/Universal/PrintDxe/PrintDxe.uni +++ b/MdeModulePkg/Universal/PrintDxe/PrintDxe.uni @@ -1,9 +1,9 @@ // /** @file -// Print DXE driver that produces Print2 Protocol. +// Print DXE driver that produces Print2 Protocols. // -// This driver produces Print2 protocol layered on top of the PrintLib fro= m the MdePkg. +// This driver produces Print2 protocols layered on top of the PrintLib fr= om the MdePkg. // -// Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.
+// Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.
// // This program and the accompanying materials // are licensed and made available under the terms and conditions of the B= SD License @@ -16,7 +16,7 @@ // **/ =20 =20 -#string STR_MODULE_ABSTRACT #language en-US "Print DXE driver = that produces Print2 Protocol" +#string STR_MODULE_ABSTRACT #language en-US "Print DXE driver = that produces Print2 Protocols" =20 -#string STR_MODULE_DESCRIPTION #language en-US "This driver produ= ces Print2 protocol layered on top of the PrintLib from the MdePkg." +#string STR_MODULE_DESCRIPTION #language en-US "This driver produ= ces Print2 protocols layered on top of the PrintLib from the MdePkg." =20 --=20 1.9.5.msysgit.0 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel