From nobody Thu May 2 03:23:53 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+104092+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104092+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1683263856; cv=none; d=zohomail.com; s=zohoarc; b=JD37ZG8mf5/zZVUquuN7jmzcfPebZOMyoEvKMIgYjHYpjshFMsPhix9khbpu4mKrtCwYpWhyzRGcUonoEHNKGOggaXgoy3E2FYNXE1qfRWn40E6NlnvDCNILbTu32HQEFv9LuB9SSxGp7oUPNe6kIRtwjQ0q4HngULNeEW14B+0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683263856; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=Aa+roeb/EgYMHkhm/EAce1enYJ6MshY9qWNo4XjHme8=; b=esM7pCnhHCAqv7QY+FpPsLLlel1pcLaSIbgqDgQNb/BxkEcDv8NkvA/Tm+vmXzsRVqzg6GviDXBCND+HCQR5JOLbBHm5OJTmhcBoJYgWo7uMEXEAyFBa69YCnk/srQx6gYNltrnugIaIfMW0KD7dxn2J6Llqz00+FkyzbzkX9gQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104092+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1683263856968218.46999526788647; Thu, 4 May 2023 22:17:36 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id lrdLYY1788612xSE4NR3U9SV; Thu, 04 May 2023 22:17:36 -0700 X-Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.groups.io with SMTP id smtpd.web11.20160.1683263855749496387 for ; Thu, 04 May 2023 22:17:35 -0700 X-Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-537-gCa6BSpDOVitAGD7k4zgiA-1; Fri, 05 May 2023 01:17:30 -0400 X-MC-Unique: gCa6BSpDOVitAGD7k4zgiA-1 X-Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id C288385A5B1; Fri, 5 May 2023 05:17:29 +0000 (UTC) X-Received: from sirius.home.kraxel.org (unknown [10.39.192.60]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4CB21111E3F2; Fri, 5 May 2023 05:17:29 +0000 (UTC) X-Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id E759E18003BA; Fri, 5 May 2023 07:17:27 +0200 (CEST) From: "Gerd Hoffmann" To: devel@edk2.groups.io Cc: Jordan Justen , Stefan Berger , Gerd Hoffmann , Tom Lendacky , Jiewen Yao , Anthony Perard , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Ard Biesheuvel , Erdem Aktas , Oliver Steffen , Min Xu , James Bottomley , Julien Grall , Michael Roth , Pawel Polawski , Jiewen Yao , Ard Biesheuvel Subject: [edk2-devel] [PATCH v2 1/4] OvmfPkg/PlatformBootManagerLib: add PcdBootRestrictToFirmware Date: Fri, 5 May 2023 07:17:24 +0200 Message-Id: <20230505051727.56748-2-kraxel@redhat.com> In-Reply-To: <20230505051727.56748-1-kraxel@redhat.com> References: <20230505051727.56748-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: 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,kraxel@redhat.com X-Gm-Message-State: upJ6DHdtgXta6jV4a8oKJdFZx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1683263856; bh=9vhO/Ii1KLPQEVcgfkcMODVA/dh7Mz6KVqsBcizbyf0=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=Dr/TqAO+OEZZuVH3I7cmn0eK22kgfc9TPwVnFiqdFP2v733diaKJgV2oPEz0lBCQ3b/ irquGP3eSlgv/N1zCmTJPdJdZ3g/gaawpKrJPp/NWxOyMkjDFZ9r5rN5bVKm6ZIX0mS4n hDGaWKQDAFR5eU8d79zmBHWGJREYakcoB10= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1683263857977100001 Content-Type: text/plain; charset="utf-8"; x-default="true" Add new PCD PcdBootRestrictToFirmware. When set to TRUE restrict boot options to EFI applications embedded into the firmware image. Behavior should be identical to the PlatformBootManagerLibGrub library variant. Signed-off-by: Gerd Hoffmann Acked-by: Jiewen Yao Acked-by: Ard Biesheuvel --- OvmfPkg/OvmfPkg.dec | 3 + .../PlatformBootManagerLib.inf | 2 + .../PlatformBootManagerLib/BdsPlatform.c | 70 +++++++++++++++++-- 3 files changed, 71 insertions(+), 4 deletions(-) diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index 03ae29e7b034..cc5a4ceead25 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -422,6 +422,9 @@ [PcdsFixedAtBuild] # check to decide whether to abort dispatch of the driver it is linked = into. gUefiOvmfPkgTokenSpaceGuid.PcdEntryPointOverrideFwCfgVarName|""|VOID*|0x= 68 =20 + ## Restrict boot to EFI applications in firmware volumes. + gUefiOvmfPkgTokenSpaceGuid.PcdBootRestrictToFirmware|FALSE|BOOLEAN|0x6c + [PcdsDynamic, PcdsDynamicEx] gUefiOvmfPkgTokenSpaceGuid.PcdEmuVariableEvent|0|UINT64|2 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashVariablesEnable|FALSE|BOOLEAN|0x10 diff --git a/OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.= inf b/OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf index c249a3cf1e35..6b396eac7daf 100644 --- a/OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf +++ b/OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf @@ -61,6 +61,7 @@ [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdEmuVariableEvent gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashVariablesEnable gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId + gUefiOvmfPkgTokenSpaceGuid.PcdBootRestrictToFirmware gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate ## CONSUMES @@ -84,3 +85,4 @@ [Guids] gEfiGlobalVariableGuid gRootBridgesConnectedEventGroupGuid gUefiShellFileGuid + gGrubFileGuid diff --git a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c b/OvmfPkg= /Library/PlatformBootManagerLib/BdsPlatform.c index 3b7dc53e9f86..8dc2bbf97371 100644 --- a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c +++ b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c @@ -290,6 +290,46 @@ RemoveStaleFvFileOptions ( EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); } =20 +VOID +RestrictBootOptionsToFirmware ( + VOID + ) +{ + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; + UINTN BootOptionCount; + UINTN Index; + + BootOptions =3D EfiBootManagerGetLoadOptions ( + &BootOptionCount, + LoadOptionTypeBoot + ); + + for (Index =3D 0; Index < BootOptionCount; ++Index) { + EFI_DEVICE_PATH_PROTOCOL *Node1; + + // + // If the device path starts with Fv(...), + // then keep the boot option. + // + Node1 =3D BootOptions[Index].FilePath; + if (((DevicePathType (Node1) =3D=3D MEDIA_DEVICE_PATH) && + (DevicePathSubType (Node1) =3D=3D MEDIA_PIWG_FW_VOL_DP))) + { + continue; + } + + // + // Delete the boot option. + // + EfiBootManagerDeleteLoadOptionVariable ( + BootOptions[Index].OptionNumber, + LoadOptionTypeBoot + ); + } + + EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); +} + VOID PlatformRegisterOptionsAndKeys ( VOID @@ -485,7 +525,9 @@ PlatformBootManagerBeforeConsole ( Status )); =20 - PlatformRegisterOptionsAndKeys (); + if (!FeaturePcdGet (PcdBootRestrictToFirmware)) { + PlatformRegisterOptionsAndKeys (); + } =20 // // Install both VIRTIO_DEVICE_PROTOCOL and (dependent) EFI_RNG_PROTOCOL @@ -1754,9 +1796,12 @@ PlatformBootManagerAfterConsole ( // // Perform some platform specific connect sequence // - PlatformBdsConnectSequence (); - - EfiBootManagerRefreshAllBootOption (); + if (FeaturePcdGet (PcdBootRestrictToFirmware)) { + RestrictBootOptionsToFirmware (); + } else { + PlatformBdsConnectSequence (); + EfiBootManagerRefreshAllBootOption (); + } =20 // // Register UEFI Shell @@ -1767,6 +1812,15 @@ PlatformBootManagerAfterConsole ( LOAD_OPTION_ACTIVE ); =20 + // + // Register Grub + // + PlatformRegisterFvBootOption ( + &gGrubFileGuid, + L"Grub Bootloader", + LOAD_OPTION_ACTIVE + ); + RemoveStaleFvFileOptions (); SetBootOrderFromQemu (); =20 @@ -1935,6 +1989,14 @@ PlatformBootManagerUnableToBoot ( EFI_BOOT_MANAGER_LOAD_OPTION BootManagerMenu; UINTN Index; =20 + if (FeaturePcdGet (PcdBootRestrictToFirmware)) { + AsciiPrint ( + "%a: No bootable option was found.\n", + gEfiCallerBaseName + ); + CpuDeadLoop (); + } + // // BootManagerMenu doesn't contain the correct information when return s= tatus // is EFI_NOT_FOUND. --=20 2.40.1 -=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 (#104092): https://edk2.groups.io/g/devel/message/104092 Mute This Topic: https://groups.io/mt/98699779/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 Thu May 2 03:23:53 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+104098+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104098+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1683264541; cv=none; d=zohomail.com; s=zohoarc; b=W4GW00+rT2A7GosL5vTW58mGIPTWYgEB6vFUWW331dQR+iK7v3Se7SywyhC9qRV2kWhUTQ2vpsw2/33t/Fx7z7fOPHcp9NePG3r0bzxX8scwaO6lHoml6j8ncUUSduVxZLYzb6i2/mFi4mDgrpHu8Sq7XULdII6PxAnu9Ww3VDU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683264541; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=ryAxBhaTB6402n/dQBs3efDv1U0JornoP9aJ9P7nFl0=; b=fzvqSSQPsQJac+k4pgxixn9iboeHKoKVElwW7lSmT0pGY6fixmolWCxu0K6lFi8+z+fz4MoHpEbhH6Ri1B9u4Nm5+mNxxw/3Sci9LNZfgqX3yKawiN6w2JJsHzEDvg+6CWnAPzQazCxQo7i4MR1rPLgkBOwEI7SbUqSXYGEUQ78= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104098+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1683264541293144.94182598396355; Thu, 4 May 2023 22:29:01 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id CaNQYY1788612xmvc300SuUr; Thu, 04 May 2023 22:29:00 -0700 X-Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.groups.io with SMTP id smtpd.web11.20280.1683264539740949756 for ; Thu, 04 May 2023 22:28:59 -0700 X-Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-349-_Iv3cAizML-e5PbRu5hyCQ-1; Fri, 05 May 2023 01:28:53 -0400 X-MC-Unique: _Iv3cAizML-e5PbRu5hyCQ-1 X-Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8F3681C0690E; Fri, 5 May 2023 05:28:52 +0000 (UTC) X-Received: from sirius.home.kraxel.org (unknown [10.39.192.60]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F0FE5492B00; Fri, 5 May 2023 05:28:51 +0000 (UTC) X-Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id EC8CD1800986; Fri, 5 May 2023 07:17:27 +0200 (CEST) From: "Gerd Hoffmann" To: devel@edk2.groups.io Cc: Jordan Justen , Stefan Berger , Gerd Hoffmann , Tom Lendacky , Jiewen Yao , Anthony Perard , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Ard Biesheuvel , Erdem Aktas , Oliver Steffen , Min Xu , James Bottomley , Julien Grall , Michael Roth , Pawel Polawski Subject: [edk2-devel] [PATCH v2 2/4] OvmfPkg/NvVarsFileLib: disable in case PcdBootRestrictToFirmware is set Date: Fri, 5 May 2023 07:17:25 +0200 Message-Id: <20230505051727.56748-3-kraxel@redhat.com> In-Reply-To: <20230505051727.56748-1-kraxel@redhat.com> References: <20230505051727.56748-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: 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,kraxel@redhat.com X-Gm-Message-State: DWxpNJe5raP7WIgBrZPl70jvx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1683264540; bh=X5FAHoe9/OpZ0oXSD7bH8f7gJvYygRa4P+TlkqqIqcE=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=Zk67ANitE+AKYsQLbl6fE+PPQjDsg7wT2zwXXdA6YJ12QkBQEdB72bTiUJm7FUQ6ecB RRDf3gDCsVUPrvmFmPZO449JP9y4yRZ3qbJuwaNc0FWrjZ1YJUrRfZWj/ZCPp5dSGzr5k jQ+hTOLuq3UdRtmsJNOmGLTzP6fwiz09REw= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1683264543303100007 Content-Type: text/plain; charset="utf-8"; x-default="true" In case PcdBootRestrictToFirmware is set disable loading EFI variables from NvVars file. Signed-off-by: Gerd Hoffmann --- OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.inf | 1 + OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.inf b/OvmfPkg/Libr= ary/NvVarsFileLib/NvVarsFileLib.inf index f152c5504661..9ae40ffe4373 100644 --- a/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.inf +++ b/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.inf @@ -49,6 +49,7 @@ [Protocols] =20 [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdSecureBootSupported + gUefiOvmfPkgTokenSpaceGuid.PcdBootRestrictToFirmware =20 [Guids] gEfiFileInfoGuid diff --git a/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c b/OvmfPkg/Librar= y/NvVarsFileLib/NvVarsFileLib.c index d4139b911528..8fc54e58a789 100644 --- a/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c +++ b/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c @@ -30,7 +30,8 @@ ConnectNvVarsToFileSystem ( { EFI_STATUS Status; =20 - if (FeaturePcdGet (PcdSecureBootSupported)) { + if (FeaturePcdGet (PcdSecureBootSupported) || + FeaturePcdGet (PcdBootRestrictToFirmware)) { return EFI_UNSUPPORTED; } =20 --=20 2.40.1 -=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 (#104098): https://edk2.groups.io/g/devel/message/104098 Mute This Topic: https://groups.io/mt/98699874/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 Thu May 2 03:23:53 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+104094+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104094+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1683264113; cv=none; d=zohomail.com; s=zohoarc; b=O2vy5gcEXN/gOJ9q0V95v6G2rv4DjIQxXUwWQ+VCrWM7tvLKiVUZVPb00go8QO6hQbGFVeYD3C85gPz1X7Ta0UuAt3z4/uQ8Zu3HzLC52qkbEE0wKjVHe4zcNyaJ8lMnijqpLdKyJ+EQmnV2Oz0xB5Iaz5eSI548f2tAS2QHGf0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683264113; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=mzqGOddh1M9LQ768s8cLs+IZfqxEm94acIyCxGH50lc=; b=MnWDwFzMFlzxE2CxZJ3vHlJPBAxvvOYg9sGjFw3vxOE6JrS0ybKogfxaDKNJbQnueATLM5uM0k4XJcNpimiHan9a2Km2gEHsyEaJIh7/MLpvWDQ1u3SEXGugnD6xsMeclMaeEGR4kE70uZqKH2j/YdXNYh0jiKRM2NiTZfjsjCM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104094+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1683264113847323.2768870740488; Thu, 4 May 2023 22:21:53 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id ttIlYY1788612xi5Cc1mZcRJ; Thu, 04 May 2023 22:21:53 -0700 X-Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.groups.io with SMTP id smtpd.web11.20199.1683264112975903275 for ; Thu, 04 May 2023 22:21:53 -0700 X-Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-134-Gsb2X8dvNy-obthAncE_Mg-1; Fri, 05 May 2023 01:21:46 -0400 X-MC-Unique: Gsb2X8dvNy-obthAncE_Mg-1 X-Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A2DEE101A55C; Fri, 5 May 2023 05:21:45 +0000 (UTC) X-Received: from sirius.home.kraxel.org (unknown [10.39.192.60]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 63ED1C6DA0D; Fri, 5 May 2023 05:21:45 +0000 (UTC) X-Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id F1667180099D; Fri, 5 May 2023 07:17:27 +0200 (CEST) From: "Gerd Hoffmann" To: devel@edk2.groups.io Cc: Jordan Justen , Stefan Berger , Gerd Hoffmann , Tom Lendacky , Jiewen Yao , Anthony Perard , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Ard Biesheuvel , Erdem Aktas , Oliver Steffen , Min Xu , James Bottomley , Julien Grall , Michael Roth , Pawel Polawski , Jiewen Yao , Ard Biesheuvel Subject: [edk2-devel] [PATCH v2 3/4] OvmfPkg/AmdSev: stop using PlatformBootManagerLibGrub Date: Fri, 5 May 2023 07:17:26 +0200 Message-Id: <20230505051727.56748-4-kraxel@redhat.com> In-Reply-To: <20230505051727.56748-1-kraxel@redhat.com> References: <20230505051727.56748-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: 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,kraxel@redhat.com X-Gm-Message-State: xR6sCNcQVayS9SxTEsvlRYG2x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1683264113; bh=Mlo1sh3r5m4v6C5KWISmgHyEcJxWM/6LD6b9VkUnfxo=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=tauTmUryBqpGyoQZ2PWCYklujgO21X+Wo/mbkK2MuW4IuIYl+VV/BwrXqKiVHkj+4dX aaon5ET/8d08kkyhuySPu4l+xBQatIQWsisRiXPjNBvgQ2U4fJqhgpZl8blIk8/QCXyo9 UmrhBpsOOZFZVbW2/9tF5lezVfE7sQZEB/I= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1683264114975100003 Content-Type: text/plain; charset="utf-8"; x-default="true" Use PlatformBootManagerLib with PcdBootRestrictToFirmware set to TRUE instead. Signed-off-by: Gerd Hoffmann Acked-by: Jiewen Yao Acked-by: Ard Biesheuvel --- OvmfPkg/AmdSev/AmdSevX64.dsc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc index 943c4eed9831..b32049194d39 100644 --- a/OvmfPkg/AmdSev/AmdSevX64.dsc +++ b/OvmfPkg/AmdSev/AmdSevX64.dsc @@ -153,6 +153,7 @@ [LibraryClasses] UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntry= Point.inf UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiA= pplicationEntryPoint.inf DevicePathLib|MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDev= icePathLibDevicePathProtocol.inf + NvVarsFileLib|OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.inf FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeS= ecurityManagementLib.inf UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf @@ -339,7 +340,7 @@ [LibraryClasses.common.DXE_DRIVER] !else DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.i= nf !endif - PlatformBootManagerLib|OvmfPkg/Library/PlatformBootManagerLibGrub/Platfo= rmBootManagerLibGrub.inf + PlatformBootManagerLib|OvmfPkg/Library/PlatformBootManagerLib/PlatformBo= otManagerLib.inf PlatformBmPrintScLib|OvmfPkg/Library/PlatformBmPrintScLib/PlatformBmPrin= tScLib.inf QemuBootOrderLib|OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.inf CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf @@ -464,6 +465,8 @@ [PcdsFixedAtBuild] gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c= , 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0= x31 } =20 gEfiMdeModulePkgTokenSpaceGuid.PcdConInConnectOnDemand|TRUE + gUefiOvmfPkgTokenSpaceGuid.PcdBootRestrictToFirmware|TRUE + ##########################################################################= ###### # # Pcd Dynamic Section - list of all EDK II PCD Entries defined by this Pla= tform @@ -619,7 +622,10 @@ [Components] MdeModulePkg/Universal/Metronome/Metronome.inf PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.i= nf MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManagerDxe.inf - MdeModulePkg/Universal/BdsDxe/BdsDxe.inf + MdeModulePkg/Universal/BdsDxe/BdsDxe.inf { + + XenPlatformLib|OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf + } MdeModulePkg/Logo/LogoDxe.inf MdeModulePkg/Application/UiApp/UiApp.inf { --=20 2.40.1 -=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 (#104094): https://edk2.groups.io/g/devel/message/104094 Mute This Topic: https://groups.io/mt/98699805/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 Thu May 2 03:23:53 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+104093+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104093+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1683264112; cv=none; d=zohomail.com; s=zohoarc; b=kis7FftWLy4o8tXyDnJ2ewZy5muzrh9wKOZhDf8z3yihfpcVo67NsQaryvn9n5TliXWMUxG6TvRJKiZ7xBKwcF3GxUOCz6qdk55n6W8xI23diNFw8dPgzCPq6HaayMmejCroPhXP44vUag6+t0zh8eddWS6qcdse+JYs/8AtFjs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683264112; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=HQ4LWnu8tMyub/L0K8hoBL+U0A+dE4jHOohVddElKaw=; b=jUq0GihRMTNguYZnjAkzUU2Rzm4OZdcLmA6+U2gawivAF0pktFkCdT+WP3S2RxfMNC8DmS7EovI/4UCHihxGBuXpqzAZz61vmAZJ7rQKiJTfu8uGu3RSLVi/6GNijUL3VuNMJDOmdDD/wbTDmqeVNulaJ4HAdDcZRXfbgN6uus8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104093+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1683264112972145.79646185362867; Thu, 4 May 2023 22:21:52 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id LfjeYY1788612xrpJ9TiaxGi; Thu, 04 May 2023 22:21:52 -0700 X-Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.groups.io with SMTP id smtpd.web11.20198.1683264111527771277 for ; Thu, 04 May 2023 22:21:51 -0700 X-Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-192-Z-ny1uvUMUiUyWuJms3VhA-1; Fri, 05 May 2023 01:21:48 -0400 X-MC-Unique: Z-ny1uvUMUiUyWuJms3VhA-1 X-Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6ED1A88462A; Fri, 5 May 2023 05:21:47 +0000 (UTC) X-Received: from sirius.home.kraxel.org (unknown [10.39.192.60]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 559631120AC4; Fri, 5 May 2023 05:21:46 +0000 (UTC) X-Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 028CA18011EC; Fri, 5 May 2023 07:17:28 +0200 (CEST) From: "Gerd Hoffmann" To: devel@edk2.groups.io Cc: Jordan Justen , Stefan Berger , Gerd Hoffmann , Tom Lendacky , Jiewen Yao , Anthony Perard , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Ard Biesheuvel , Erdem Aktas , Oliver Steffen , Min Xu , James Bottomley , Julien Grall , Michael Roth , Pawel Polawski , Jiewen Yao , Ard Biesheuvel Subject: [edk2-devel] [PATCH v2 4/4] OvmfPkg: drop PlatformBootManagerLibGrub Date: Fri, 5 May 2023 07:17:27 +0200 Message-Id: <20230505051727.56748-5-kraxel@redhat.com> In-Reply-To: <20230505051727.56748-1-kraxel@redhat.com> References: <20230505051727.56748-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: 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,kraxel@redhat.com X-Gm-Message-State: 7m330jeI6Ya0UygiT8hjTfxwx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1683264112; bh=BBor7dPDvjoHcemQW3aHuTLcPTBamI7BRVYOYMKZc6I=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=rRLzIyzvM4pbAFpVxy9ENhXUsTPDqRRhpPbOhse345wes7Y1Plx8uuyEYPpZ79I4x0Q vIlw9SD0mNZgoYxzjIEoWpfq+X2BCtbF46IhVhyYh94R11Rt5JQCjmHH8lneqaasexX66 Rn3ZRBIfiCbQq25LAsQXpwYwGlA/AjDrcNA= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1683264115017100005 Content-Type: text/plain; charset="utf-8"; x-default="true" Not used any more, remove. Signed-off-by: Gerd Hoffmann Acked-by: Jiewen Yao Acked-by: Ard Biesheuvel --- .../PlatformBootManagerLibGrub.inf | 73 - .../PlatformBootManagerLibGrub/BdsPlatform.h | 185 -- .../PlatformBootManagerLibGrub/BdsPlatform.c | 1604 ----------------- .../PlatformBootManagerLibGrub/PlatformData.c | 212 --- .../PlatformBootManagerLibGrub/QemuKernel.c | 55 - 5 files changed, 2129 deletions(-) delete mode 100644 OvmfPkg/Library/PlatformBootManagerLibGrub/PlatformBoot= ManagerLibGrub.inf delete mode 100644 OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.h delete mode 100644 OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.c delete mode 100644 OvmfPkg/Library/PlatformBootManagerLibGrub/PlatformData= .c delete mode 100644 OvmfPkg/Library/PlatformBootManagerLibGrub/QemuKernel.c diff --git a/OvmfPkg/Library/PlatformBootManagerLibGrub/PlatformBootManager= LibGrub.inf b/OvmfPkg/Library/PlatformBootManagerLibGrub/PlatformBootManage= rLibGrub.inf deleted file mode 100644 index 5f6f73d18470..000000000000 --- a/OvmfPkg/Library/PlatformBootManagerLibGrub/PlatformBootManagerLibGrub= .inf +++ /dev/null @@ -1,73 +0,0 @@ -## @file -# Platform BDS customizations library. -# -# Copyright (C) 2020 James Bottomley, IBM Corporation. -# Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent -# -## - -[Defines] - INF_VERSION =3D 0x00010005 - BASE_NAME =3D PlatformBootManagerLibGrub - FILE_GUID =3D 3a8f8431-f0c9-4c95-8a1d-04445c582d4e - MODULE_TYPE =3D DXE_DRIVER - VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D PlatformBootManagerLib|DXE_DRIVER - -# -# The following information is for reference only and not required by the = build tools. -# -# VALID_ARCHITECTURES =3D X64 -# - -[Sources] - BdsPlatform.c - QemuKernel.c - PlatformData.c - BdsPlatform.h - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - SourceLevelDebugPkg/SourceLevelDebugPkg.dec - OvmfPkg/OvmfPkg.dec - SecurityPkg/SecurityPkg.dec - ShellPkg/ShellPkg.dec - -[LibraryClasses] - BaseLib - MemoryAllocationLib - UefiBootServicesTableLib - UefiRuntimeServicesTableLib - BaseMemoryLib - DebugLib - PcdLib - UefiBootManagerLib - BootLogoLib - DevicePathLib - PciLib - QemuLoadImageLib - UefiLib - PlatformBmPrintScLib - Tcg2PhysicalPresenceLib - -[Pcd] - gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId - gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate ## CONSUMES - gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits ## CONSUMES - gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity ## CONSUMES - gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits ## CONSUMES - -[Protocols] - gEfiPciRootBridgeIoProtocolGuid - gEfiDxeSmmReadyToLockProtocolGuid # PROTOCOL SOMETIMES_PRODU= CED - gEfiLoadedImageProtocolGuid # PROTOCOL SOMETIMES_PRODU= CED - gEfiFirmwareVolume2ProtocolGuid # PROTOCOL SOMETIMES_CONSU= MED - -[Guids] - gEfiEndOfDxeEventGroupGuid - gEfiGlobalVariableGuid - gRootBridgesConnectedEventGroupGuid - gUefiShellFileGuid - gGrubFileGuid diff --git a/OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.h b/Ovm= fPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.h deleted file mode 100644 index 0593a5104625..000000000000 --- a/OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.h +++ /dev/null @@ -1,185 +0,0 @@ -/** @file - Platform BDS customizations include file. - - Copyright (C) 2020 James Bottomley, IBM Corporation. - Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -Module Name: - - BdsPlatform.h - -Abstract: - - Head file for BDS Platform specific code - -**/ - -#ifndef _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ -#define _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[]; -extern ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode; -extern ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode; -extern UART_DEVICE_PATH gUartDeviceNode; -extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; - -#define PCI_DEVICE_PATH_NODE(Func, Dev) \ - { \ - { \ - HARDWARE_DEVICE_PATH, \ - HW_PCI_DP, \ - { \ - (UINT8) (sizeof (PCI_DEVICE_PATH)), \ - (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \ - } \ - }, \ - (Func), \ - (Dev) \ - } - -#define PNPID_DEVICE_PATH_NODE(PnpId) \ - { \ - { \ - ACPI_DEVICE_PATH, \ - ACPI_DP, \ - { \ - (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \ - (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \ - }, \ - }, \ - EISA_PNP_ID((PnpId)), \ - 0 \ - } - -#define gPciIsaBridge \ - PCI_DEVICE_PATH_NODE(0, 0x1f) - -#define gP2PBridge \ - PCI_DEVICE_PATH_NODE(0, 0x1e) - -#define gPnpPs2Keyboard \ - PNPID_DEVICE_PATH_NODE(0x0303) - -#define gPnp16550ComPort \ - PNPID_DEVICE_PATH_NODE(0x0501) - -#define gUart \ - { \ - { \ - MESSAGING_DEVICE_PATH, \ - MSG_UART_DP, \ - { \ - (UINT8) (sizeof (UART_DEVICE_PATH)), \ - (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \ - } \ - }, \ - 0, \ - 115200, \ - 8, \ - 1, \ - 1 \ - } - -#define gPcAnsiTerminal \ - { \ - { \ - MESSAGING_DEVICE_PATH, \ - MSG_VENDOR_DP, \ - { \ - (UINT8) (sizeof (VENDOR_DEVICE_PATH)), \ - (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \ - } \ - }, \ - DEVICE_PATH_MESSAGING_PC_ANSI \ - } - -#define gEndEntire \ - { \ - END_DEVICE_PATH_TYPE, \ - END_ENTIRE_DEVICE_PATH_SUBTYPE, \ - { \ - END_DEVICE_PATH_LENGTH, \ - 0 \ - } \ - } - -#define PCI_CLASS_SCC 0x07 -#define PCI_SUBCLASS_SERIAL 0x00 -#define PCI_IF_16550 0x02 -#define IS_PCI_16550SERIAL(_p) IS_CLASS3 (_p, PCI_CLASS_SCC, PCI_SUBCLASS= _SERIAL, PCI_IF_16550) -#define IS_PCI_ISA_PDECODE(_p) IS_CLASS3 (_p, PCI_CLASS_BRIDGE, PCI_CLASS= _BRIDGE_ISA_PDECODE, 0) - -typedef struct { - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - UINTN ConnectType; -} PLATFORM_CONSOLE_CONNECT_ENTRY; - -#define CONSOLE_OUT BIT0 -#define CONSOLE_IN BIT1 -#define STD_ERROR BIT2 -extern PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[]; -extern PLATFORM_CONSOLE_CONNECT_ENTRY gXenPlatformConsole[]; - -// -// Platform BDS Functions -// - -VOID -PlatformInitializeConsole ( - IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole - ); - -/** - Loads and boots UEFI Linux via the FwCfg interface. - - @retval EFI_NOT_FOUND - The Linux kernel was not found - -**/ -EFI_STATUS -TryRunningQemuKernel ( - VOID - ); - -#endif // _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ diff --git a/OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.c b/Ovm= fPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.c deleted file mode 100644 index df8e2fe15786..000000000000 --- a/OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.c +++ /dev/null @@ -1,1604 +0,0 @@ -/** @file - Platform BDS customizations. - - Copyright (C) 2020 James Bottomley, IBM Corporation. - Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include "BdsPlatform.h" -#include -#include -#include -#include - -// -// Global data -// - -VOID *mEfiDevPathNotifyReg; -EFI_EVENT mEfiDevPathEvent; -UINT16 mHostBridgeDevId; - -// -// Table of host IRQs matching PCI IRQs A-D -// (for configuring PCI Interrupt Line register) -// -CONST UINT8 PciHostIrqs[] =3D { - 0x0a, 0x0a, 0x0b, 0x0b -}; - -// -// Type definitions -// - -typedef -EFI_STATUS -(EFIAPI *PROTOCOL_INSTANCE_CALLBACK)( - IN EFI_HANDLE Handle, - IN VOID *Instance, - IN VOID *Context - ); - -/** - @param[in] Handle - Handle of PCI device instance - @param[in] PciIo - PCI IO protocol instance - @param[in] Pci - PCI Header register block -**/ -typedef -EFI_STATUS -(EFIAPI *VISIT_PCI_INSTANCE_CALLBACK)( - IN EFI_HANDLE Handle, - IN EFI_PCI_IO_PROTOCOL *PciIo, - IN PCI_TYPE00 *Pci - ); - -// -// Function prototypes -// - -EFI_STATUS -VisitAllInstancesOfProtocol ( - IN EFI_GUID *Id, - IN PROTOCOL_INSTANCE_CALLBACK CallBackFunction, - IN VOID *Context - ); - -EFI_STATUS -VisitAllPciInstancesOfProtocol ( - IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction - ); - -VOID -InstallDevicePathCallback ( - VOID - ); - -VOID -PlatformRegisterFvBootOption ( - EFI_GUID *FileGuid, - CHAR16 *Description, - UINT32 Attributes - ) -{ - EFI_STATUS Status; - INTN OptionIndex; - EFI_BOOT_MANAGER_LOAD_OPTION NewOption; - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; - UINTN BootOptionCount; - MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode; - EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - - Status =3D gBS->HandleProtocol ( - gImageHandle, - &gEfiLoadedImageProtocolGuid, - (VOID **)&LoadedImage - ); - ASSERT_EFI_ERROR (Status); - - EfiInitializeFwVolDevicepathNode (&FileNode, FileGuid); - DevicePath =3D DevicePathFromHandle (LoadedImage->DeviceHandle); - ASSERT (DevicePath !=3D NULL); - DevicePath =3D AppendDevicePathNode ( - DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&FileNode - ); - ASSERT (DevicePath !=3D NULL); - - Status =3D EfiBootManagerInitializeLoadOption ( - &NewOption, - LoadOptionNumberUnassigned, - LoadOptionTypeBoot, - Attributes, - Description, - DevicePath, - NULL, - 0 - ); - ASSERT_EFI_ERROR (Status); - FreePool (DevicePath); - - BootOptions =3D EfiBootManagerGetLoadOptions ( - &BootOptionCount, - LoadOptionTypeBoot - ); - - OptionIndex =3D EfiBootManagerFindLoadOption ( - &NewOption, - BootOptions, - BootOptionCount - ); - - if (OptionIndex =3D=3D -1) { - Status =3D EfiBootManagerAddLoadOptionVariable (&NewOption, MAX_UINTN); - ASSERT_EFI_ERROR (Status); - } - - EfiBootManagerFreeLoadOption (&NewOption); - EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); -} - -/** - Remove all MemoryMapped(...)/FvFile(...) and Fv(...)/FvFile(...) boot op= tions - whose device paths do not resolve exactly to an FvFile in the system. - - Also strip out every boot option that is not an FvFile, meaning the syst= em - can only boot either the Grub or (if built) the shell. - - This removes any boot options that point to binaries built into the firm= ware - and have become stale due to any of the following: - - DXEFV's base address or size changed (historical), - - DXEFV's FvNameGuid changed, - - the FILE_GUID of the pointed-to binary changed, - - the referenced binary is no longer built into the firmware. - - EfiBootManagerFindLoadOption() used in PlatformRegisterFvBootOption() on= ly - avoids exact duplicates. -**/ -VOID -RemoveStaleFvFileOptions ( - VOID - ) -{ - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; - UINTN BootOptionCount; - UINTN Index; - - BootOptions =3D EfiBootManagerGetLoadOptions ( - &BootOptionCount, - LoadOptionTypeBoot - ); - - for (Index =3D 0; Index < BootOptionCount; ++Index) { - EFI_DEVICE_PATH_PROTOCOL *Node1, *Node2, *SearchNode; - EFI_STATUS Status; - EFI_HANDLE FvHandle; - - // - // If the device path starts with neither MemoryMapped(...) nor Fv(...= ), - // then delete the boot option. - // - Node1 =3D BootOptions[Index].FilePath; - if (!((DevicePathType (Node1) =3D=3D HARDWARE_DEVICE_PATH) && - (DevicePathSubType (Node1) =3D=3D HW_MEMMAP_DP)) && - !((DevicePathType (Node1) =3D=3D MEDIA_DEVICE_PATH) && - (DevicePathSubType (Node1) =3D=3D MEDIA_PIWG_FW_VOL_DP))) - { - EfiBootManagerDeleteLoadOptionVariable ( - BootOptions[Index].OptionNumber, - LoadOptionTypeBoot - ); - continue; - } - - // - // If the second device path node is not FvFile(...), then delete the = boot - // option. - // - Node2 =3D NextDevicePathNode (Node1); - if ((DevicePathType (Node2) !=3D MEDIA_DEVICE_PATH) || - (DevicePathSubType (Node2) !=3D MEDIA_PIWG_FW_FILE_DP)) - { - EfiBootManagerDeleteLoadOptionVariable ( - BootOptions[Index].OptionNumber, - LoadOptionTypeBoot - ); - continue; - } - - // - // Locate the Firmware Volume2 protocol instance that is denoted by the - // boot option. If this lookup fails (i.e., the boot option references= a - // firmware volume that doesn't exist), then we'll proceed to delete t= he - // boot option. - // - SearchNode =3D Node1; - Status =3D gBS->LocateDevicePath ( - &gEfiFirmwareVolume2ProtocolGuid, - &SearchNode, - &FvHandle - ); - - if (!EFI_ERROR (Status)) { - // - // The firmware volume was found; now let's see if it contains the F= vFile - // identified by GUID. - // - EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol; - MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFileNode; - UINTN BufferSize; - EFI_FV_FILETYPE FoundType; - EFI_FV_FILE_ATTRIBUTES FileAttributes; - UINT32 AuthenticationStatus; - - Status =3D gBS->HandleProtocol ( - FvHandle, - &gEfiFirmwareVolume2ProtocolGuid, - (VOID **)&FvProtocol - ); - ASSERT_EFI_ERROR (Status); - - FvFileNode =3D (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)Node2; - // - // Buffer=3D=3DNULL means we request metadata only: BufferSize, Foun= dType, - // FileAttributes. - // - Status =3D FvProtocol->ReadFile ( - FvProtocol, - &FvFileNode->FvFileName, // NameGuid - NULL, // Buffer - &BufferSize, - &FoundType, - &FileAttributes, - &AuthenticationStatus - ); - if (!EFI_ERROR (Status)) { - // - // The FvFile was found. Keep the boot option. - // - continue; - } - } - - // - // Delete the boot option. - // - Status =3D EfiBootManagerDeleteLoadOptionVariable ( - BootOptions[Index].OptionNumber, - LoadOptionTypeBoot - ); - DEBUG_CODE_BEGIN (); - CHAR16 *DevicePathString; - - DevicePathString =3D ConvertDevicePathToText ( - BootOptions[Index].FilePath, - FALSE, - FALSE - ); - DEBUG (( - EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_VERBOSE, - "%a: removing stale Boot#%04x %s: %r\n", - __func__, - (UINT32)BootOptions[Index].OptionNumber, - DevicePathString =3D=3D NULL ? L"" : DevicePathString, - Status - )); - if (DevicePathString !=3D NULL) { - FreePool (DevicePathString); - } - - DEBUG_CODE_END (); - } - - EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); -} - -EFI_STATUS -EFIAPI -ConnectRootBridge ( - IN EFI_HANDLE RootBridgeHandle, - IN VOID *Instance, - IN VOID *Context - ); - -STATIC -EFI_STATUS -EFIAPI -ConnectVirtioPciRng ( - IN EFI_HANDLE Handle, - IN VOID *Instance, - IN VOID *Context - ); - -// -// BDS Platform Functions -// - -/** - Do the platform init, can be customized by OEM/IBV - - Possible things that can be done in PlatformBootManagerBeforeConsole: - - > Update console variable: 1. include hot-plug devices; - > 2. Clear ConIn and add SOL for AMT - > Register new Driver#### or Boot#### - > Register new Key####: e.g.: F12 - > Signal ReadyToLock event - > Authentication action: 1. connect Auth devices; - > 2. Identify auto logon user. -**/ -VOID -EFIAPI -PlatformBootManagerBeforeConsole ( - VOID - ) -{ - EFI_HANDLE Handle; - EFI_STATUS Status; - UINT16 FrontPageTimeout; - - FrontPageTimeout =3D 0; - - DEBUG ((DEBUG_INFO, "PlatformBootManagerBeforeConsole\n")); - InstallDevicePathCallback (); - - VisitAllInstancesOfProtocol ( - &gEfiPciRootBridgeIoProtocolGuid, - ConnectRootBridge, - NULL - ); - - // - // Signal the ACPI platform driver that it can download QEMU ACPI tables. - // - EfiEventGroupSignal (&gRootBridgesConnectedEventGroupGuid); - - // - // We can't signal End-of-Dxe earlier than this. Namely, End-of-Dxe trig= gers - // the preparation of S3 system information. That logic has a hard depen= dency - // on the presence of the FACS ACPI table. Since our ACPI tables are only - // installed after PCI enumeration completes, we must not trigger the S3= save - // earlier, hence we can't signal End-of-Dxe earlier. - // - EfiEventGroupSignal (&gEfiEndOfDxeEventGroupGuid); - - // We need to connect all trusted consoles for TCG PP. Here we treat all - // consoles in OVMF to be trusted consoles. - PlatformInitializeConsole (gPlatformConsole); - - // - // Process TPM PPI request - // - Tcg2PhysicalPresenceLibProcessRequest (NULL); - - // - // Prevent further changes to LockBoxes or SMRAM. - // Any TPM 2 Physical Presence Interface opcode must be handled before. - // - Handle =3D NULL; - Status =3D gBS->InstallProtocolInterface ( - &Handle, - &gEfiDxeSmmReadyToLockProtocolGuid, - EFI_NATIVE_INTERFACE, - NULL - ); - ASSERT_EFI_ERROR (Status); - - // - // Dispatch deferred images after EndOfDxe event and ReadyToLock - // installation. - // - EfiBootManagerDispatchDeferredImages (); - - // - // GPU passthrough only allows Console enablement after ROM image load - // - PlatformInitializeConsole (gPlatformConsole); - - Status =3D gRT->SetVariable ( - EFI_TIME_OUT_VARIABLE_NAME, - &gEfiGlobalVariableGuid, - (EFI_VARIABLE_NON_VOLATILE | - EFI_VARIABLE_BOOTSERVICE_ACCESS | - EFI_VARIABLE_RUNTIME_ACCESS), - sizeof FrontPageTimeout, - &FrontPageTimeout - ); - // - // Install both VIRTIO_DEVICE_PROTOCOL and (dependent) EFI_RNG_PROTOCOL - // instances on Virtio PCI RNG devices. - // - VisitAllInstancesOfProtocol ( - &gEfiPciIoProtocolGuid, - ConnectVirtioPciRng, - NULL - ); -} - -EFI_STATUS -EFIAPI -ConnectRootBridge ( - IN EFI_HANDLE RootBridgeHandle, - IN VOID *Instance, - IN VOID *Context - ) -{ - EFI_STATUS Status; - - // - // Make the PCI bus driver connect the root bridge, non-recursively. This - // will produce a number of child handles with PciIo on them. - // - Status =3D gBS->ConnectController ( - RootBridgeHandle, // ControllerHandle - NULL, // DriverImageHandle - NULL, // RemainingDevicePath -- produce all - // children - FALSE // Recursive - ); - return Status; -} - -STATIC -EFI_STATUS -EFIAPI -ConnectVirtioPciRng ( - IN EFI_HANDLE Handle, - IN VOID *Instance, - IN VOID *Context - ) -{ - EFI_PCI_IO_PROTOCOL *PciIo; - EFI_STATUS Status; - UINT16 VendorId; - UINT16 DeviceId; - UINT8 RevisionId; - BOOLEAN Virtio10; - UINT16 SubsystemId; - - PciIo =3D Instance; - - // - // Read and check VendorId. - // - Status =3D PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint16, - PCI_VENDOR_ID_OFFSET, - 1, - &VendorId - ); - if (EFI_ERROR (Status)) { - goto Error; - } - - if (VendorId !=3D VIRTIO_VENDOR_ID) { - return EFI_SUCCESS; - } - - // - // Read DeviceId and RevisionId. - // - Status =3D PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint16, - PCI_DEVICE_ID_OFFSET, - 1, - &DeviceId - ); - if (EFI_ERROR (Status)) { - goto Error; - } - - Status =3D PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint8, - PCI_REVISION_ID_OFFSET, - 1, - &RevisionId - ); - if (EFI_ERROR (Status)) { - goto Error; - } - - // - // From DeviceId and RevisionId, determine whether the device is a - // modern-only Virtio 1.0 device. In case of Virtio 1.0, DeviceId can - // immediately be restricted to VIRTIO_SUBSYSTEM_ENTROPY_SOURCE, and - // SubsystemId will only play a sanity-check role. Otherwise, DeviceId c= an - // only be sanity-checked, and SubsystemId will decide. - // - if ((DeviceId =3D=3D 0x1040 + VIRTIO_SUBSYSTEM_ENTROPY_SOURCE) && - (RevisionId >=3D 0x01)) - { - Virtio10 =3D TRUE; - } else if ((DeviceId >=3D 0x1000) && (DeviceId <=3D 0x103F) && (Revision= Id =3D=3D 0x00)) { - Virtio10 =3D FALSE; - } else { - return EFI_SUCCESS; - } - - // - // Read and check SubsystemId as dictated by Virtio10. - // - Status =3D PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint16, - PCI_SUBSYSTEM_ID_OFFSET, - 1, - &SubsystemId - ); - if (EFI_ERROR (Status)) { - goto Error; - } - - if ((Virtio10 && (SubsystemId >=3D 0x40)) || - (!Virtio10 && (SubsystemId =3D=3D VIRTIO_SUBSYSTEM_ENTROPY_SOURCE))) - { - Status =3D gBS->ConnectController ( - Handle, // ControllerHandle - NULL, // DriverImageHandle -- connect all drivers - NULL, // RemainingDevicePath -- produce all child ha= ndles - FALSE // Recursive -- don't follow child handles - ); - if (EFI_ERROR (Status)) { - goto Error; - } - } - - return EFI_SUCCESS; - -Error: - DEBUG ((DEBUG_ERROR, "%a: %r\n", __func__, Status)); - return Status; -} - -/** - Add IsaKeyboard to ConIn; add IsaSerial to ConOut, ConIn, ErrOut. - - @param[in] DeviceHandle Handle of the LPC Bridge device. - - @retval EFI_SUCCESS Console devices on the LPC bridge have been added to - ConOut, ConIn, and ErrOut. - - @return Error codes, due to EFI_DEVICE_PATH_PROTOCOL missing - from DeviceHandle. -**/ -EFI_STATUS -PrepareLpcBridgeDevicePath ( - IN EFI_HANDLE DeviceHandle - ) -{ - EFI_STATUS Status; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - EFI_DEVICE_PATH_PROTOCOL *TempDevicePath; - CHAR16 *DevPathStr; - - DevicePath =3D NULL; - Status =3D gBS->HandleProtocol ( - DeviceHandle, - &gEfiDevicePathProtocolGuid, - (VOID *)&DevicePath - ); - if (EFI_ERROR (Status)) { - return Status; - } - - TempDevicePath =3D DevicePath; - - // - // Register Keyboard - // - DevicePath =3D AppendDevicePathNode ( - DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gPnpPs2KeyboardDeviceNode - ); - - EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); - - // - // Register COM1 - // - DevicePath =3D TempDevicePath; - gPnp16550ComPortDeviceNode.UID =3D 0; - - DevicePath =3D AppendDevicePathNode ( - DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode - ); - DevicePath =3D AppendDevicePathNode ( - DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode - ); - DevicePath =3D AppendDevicePathNode ( - DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode - ); - - // - // Print Device Path - // - DevPathStr =3D ConvertDevicePathToText (DevicePath, FALSE, FALSE); - if (DevPathStr !=3D NULL) { - DEBUG (( - DEBUG_INFO, - "BdsPlatform.c+%d: COM%d DevPath: %s\n", - DEBUG_LINE_NUMBER, - gPnp16550ComPortDeviceNode.UID + 1, - DevPathStr - )); - FreePool (DevPathStr); - } - - EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); - EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); - EfiBootManagerUpdateConsoleVariable (ErrOut, DevicePath, NULL); - - // - // Register COM2 - // - DevicePath =3D TempDevicePath; - gPnp16550ComPortDeviceNode.UID =3D 1; - - DevicePath =3D AppendDevicePathNode ( - DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode - ); - DevicePath =3D AppendDevicePathNode ( - DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode - ); - DevicePath =3D AppendDevicePathNode ( - DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode - ); - - // - // Print Device Path - // - DevPathStr =3D ConvertDevicePathToText (DevicePath, FALSE, FALSE); - if (DevPathStr !=3D NULL) { - DEBUG (( - DEBUG_INFO, - "BdsPlatform.c+%d: COM%d DevPath: %s\n", - DEBUG_LINE_NUMBER, - gPnp16550ComPortDeviceNode.UID + 1, - DevPathStr - )); - FreePool (DevPathStr); - } - - EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); - EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); - EfiBootManagerUpdateConsoleVariable (ErrOut, DevicePath, NULL); - - return EFI_SUCCESS; -} - -EFI_STATUS -GetGopDevicePath ( - IN EFI_DEVICE_PATH_PROTOCOL *PciDevicePath, - OUT EFI_DEVICE_PATH_PROTOCOL **GopDevicePath - ) -{ - UINTN Index; - EFI_STATUS Status; - EFI_HANDLE PciDeviceHandle; - EFI_DEVICE_PATH_PROTOCOL *TempDevicePath; - EFI_DEVICE_PATH_PROTOCOL *TempPciDevicePath; - UINTN GopHandleCount; - EFI_HANDLE *GopHandleBuffer; - - if ((PciDevicePath =3D=3D NULL) || (GopDevicePath =3D=3D NULL)) { - return EFI_INVALID_PARAMETER; - } - - // - // Initialize the GopDevicePath to be PciDevicePath - // - *GopDevicePath =3D PciDevicePath; - TempPciDevicePath =3D PciDevicePath; - - Status =3D gBS->LocateDevicePath ( - &gEfiDevicePathProtocolGuid, - &TempPciDevicePath, - &PciDeviceHandle - ); - if (EFI_ERROR (Status)) { - return Status; - } - - // - // Try to connect this handle, so that GOP driver could start on this - // device and create child handles with GraphicsOutput Protocol installed - // on them, then we get device paths of these child handles and select - // them as possible console device. - // - gBS->ConnectController (PciDeviceHandle, NULL, NULL, FALSE); - - Status =3D gBS->LocateHandleBuffer ( - ByProtocol, - &gEfiGraphicsOutputProtocolGuid, - NULL, - &GopHandleCount, - &GopHandleBuffer - ); - if (!EFI_ERROR (Status)) { - // - // Add all the child handles as possible Console Device - // - for (Index =3D 0; Index < GopHandleCount; Index++) { - Status =3D gBS->HandleProtocol ( - GopHandleBuffer[Index], - &gEfiDevicePathProtocolGuid, - (VOID *)&TempDevicePath - ); - if (EFI_ERROR (Status)) { - continue; - } - - if (CompareMem ( - PciDevicePath, - TempDevicePath, - GetDevicePathSize (PciDevicePath) - END_DEVICE_PATH_LENGTH - ) =3D=3D 0) - { - // - // In current implementation, we only enable one of the child hand= les - // as console device, i.e. sotre one of the child handle's device - // path to variable "ConOut" - // In future, we could select all child handles to be console devi= ce - // - - *GopDevicePath =3D TempDevicePath; - - // - // Delete the PCI device's path that added by - // GetPlugInPciVgaDevicePath(). Add the integrity GOP device path. - // - EfiBootManagerUpdateConsoleVariable (ConOutDev, NULL, PciDevicePat= h); - EfiBootManagerUpdateConsoleVariable (ConOutDev, TempDevicePath, NU= LL); - } - } - - gBS->FreePool (GopHandleBuffer); - } - - return EFI_SUCCESS; -} - -/** - Add PCI display to ConOut. - - @param[in] DeviceHandle Handle of the PCI display device. - - @retval EFI_SUCCESS The PCI display device has been added to ConOut. - - @return Error codes, due to EFI_DEVICE_PATH_PROTOCOL missing - from DeviceHandle. -**/ -EFI_STATUS -PreparePciDisplayDevicePath ( - IN EFI_HANDLE DeviceHandle - ) -{ - EFI_STATUS Status; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; - - DevicePath =3D NULL; - GopDevicePath =3D NULL; - Status =3D gBS->HandleProtocol ( - DeviceHandle, - &gEfiDevicePathProtocolGuid, - (VOID *)&DevicePath - ); - if (EFI_ERROR (Status)) { - return Status; - } - - GetGopDevicePath (DevicePath, &GopDevicePath); - DevicePath =3D GopDevicePath; - - EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); - - return EFI_SUCCESS; -} - -/** - Add PCI Serial to ConOut, ConIn, ErrOut. - - @param[in] DeviceHandle Handle of the PCI serial device. - - @retval EFI_SUCCESS The PCI serial device has been added to ConOut, Con= In, - ErrOut. - - @return Error codes, due to EFI_DEVICE_PATH_PROTOCOL missing - from DeviceHandle. -**/ -EFI_STATUS -PreparePciSerialDevicePath ( - IN EFI_HANDLE DeviceHandle - ) -{ - EFI_STATUS Status; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - - DevicePath =3D NULL; - Status =3D gBS->HandleProtocol ( - DeviceHandle, - &gEfiDevicePathProtocolGuid, - (VOID *)&DevicePath - ); - if (EFI_ERROR (Status)) { - return Status; - } - - DevicePath =3D AppendDevicePathNode ( - DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode - ); - DevicePath =3D AppendDevicePathNode ( - DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode - ); - - EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); - EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); - EfiBootManagerUpdateConsoleVariable (ErrOut, DevicePath, NULL); - - return EFI_SUCCESS; -} - -EFI_STATUS -VisitAllInstancesOfProtocol ( - IN EFI_GUID *Id, - IN PROTOCOL_INSTANCE_CALLBACK CallBackFunction, - IN VOID *Context - ) -{ - EFI_STATUS Status; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN Index; - VOID *Instance; - - // - // Start to check all the PciIo to find all possible device - // - HandleCount =3D 0; - HandleBuffer =3D NULL; - Status =3D gBS->LocateHandleBuffer ( - ByProtocol, - Id, - NULL, - &HandleCount, - &HandleBuffer - ); - if (EFI_ERROR (Status)) { - return Status; - } - - for (Index =3D 0; Index < HandleCount; Index++) { - Status =3D gBS->HandleProtocol (HandleBuffer[Index], Id, &Instance); - if (EFI_ERROR (Status)) { - continue; - } - - Status =3D (*CallBackFunction)( - HandleBuffer[Index], - Instance, - Context - ); - } - - gBS->FreePool (HandleBuffer); - - return EFI_SUCCESS; -} - -EFI_STATUS -EFIAPI -VisitingAPciInstance ( - IN EFI_HANDLE Handle, - IN VOID *Instance, - IN VOID *Context - ) -{ - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; - - PciIo =3D (EFI_PCI_IO_PROTOCOL *)Instance; - - // - // Check for all PCI device - // - Status =3D PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint32, - 0, - sizeof (Pci) / sizeof (UINT32), - &Pci - ); - if (EFI_ERROR (Status)) { - return Status; - } - - return (*(VISIT_PCI_INSTANCE_CALLBACK)(UINTN)Context)( - Handle, - PciIo, - &Pci - ); -} - -EFI_STATUS -VisitAllPciInstances ( - IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction - ) -{ - return VisitAllInstancesOfProtocol ( - &gEfiPciIoProtocolGuid, - VisitingAPciInstance, - (VOID *)(UINTN)CallBackFunction - ); -} - -/** - Do platform specific PCI Device check and add them to - ConOut, ConIn, ErrOut. - - @param[in] Handle - Handle of PCI device instance - @param[in] PciIo - PCI IO protocol instance - @param[in] Pci - PCI Header register block - - @retval EFI_SUCCESS - PCI Device check and Console variable update - successfully. - @retval EFI_STATUS - PCI Device check or Console variable update fail. - -**/ -EFI_STATUS -EFIAPI -DetectAndPreparePlatformPciDevicePath ( - IN EFI_HANDLE Handle, - IN EFI_PCI_IO_PROTOCOL *PciIo, - IN PCI_TYPE00 *Pci - ) -{ - EFI_STATUS Status; - - Status =3D PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationEnable, - EFI_PCI_DEVICE_ENABLE, - NULL - ); - ASSERT_EFI_ERROR (Status); - - // - // Here we decide whether it is LPC Bridge - // - if ((IS_PCI_LPC (Pci)) || - ((IS_PCI_ISA_PDECODE (Pci)) && - (Pci->Hdr.VendorId =3D=3D 0x8086) && - (Pci->Hdr.DeviceId =3D=3D 0x7000) - ) - ) - { - // - // Add IsaKeyboard to ConIn, - // add IsaSerial to ConOut, ConIn, ErrOut - // - DEBUG ((DEBUG_INFO, "Found LPC Bridge device\n")); - PrepareLpcBridgeDevicePath (Handle); - return EFI_SUCCESS; - } - - // - // Here we decide which Serial device to enable in PCI bus - // - if (IS_PCI_16550SERIAL (Pci)) { - // - // Add them to ConOut, ConIn, ErrOut. - // - DEBUG ((DEBUG_INFO, "Found PCI 16550 SERIAL device\n")); - PreparePciSerialDevicePath (Handle); - return EFI_SUCCESS; - } - - // - // Here we decide which display device to enable in PCI bus - // - if (IS_PCI_DISPLAY (Pci)) { - // - // Add them to ConOut. - // - DEBUG ((DEBUG_INFO, "Found PCI display device\n")); - PreparePciDisplayDevicePath (Handle); - return EFI_SUCCESS; - } - - return Status; -} - -/** - Connect the predefined platform default console device. - - Always try to find and enable PCI display devices. - - @param[in] PlatformConsole Predefined platform default console device a= rray. -**/ -VOID -PlatformInitializeConsole ( - IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole - ) -{ - UINTN Index; - - // - // Do platform specific PCI Device check and add them to ConOut, ConIn, - // ErrOut - // - VisitAllPciInstances (DetectAndPreparePlatformPciDevicePath); - - // - // Have chance to connect the platform default console, - // the platform default console is the minimum device group - // the platform should support - // - for (Index =3D 0; PlatformConsole[Index].DevicePath !=3D NULL; ++Index) { - // - // Update the console variable with the connect type - // - if ((PlatformConsole[Index].ConnectType & CONSOLE_IN) =3D=3D CONSOLE_I= N) { - EfiBootManagerUpdateConsoleVariable ( - ConIn, - PlatformConsole[Index].DevicePath, - NULL - ); - } - - if ((PlatformConsole[Index].ConnectType & CONSOLE_OUT) =3D=3D CONSOLE_= OUT) { - EfiBootManagerUpdateConsoleVariable ( - ConOut, - PlatformConsole[Index].DevicePath, - NULL - ); - } - - if ((PlatformConsole[Index].ConnectType & STD_ERROR) =3D=3D STD_ERROR)= { - EfiBootManagerUpdateConsoleVariable ( - ErrOut, - PlatformConsole[Index].DevicePath, - NULL - ); - } - } -} - -/** - Configure PCI Interrupt Line register for applicable devices - Ported from SeaBIOS, src/fw/pciinit.c, *_pci_slot_get_irq() - - @param[in] Handle - Handle of PCI device instance - @param[in] PciIo - PCI IO protocol instance - @param[in] PciHdr - PCI Header register block - - @retval EFI_SUCCESS - PCI Interrupt Line register configured successfull= y. - -**/ -EFI_STATUS -EFIAPI -SetPciIntLine ( - IN EFI_HANDLE Handle, - IN EFI_PCI_IO_PROTOCOL *PciIo, - IN PCI_TYPE00 *PciHdr - ) -{ - EFI_DEVICE_PATH_PROTOCOL *DevPathNode; - EFI_DEVICE_PATH_PROTOCOL *DevPath; - UINTN RootSlot; - UINTN Idx; - UINT8 IrqLine; - EFI_STATUS Status; - UINT32 RootBusNumber; - - Status =3D EFI_SUCCESS; - - if (PciHdr->Device.InterruptPin !=3D 0) { - DevPathNode =3D DevicePathFromHandle (Handle); - ASSERT (DevPathNode !=3D NULL); - DevPath =3D DevPathNode; - - RootBusNumber =3D 0; - if ((DevicePathType (DevPathNode) =3D=3D ACPI_DEVICE_PATH) && - (DevicePathSubType (DevPathNode) =3D=3D ACPI_DP) && - (((ACPI_HID_DEVICE_PATH *)DevPathNode)->HID =3D=3D EISA_PNP_ID (0x= 0A03))) - { - RootBusNumber =3D ((ACPI_HID_DEVICE_PATH *)DevPathNode)->UID; - } - - // - // Compute index into PciHostIrqs[] table by walking - // the device path and adding up all device numbers - // - Status =3D EFI_NOT_FOUND; - RootSlot =3D 0; - Idx =3D PciHdr->Device.InterruptPin - 1; - while (!IsDevicePathEnd (DevPathNode)) { - if ((DevicePathType (DevPathNode) =3D=3D HARDWARE_DEVICE_PATH) && - (DevicePathSubType (DevPathNode) =3D=3D HW_PCI_DP)) - { - Idx +=3D ((PCI_DEVICE_PATH *)DevPathNode)->Device; - - // - // Unlike SeaBIOS, which starts climbing from the leaf device - // up toward the root, we traverse the device path starting at - // the root moving toward the leaf node. - // The slot number of the top-level parent bridge is needed for - // Q35 cases with more than 24 slots on the root bus. - // - if (Status !=3D EFI_SUCCESS) { - Status =3D EFI_SUCCESS; - RootSlot =3D ((PCI_DEVICE_PATH *)DevPathNode)->Device; - } - } - - DevPathNode =3D NextDevicePathNode (DevPathNode); - } - - if (EFI_ERROR (Status)) { - return Status; - } - - if ((RootBusNumber =3D=3D 0) && (RootSlot =3D=3D 0)) { - DEBUG (( - DEBUG_ERROR, - "%a: PCI host bridge (00:00.0) should have no interrupts!\n", - __func__ - )); - ASSERT (FALSE); - } - - // - // Final PciHostIrqs[] index calculation depends on the platform - // and should match SeaBIOS src/fw/pciinit.c *_pci_slot_get_irq() - // - switch (mHostBridgeDevId) { - case INTEL_82441_DEVICE_ID: - Idx -=3D 1; - break; - case INTEL_Q35_MCH_DEVICE_ID: - // - // SeaBIOS contains the following comment: - // "Slots 0-24 rotate slot:pin mapping similar to piix above, but - // with a different starting index - see q35-acpi-dsdt.dsl. - // - // Slots 25-31 all use LNKA mapping (or LNKE, but A:D =3D E:H)" - // - if (RootSlot > 24) { - // - // in this case, subtract back out RootSlot from Idx - // (SeaBIOS never adds it to begin with, but that would make our - // device path traversal loop above too awkward) - // - Idx -=3D RootSlot; - } - - break; - default: - ASSERT (FALSE); // should never get here - } - - Idx %=3D ARRAY_SIZE (PciHostIrqs); - IrqLine =3D PciHostIrqs[Idx]; - - DEBUG_CODE_BEGIN (); - { - CHAR16 *DevPathString; - STATIC CHAR16 Fallback[] =3D L""; - UINTN Segment, Bus, Device, Function; - - DevPathString =3D ConvertDevicePathToText (DevPath, FALSE, FALSE); - if (DevPathString =3D=3D NULL) { - DevPathString =3D Fallback; - } - - Status =3D PciIo->GetLocation (PciIo, &Segment, &Bus, &Device, &Func= tion); - ASSERT_EFI_ERROR (Status); - - DEBUG (( - DEBUG_VERBOSE, - "%a: [%02x:%02x.%x] %s -> 0x%02x\n", - __func__, - (UINT32)Bus, - (UINT32)Device, - (UINT32)Function, - DevPathString, - IrqLine - )); - - if (DevPathString !=3D Fallback) { - FreePool (DevPathString); - } - } - DEBUG_CODE_END (); - - // - // Set PCI Interrupt Line register for this device to PciHostIrqs[Idx] - // - Status =3D PciIo->Pci.Write ( - PciIo, - EfiPciIoWidthUint8, - PCI_INT_LINE_OFFSET, - 1, - &IrqLine - ); - } - - return Status; -} - -VOID -PciAcpiInitialization ( - ) -{ - UINTN Pmba; - - // - // Query Host Bridge DID to determine platform type - // - mHostBridgeDevId =3D PcdGet16 (PcdOvmfHostBridgePciDevId); - switch (mHostBridgeDevId) { - case INTEL_82441_DEVICE_ID: - Pmba =3D POWER_MGMT_REGISTER_PIIX4 (PIIX4_PMBA); - // - // 00:01.0 ISA Bridge (PIIX4) LNK routing targets - // - PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x60), 0x0b); // A - PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x61), 0x0b); // B - PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x62), 0x0a); // C - PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x63), 0x0a); // D - break; - case INTEL_Q35_MCH_DEVICE_ID: - Pmba =3D POWER_MGMT_REGISTER_Q35 (ICH9_PMBASE); - // - // 00:1f.0 LPC Bridge (Q35) LNK routing targets - // - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x60), 0x0a); // A - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x61), 0x0a); // B - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x62), 0x0b); // C - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x63), 0x0b); // D - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x68), 0x0a); // E - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x69), 0x0a); // F - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x6a), 0x0b); // G - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x6b), 0x0b); // H - break; - default: - DEBUG (( - DEBUG_ERROR, - "%a: Unknown Host Bridge Device ID: 0x%04x\n", - __func__, - mHostBridgeDevId - )); - ASSERT (FALSE); - return; - } - - // - // Initialize PCI_INTERRUPT_LINE for applicable present PCI devices - // - VisitAllPciInstances (SetPciIntLine); - - // - // Set ACPI SCI_EN bit in PMCNTRL - // - IoOr16 ((PciRead32 (Pmba) & ~BIT0) + 4, BIT0); -} - -EFI_STATUS -EFIAPI -ConnectRecursivelyIfPciMassStorage ( - IN EFI_HANDLE Handle, - IN EFI_PCI_IO_PROTOCOL *Instance, - IN PCI_TYPE00 *PciHeader - ) -{ - EFI_STATUS Status; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - CHAR16 *DevPathStr; - - // - // Recognize PCI Mass Storage - // - if (IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE)) { - DevicePath =3D NULL; - Status =3D gBS->HandleProtocol ( - Handle, - &gEfiDevicePathProtocolGuid, - (VOID *)&DevicePath - ); - if (EFI_ERROR (Status)) { - return Status; - } - - // - // Print Device Path - // - DevPathStr =3D ConvertDevicePathToText (DevicePath, FALSE, FALSE); - if (DevPathStr !=3D NULL) { - DEBUG (( - DEBUG_INFO, - "Found Mass Storage device: %s\n", - DevPathStr - )); - FreePool (DevPathStr); - } - - Status =3D gBS->ConnectController (Handle, NULL, NULL, TRUE); - if (EFI_ERROR (Status)) { - return Status; - } - } - - return EFI_SUCCESS; -} - -/** - Connect with predefined platform connect sequence. - - The OEM/IBV can customize with their own connect sequence. -**/ -VOID -PlatformBdsConnectSequence ( - VOID - ) -{ - UINTN Index; - - DEBUG ((DEBUG_INFO, "PlatformBdsConnectSequence\n")); - - Index =3D 0; - - // - // Here we can get the customized platform connect sequence - // Notes: we can connect with new variable which record the - // last time boots connect device path sequence - // - while (gPlatformConnectSequence[Index] !=3D NULL) { - // - // Build the platform boot option - // - EfiBootManagerConnectDevicePath (gPlatformConnectSequence[Index], NULL= ); - Index++; - } - - EfiBootManagerConnectAll (); -} - -/** - Do the platform specific action after the console is ready - - Possible things that can be done in PlatformBootManagerAfterConsole: - - > Console post action: - > Dynamically switch output mode from 100x31 to 80x25 for certain sena= rino - > Signal console ready platform customized event - > Run diagnostics like memory testing - > Connect certain devices - > Dispatch aditional option roms - > Special boot: e.g.: USB boot, enter UI -**/ -VOID -EFIAPI -PlatformBootManagerAfterConsole ( - VOID - ) -{ - EFI_BOOT_MODE BootMode; - - DEBUG ((DEBUG_INFO, "PlatformBootManagerAfterConsole\n")); - - // - // Get current Boot Mode - // - BootMode =3D GetBootModeHob (); - DEBUG ((DEBUG_INFO, "Boot Mode:%x\n", BootMode)); - - // - // Go the different platform policy with different boot mode - // Notes: this part code can be change with the table policy - // - ASSERT (BootMode =3D=3D BOOT_WITH_FULL_CONFIGURATION); - - // - // Logo show - // - BootLogoEnableLogo (); - - // - // Set PCI Interrupt Line registers and ACPI SCI_EN - // - PciAcpiInitialization (); - - // - // Process QEMU's -kernel command line option - // - TryRunningQemuKernel (); - - // - // Perform some platform specific connect sequence - // - PlatformBdsConnectSequence (); - - EfiBootManagerRefreshAllBootOption (); - - // - // Register UEFI Shell (Will be removed if the Shell isn't built - // which is the default) - // - PlatformRegisterFvBootOption ( - &gUefiShellFileGuid, - L"EFI Internal Shell", - LOAD_OPTION_ACTIVE - ); - - // - // Register Grub - // - PlatformRegisterFvBootOption ( - &gGrubFileGuid, - L"Grub Bootloader", - LOAD_OPTION_ACTIVE - ); - - RemoveStaleFvFileOptions (); - - PlatformBmPrintScRegisterHandler (); -} - -/** - This notification function is invoked when an instance of the - EFI_DEVICE_PATH_PROTOCOL is produced. - - @param Event The event that occurred - @param Context For EFI compatibility. Not used. - -**/ -VOID -EFIAPI -NotifyDevPath ( - IN EFI_EVENT Event, - IN VOID *Context - ) -{ - EFI_HANDLE Handle; - EFI_STATUS Status; - UINTN BufferSize; - EFI_DEVICE_PATH_PROTOCOL *DevPathNode; - ATAPI_DEVICE_PATH *Atapi; - - // - // Examine all new handles - // - for ( ; ;) { - // - // Get the next handle - // - BufferSize =3D sizeof (Handle); - Status =3D gBS->LocateHandle ( - ByRegisterNotify, - NULL, - mEfiDevPathNotifyReg, - &BufferSize, - &Handle - ); - - // - // If not found, we're done - // - if (EFI_NOT_FOUND =3D=3D Status) { - break; - } - - if (EFI_ERROR (Status)) { - continue; - } - - // - // Get the DevicePath protocol on that handle - // - Status =3D gBS->HandleProtocol ( - Handle, - &gEfiDevicePathProtocolGuid, - (VOID **)&DevPathNode - ); - ASSERT_EFI_ERROR (Status); - - while (!IsDevicePathEnd (DevPathNode)) { - // - // Find the handler to dump this device path node - // - if ( - (DevicePathType (DevPathNode) =3D=3D MESSAGING_DEVICE_PATH) && - (DevicePathSubType (DevPathNode) =3D=3D MSG_ATAPI_DP) - ) - { - Atapi =3D (ATAPI_DEVICE_PATH *)DevPathNode; - PciOr16 ( - PCI_LIB_ADDRESS ( - 0, - 1, - 1, - (Atapi->PrimarySecondary =3D=3D 1) ? 0x42 : 0x40 - ), - BIT15 - ); - } - - // - // Next device path node - // - DevPathNode =3D NextDevicePathNode (DevPathNode); - } - } - - return; -} - -VOID -InstallDevicePathCallback ( - VOID - ) -{ - DEBUG ((DEBUG_INFO, "Registered NotifyDevPath Event\n")); - mEfiDevPathEvent =3D EfiCreateProtocolNotifyEvent ( - &gEfiDevicePathProtocolGuid, - TPL_CALLBACK, - NotifyDevPath, - NULL, - &mEfiDevPathNotifyReg - ); -} - -/** - This function is called each second during the boot manager waits the - timeout. - - @param TimeoutRemain The remaining timeout. -**/ -VOID -EFIAPI -PlatformBootManagerWaitCallback ( - UINT16 TimeoutRemain - ) -{ - // - // Since the timeout should be forced to zero we should never - // Get here - // - ASSERT (FALSE); -} - -/** - The function is called when no boot option could be launched, - including platform recovery options and options pointing to applications - built into firmware volumes. - - If this function returns, BDS attempts to enter an infinite loop. -**/ -VOID -EFIAPI -PlatformBootManagerUnableToBoot ( - VOID - ) -{ - // - // If we get here something failed about the grub boot but since - // We're privy to the secret we must panic and not retry or loop - // - ASSERT (FALSE); - CpuDeadLoop (); -} diff --git a/OvmfPkg/Library/PlatformBootManagerLibGrub/PlatformData.c b/Ov= mfPkg/Library/PlatformBootManagerLibGrub/PlatformData.c deleted file mode 100644 index 5e2b7510c5dd..000000000000 --- a/OvmfPkg/Library/PlatformBootManagerLibGrub/PlatformData.c +++ /dev/null @@ -1,212 +0,0 @@ -/** @file - Defined the platform specific device path which will be used by - platform Bbd to perform the platform policy connect. - - Copyright (C) 2020 James Bottomley, IBM Corporation. - Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include "BdsPlatform.h" -#include -#include - -// -// Vendor UART Device Path structure -// -#pragma pack (1) -typedef struct { - VENDOR_DEVICE_PATH VendorHardware; - UART_DEVICE_PATH Uart; - VENDOR_DEVICE_PATH TerminalType; - EFI_DEVICE_PATH_PROTOCOL End; -} VENDOR_UART_DEVICE_PATH; -#pragma pack () - -// -// USB Keyboard Device Path structure -// -#pragma pack (1) -typedef struct { - USB_CLASS_DEVICE_PATH Keyboard; - EFI_DEVICE_PATH_PROTOCOL End; -} USB_KEYBOARD_DEVICE_PATH; -#pragma pack () - -// -// QemuRamfb Device Path structure -// -#pragma pack (1) -typedef struct { - VENDOR_DEVICE_PATH Vendor; - ACPI_ADR_DEVICE_PATH AcpiAdr; - EFI_DEVICE_PATH_PROTOCOL End; -} VENDOR_RAMFB_DEVICE_PATH; -#pragma pack () - -ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode =3D gPnpPs2Keyboard; -ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode =3D gPnp16550ComPort; -UART_DEVICE_PATH gUartDeviceNode =3D gUart; -VENDOR_DEVICE_PATH gTerminalTypeDeviceNode =3D gPcAnsiTerminal; - -// -// Platform specific keyboard device path -// - -// -// Debug Agent UART Device Path -// -VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath =3D { - { - { - HARDWARE_DEVICE_PATH, - HW_VENDOR_DP, - { - (UINT8)(sizeof (VENDOR_DEVICE_PATH)), - (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) - } - }, - EFI_DEBUG_AGENT_GUID, - }, - { - { - MESSAGING_DEVICE_PATH, - MSG_UART_DP, - { - (UINT8)(sizeof (UART_DEVICE_PATH)), - (UINT8)((sizeof (UART_DEVICE_PATH)) >> 8) - } - }, - 0, // Reserved - 0, // BaudRate - Default - 0, // DataBits - Default - 0, // Parity - Default - 0, // StopBits - Default - }, - gPcAnsiTerminal, - gEndEntire -}; - -STATIC USB_KEYBOARD_DEVICE_PATH gUsbKeyboardDevicePath =3D { - { - { - MESSAGING_DEVICE_PATH, - MSG_USB_CLASS_DP, - { - (UINT8)sizeof (USB_CLASS_DEVICE_PATH), - (UINT8)(sizeof (USB_CLASS_DEVICE_PATH) >> 8) - } - }, - 0xFFFF, // VendorId: any - 0xFFFF, // ProductId: any - 3, // DeviceClass: HID - 1, // DeviceSubClass: boot - 1 // DeviceProtocol: keyboard - }, - gEndEntire -}; - -STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath =3D { - { - { - HARDWARE_DEVICE_PATH, - HW_VENDOR_DP, - { - (UINT8)(sizeof (VENDOR_DEVICE_PATH)), - (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) - } - }, - QEMU_RAMFB_GUID, - }, - { - { - ACPI_DEVICE_PATH, - ACPI_ADR_DP, - { - (UINT8)(sizeof (ACPI_ADR_DEVICE_PATH)), - (UINT8)((sizeof (ACPI_ADR_DEVICE_PATH)) >> 8) - } - }, - ACPI_DISPLAY_ADR ( - 1, // DeviceIdScheme - 0, // HeadId - 0, // NonVgaOutput - 1, // BiosCanDetect - 0, // VendorInfo - ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL, // Type - 0, // Port - 0 // Index - ), - }, - gEndEntire -}; - -STATIC VENDOR_UART_DEVICE_PATH gXenConsoleDevicePath =3D { - { - { - HARDWARE_DEVICE_PATH, - HW_VENDOR_DP, - { - (UINT8)(sizeof (VENDOR_DEVICE_PATH)), - (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) - } - }, - EDKII_SERIAL_PORT_LIB_VENDOR_GUID - }, - { - { - MESSAGING_DEVICE_PATH, - MSG_UART_DP, - { - (UINT8)(sizeof (UART_DEVICE_PATH)), - (UINT8)((sizeof (UART_DEVICE_PATH)) >> 8) - } - }, - 0, - FixedPcdGet64 (PcdUartDefaultBaudRate), - FixedPcdGet8 (PcdUartDefaultDataBits), - FixedPcdGet8 (PcdUartDefaultParity), - FixedPcdGet8 (PcdUartDefaultStopBits), - }, - gPcAnsiTerminal, - gEndEntire -}; - -// -// Predefined platform default console device path -// -PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] =3D { - { - (EFI_DEVICE_PATH_PROTOCOL *)&gDebugAgentUartDevicePath, - (CONSOLE_OUT | CONSOLE_IN | STD_ERROR) - }, - { - (EFI_DEVICE_PATH_PROTOCOL *)&gUsbKeyboardDevicePath, - CONSOLE_IN - }, - { - (EFI_DEVICE_PATH_PROTOCOL *)&gQemuRamfbDevicePath, - CONSOLE_OUT - }, - { - NULL, - 0 - } -}; - -PLATFORM_CONSOLE_CONNECT_ENTRY gXenPlatformConsole[] =3D { - { - (EFI_DEVICE_PATH_PROTOCOL *)&gXenConsoleDevicePath, - (CONSOLE_OUT | CONSOLE_IN | STD_ERROR) - }, - { - NULL, - 0 - } -}; - -// -// Predefined platform connect sequence -// -EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[] =3D { NULL }; diff --git a/OvmfPkg/Library/PlatformBootManagerLibGrub/QemuKernel.c b/Ovmf= Pkg/Library/PlatformBootManagerLibGrub/QemuKernel.c deleted file mode 100644 index 84b25db52159..000000000000 --- a/OvmfPkg/Library/PlatformBootManagerLibGrub/QemuKernel.c +++ /dev/null @@ -1,55 +0,0 @@ -/** @file - - Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include - -#include -#include -#include -#include -#include - -EFI_STATUS -TryRunningQemuKernel ( - VOID - ) -{ - EFI_STATUS Status; - EFI_HANDLE KernelImageHandle; - - Status =3D QemuLoadKernelImage (&KernelImageHandle); - if (EFI_ERROR (Status)) { - return Status; - } - - // - // Signal the EVT_SIGNAL_READY_TO_BOOT event - // - EfiSignalEventReadyToBoot (); - - REPORT_STATUS_CODE ( - EFI_PROGRESS_CODE, - (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT) - ); - - // - // Start the image. - // - Status =3D QemuStartKernelImage (&KernelImageHandle); - if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "%a: QemuStartKernelImage(): %r\n", - __func__, - Status - )); - } - - QemuUnloadKernelImage (KernelImageHandle); - - return Status; -} --=20 2.40.1 -=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 (#104093): https://edk2.groups.io/g/devel/message/104093 Mute This Topic: https://groups.io/mt/98699804/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-