From nobody Sun May 19 15:29:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+58032+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58032+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1587714847; cv=none; d=zohomail.com; s=zohoarc; b=TUHFt6nfj3HDD0IDz9CSqLVOVQO/u3sPFyJB69WZBPPwdKSkVgJQpakTEzK4xi+0whzgo9C27ho5RKPh+E3f4EjxZo36u0OPY6PGaopU3KuFGiEN9L7e6uD4RCaq/wTuhhCq+1bYxG5hwZ4miQOdjYmmrt/cwr1myAQ8FwkBJOY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587714847; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=8RgPLT6O08yOP9XKJteynTEfVhD9bVo6jKyUBw3Kvqk=; b=E5Ae5X9h6Uz2hm3t7GE/WkYkz+uMGbTZpFnyyY+CU4zvM7IDnSnq4gS7UdZGPauBM7R5dC8Yv5C8yr47Ywj/ClEQrXsvBwyVXXSHr1g1ezPfAXspEGs32rzWRIQFn9WmEzGGvakONDZ58ZsCy0i5V6lmk/+b6/ce3QP01lj5QjI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58032+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1587714847611462.7658456341642; Fri, 24 Apr 2020 00:54:07 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id d8EZYY1788612xU8WbJG3yUD; Fri, 24 Apr 2020 00:54:07 -0700 X-Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.61]) by mx.groups.io with SMTP id smtpd.web10.1548.1587714846589012577 for ; Fri, 24 Apr 2020 00:54:06 -0700 X-Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-462-9YOpH8W3NjmyRpmo1T-4kw-1; Fri, 24 Apr 2020 03:53:59 -0400 X-MC-Unique: 9YOpH8W3NjmyRpmo1T-4kw-1 X-Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5F1A2107ACF3; Fri, 24 Apr 2020 07:53:58 +0000 (UTC) X-Received: from lacos-laptop-7.usersys.redhat.com (ovpn-113-159.ams2.redhat.com [10.36.113.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id E70CA10016DA; Fri, 24 Apr 2020 07:53:56 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , Jordan Justen , Per Sundstrom , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [edk2-devel] [PATCH 1/7] OvmfPkg: introduce QemuFwCfgSimpleParserLib Date: Fri, 24 Apr 2020 09:53:47 +0200 Message-Id: <20200424075353.8489-2-lersek@redhat.com> In-Reply-To: <20200424075353.8489-1-lersek@redhat.com> References: <20200424075353.8489-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lersek@redhat.com X-Gm-Message-State: lPxJuFqYdgq5SgeFxvkvJfupx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1587714847; bh=8RgPLT6O08yOP9XKJteynTEfVhD9bVo6jKyUBw3Kvqk=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=fBOxIboSM7pY5Mprte84KqvfmB4wiCeBfFUAtnQzqsW4vJTZHRmZOy9csWPBPE/gkXQ mlcInx1z8RJu05Rs0EZDACME35wua320/61CL3oxBuahKmRzf+wv5CzuTEmB42y2IQkBs eC5KOUdHo1JOtfb3NDSXZY6Pa4mIHgXd40c= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" We already parse some boolean and integer values from named fw_cfg files (usually into PCDs), and we're going to cover more. Add a dedicated library for centralizing the parsing logic. Cc: Ard Biesheuvel Cc: Jordan Justen Cc: Per Sundstrom Cc: Philippe Mathieu-Daud=C3=A9 Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2681 Signed-off-by: Laszlo Ersek Reviewed-by: Ard Biesheuvel Reviewed-by: Philippe Mathieu-Daude --- OvmfPkg/OvmfPkg.dec | = 4 + OvmfPkg/OvmfPkgIa32.dsc | = 1 + OvmfPkg/OvmfPkgIa32X64.dsc | = 1 + OvmfPkg/OvmfPkgX64.dsc | = 1 + OvmfPkg/Include/Library/QemuFwCfgSimpleParserLib.h | 12= 8 +++++++ OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFwCfgSimpleParserLib.inf | 2= 7 ++ OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFwCfgSimpleParser.c | 39= 8 ++++++++++++++++++++ 7 files changed, 560 insertions(+) diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index 28030391cff2..8a46fe73344e 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -60,6 +60,10 @@ [LibraryClasses] # QemuFwCfgS3Lib|Include/Library/QemuFwCfgS3Lib.h =20 + ## @libraryclass Parse the contents of named fw_cfg files as simple + # (scalar) data types. + QemuFwCfgSimpleParserLib|Include/Library/QemuFwCfgSimpleParserLib.h + ## @libraryclass Rewrite the BootOrder NvVar based on QEMU's "bootorde= r" # fw_cfg file. # diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index d5e90c001370..5e2972063110 100644 --- a/OvmfPkg/OvmfPkgIa32.dsc +++ b/OvmfPkg/OvmfPkgIa32.dsc @@ -160,6 +160,7 @@ [LibraryClasses] UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVar= iablesLib.inf QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxeLib.inf + QemuFwCfgSimpleParserLib|OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFw= CfgSimpleParserLib.inf VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf LoadLinuxLib|OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.inf MemEncryptSevLib|OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevL= ib.inf diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index 066f49aeaee0..18e6909a33fa 100644 --- a/OvmfPkg/OvmfPkgIa32X64.dsc +++ b/OvmfPkg/OvmfPkgIa32X64.dsc @@ -164,6 +164,7 @@ [LibraryClasses] UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVar= iablesLib.inf QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxeLib.inf + QemuFwCfgSimpleParserLib|OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFw= CfgSimpleParserLib.inf VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf LoadLinuxLib|OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.inf MemEncryptSevLib|OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevL= ib.inf diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index ac510522a9ff..3d24cc4c1cfb 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -164,6 +164,7 @@ [LibraryClasses] UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVar= iablesLib.inf QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxeLib.inf + QemuFwCfgSimpleParserLib|OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFw= CfgSimpleParserLib.inf VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf LoadLinuxLib|OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.inf MemEncryptSevLib|OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevL= ib.inf diff --git a/OvmfPkg/Include/Library/QemuFwCfgSimpleParserLib.h b/OvmfPkg/I= nclude/Library/QemuFwCfgSimpleParserLib.h new file mode 100644 index 000000000000..c6062bae8770 --- /dev/null +++ b/OvmfPkg/Include/Library/QemuFwCfgSimpleParserLib.h @@ -0,0 +1,128 @@ +/** @file + Parse the contents of named fw_cfg files as simple (scalar) data types. + + Copyright (C) 2020, Red Hat, Inc. + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef QEMU_FW_CFG_SIMPLE_PARSER_LIB_H_ +#define QEMU_FW_CFG_SIMPLE_PARSER_LIB_H_ + +#include + +/** + Look up FileName with QemuFwCfgFindFile() from QemuFwCfgLib. Read the fw= _cfg + file into a small array with automatic storage duration. Parse the array= as + the textual representation of a BOOLEAN. + + @param[in] FileName The name of the fw_cfg file to look up and parse. + + @param[out] Value On success, Value is TRUE if the contents of the fw= _cfg + file case-insensitively match "true", "yes", "y", + "enable", "enabled", "1". + + On success, Value is FALSE if the contents of the f= w_cfg + file case-insensitively match "false", "no", "n", + "disable", "disabled", "0". + + On failure, Value is not changed. + + @retval RETURN_SUCCESS Parsing successful. Value has been set. + + @retval RETURN_UNSUPPORTED Firmware configuration is unavailable. + + @retval RETURN_PROTOCOL_ERROR Parsing failed. Value has not been change= d. + + @return Error codes propagated from + QemuFwCfgFindFile(). Value has not been + changed. +**/ +RETURN_STATUS +EFIAPI +QemuFwCfgParseBool ( + IN CONST CHAR8 *FileName, + OUT BOOLEAN *Value + ); + +/** + Look up FileName with QemuFwCfgFindFile() from QemuFwCfgLib. Read the fw= _cfg + file into a small array with automatic storage duration. Parse the array= as + the textual representation of a UINT8. + + @param[in] FileName The name of the fw_cfg file to look up and parse. + + @param[in] ParseAsHex If TRUE, call BaseLib's AsciiStrHexToUint64S() for + parsing the fw_cfg file. + + If FALSE, call BaseLib's AsciiStrDecimalToUint64S= () + for parsing the fw_cfg file. + + @param[out] Value On success, Value has been parsed with the BaseLib + function determined by ParseAsHex, and also + range-checked for [0, MAX_UINT8]. + + On failure, Value is not changed. + + @retval RETURN_SUCCESS Parsing successful. Value has been set. + + @retval RETURN_UNSUPPORTED Firmware configuration is unavailable. + + @retval RETURN_PROTOCOL_ERROR Parsing failed. Value has not been change= d. + + @retval RETURN_PROTOCOL_ERROR Parsing succeeded, but the result does no= t fit + in the [0, MAX_UINT8] range. Value has not + been changed. + + @return Error codes propagated from + QemuFwCfgFindFile() and from the BaseLib + function selected by ParseAsHex. Value ha= s not + been changed. +**/ +RETURN_STATUS +EFIAPI +QemuFwCfgParseUint8 ( + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT8 *Value + ); + +// +// The following functions behave identically to QemuFwCfgParseUint8(), +// only their range checks use MAX_UINT16, MAX_UINT32, MAX_UINT64, MAX_UIN= TN, +// respectively. +// + +RETURN_STATUS +EFIAPI +QemuFwCfgParseUint16 ( + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT16 *Value + ); + +RETURN_STATUS +EFIAPI +QemuFwCfgParseUint32 ( + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT32 *Value + ); + +RETURN_STATUS +EFIAPI +QemuFwCfgParseUint64 ( + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT64 *Value + ); + +RETURN_STATUS +EFIAPI +QemuFwCfgParseUintn ( + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINTN *Value + ); + +#endif // QEMU_FW_CFG_SIMPLE_PARSER_LIB_H_ diff --git a/OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFwCfgSimpleParser= Lib.inf b/OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFwCfgSimpleParserLib= .inf new file mode 100644 index 000000000000..c0e6ab3a1303 --- /dev/null +++ b/OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFwCfgSimpleParserLib.inf @@ -0,0 +1,27 @@ +## @file +# Parse the contents of named fw_cfg files as simple (scalar) data types. +# +# Copyright (C) 2020, Red Hat, Inc. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION =3D 1.29 + BASE_NAME =3D QemuFwCfgSimpleParserLib + FILE_GUID =3D a9a1211d-061e-4b64-af30-5dd0cac9dc99 + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D QemuFwCfgSimpleParserLib + CONSTRUCTOR =3D QemuFwCfgSimpleParserInit + +[Sources] + QemuFwCfgSimpleParser.c + +[Packages] + MdePkg/MdePkg.dec + OvmfPkg/OvmfPkg.dec + +[LibraryClasses] + BaseLib + QemuFwCfgLib diff --git a/OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFwCfgSimpleParser= .c b/OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFwCfgSimpleParser.c new file mode 100644 index 000000000000..5ca22fcf0dee --- /dev/null +++ b/OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFwCfgSimpleParser.c @@ -0,0 +1,398 @@ +/** @file + Parse the contents of named fw_cfg files as simple (scalar) data types. + + Copyright (C) 2020, Red Hat, Inc. + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +#include +#include + +// +// Size of the longest valid UINT64 string, including the terminating NUL. +// +#define UINT64_STRING_MAX_SIZE \ + MAX (sizeof "18446744073709551615", sizeof "0xFFFFFFFFFFFFFFFF") + +// +// Size of the longest valid BOOL string (see the "mTrueString" and +// "mFalseString" arrays below), including the terminating NUL. +// +#define BOOL_STRING_MAX_SIZE (sizeof "disabled") + +// +// Length of "\r\n", not including the terminating NUL. +// +#define CRLF_LENGTH (sizeof "\r\n" - 1) + +// +// Words recognized as representing TRUE or FALSE. +// +STATIC CONST CHAR8 * CONST mTrueString[] =3D { + "true", "yes", "y", "enable", "enabled", "1" +}; +STATIC CONST CHAR8 * CONST mFalseString[] =3D { + "false", "no", "n", "disable", "disabled", "0" +}; + +// +// Helper functions. +// + +/** + Look up FileName with QemuFwCfgFindFile() from QemuFwCfgLib. Read the fw= _cfg + file into the caller-provided CHAR8 array. NUL-terminate the array. + + @param[in] FileName The name of the fw_cfg file to look up and re= ad. + + @param[in,out] BufferSize On input, number of bytes available in Buffer. + + On output, the number of bytes that have been + stored to Buffer. + + On error, BufferSize is indeterminate. + + @param[out] Buffer The buffer to read the fw_cfg file into. If t= he + fw_cfg file contents are not NUL-terminated, = then + a NUL character is placed into Buffer after t= he + fw_cfg file contents. + + On error, Buffer is indeterminate. + + @retval RETURN_SUCCESS Buffer has been populated with the fw_cfg= file + contents. Buffer is NUL-terminated regard= less + of whether the fw_cfg file itself was + NUL-terminated. + + @retval RETURN_UNSUPPORTED Firmware configuration is unavailable. + + @retval RETURN_PROTOCOL_ERROR The fw_cfg file does not fit into Buffer. + (This is considered a QEMU configuration + error; BufferSize is considered authorita= tive + for the contents of the fw_cfg file ident= ified + by FileName.) + + @retval RETURN_PROTOCOL_ERROR The fw_cfg file contents are not themselv= es + NUL-terminated, and an extra NUL byte doe= s not + fit into Buffer. (Again a QEMU configurat= ion + error.) + + @return Error codes propagated from + QemuFwCfgFindFile(). +**/ +STATIC +RETURN_STATUS +QemuFwCfgGetAsString ( + IN CONST CHAR8 *FileName, + IN OUT UINTN *BufferSize, + OUT CHAR8 *Buffer + ) +{ + RETURN_STATUS Status; + FIRMWARE_CONFIG_ITEM FwCfgItem; + UINTN FwCfgSize; + + if (!QemuFwCfgIsAvailable ()) { + return RETURN_UNSUPPORTED; + } + + Status =3D QemuFwCfgFindFile (FileName, &FwCfgItem, &FwCfgSize); + if (RETURN_ERROR (Status)) { + return Status; + } + if (FwCfgSize > *BufferSize) { + return RETURN_PROTOCOL_ERROR; + } + + QemuFwCfgSelectItem (FwCfgItem); + QemuFwCfgReadBytes (FwCfgSize, Buffer); + + // + // If Buffer is already NUL-terminated due to fw_cfg contents, we're don= e. + // + if (FwCfgSize > 0 && Buffer[FwCfgSize - 1] =3D=3D '\0') { + *BufferSize =3D FwCfgSize; + return RETURN_SUCCESS; + } + // + // Otherwise, append a NUL byte to Buffer (if we have room for it). + // + if (FwCfgSize =3D=3D *BufferSize) { + return RETURN_PROTOCOL_ERROR; + } + Buffer[FwCfgSize] =3D '\0'; + *BufferSize =3D FwCfgSize + 1; + return RETURN_SUCCESS; +} + +/** + Remove a trailing \r\n or \n sequence from a string. + + @param[in,out] BufferSize On input, the number of bytes in Buffer, incl= uding + the terminating NUL. + + On output, the adjusted string size (includin= g the + terminating NUL), after stripping the \r\n or= \n + suffix. + + @param[in,out] Buffer The NUL-terminated string to trim. +**/ +STATIC +VOID +StripNewline ( + IN OUT UINTN *BufferSize, + IN OUT CHAR8 *Buffer + ) +{ + UINTN InSize, OutSize; + + InSize =3D *BufferSize; + OutSize =3D InSize; + + if (InSize >=3D 3 && + Buffer[InSize - 3] =3D=3D '\r' && Buffer[InSize - 2] =3D=3D '\n') { + OutSize =3D InSize - 2; + } else if (InSize >=3D 2 && Buffer[InSize - 2] =3D=3D '\n') { + OutSize =3D InSize - 1; + } + + if (OutSize < InSize) { + Buffer[OutSize - 1] =3D '\0'; + *BufferSize =3D OutSize; + } +} + +/** + Read the fw_cfg file identified by FileName as a string into a small arr= ay + with automatic storage duration, using QemuFwCfgGetAsString(). Parse the + string as a UINT64. Perform a range-check on the parsed value. + + @param[in] FileName The name of the fw_cfg file to look up and parse. + + @param[in] ParseAsHex If TRUE, call BaseLib's AsciiStrHexToUint64S() for + parsing the fw_cfg file. + + If FALSE, call BaseLib's AsciiStrDecimalToUint64S= () + for parsing the fw_cfg file. + + @param[in] Limit The inclusive upper bound on the parsed UINT64 va= lue. + + @param[out] Value On success, Value has been parsed with the BaseLib + function determined by ParseAsHex, and has been + range-checked against [0, Limit]. + + On failure, Value is not changed. + + @retval RETURN_SUCCESS Parsing successful. Value has been set. + + @retval RETURN_UNSUPPORTED Firmware configuration is unavailable. + + @retval RETURN_PROTOCOL_ERROR Parsing failed. Value has not been change= d. + + @retval RETURN_PROTOCOL_ERROR Parsing succeeded, but the result does no= t fit + in the [0, Limit] range. Value has not be= en + changed. + + @return Error codes propagated from + QemuFwCfgFindFile() and from the BaseLib + function selected by ParseAsHex. Value ha= s not + been changed. +**/ +STATIC +RETURN_STATUS +QemuFwCfgParseUint64WithLimit ( + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + IN UINT64 Limit, + OUT UINT64 *Value + ) +{ + UINTN Uint64StringSize; + CHAR8 Uint64String[UINT64_STRING_MAX_SIZE + CRLF_LENGTH]; + RETURN_STATUS Status; + CHAR8 *EndPointer; + UINT64 Uint64; + + Uint64StringSize =3D sizeof Uint64String; + Status =3D QemuFwCfgGetAsString (FileName, &Uint64StringSize, Uint64Stri= ng); + if (RETURN_ERROR (Status)) { + return Status; + } + + StripNewline (&Uint64StringSize, Uint64String); + + if (ParseAsHex) { + Status =3D AsciiStrHexToUint64S (Uint64String, &EndPointer, &Uint64); + } else { + Status =3D AsciiStrDecimalToUint64S (Uint64String, &EndPointer, &Uint6= 4); + } + if (RETURN_ERROR (Status)) { + return Status; + } + + // + // Report a wire protocol error if the subject sequence is empty, or tra= iling + // garbage is present, or Limit is not honored. + // + if (EndPointer =3D=3D Uint64String || *EndPointer !=3D '\0' || Uint64 > = Limit) { + return RETURN_PROTOCOL_ERROR; + } + + *Value =3D Uint64; + return RETURN_SUCCESS; +} + +// +// Public functions. +// + +RETURN_STATUS +EFIAPI +QemuFwCfgSimpleParserInit ( + VOID + ) +{ + // + // Do nothing, just participate in constructor dependency ordering. + // + return RETURN_SUCCESS; +} + +RETURN_STATUS +EFIAPI +QemuFwCfgParseBool ( + IN CONST CHAR8 *FileName, + OUT BOOLEAN *Value + ) +{ + UINTN BoolStringSize; + CHAR8 BoolString[BOOL_STRING_MAX_SIZE + CRLF_LENGTH]; + RETURN_STATUS Status; + UINTN Idx; + + BoolStringSize =3D sizeof BoolString; + Status =3D QemuFwCfgGetAsString (FileName, &BoolStringSize, BoolString); + if (RETURN_ERROR (Status)) { + return Status; + } + + StripNewline (&BoolStringSize, BoolString); + + for (Idx =3D 0; Idx < ARRAY_SIZE (mTrueString); ++Idx) { + if (AsciiStriCmp (BoolString, mTrueString[Idx]) =3D=3D 0) { + *Value =3D TRUE; + return RETURN_SUCCESS; + } + } + + for (Idx =3D 0; Idx < ARRAY_SIZE (mFalseString); ++Idx) { + if (AsciiStriCmp (BoolString, mFalseString[Idx]) =3D=3D 0) { + *Value =3D FALSE; + return RETURN_SUCCESS; + } + } + + return RETURN_PROTOCOL_ERROR; +} + +RETURN_STATUS +EFIAPI +QemuFwCfgParseUint8 ( + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT8 *Value + ) +{ + RETURN_STATUS Status; + UINT64 Uint64; + + Status =3D QemuFwCfgParseUint64WithLimit (FileName, ParseAsHex, MAX_UINT= 8, + &Uint64); + if (RETURN_ERROR (Status)) { + return Status; + } + *Value =3D (UINT8)Uint64; + return RETURN_SUCCESS; +} + +RETURN_STATUS +EFIAPI +QemuFwCfgParseUint16 ( + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT16 *Value + ) +{ + RETURN_STATUS Status; + UINT64 Uint64; + + Status =3D QemuFwCfgParseUint64WithLimit (FileName, ParseAsHex, MAX_UINT= 16, + &Uint64); + if (RETURN_ERROR (Status)) { + return Status; + } + *Value =3D (UINT16)Uint64; + return RETURN_SUCCESS; +} + +RETURN_STATUS +EFIAPI +QemuFwCfgParseUint32 ( + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT32 *Value + ) +{ + RETURN_STATUS Status; + UINT64 Uint64; + + Status =3D QemuFwCfgParseUint64WithLimit (FileName, ParseAsHex, MAX_UINT= 32, + &Uint64); + if (RETURN_ERROR (Status)) { + return Status; + } + *Value =3D (UINT32)Uint64; + return RETURN_SUCCESS; +} + +RETURN_STATUS +EFIAPI +QemuFwCfgParseUint64 ( + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT64 *Value + ) +{ + RETURN_STATUS Status; + UINT64 Uint64; + + Status =3D QemuFwCfgParseUint64WithLimit (FileName, ParseAsHex, MAX_UINT= 64, + &Uint64); + if (RETURN_ERROR (Status)) { + return Status; + } + *Value =3D Uint64; + return RETURN_SUCCESS; +} + +RETURN_STATUS +EFIAPI +QemuFwCfgParseUintn ( + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINTN *Value + ) +{ + RETURN_STATUS Status; + UINT64 Uint64; + + Status =3D QemuFwCfgParseUint64WithLimit (FileName, ParseAsHex, MAX_UINT= N, + &Uint64); + if (RETURN_ERROR (Status)) { + return Status; + } + *Value =3D (UINTN)Uint64; + return RETURN_SUCCESS; +} --=20 2.19.1.3.g30247aa5d201 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#58032): https://edk2.groups.io/g/devel/message/58032 Mute This Topic: https://groups.io/mt/73236893/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sun May 19 15:29:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+58031+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58031+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1587714847; cv=none; d=zohomail.com; s=zohoarc; b=emrmmLm+FQIvd2U2QhBrEaTpOdCPF9dwdjgOv/6vtE69xfUSez78G3x6Dhx5qetQxqFwb4FJqn64Z9D2BuNwICXuH/jtWXqJY9q+xZtcBYs2q0hOYPe/EMiPE9YKSapOcJeaTaMQe6OnrEp0C+QRFiJEtXXEnCYCHp53KfFlkFo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587714847; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=+uzHfOHJ+2ADa/QmqJ5tneQBBWppvpUyw17Ay/Oit0A=; b=E0N4Bi3ejg6F1viZJRtgJs5SKsjm6SwMnoxVgCYng0AoDtNPzFYGkRruIxpf6ymxu8MsgscWHvWNMKrhs659NnGWo++VPtbkxY9/+GJmhdWQpO4loPQoHYwFOPSY2PIx2K+vKWPY4GFIfyGevMcMWaIV0KTGak9KV3ZxJIzh3Vw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58031+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1587714847399714.6908410593547; Fri, 24 Apr 2020 00:54:07 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id A5JAYY1788612xLMqVjjzz1P; Fri, 24 Apr 2020 00:54:07 -0700 X-Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.61]) by mx.groups.io with SMTP id smtpd.web11.1508.1587714846518585048 for ; Fri, 24 Apr 2020 00:54:06 -0700 X-Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-452-D0Q3kCy3OB-xemoGolhqNA-1; Fri, 24 Apr 2020 03:54:03 -0400 X-MC-Unique: D0Q3kCy3OB-xemoGolhqNA-1 X-Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D7B1E800FC7; Fri, 24 Apr 2020 07:54:02 +0000 (UTC) X-Received: from lacos-laptop-7.usersys.redhat.com (ovpn-113-159.ams2.redhat.com [10.36.113.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0E73310016DA; Fri, 24 Apr 2020 07:54:00 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , Jordan Justen , Per Sundstrom , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [edk2-devel] [PATCH 2/7] OvmfPkg/PlatformPei: parse "X-PciMmio64Mb" with QemuFwCfgSimpleParserLib Date: Fri, 24 Apr 2020 09:53:48 +0200 Message-Id: <20200424075353.8489-3-lersek@redhat.com> In-Reply-To: <20200424075353.8489-1-lersek@redhat.com> References: <20200424075353.8489-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lersek@redhat.com X-Gm-Message-State: 05T21MKcF89nUXSRccyWv1U6x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1587714847; bh=+uzHfOHJ+2ADa/QmqJ5tneQBBWppvpUyw17Ay/Oit0A=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=teIiAYpemkUHYWWsiHJPro9Ii/jHN8IDO+27SwopZmYrU9NVfnAm9xaY83AbHyM1KLS Z5V9OwmAtdoejApYPNuy7wGZdCubf5p5b79Yitz813vEaCAP1TKjX8gXBWuBs4hdKuuje OLsud8n3inCHpkjYd04lbbUX2Bi3j/yP2w4= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Replace the - QemuFwCfgFindFile(), - QemuFwCfgSelectItem(), - QemuFwCfgReadBytes(), - AsciiStrDecimalToUint64() sequence in the GetFirstNonAddress() function with a call to QemuFwCfgSimpleParserLib. This change is compatible with valid strings accepted previously. Cc: Ard Biesheuvel Cc: Jordan Justen Cc: Per Sundstrom Cc: Philippe Mathieu-Daud=C3=A9 Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2681 Signed-off-by: Laszlo Ersek Reviewed-by: Ard Biesheuvel Reviewed-by: Philippe Mathieu-Daude --- OvmfPkg/PlatformPei/PlatformPei.inf | 1 + OvmfPkg/PlatformPei/MemDetect.c | 36 ++++++++++++-------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/OvmfPkg/PlatformPei/PlatformPei.inf b/OvmfPkg/PlatformPei/Plat= formPei.inf index 19f2424981bc..e72ef7963d97 100644 --- a/OvmfPkg/PlatformPei/PlatformPei.inf +++ b/OvmfPkg/PlatformPei/PlatformPei.inf @@ -60,6 +60,7 @@ [LibraryClasses] PeimEntryPoint QemuFwCfgLib QemuFwCfgS3Lib + QemuFwCfgSimpleParserLib MtrrLib MemEncryptSevLib PcdLib diff --git a/OvmfPkg/PlatformPei/MemDetect.c b/OvmfPkg/PlatformPei/MemDetec= t.c index 47dc9c543719..f32df937f9ba 100644 --- a/OvmfPkg/PlatformPei/MemDetect.c +++ b/OvmfPkg/PlatformPei/MemDetect.c @@ -33,6 +33,7 @@ Module Name: #include #include #include +#include =20 #include "Platform.h" #include "Cmos.h" @@ -336,7 +337,7 @@ GetFirstNonAddress ( { UINT64 FirstNonAddress; UINT64 Pci64Base, Pci64Size; - CHAR8 MbString[7 + 1]; + UINT32 FwCfgPciMmio64Mb; EFI_STATUS Status; FIRMWARE_CONFIG_ITEM FwCfgItem; UINTN FwCfgSize; @@ -379,25 +380,30 @@ GetFirstNonAddress ( =20 // // See if the user specified the number of megabytes for the 64-bit PCI = host - // aperture. The number of non-NUL characters in MbString allows for - // 9,999,999 MB, which is approximately 10 TB. + // aperture. Accept an aperture size up to 16TB. // // As signaled by the "X-" prefix, this knob is experimental, and might = go // away at any time. // - Status =3D QemuFwCfgFindFile ("opt/ovmf/X-PciMmio64Mb", &FwCfgItem, - &FwCfgSize); - if (!EFI_ERROR (Status)) { - if (FwCfgSize >=3D sizeof MbString) { - DEBUG ((EFI_D_WARN, - "%a: ignoring malformed 64-bit PCI host aperture size from fw_cfg\= n", - __FUNCTION__)); - } else { - QemuFwCfgSelectItem (FwCfgItem); - QemuFwCfgReadBytes (FwCfgSize, MbString); - MbString[FwCfgSize] =3D '\0'; - Pci64Size =3D LShiftU64 (AsciiStrDecimalToUint64 (MbString), 20); + Status =3D QemuFwCfgParseUint32 ("opt/ovmf/X-PciMmio64Mb", FALSE, + &FwCfgPciMmio64Mb); + switch (Status) { + case EFI_UNSUPPORTED: + case EFI_NOT_FOUND: + break; + case EFI_SUCCESS: + if (FwCfgPciMmio64Mb <=3D 0x1000000) { + Pci64Size =3D LShiftU64 (FwCfgPciMmio64Mb, 20); + break; } + // + // fall through + // + default: + DEBUG ((DEBUG_WARN, + "%a: ignoring malformed 64-bit PCI host aperture size from fw_cfg\n", + __FUNCTION__)); + break; } =20 if (Pci64Size =3D=3D 0) { --=20 2.19.1.3.g30247aa5d201 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#58031): https://edk2.groups.io/g/devel/message/58031 Mute This Topic: https://groups.io/mt/73236892/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sun May 19 15:29:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+58033+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58033+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1587714850; cv=none; d=zohomail.com; s=zohoarc; b=i8Q+M5dJB+H6bAt/j/qPSoCU5CSZAX3ygIYkX0Rc+sKs30UvnwiG6tLw/OKOJdCmn3FiH4h1byZAtAxtSOtLSscc3AChfLUULhPMyYAJzL66en1b68Ef9DLjCDINlPLKX0Tj5/woON4SNhLKdtgsbi6VJw9i/CnMf6FPmDwmSBo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587714850; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=cP5tle3WQ05kxBa3xtxwso+yctmAIu8bE5ILgmAwRGk=; b=TkdZsfPDM2CYdJmu8cf4jkL3lVEsXKwahdROO3K/yyCa0l5+4M5Dl7VD0gvf7PLV6PD++ckdL/zsAZaHYKRUiyxH5b3H5GIEPxs6U6mAv+1/qMOrYYKWMmuOt7pbsBDiB4PWnUNMq5qLGHPlaej0x5ursr5T0Dtl3N+am6Mco6k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58033+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1587714850838714.4805665068559; Fri, 24 Apr 2020 00:54:10 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id kI1pYY1788612xalb9AYIvDi; Fri, 24 Apr 2020 00:54:10 -0700 X-Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.61]) by mx.groups.io with SMTP id smtpd.web12.1578.1587714849929493747 for ; Fri, 24 Apr 2020 00:54:10 -0700 X-Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-182-rz-nZFmQOnWqDmRgu_cTOQ-1; Fri, 24 Apr 2020 03:54:05 -0400 X-MC-Unique: rz-nZFmQOnWqDmRgu_cTOQ-1 X-Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 76666800580; Fri, 24 Apr 2020 07:54:04 +0000 (UTC) X-Received: from lacos-laptop-7.usersys.redhat.com (ovpn-113-159.ams2.redhat.com [10.36.113.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id 34BE010016DA; Fri, 24 Apr 2020 07:54:03 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , Jordan Justen , Per Sundstrom , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [edk2-devel] [PATCH 3/7] OvmfPkg/PlatformPei: use QemuFwCfgParseBool in UPDATE_BOOLEAN_PCD_FROM_... Date: Fri, 24 Apr 2020 09:53:49 +0200 Message-Id: <20200424075353.8489-4-lersek@redhat.com> In-Reply-To: <20200424075353.8489-1-lersek@redhat.com> References: <20200424075353.8489-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lersek@redhat.com X-Gm-Message-State: ebSJQiRjENLElalLSy94jJuOx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1587714850; bh=cP5tle3WQ05kxBa3xtxwso+yctmAIu8bE5ILgmAwRGk=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=XdwC1IDR7pRUeioBI1ZmzeJo4FHaMcvv0q/oz8z8hnunk1vJDIfpmstFFrvo2OBwqD3 tUIdFpZ9AMzEfLzwAfg7sxIfMZJS4sM70EktRSdM4FUcvWFK6Z/ye8/Eb6/qTiPpWq2Gg ZBVEXviOFjv46jOU2oY10sYYTftJWTbqI6A= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" The UPDATE_BOOLEAN_PCD_FROM_FW_CFG() macro currently calls the module-private helper function GetNamedFwCfgBoolean(). Replace the latter with QemuFwCfgParseBool() from QemuFwCfgSimpleParserLib. This change is compatible with valid strings accepted previously. Cc: Ard Biesheuvel Cc: Jordan Justen Cc: Per Sundstrom Cc: Philippe Mathieu-Daud=C3=A9 Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2681 Signed-off-by: Laszlo Ersek Reviewed-by: Ard Biesheuvel Reviewed-by: Philippe Mathieu-Daude --- OvmfPkg/PlatformPei/Platform.c | 47 +------------------- 1 file changed, 2 insertions(+), 45 deletions(-) diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c index 088e616a980c..3b850c2c2626 100644 --- a/OvmfPkg/PlatformPei/Platform.c +++ b/OvmfPkg/PlatformPei/Platform.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -254,56 +255,12 @@ MemMapInitialization ( ASSERT_RETURN_ERROR (PcdStatus); } =20 -EFI_STATUS -GetNamedFwCfgBoolean ( - IN CHAR8 *FwCfgFileName, - OUT BOOLEAN *Setting - ) -{ - EFI_STATUS Status; - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; - UINT8 Value[3]; - - Status =3D QemuFwCfgFindFile (FwCfgFileName, &FwCfgItem, &FwCfgSize); - if (EFI_ERROR (Status)) { - return Status; - } - if (FwCfgSize > sizeof Value) { - return EFI_BAD_BUFFER_SIZE; - } - QemuFwCfgSelectItem (FwCfgItem); - QemuFwCfgReadBytes (FwCfgSize, Value); - - if ((FwCfgSize =3D=3D 1) || - (FwCfgSize =3D=3D 2 && Value[1] =3D=3D '\n') || - (FwCfgSize =3D=3D 3 && Value[1] =3D=3D '\r' && Value[2] =3D=3D '\n')= ) { - switch (Value[0]) { - case '0': - case 'n': - case 'N': - *Setting =3D FALSE; - return EFI_SUCCESS; - - case '1': - case 'y': - case 'Y': - *Setting =3D TRUE; - return EFI_SUCCESS; - - default: - break; - } - } - return EFI_PROTOCOL_ERROR; -} - #define UPDATE_BOOLEAN_PCD_FROM_FW_CFG(TokenName) \ do { \ BOOLEAN Setting; \ RETURN_STATUS PcdStatus; \ \ - if (!EFI_ERROR (GetNamedFwCfgBoolean ( \ + if (!RETURN_ERROR (QemuFwCfgParseBool ( \ "opt/ovmf/" #TokenName, &Setting))) { \ PcdStatus =3D PcdSetBoolS (TokenName, Setting); \ ASSERT_RETURN_ERROR (PcdStatus); \ --=20 2.19.1.3.g30247aa5d201 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#58033): https://edk2.groups.io/g/devel/message/58033 Mute This Topic: https://groups.io/mt/73236894/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sun May 19 15:29:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+58034+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58034+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1587714852; cv=none; d=zohomail.com; s=zohoarc; b=WA3b4loZkRtb1Z5OzdArGoHwM8plkKjTCgCdsKEYupRuNcjGHtzI2uHMIqVXDl7krvBEkFWLItKgiKZgHjwN5JeFCdbXLSEH09VLWimdbYFg3fjm9fLyHouade5hYqb+669sRY2y7bBsoLM8z5Q9UQoGGL7tllPKX2KBcp1koNU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587714852; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=a1lQvJdtRoVXaooqTD7e8NpHyfu40Xu57ylQzRi2WjQ=; b=nMDlfFH7dxXQrkR44ZvM0b2XRuH/nAHETotczutu+gRJSCfWe3x/l8tl5kxr+2OYVKH2maEQTlWoYe5MnpNq2kJe9z0Y0sVH+zQOadT1OjCo3+ObBlV7KT+JltzQ5sEJp0lPij3gu4dr8eWj7Ye/2zAgQicpa6lNN05F1hJFPAE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58034+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1587714852782213.706166943914; Fri, 24 Apr 2020 00:54:12 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id wmjsYY1788612xNveLa4NruF; Fri, 24 Apr 2020 00:54:12 -0700 X-Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.120]) by mx.groups.io with SMTP id smtpd.web11.1510.1587714851952318317 for ; Fri, 24 Apr 2020 00:54:12 -0700 X-Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-393-dA4VGMo9MWejw38nM8S9MA-1; Fri, 24 Apr 2020 03:54:07 -0400 X-MC-Unique: dA4VGMo9MWejw38nM8S9MA-1 X-Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 1497F835B41; Fri, 24 Apr 2020 07:54:06 +0000 (UTC) X-Received: from lacos-laptop-7.usersys.redhat.com (ovpn-113-159.ams2.redhat.com [10.36.113.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id C5EBC10016DA; Fri, 24 Apr 2020 07:54:04 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , Jordan Justen , Per Sundstrom , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [edk2-devel] [PATCH 4/7] OvmfPkg/QemuFwCfgDxeLib: allow UEFI_DRIVER modules Date: Fri, 24 Apr 2020 09:53:50 +0200 Message-Id: <20200424075353.8489-5-lersek@redhat.com> In-Reply-To: <20200424075353.8489-1-lersek@redhat.com> References: <20200424075353.8489-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lersek@redhat.com X-Gm-Message-State: dAziccvtVqnqoX3fZ7b25lPGx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1587714852; bh=a1lQvJdtRoVXaooqTD7e8NpHyfu40Xu57ylQzRi2WjQ=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=f92Cqfw7L75SSt6wWq8Go+zxFLVhNZbYrJQwugiA7cRfFTw06covdtnVN/6lk2xa+Lf BY0HuQaVVNjeU3ClybRiTN29e/wSFQBfRrSM30Vp9yuaLRYKqXmT5hdUk0OSzJoC61JFm /YXo/HZOG2atSlKtc7RHAnQSHomcBcIPWdg= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" We don't distribute UEFI_DRIVER modules stand-alone that were built as part of an OVMF platform. OVMF's UEFI_DRIVERs are allowed to inherit platform dependencies. By enabling UEFI_DRIVERs to consume QemuFwCfgDxeLib, we can hook fw_cfg-based NULL class libraries into UEFI drivers, e.g. in order to set dynamic PCDs. Cc: Ard Biesheuvel Cc: Jordan Justen Cc: Per Sundstrom Cc: Philippe Mathieu-Daud=C3=A9 Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2681 Signed-off-by: Laszlo Ersek Reviewed-by: Ard Biesheuvel Reviewed-by: Philippe Mathieu-Daude --- OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxeLib.inf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxeLib.inf b/OvmfPkg/Lib= rary/QemuFwCfgLib/QemuFwCfgDxeLib.inf index c331c5e7220a..48899ff1236a 100644 --- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxeLib.inf +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxeLib.inf @@ -16,7 +16,7 @@ [Defines] FILE_GUID =3D 80474090-55e7-4c28-b25c-9f236ba41f28 MODULE_TYPE =3D BASE VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D QemuFwCfgLib|DXE_DRIVER DXE_RUNTIME_D= RIVER DXE_SMM_DRIVER + LIBRARY_CLASS =3D QemuFwCfgLib|DXE_DRIVER DXE_RUNTIME_D= RIVER DXE_SMM_DRIVER UEFI_DRIVER =20 CONSTRUCTOR =3D QemuFwCfgInitialize =20 --=20 2.19.1.3.g30247aa5d201 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#58034): https://edk2.groups.io/g/devel/message/58034 Mute This Topic: https://groups.io/mt/73236895/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sun May 19 15:29:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+58035+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58035+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1587714854; cv=none; d=zohomail.com; s=zohoarc; b=KVKizmz8lzAUlh1sXMktH1oA0WgnWLdfXje8x4StX//wd75DC6k20Vyn/zwt2N/OOEi+J1DGBfMCyA7KgLCbMxfXR8+5xHXlznm1AR7dgmZIFgcm09QRdFFbXVO02XQidvSgnEr3LFtLWctlZovoLt5TL2SbIgph1gAjBTR0TbA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587714854; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=Ci/ccWSPzF5NtO7HFLiUKcU4jsaa746t/UdYurYLIeg=; b=KGXE0pNd80sJcBONWIP0U1CqS4DS+ZSY9r0skUUAOLhLl6uA3EVDQhgOwOM1MhG7vWmp5/Uf6S2UuCaHyMPGXHCKsO04OcANlJByp4xscJVJZg5icmEIbYPRe61J6uBnxEKWeM321S3a0lNVLtHzfQEHruejd7IkyP1WYq9+xmM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58035+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1587714854330241.49910724704694; Fri, 24 Apr 2020 00:54:14 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id dw8YYY1788612xH4FDdeOaOP; Fri, 24 Apr 2020 00:54:13 -0700 X-Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.120]) by mx.groups.io with SMTP id smtpd.web11.1512.1587714853394250195 for ; Fri, 24 Apr 2020 00:54:13 -0700 X-Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-453-spe3ZDuWOJ-q4QuOHey2ug-1; Fri, 24 Apr 2020 03:54:08 -0400 X-MC-Unique: spe3ZDuWOJ-q4QuOHey2ug-1 X-Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id A72E6107BEF5; Fri, 24 Apr 2020 07:54:07 +0000 (UTC) X-Received: from lacos-laptop-7.usersys.redhat.com (ovpn-113-159.ams2.redhat.com [10.36.113.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id 66ABC100238A; Fri, 24 Apr 2020 07:54:06 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , Jordan Justen , Per Sundstrom , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [edk2-devel] [PATCH 5/7] OvmfPkg: control PXEv4 / PXEv6 boot support from the QEMU command line Date: Fri, 24 Apr 2020 09:53:51 +0200 Message-Id: <20200424075353.8489-6-lersek@redhat.com> In-Reply-To: <20200424075353.8489-1-lersek@redhat.com> References: <20200424075353.8489-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lersek@redhat.com X-Gm-Message-State: xx1gg9MpZhZGW9f4QtHWQhFJx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1587714853; bh=Ci/ccWSPzF5NtO7HFLiUKcU4jsaa746t/UdYurYLIeg=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=ri4rmeS1Hga3SWG43+U+AJlfg4/ubnDk/5aGht1o12Fs/fHsi3BU+pCfld0DAl/aDcQ WMqbGWsNStmA8rPeufcNHeObGM2Yf9OXdtt67genVFGkvChIcxT7UI6Z2m4B25aT60cHc YsTLXrqnqgnCVNaqg5AXioCo49eCW2QAOSU= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Add a minimal, NULL class library called "PxeBcPcdProducerLib" for setting the "PcdIPv4PXESupport" and "PcdIPv6PXESupport" PCDs of NetworkPkg, from fw_cfg. These PCDs control whether the UefiPxeBcDxe driver supports PXEv4 / PXEv6 boot. If a PXE version is disabled, the corresponding LoadFile protocol instance is not produced by UefiPxeBcDxe, and so EfiBootManagerRefreshAllBootOption() in UefiBootManagerLib does not generate corresponding *new* boot options either. (Existent boot options are not deleted.) Hook the library into the UefiPxeBcDxe driver. (The driver is already included from "NetworkComponents.dsc.inc", but we can list it again in the DSC file, for providing overrides.) In OVMF, the PCDs could be set in PlatformPei too, but ArmVirtQemu does not have fw_cfg access in the PEI phase. Hence a NULL class library that can be linked into UefiPxeBcDxe. When listing the PCDs under [PcdsDynamicDefault], stick with the DEC default values. QEMU switches: -fw_cfg name=3Dopt/org.tianocore/IPv4PXESupport,string=3D[yn] -fw_cfg name=3Dopt/org.tianocore/IPv6PXESupport,string=3D[yn] The "opt/org.tianocore" prefix follows the "opt/RFQDN/" recommendation from QEMU's "docs/specs/fw_cfg.txt". Cc: Ard Biesheuvel Cc: Jordan Justen Cc: Per Sundstrom Cc: Philippe Mathieu-Daud=C3=A9 Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2681 Signed-off-by: Laszlo Ersek Reviewed-by: Ard Biesheuvel Reviewed-by: Philippe Mathieu-Daude --- OvmfPkg/OvmfPkgIa32.dsc | 9 +++++ OvmfPkg/OvmfPkgIa32X64.dsc | 10 +++++ OvmfPkg/OvmfPkgX64.dsc | 9 +++++ OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcdProducerLib.inf | 33 +++++++++= ++++++++ OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcd.c | 39 +++++++++= +++++++++++ 5 files changed, 100 insertions(+) diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index 5e2972063110..fcd9779b5ba2 100644 --- a/OvmfPkg/OvmfPkgIa32.dsc +++ b/OvmfPkg/OvmfPkgIa32.dsc @@ -605,6 +605,10 @@ [PcdsDynamicDefault] gEfiSecurityPkgTokenSpaceGuid.PcdTpmInstanceGuid|{0x00, 0x00, 0x00, 0x00= , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} !endif =20 + # IPv4 and IPv6 PXE Boot support. + gEfiNetworkPkgTokenSpaceGuid.PcdIPv4PXESupport|0x01 + gEfiNetworkPkgTokenSpaceGuid.PcdIPv6PXESupport|0x01 + [PcdsDynamicHii] !if $(TPM_ENABLE) =3D=3D TRUE && $(TPM_CONFIG_ENABLE) =3D=3D TRUE gEfiSecurityPkgTokenSpaceGuid.PcdTcgPhysicalPresenceInterfaceVer|L"TCG2_= VERSION"|gTcg2ConfigFormSetGuid|0x0|"1.3"|NV,BS @@ -822,6 +826,11 @@ [Components] # !include NetworkPkg/NetworkComponents.dsc.inc =20 + NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf { + + NULL|OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcdProducerLib.inf + } + !if $(NETWORK_TLS_ENABLE) =3D=3D TRUE NetworkPkg/TlsAuthConfigDxe/TlsAuthConfigDxe.inf { diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index 18e6909a33fa..1626d2415a2c 100644 --- a/OvmfPkg/OvmfPkgIa32X64.dsc +++ b/OvmfPkg/OvmfPkgIa32X64.dsc @@ -616,6 +616,11 @@ [PcdsDynamicDefault] gEfiSecurityPkgTokenSpaceGuid.PcdTpmInstanceGuid|{0x00, 0x00, 0x00, 0x00= , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} !endif =20 +[PcdsDynamicDefault.X64] + # IPv4 and IPv6 PXE Boot support. + gEfiNetworkPkgTokenSpaceGuid.PcdIPv4PXESupport|0x01 + gEfiNetworkPkgTokenSpaceGuid.PcdIPv6PXESupport|0x01 + [PcdsDynamicHii] !if $(TPM_ENABLE) =3D=3D TRUE && $(TPM_CONFIG_ENABLE) =3D=3D TRUE gEfiSecurityPkgTokenSpaceGuid.PcdTcgPhysicalPresenceInterfaceVer|L"TCG2_= VERSION"|gTcg2ConfigFormSetGuid|0x0|"1.3"|NV,BS @@ -834,6 +839,11 @@ [Components.X64] # !include NetworkPkg/NetworkComponents.dsc.inc =20 + NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf { + + NULL|OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcdProducerLib.inf + } + !if $(NETWORK_TLS_ENABLE) =3D=3D TRUE NetworkPkg/TlsAuthConfigDxe/TlsAuthConfigDxe.inf { diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index 3d24cc4c1cfb..65cfe957761b 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -615,6 +615,10 @@ [PcdsDynamicDefault] gEfiSecurityPkgTokenSpaceGuid.PcdTpmInstanceGuid|{0x00, 0x00, 0x00, 0x00= , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} !endif =20 + # IPv4 and IPv6 PXE Boot support. + gEfiNetworkPkgTokenSpaceGuid.PcdIPv4PXESupport|0x01 + gEfiNetworkPkgTokenSpaceGuid.PcdIPv6PXESupport|0x01 + [PcdsDynamicHii] !if $(TPM_ENABLE) =3D=3D TRUE && $(TPM_CONFIG_ENABLE) =3D=3D TRUE gEfiSecurityPkgTokenSpaceGuid.PcdTcgPhysicalPresenceInterfaceVer|L"TCG2_= VERSION"|gTcg2ConfigFormSetGuid|0x0|"1.3"|NV,BS @@ -832,6 +836,11 @@ [Components] # !include NetworkPkg/NetworkComponents.dsc.inc =20 + NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf { + + NULL|OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcdProducerLib.inf + } + !if $(NETWORK_TLS_ENABLE) =3D=3D TRUE NetworkPkg/TlsAuthConfigDxe/TlsAuthConfigDxe.inf { diff --git a/OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcdProducerLib.inf b/= OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcdProducerLib.inf new file mode 100644 index 000000000000..948133228111 --- /dev/null +++ b/OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcdProducerLib.inf @@ -0,0 +1,33 @@ +## @file +# Configure some PCDs dynamically for +# "NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf", from QEMU's fw_cfg. +# +# Copyright (C) 2020, Red Hat, Inc. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION =3D 1.29 + BASE_NAME =3D PxeBcPcdProducerLib + FILE_GUID =3D 1da2723f-52df-432a-8d03-6e8fa8acc107 + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D NULL + CONSTRUCTOR =3D SetPxeBcPcds + +[Sources] + PxeBcPcd.c + +[Packages] + MdePkg/MdePkg.dec + NetworkPkg/NetworkPkg.dec + OvmfPkg/OvmfPkg.dec + +[LibraryClasses] + PcdLib + QemuFwCfgSimpleParserLib + +[Pcd] + gEfiNetworkPkgTokenSpaceGuid.PcdIPv4PXESupport ## SOMETIMES_PRODUC= ES + gEfiNetworkPkgTokenSpaceGuid.PcdIPv6PXESupport ## SOMETIMES_PRODUC= ES diff --git a/OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcd.c b/OvmfPkg/Libra= ry/PxeBcPcdProducerLib/PxeBcPcd.c new file mode 100644 index 000000000000..7ce236326fb4 --- /dev/null +++ b/OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcd.c @@ -0,0 +1,39 @@ +/** @file + Configure some PCDs dynamically for + "NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf", from QEMU's fw_cfg. + + Copyright (C) 2020, Red Hat, Inc. + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +#include + +RETURN_STATUS +EFIAPI +SetPxeBcPcds ( + VOID + ) +{ + BOOLEAN FwCfgBool; + RETURN_STATUS PcdStatus; + + if (!RETURN_ERROR (QemuFwCfgParseBool ("opt/org.tianocore/IPv4PXESupport= ", + &FwCfgBool))) { + PcdStatus =3D PcdSet8S (PcdIPv4PXESupport, FwCfgBool); + if (RETURN_ERROR (PcdStatus)) { + return PcdStatus; + } + } + + if (!RETURN_ERROR (QemuFwCfgParseBool ("opt/org.tianocore/IPv6PXESupport= ", + &FwCfgBool))) { + PcdStatus =3D PcdSet8S (PcdIPv6PXESupport, FwCfgBool); + if (RETURN_ERROR (PcdStatus)) { + return PcdStatus; + } + } + + return RETURN_SUCCESS; +} --=20 2.19.1.3.g30247aa5d201 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#58035): https://edk2.groups.io/g/devel/message/58035 Mute This Topic: https://groups.io/mt/73236896/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sun May 19 15:29:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+58036+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58036+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1587714855; cv=none; d=zohomail.com; s=zohoarc; b=MgB41rEMxz2WaG6aWUKxiGuwiZYw/wt5XbNHL5i2Ul4e2WaCEOd5+OcrnucMfqZJ7A+fQH5JZuyA2qJOnJkyWf7hPtkcjrThTYgNJg/Yr630tBN5dQ2bDlx8BUfrABEmuW5Kn8y0sPUBmcHVIzVcSsRaWXY/DpmWWD+/afx/vrc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587714855; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=w49JoBbvghvLOKnEGE9TDNcIbVgOG5rbRC8pWbsfVcI=; b=BDcBuovgMYL1a2nuaLwhbPqhcj/vvBLAJ2B0/AOyuusHfzS+rqyEEOvI5TsAGqqrRG2UihGm+Vx4oBGuY9juhOkiESanZfal4Vx+G82pMnA+bnLtJU93SWm1L4OzkoG+k84dlCZ63Tv6b8XkTdHGmRlFmXf0eimVEDfUrNAP8sc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58036+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1587714855864631.2310712740087; Fri, 24 Apr 2020 00:54:15 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id DntvYY1788612xPup0QbuTRO; Fri, 24 Apr 2020 00:54:15 -0700 X-Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.61]) by mx.groups.io with SMTP id smtpd.web12.1580.1587714854834369003 for ; Fri, 24 Apr 2020 00:54:15 -0700 X-Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-342-BBQofEviN2ynEYw_50EdOw-1; Fri, 24 Apr 2020 03:54:10 -0400 X-MC-Unique: BBQofEviN2ynEYw_50EdOw-1 X-Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 4C751107ACCA; Fri, 24 Apr 2020 07:54:09 +0000 (UTC) X-Received: from lacos-laptop-7.usersys.redhat.com (ovpn-113-159.ams2.redhat.com [10.36.113.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id 067EC1002389; Fri, 24 Apr 2020 07:54:07 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , Leif Lindholm , Per Sundstrom , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [edk2-devel] [PATCH 6/7] ArmVirtPkg/QemuFwCfgLib: allow UEFI_DRIVER modules Date: Fri, 24 Apr 2020 09:53:52 +0200 Message-Id: <20200424075353.8489-7-lersek@redhat.com> In-Reply-To: <20200424075353.8489-1-lersek@redhat.com> References: <20200424075353.8489-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lersek@redhat.com X-Gm-Message-State: dg3DbrBQ2aiLNApOmx6gADsmx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1587714855; bh=w49JoBbvghvLOKnEGE9TDNcIbVgOG5rbRC8pWbsfVcI=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=RfX7cG/0mt9rqEzXdLKlYT71i2x+cp3ucSad3WACQuHqzpZcppjn1I6EB8zX3dA3Hjz 1Lp04O18OUHawOs/eteP8kKY1T2bbPIdgS6vz3swwJdajn4WGjCwN8P0vl+De8HMGz5o8 cor/OPQloYaUyM5XXN1PmwuOS9rnjFe4Eb4= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" We don't distribute UEFI_DRIVER modules stand-alone that were built as part of an ArmVirtQemu* platform. ArmVirtQemu* UEFI_DRIVERs are allowed to inherit platform dependencies. By enabling UEFI_DRIVERs to consume QemuFwCfgLib, we can hook fw_cfg-based NULL class libraries into UEFI drivers, e.g. in order to set dynamic PCDs. Cc: Ard Biesheuvel Cc: Leif Lindholm Cc: Per Sundstrom Cc: Philippe Mathieu-Daud=C3=A9 Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2681 Signed-off-by: Laszlo Ersek Reviewed-by: Ard Biesheuvel Reviewed-by: Philippe Mathieu-Daude --- ArmVirtPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ArmVirtPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf b/ArmVirtPkg/= Library/QemuFwCfgLib/QemuFwCfgLib.inf index 4d27d7d30bd3..feceed5f9341 100644 --- a/ArmVirtPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf +++ b/ArmVirtPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf @@ -15,7 +15,7 @@ [Defines] FILE_GUID =3D B271F41F-B841-48A9-BA8D-545B4BC2E2BF MODULE_TYPE =3D BASE VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D QemuFwCfgLib|DXE_DRIVER + LIBRARY_CLASS =3D QemuFwCfgLib|DXE_DRIVER UEFI_DRIVER =20 CONSTRUCTOR =3D QemuFwCfgInitialize =20 --=20 2.19.1.3.g30247aa5d201 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#58036): https://edk2.groups.io/g/devel/message/58036 Mute This Topic: https://groups.io/mt/73236897/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sun May 19 15:29:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+58037+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58037+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1587714855; cv=none; d=zohomail.com; s=zohoarc; b=lHY9PHNnzailLJdE0xsnIDIqaioxNdxoacefCnjuNjXGXRkPI16++DHNuFD4D6xBqR0/YQC/wn1h1Qlxu+owKgpfyMUVsTevW0YntP6acJulFwFXlGI5C6J2hhhAoc9/MEGwhyKyrowDQm9E2cI98ujsz+lJwBVoBnEVtFx1sIs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587714855; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=HlZVsNlWhu581GpeiDZcCF4DxHLT4N46vPRlSW+67AI=; b=fdcz6yYJzm6TJZOp1ODcVVPbym69bVjYMn2aaxzV4mlJuUBab1Vo8aCetzA1G4FEkp7nGwQP5w7lOqwpAtSwnmQYsXOUsuPuUdld68UiK3v48t/ZGVreoNq71BCT6G7/6OoxwYE8LYlsYhvF38qm8gEyV3Cn4e8KR4/Fx/gTL3E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58037+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1587714855906118.84897990671072; Fri, 24 Apr 2020 00:54:15 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 0gQbYY1788612xrJbKZDnWcm; Fri, 24 Apr 2020 00:54:15 -0700 X-Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.120]) by mx.groups.io with SMTP id smtpd.web11.1513.1587714854989528747 for ; Fri, 24 Apr 2020 00:54:15 -0700 X-Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-140-wgBYU88HMWCG6W1IcHVVOw-1; Fri, 24 Apr 2020 03:54:12 -0400 X-MC-Unique: wgBYU88HMWCG6W1IcHVVOw-1 X-Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DF0C3835B42; Fri, 24 Apr 2020 07:54:10 +0000 (UTC) X-Received: from lacos-laptop-7.usersys.redhat.com (ovpn-113-159.ams2.redhat.com [10.36.113.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9DB501002389; Fri, 24 Apr 2020 07:54:09 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , Leif Lindholm , Per Sundstrom , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [edk2-devel] [PATCH 7/7] ArmVirtPkg: control PXEv4 / PXEv6 boot support from the QEMU command line Date: Fri, 24 Apr 2020 09:53:53 +0200 Message-Id: <20200424075353.8489-8-lersek@redhat.com> In-Reply-To: <20200424075353.8489-1-lersek@redhat.com> References: <20200424075353.8489-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lersek@redhat.com X-Gm-Message-State: kconM4DDgHEJVYG6aaEZvAkex1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1587714855; bh=HlZVsNlWhu581GpeiDZcCF4DxHLT4N46vPRlSW+67AI=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=myFeh9/Vpw9EP5y4Mlrhff0uMJokcMXfevyyqUvlbxS2IB1AxBRs0d4573S4p6+khqz tlRmuSG2EyszDGWbi9ZagcbZyo+Q9oO1vTg9AGVGpkoNyegdyCuVKSjTXytxKj+7YJlCR v6BfUrKOhx0RCqmNIko8u9AwviW2Yhk1iJo= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Port the DSC file changes from the similarly titled OvmfPkg patch in this series to ArmVirtPkg. Cc: Ard Biesheuvel Cc: Leif Lindholm Cc: Per Sundstrom Cc: Philippe Mathieu-Daud=C3=A9 Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2681 Signed-off-by: Laszlo Ersek Reviewed-by: Ard Biesheuvel Reviewed-by: Philippe Mathieu-Daude --- ArmVirtPkg/ArmVirtQemu.dsc | 13 +++++++++++++ ArmVirtPkg/ArmVirtQemuKernel.dsc | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc index 1233f1ece484..3f649c91d8d6 100644 --- a/ArmVirtPkg/ArmVirtQemu.dsc +++ b/ArmVirtPkg/ArmVirtQemu.dsc @@ -58,6 +58,7 @@ [LibraryClasses.common] VirtioMmioDeviceLib|OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice= Lib.inf QemuFwCfgLib|ArmVirtPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/BaseQemuFwCfgS3LibNull.inf + QemuFwCfgSimpleParserLib|OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFw= CfgSimpleParserLib.inf QemuLoadImageLib|OvmfPkg/Library/GenericQemuLoadImageLib/GenericQemuLoad= ImageLib.inf =20 ArmPlatformLib|ArmPlatformPkg/Library/ArmPlatformLibNull/ArmPlatformLibN= ull.inf @@ -256,6 +257,12 @@ [PcdsDynamicDefault.common] gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosDocRev|0x0 gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated|FALSE =20 + # + # IPv4 and IPv6 PXE Boot support. + # + gEfiNetworkPkgTokenSpaceGuid.PcdIPv4PXESupport|0x01 + gEfiNetworkPkgTokenSpaceGuid.PcdIPv6PXESupport|0x01 + # # TPM2 support # @@ -430,6 +437,12 @@ [Components.common] # Networking stack # !include NetworkPkg/NetworkComponents.dsc.inc + + NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf { + + NULL|OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcdProducerLib.inf + } + !if $(NETWORK_TLS_ENABLE) =3D=3D TRUE NetworkPkg/TlsAuthConfigDxe/TlsAuthConfigDxe.inf { diff --git a/ArmVirtPkg/ArmVirtQemuKernel.dsc b/ArmVirtPkg/ArmVirtQemuKerne= l.dsc index 0af91f21b7b7..2a6fd6bc06be 100644 --- a/ArmVirtPkg/ArmVirtQemuKernel.dsc +++ b/ArmVirtPkg/ArmVirtQemuKernel.dsc @@ -56,6 +56,7 @@ [LibraryClasses.common] VirtioMmioDeviceLib|OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice= Lib.inf QemuFwCfgLib|ArmVirtPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/BaseQemuFwCfgS3LibNull.inf + QemuFwCfgSimpleParserLib|OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFw= CfgSimpleParserLib.inf QemuLoadImageLib|OvmfPkg/Library/GenericQemuLoadImageLib/GenericQemuLoad= ImageLib.inf =20 ArmVirtMemInfoLib|ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoL= ib.inf @@ -239,6 +240,12 @@ [PcdsDynamicDefault.common] gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosDocRev|0x0 gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated|FALSE =20 + # + # IPv4 and IPv6 PXE Boot support. + # + gEfiNetworkPkgTokenSpaceGuid.PcdIPv4PXESupport|0x01 + gEfiNetworkPkgTokenSpaceGuid.PcdIPv6PXESupport|0x01 + ##########################################################################= ###### # # Components Section - list of all EDK II Modules needed by this Platform @@ -369,6 +376,12 @@ [Components.common] # Networking stack # !include NetworkPkg/NetworkComponents.dsc.inc + + NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf { + + NULL|OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcdProducerLib.inf + } + !if $(NETWORK_TLS_ENABLE) =3D=3D TRUE NetworkPkg/TlsAuthConfigDxe/TlsAuthConfigDxe.inf { --=20 2.19.1.3.g30247aa5d201 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#58037): https://edk2.groups.io/g/devel/message/58037 Mute This Topic: https://groups.io/mt/73236898/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-