X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=IntelFrameworkModulePkg%2FUniversal%2FAcpi%2FAcpiS3SaveDxe%2FAcpiVariableThunkPlatform.c;fp=IntelFrameworkModulePkg%2FUniversal%2FAcpi%2FAcpiS3SaveDxe%2FAcpiVariableThunkPlatform.c;h=0000000000000000000000000000000000000000;hp=97bcb55579bd0b172e71647efa5ffd7726945f27;hb=aa7fc1c11c3d57d82842dbede50d064639671a98;hpb=4286eb22f4aec33b90574b998a31f8bd34dd4f47 diff --git a/IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiVariableThunkPlatform.c b/IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiVariableThunkPlatform.c deleted file mode 100644 index 97bcb55579..0000000000 --- a/IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiVariableThunkPlatform.c +++ /dev/null @@ -1,215 +0,0 @@ -/** @file - This is an implementation of the AcpiVariable platform field for ECP platform. - -Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
- -SPDX-License-Identifier: BSD-2-Clause-Patent - -== - -typedef struct { - EFI_PHYSICAL_ADDRESS AcpiReservedMemoryBase; <<=== - UINT32 AcpiReservedMemorySize; <<=== - EFI_PHYSICAL_ADDRESS S3ReservedLowMemoryBase; - EFI_PHYSICAL_ADDRESS AcpiBootScriptTable; - EFI_PHYSICAL_ADDRESS RuntimeScriptTableBase; - EFI_PHYSICAL_ADDRESS AcpiFacsTable; - UINT64 SystemMemoryLength; <<=== - ACPI_CPU_DATA_COMPATIBILITY AcpiCpuData; - EFI_PHYSICAL_ADDRESS VideoOpromAddress; - UINT32 VideoOpromSize; - EFI_PHYSICAL_ADDRESS S3DebugBufferAddress; - EFI_PHYSICAL_ADDRESS S3ResumeNvsEntryPoint; -} ACPI_VARIABLE_SET_COMPATIBILITY; - -**/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -GLOBAL_REMOVE_IF_UNREFERENCED -ACPI_VARIABLE_SET_COMPATIBILITY *mAcpiVariableSetCompatibility = NULL; - -/** - Allocate memory below 4G memory address. - - This function allocates memory below 4G memory address. - - @param MemoryType Memory type of memory to allocate. - @param Size Size of memory to allocate. - - @return Allocated address for output. - -**/ -VOID* -AllocateMemoryBelow4G ( - IN EFI_MEMORY_TYPE MemoryType, - IN UINTN Size - ); - -/** - Hook point for AcpiVariableThunkPlatform for S3Ready. - -**/ -VOID -S3ReadyThunkPlatform ( - VOID - ) -{ - EFI_PHYSICAL_ADDRESS AcpiMemoryBase; - UINT32 AcpiMemorySize; - EFI_PEI_HOB_POINTERS Hob; - UINT64 MemoryLength; - - DEBUG ((EFI_D_INFO, "S3ReadyThunkPlatform\n")); - - if (mAcpiVariableSetCompatibility == NULL) { - return; - } - - // - // Allocate ACPI reserved memory under 4G - // - AcpiMemoryBase = (EFI_PHYSICAL_ADDRESS)(UINTN)AllocateMemoryBelow4G (EfiReservedMemoryType, PcdGet32 (PcdS3AcpiReservedMemorySize)); - ASSERT (AcpiMemoryBase != 0); - AcpiMemorySize = PcdGet32 (PcdS3AcpiReservedMemorySize); - - // - // Calculate the system memory length by memory hobs - // - MemoryLength = 0x100000; - Hob.Raw = GetFirstHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR); - ASSERT (Hob.Raw != NULL); - while ((Hob.Raw != NULL) && (!END_OF_HOB_LIST (Hob))) { - if (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) { - // - // Skip the memory region below 1MB - // - if (Hob.ResourceDescriptor->PhysicalStart >= 0x100000) { - MemoryLength += Hob.ResourceDescriptor->ResourceLength; - } - } - Hob.Raw = GET_NEXT_HOB (Hob); - Hob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, Hob.Raw); - } - - mAcpiVariableSetCompatibility->AcpiReservedMemoryBase = AcpiMemoryBase; - mAcpiVariableSetCompatibility->AcpiReservedMemorySize = AcpiMemorySize; - mAcpiVariableSetCompatibility->SystemMemoryLength = MemoryLength; - - DEBUG((EFI_D_INFO, "AcpiVariableThunkPlatform: AcpiMemoryBase is 0x%8x\n", mAcpiVariableSetCompatibility->AcpiReservedMemoryBase)); - DEBUG((EFI_D_INFO, "AcpiVariableThunkPlatform: AcpiMemorySize is 0x%8x\n", mAcpiVariableSetCompatibility->AcpiReservedMemorySize)); - DEBUG((EFI_D_INFO, "AcpiVariableThunkPlatform: SystemMemoryLength is 0x%8x\n", mAcpiVariableSetCompatibility->SystemMemoryLength)); - - return ; -} - -/** - Register callback function upon VariableLockProtocol - to lock ACPI_GLOBAL_VARIABLE variable to avoid malicious code to update it. - - @param[in] Event Event whose notification function is being invoked. - @param[in] Context Pointer to the notification function's context. -**/ -VOID -EFIAPI -VariableLockAcpiGlobalVariable ( - IN EFI_EVENT Event, - IN VOID *Context - ) -{ - EFI_STATUS Status; - EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock; - // - // Mark ACPI_GLOBAL_VARIABLE variable to read-only if the Variable Lock protocol exists - // - Status = gBS->LocateProtocol (&gEdkiiVariableLockProtocolGuid, NULL, (VOID **) &VariableLock); - if (!EFI_ERROR (Status)) { - Status = VariableLock->RequestToLock (VariableLock, ACPI_GLOBAL_VARIABLE, &gEfiAcpiVariableCompatiblityGuid); - ASSERT_EFI_ERROR (Status); - } -} - -/** - Hook point for AcpiVariableThunkPlatform for InstallAcpiS3Save. -**/ -VOID -InstallAcpiS3SaveThunk ( - VOID - ) -{ - EFI_STATUS Status; - FRAMEWORK_EFI_MP_SERVICES_PROTOCOL *FrameworkMpService; - UINTN VarSize; - VOID *Registration; - - Status = gBS->LocateProtocol ( - &gFrameworkEfiMpServiceProtocolGuid, - NULL, - (VOID**) &FrameworkMpService - ); - if (!EFI_ERROR (Status)) { - // - // On ECP platform, if framework CPU drivers are in use, The compatible version of ACPI variable set - // should be produced by CPU driver. - // - VarSize = sizeof (mAcpiVariableSetCompatibility); - Status = gRT->GetVariable ( - ACPI_GLOBAL_VARIABLE, - &gEfiAcpiVariableCompatiblityGuid, - NULL, - &VarSize, - &mAcpiVariableSetCompatibility - ); - if (EFI_ERROR (Status) || (VarSize != sizeof (mAcpiVariableSetCompatibility))) { - DEBUG ((EFI_D_ERROR, "FATAL ERROR: AcpiVariableSetCompatibility was not saved by CPU driver correctly. OS S3 may fail!\n")); - mAcpiVariableSetCompatibility = NULL; - } - } else { - // - // Allocate/initialize the compatible version of Acpi Variable Set since Framework chipset/platform - // driver need this variable. ACPI_GLOBAL_VARIABLE variable is not used in runtime phase, - // so RT attribute is not needed for it. - // - mAcpiVariableSetCompatibility = AllocateMemoryBelow4G (EfiACPIMemoryNVS, sizeof(ACPI_VARIABLE_SET_COMPATIBILITY)); - Status = gRT->SetVariable ( - ACPI_GLOBAL_VARIABLE, - &gEfiAcpiVariableCompatiblityGuid, - EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE, - sizeof(mAcpiVariableSetCompatibility), - &mAcpiVariableSetCompatibility - ); - if (!EFI_ERROR (Status)) { - // - // Register callback function upon VariableLockProtocol - // to lock ACPI_GLOBAL_VARIABLE variable to avoid malicious code to update it. - // - EfiCreateProtocolNotifyEvent ( - &gEdkiiVariableLockProtocolGuid, - TPL_CALLBACK, - VariableLockAcpiGlobalVariable, - NULL, - &Registration - ); - } else { - DEBUG ((EFI_D_ERROR, "FATAL ERROR: AcpiVariableSetCompatibility cannot be saved: %r. OS S3 may fail!\n", Status)); - gBS->FreePages ( - (EFI_PHYSICAL_ADDRESS) (UINTN) mAcpiVariableSetCompatibility, - EFI_SIZE_TO_PAGES (sizeof (ACPI_VARIABLE_SET_COMPATIBILITY)) - ); - mAcpiVariableSetCompatibility = NULL; - } - } - - DEBUG((EFI_D_INFO, "AcpiVariableSetCompatibility is 0x%8x\n", mAcpiVariableSetCompatibility)); -}