VirtualBox

Ignore:
Timestamp:
Apr 14, 2023 3:17:44 PM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
156854
Message:

Devices/EFI/FirmwareNew: Update to edk2-stable202302 and make it build, bugref:4643

Location:
trunk/src/VBox/Devices/EFI/FirmwareNew
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/FirmwareNew

  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/PlatformPei/FeatureControl.c

    r85718 r99404  
    99
    1010#include <Library/DebugLib.h>
     11#include <Library/HobLib.h>
    1112#include <Library/PeiServicesLib.h>
    1213#include <Library/QemuFwCfgLib.h>
    1314#include <Ppi/MpServices.h>
    1415#include <Register/ArchitecturalMsr.h>
     16#include <IndustryStandard/Tdx.h>
    1517
    1618#include "Platform.h"
    17 
    18 //
    19 // The value to be written to the Feature Control MSR, retrieved from fw_cfg.
    20 //
    21 STATIC UINT64 mFeatureControlValue;
    2219
    2320/**
     
    3532EFIAPI
    3633WriteFeatureControl (
    37   IN OUT VOID *WorkSpace
     34  IN OUT VOID  *WorkSpace
    3835  )
    3936{
    40   AsmWriteMsr64 (MSR_IA32_FEATURE_CONTROL, mFeatureControlValue);
     37  EFI_HOB_PLATFORM_INFO  *PlatformInfoHob = WorkSpace;
     38
     39  if (TdIsEnabled ()) {
     40    TdVmCall (
     41      TDVMCALL_WRMSR,
     42      (UINT64)MSR_IA32_FEATURE_CONTROL,
     43      PlatformInfoHob->FeatureControlValue,
     44      0,
     45      0,
     46      0
     47      );
     48  } else {
     49    AsmWriteMsr64 (
     50      MSR_IA32_FEATURE_CONTROL,
     51      PlatformInfoHob->FeatureControlValue
     52      );
     53  }
    4154}
    4255
     
    6174  )
    6275{
    63   EFI_PEI_MP_SERVICES_PPI *MpServices;
    64   EFI_STATUS              Status;
     76  EFI_PEI_MP_SERVICES_PPI  *MpServices;
     77  EFI_STATUS               Status;
     78  EFI_HOB_PLATFORM_INFO    *PlatformInfoHob;
     79  EFI_HOB_GUID_TYPE        *GuidHob;
     80
     81  GuidHob = GetFirstGuidHob (&gUefiOvmfPkgPlatformInfoGuid);
     82  if (GuidHob == NULL) {
     83    return EFI_UNSUPPORTED;
     84  }
     85
     86  PlatformInfoHob = (EFI_HOB_PLATFORM_INFO *)GET_GUID_HOB_DATA (GuidHob);
    6587
    6688  DEBUG ((DEBUG_VERBOSE, "%a: %a\n", gEfiCallerBaseName, __FUNCTION__));
     
    7092  //
    7193  MpServices = Ppi;
    72   Status = MpServices->StartupAllAPs (
    73                          (CONST EFI_PEI_SERVICES **)PeiServices,
    74                          MpServices,
    75                          WriteFeatureControl, // Procedure
    76                          FALSE,               // SingleThread
    77                          0,                   // TimeoutInMicroSeconds: inf.
    78                          NULL                 // ProcedureArgument
    79                          );
    80   if (EFI_ERROR (Status) && Status != EFI_NOT_STARTED) {
     94  Status     = MpServices->StartupAllAPs (
     95                             (CONST EFI_PEI_SERVICES **)PeiServices,
     96                             MpServices,
     97                             WriteFeatureControl, // Procedure
     98                             FALSE,               // SingleThread
     99                             0,                   // TimeoutInMicroSeconds: inf.
     100                             PlatformInfoHob      // ProcedureArgument
     101                             );
     102  if (EFI_ERROR (Status) && (Status != EFI_NOT_STARTED)) {
    81103    DEBUG ((DEBUG_ERROR, "%a: StartupAllAps(): %r\n", __FUNCTION__, Status));
    82104    return Status;
     
    86108  // Now write the MSR on the BSP too.
    87109  //
    88   WriteFeatureControl (NULL);
     110  WriteFeatureControl (PlatformInfoHob);
    89111  return EFI_SUCCESS;
    90112}
     
    94116// EFI_PEI_MP_SERVICES_PPI becomes available.
    95117//
    96 STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mMpServicesNotify = {
     118STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR  mMpServicesNotify = {
    97119  EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | // Flags
    98120  EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
     
    103125VOID
    104126InstallFeatureControlCallback (
    105   VOID
     127  IN OUT EFI_HOB_PLATFORM_INFO  *PlatformInfoHob
    106128  )
    107129{
    108   EFI_STATUS           Status;
    109   FIRMWARE_CONFIG_ITEM FwCfgItem;
    110   UINTN                FwCfgSize;
     130  EFI_STATUS            Status;
     131  FIRMWARE_CONFIG_ITEM  FwCfgItem;
     132  UINTN                 FwCfgSize;
    111133
    112   Status = QemuFwCfgFindFile ("etc/msr_feature_control", &FwCfgItem,
    113              &FwCfgSize);
    114   if (EFI_ERROR (Status) || FwCfgSize != sizeof mFeatureControlValue) {
     134  Status = QemuFwCfgFindFile (
     135             "etc/msr_feature_control",
     136             &FwCfgItem,
     137             &FwCfgSize
     138             );
     139  if (EFI_ERROR (Status) || (FwCfgSize != sizeof (PlatformInfoHob->FeatureControlValue))) {
    115140    //
    116141    // Nothing to do.
     
    118143    return;
    119144  }
     145
    120146  QemuFwCfgSelectItem (FwCfgItem);
    121   QemuFwCfgReadBytes (sizeof mFeatureControlValue, &mFeatureControlValue);
     147  QemuFwCfgReadBytes (
     148    sizeof (PlatformInfoHob->FeatureControlValue),
     149    &(PlatformInfoHob->FeatureControlValue)
     150    );
    122151
    123152  Status = PeiServicesNotifyPpi (&mMpServicesNotify);
    124153  if (EFI_ERROR (Status)) {
    125     DEBUG ((DEBUG_ERROR, "%a: failed to set up MP Services callback: %r\n",
    126       __FUNCTION__, Status));
     154    DEBUG ((
     155      DEBUG_ERROR,
     156      "%a: failed to set up MP Services callback: %r\n",
     157      __FUNCTION__,
     158      Status
     159      ));
    127160  }
    128161}
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette