e6db53b
From ed22693f4fc4d780c19280a7a26438b7c9d84ecd Mon Sep 17 00:00:00 2001
e6db53b
From: Gerd Hoffmann <kraxel@redhat.com>
e6db53b
Date: Fri, 2 Dec 2022 14:10:09 +0100
e6db53b
Subject: [PATCH 31/32] OvmfPkg/QemuFwCfgLib: remove mQemuFwCfgSupported +
e6db53b
 mQemuFwCfgDmaSupported
e6db53b
e6db53b
Remove global variables, store the state in PlatformInfoHob instead.
e6db53b
Probing for fw_cfg happens on first use, at library initialization
e6db53b
time the Hob might not be present yet.
e6db53b
e6db53b
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
e6db53b
Tested-by: Tom Lendacky <thomas.lendacky@amd.com>
e6db53b
Acked-by: Ard Biesheuvel <ardb@kernel.org>
e6db53b
(cherry picked from commit cda98df16228970dcf9a4ce2af5368219711b4b0)
e6db53b
---
e6db53b
 .../Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf  |  4 ++
e6db53b
 OvmfPkg/Include/Library/PlatformInitLib.h     |  4 ++
e6db53b
 OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c   | 44 ++++++++++++++++---
e6db53b
 3 files changed, 45 insertions(+), 7 deletions(-)
e6db53b
e6db53b
diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf
e6db53b
index 1d7543a7d40f..b1f548febcf7 100644
e6db53b
--- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf
e6db53b
+++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf
e6db53b
@@ -39,8 +39,12 @@ [LibraryClasses]
e6db53b
   BaseLib
e6db53b
   BaseMemoryLib
e6db53b
   DebugLib
e6db53b
+  HobLib
e6db53b
   IoLib
e6db53b
   MemoryAllocationLib
e6db53b
 
e6db53b
+[Guids]
e6db53b
+  gUefiOvmfPkgPlatformInfoGuid
e6db53b
+
e6db53b
 [Pcd]
e6db53b
   gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaBase
e6db53b
diff --git a/OvmfPkg/Include/Library/PlatformInitLib.h b/OvmfPkg/Include/Library/PlatformInitLib.h
e6db53b
index da7ed76041d2..bf6f90a5761c 100644
e6db53b
--- a/OvmfPkg/Include/Library/PlatformInitLib.h
e6db53b
+++ b/OvmfPkg/Include/Library/PlatformInitLib.h
e6db53b
@@ -50,6 +50,10 @@ typedef struct {
e6db53b
   UINT32               S3AcpiReservedMemorySize;
e6db53b
 
e6db53b
   UINT64               FeatureControlValue;
e6db53b
+
e6db53b
+  BOOLEAN              QemuFwCfgChecked;
e6db53b
+  BOOLEAN              QemuFwCfgSupported;
e6db53b
+  BOOLEAN              QemuFwCfgDmaSupported;
e6db53b
 } EFI_HOB_PLATFORM_INFO;
e6db53b
 #pragma pack()
e6db53b
 
e6db53b
diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c
e6db53b
index a936fd103955..da86a3c84c02 100644
e6db53b
--- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c
e6db53b
+++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c
e6db53b
@@ -9,17 +9,17 @@
e6db53b
   SPDX-License-Identifier: BSD-2-Clause-Patent
e6db53b
 **/
e6db53b
 
e6db53b
+#include <PiPei.h>
e6db53b
 #include <Library/BaseLib.h>
e6db53b
-#include <Library/IoLib.h>
e6db53b
 #include <Library/DebugLib.h>
e6db53b
+#include <Library/HobLib.h>
e6db53b
+#include <Library/IoLib.h>
e6db53b
+#include <Library/PlatformInitLib.h>
e6db53b
 #include <Library/QemuFwCfgLib.h>
e6db53b
 #include <WorkArea.h>
e6db53b
 
e6db53b
 #include "QemuFwCfgLibInternal.h"
e6db53b
 
e6db53b
-STATIC BOOLEAN  mQemuFwCfgSupported = FALSE;
e6db53b
-STATIC BOOLEAN  mQemuFwCfgDmaSupported;
e6db53b
-
e6db53b
 /**
e6db53b
   Check if it is Tdx guest
e6db53b
 
e6db53b
@@ -93,13 +93,39 @@ QemuFwCfgProbe (
e6db53b
     ));
e6db53b
 }
e6db53b
 
e6db53b
+STATIC
e6db53b
+EFI_HOB_PLATFORM_INFO *
e6db53b
+QemuFwCfgGetPlatformInfo (
e6db53b
+  VOID
e6db53b
+  )
e6db53b
+{
e6db53b
+  EFI_HOB_PLATFORM_INFO  *PlatformInfoHob;
e6db53b
+  EFI_HOB_GUID_TYPE      *GuidHob;
e6db53b
+
e6db53b
+  GuidHob = GetFirstGuidHob (&gUefiOvmfPkgPlatformInfoGuid);
e6db53b
+  if (GuidHob == NULL) {
e6db53b
+    return NULL;
e6db53b
+  }
e6db53b
+
e6db53b
+  PlatformInfoHob = (EFI_HOB_PLATFORM_INFO *)GET_GUID_HOB_DATA (GuidHob);
e6db53b
+
e6db53b
+  if (!PlatformInfoHob->QemuFwCfgChecked) {
e6db53b
+    QemuFwCfgProbe (
e6db53b
+      &PlatformInfoHob->QemuFwCfgSupported,
e6db53b
+      &PlatformInfoHob->QemuFwCfgDmaSupported
e6db53b
+      );
e6db53b
+    PlatformInfoHob->QemuFwCfgChecked = TRUE;
e6db53b
+  }
e6db53b
+
e6db53b
+  return PlatformInfoHob;
e6db53b
+}
e6db53b
+
e6db53b
 RETURN_STATUS
e6db53b
 EFIAPI
e6db53b
 QemuFwCfgInitialize (
e6db53b
   VOID
e6db53b
   )
e6db53b
 {
e6db53b
-  QemuFwCfgProbe (&mQemuFwCfgSupported, &mQemuFwCfgDmaSupported);
e6db53b
   return RETURN_SUCCESS;
e6db53b
 }
e6db53b
 
e6db53b
@@ -117,7 +143,9 @@ InternalQemuFwCfgIsAvailable (
e6db53b
   VOID
e6db53b
   )
e6db53b
 {
e6db53b
-  return mQemuFwCfgSupported;
e6db53b
+  EFI_HOB_PLATFORM_INFO  *PlatformInfoHob = QemuFwCfgGetPlatformInfo ();
e6db53b
+
e6db53b
+  return PlatformInfoHob->QemuFwCfgSupported;
e6db53b
 }
e6db53b
 
e6db53b
 /**
e6db53b
@@ -132,7 +160,9 @@ InternalQemuFwCfgDmaIsAvailable (
e6db53b
   VOID
e6db53b
   )
e6db53b
 {
e6db53b
-  return mQemuFwCfgDmaSupported;
e6db53b
+  EFI_HOB_PLATFORM_INFO  *PlatformInfoHob = QemuFwCfgGetPlatformInfo ();
e6db53b
+
e6db53b
+  return PlatformInfoHob->QemuFwCfgDmaSupported;
e6db53b
 }
e6db53b
 
e6db53b
 /**
e6db53b
-- 
e6db53b
2.38.1
e6db53b