]> git.proxmox.com Git - mirror_edk2.git/commitdiff
UefiCpuPkg/VmgExitLib: Add interfaces to set/read GHCB ValidBitmap bits
authorTom Lendacky <thomas.lendacky@amd.com>
Fri, 6 Nov 2020 17:53:04 +0000 (11:53 -0600)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Tue, 10 Nov 2020 19:07:55 +0000 (19:07 +0000)
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3008

In upcoming patches, the setting of the bits in the GHCB ValidBitmap will
be performed in multiple places. In order to reduce code duplication, add
an interface, VmgSetOffsetValid(), to VmgExitLib library to perform this
function. Also, to keep management of the ValidBitmap within the library,
add an inteface, VmgIsOffsetValid(), to return whether the bit in the
ValidBitmap is set for a specified offset.

The new VmgSetOffsetValid() function is a VOID function and will be an
empty function in the VmgExitLibNull implementation of the VmgExitLib
library.

The new VmgIsOffsetValid() function returns a BOOLEAN to indicate if the
offset is valid. This will always return FALSE in the VmgExitLibNull
implementation of the VmgExitLib library.

Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Acked-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Message-Id: <0bcb2373f8c6e0171ae277d3d7c2eb284621355e.1604685192.git.thomas.lendacky@amd.com>

UefiCpuPkg/Include/Library/VmgExitLib.h
UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c

index 45fc27d35e29c5741281558bc3755e6a48f11057..07e8af6450b935a97abcde28701fd4441c5a1e88 100644 (file)
@@ -74,6 +74,43 @@ VmgDone (
   IN OUT GHCB                *Ghcb\r
   );\r
 \r
+/**\r
+  Marks a specified offset as valid in the GHCB.\r
+\r
+  The ValidBitmap area represents the areas of the GHCB that have been marked\r
+  valid. Set the bit in ValidBitmap for the input offset.\r
+\r
+  @param[in, out]  Ghcb       A pointer to the GHCB\r
+  @param[in]       Offset     Qword offset in the GHCB to mark valid\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+VmgSetOffsetValid (\r
+  IN OUT GHCB                *Ghcb,\r
+  IN     GHCB_REGISTER       Offset\r
+  );\r
+\r
+/**\r
+  Checks if a specified offset is valid in the GHCB.\r
+\r
+  The ValidBitmap area represents the areas of the GHCB that have been marked\r
+  valid. Return whether the bit in the ValidBitmap is set for the input offset.\r
+\r
+  @param[in]  Ghcb            A pointer to the GHCB\r
+  @param[in]  Offset          Qword offset in the GHCB to mark valid\r
+\r
+  @retval TRUE                Offset is marked valid in the GHCB\r
+  @retval FALSE               Offset is not marked valid in the GHCB\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+VmgIsOffsetValid (\r
+  IN GHCB                    *Ghcb,\r
+  IN GHCB_REGISTER           Offset\r
+  );\r
+\r
 /**\r
   Handle a #VC exception.\r
 \r
index bb265e1700d25a5543501c92100c27855bfe265d..b47e282aff8211d31caf12b4b9c44de2a9c06dc6 100644 (file)
@@ -89,6 +89,48 @@ VmgDone (
 {\r
 }\r
 \r
+/**\r
+  Marks a field at the specified offset as valid in the GHCB.\r
+\r
+  The ValidBitmap area represents the areas of the GHCB that have been marked\r
+  valid. Set the bit in ValidBitmap for the input offset.\r
+\r
+  @param[in, out] Ghcb    Pointer to the Guest-Hypervisor Communication Block\r
+  @param[in]      Offset  Qword offset in the GHCB to mark valid\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+VmgSetOffsetValid (\r
+  IN OUT GHCB                *Ghcb,\r
+  IN     GHCB_REGISTER       Offset\r
+  )\r
+{\r
+}\r
+\r
+/**\r
+  Checks if a specified offset is valid in the GHCB.\r
+\r
+  The ValidBitmap area represents the areas of the GHCB that have been marked\r
+  valid. Return whether the bit in the ValidBitmap is set for the input offset.\r
+\r
+  @param[in]  Ghcb            A pointer to the GHCB\r
+  @param[in]  Offset          Qword offset in the GHCB to mark valid\r
+\r
+  @retval TRUE                Offset is marked valid in the GHCB\r
+  @retval FALSE               Offset is not marked valid in the GHCB\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+VmgIsOffsetValid (\r
+  IN GHCB                    *Ghcb,\r
+  IN GHCB_REGISTER           Offset\r
+  )\r
+{\r
+  return FALSE;\r
+}\r
+\r
 /**\r
   Handle a #VC exception.\r
 \r