From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.120]) by mx.groups.io with SMTP id smtpd.web12.6511.1588077968318802216 for ; Tue, 28 Apr 2020 05:46:08 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Y+PF/kJO; spf=pass (domain: redhat.com, ip: 205.139.110.120, mailfrom: philmd@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1588077967; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NSv+ps8VPNYMPfr6TH15c7x2RjIrRJhvRJ6qqxaGToY=; b=Y+PF/kJOf5YMs63dRvvO4rzQZqyScQ0sc633s4p7bvWEqgUYrj3sjsuwDJWohemDtCdR/1 0QGZ9xkSDct9ciHsad+zxVtoY4DRDfu2kyaBslszvfF925c2ZskKel3DiCFiU1ZXn2Wx1f cOQUFFw9aQSdlP7+2ZfvfJBOCHJYnys= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-452-NOJMzGnbMqykbsBld3b0Nw-1; Tue, 28 Apr 2020 08:46:01 -0400 X-MC-Unique: NOJMzGnbMqykbsBld3b0Nw-1 Received: by mail-wr1-f69.google.com with SMTP id 11so12266421wrc.3 for ; Tue, 28 Apr 2020 05:46:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=RvWSj8Ss8E8b+xQvmkVzu4RbEf/g3FwaPmkbTWLoNOw=; b=gEXE56siN9fp9nqJOLORkKKRAVEihy9yVsXMYaYCrh7T9sWzh59/Q3URY7Tf09aU8Q Ixvf3YxS42pdM+n/qnVAXO/XtxNgQtAKXH7VQqGLCiGCnPaGEFehSFdzV6UHWI7wmzs1 g+8R4+M07wR+obeDJWkERYYo8csxUXt1yj25e49hL7J35tyl5JAXnzaUvXPPqxjEFnNG +UMzS7IDTy24y7mEinooiwlSeO4uP4TlHdVSpvUSkwFw8kBkpsbYTLlcxvuu14UZow2X cyR3/hVIbMC5Z/xSKJLIKeEgxGnuLqfbqHhq7b19GkioBbOCvWsLjyzVIOO+xNfqdWZF Pb6g== X-Gm-Message-State: AGi0PuYNN3l6OyE6SYUe4ckc6O249ilJo0slQ0CLB7Rosk2UXIWRqvPs IsnGULhHnAFNim/GHhDbVLxzMUpIIWikWWVD4cAdbERyUqjKL+3RAeVEsS2xJeLfHF6Ts+9yXRD HO4q3xm+4mdHMhA== X-Received: by 2002:a1c:c2d4:: with SMTP id s203mr4787427wmf.128.1588077959910; Tue, 28 Apr 2020 05:45:59 -0700 (PDT) X-Google-Smtp-Source: APiQypIyk5D12tQwnaKbyH0HODBWF7gKj7iF8mQgxeIZTqRBqXw6E92+H//85YCUCCz4LDmilcBMkw== X-Received: by 2002:a1c:c2d4:: with SMTP id s203mr4787403wmf.128.1588077959611; Tue, 28 Apr 2020 05:45:59 -0700 (PDT) Return-Path: Received: from [192.168.1.39] (137.red-88-21-205.staticip.rima-tde.net. [88.21.205.137]) by smtp.gmail.com with ESMTPSA id b191sm3499037wmd.39.2020.04.28.05.45.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 28 Apr 2020 05:45:58 -0700 (PDT) Subject: Re: [PATCH 5/7] OvmfPkg: control PXEv4 / PXEv6 boot support from the QEMU command line To: Laszlo Ersek , edk2-devel-groups-io Cc: Ard Biesheuvel , Jordan Justen , Per Sundstrom References: <20200424075353.8489-1-lersek@redhat.com> <20200424075353.8489-6-lersek@redhat.com> From: =?UTF-8?B?UGhpbGlwcGUgTWF0aGlldS1EYXVkw6k=?= Message-ID: Date: Tue, 28 Apr 2020 14:45:57 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 In-Reply-To: <20200424075353.8489-6-lersek@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable On 4/24/20 9:53 AM, Laszlo Ersek wrote: > Add a minimal, NULL class library called "PxeBcPcdProducerLib" for settin= g > the "PcdIPv4PXESupport" and "PcdIPv6PXESupport" PCDs of NetworkPkg, from > fw_cfg. >=20 > 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.) >=20 > Hook the library into the UefiPxeBcDxe driver. (The driver is already > included from "NetworkComponents.dsc.inc", but we can list it again in th= e > DSC file, for providing overrides.) >=20 > 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. >=20 > When listing the PCDs under [PcdsDynamicDefault], stick with the DEC > default values. >=20 > QEMU switches: >=20 > -fw_cfg name=3Dopt/org.tianocore/IPv4PXESupport,string=3D[yn] >=20 > -fw_cfg name=3Dopt/org.tianocore/IPv6PXESupport,string=3D[yn] >=20 > The "opt/org.tianocore" prefix follows the "opt/RFQDN/" recommendation > from QEMU's "docs/specs/fw_cfg.txt". >=20 > 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 > --- > 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(+) >=20 > 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, 0= x00, 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"TC= G2_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, 0= x00, 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"TC= G2_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, 0= x00, 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"TC= G2_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-6e8fa8acc10= 7 > + 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_PROD= UCES > + gEfiNetworkPkgTokenSpaceGuid.PcdIPv6PXESupport ## SOMETIMES_PROD= UCES > diff --git a/OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcd.c b/OvmfPkg/Lib= rary/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/IPv4PXESuppo= rt", > + &FwCfgBool))) { > + PcdStatus =3D PcdSet8S (PcdIPv4PXESupport, FwCfgBool); OK this is the 'current' interface, and NetworkPkg/UefiPxeBcDxe still=20 uses the deprecated one 'PcdGet8()'. Reviewed-by: Philippe Mathieu-Daude > + if (RETURN_ERROR (PcdStatus)) { > + return PcdStatus; > + } > + } > + > + if (!RETURN_ERROR (QemuFwCfgParseBool ("opt/org.tianocore/IPv6PXESuppo= rt", > + &FwCfgBool))) { > + PcdStatus =3D PcdSet8S (PcdIPv6PXESupport, FwCfgBool); > + if (RETURN_ERROR (PcdStatus)) { > + return PcdStatus; > + } > + } > + > + return RETURN_SUCCESS; > +} >=20