/** @file Secure Encrypted Virtualization (SEV) library helper function Copyright (c) 2017 - 2020, AMD Incorporated. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include "VirtualMemory.h" /** This function clears memory encryption bit for the memory region specified by BaseAddress and NumPages from the current page table context. @param[in] Cr3BaseAddress Cr3 Base Address (if zero then use current CR3) @param[in] BaseAddress The physical address that is the start address of a memory region. @param[in] NumPages The number of pages from start memory region. @retval RETURN_SUCCESS The attributes were cleared for the memory region. @retval RETURN_INVALID_PARAMETER Number of pages is zero. @retval RETURN_UNSUPPORTED Clearing the memory encryption attribute is not supported **/ RETURN_STATUS EFIAPI MemEncryptSevClearPageEncMask ( IN PHYSICAL_ADDRESS Cr3BaseAddress, IN PHYSICAL_ADDRESS BaseAddress, IN UINTN NumPages ) { return InternalMemEncryptSevSetMemoryDecrypted ( Cr3BaseAddress, BaseAddress, EFI_PAGES_TO_SIZE (NumPages) ); } /** This function sets memory encryption bit for the memory region specified by BaseAddress and NumPages from the current page table context. @param[in] Cr3BaseAddress Cr3 Base Address (if zero then use current CR3) @param[in] BaseAddress The physical address that is the start address of a memory region. @param[in] NumPages The number of pages from start memory region. @retval RETURN_SUCCESS The attributes were set for the memory region. @retval RETURN_INVALID_PARAMETER Number of pages is zero. @retval RETURN_UNSUPPORTED Setting the memory encryption attribute is not supported **/ RETURN_STATUS EFIAPI MemEncryptSevSetPageEncMask ( IN PHYSICAL_ADDRESS Cr3BaseAddress, IN PHYSICAL_ADDRESS BaseAddress, IN UINTN NumPages ) { return InternalMemEncryptSevSetMemoryEncrypted ( Cr3BaseAddress, BaseAddress, EFI_PAGES_TO_SIZE (NumPages) ); } /** Returns the encryption state of the specified virtual address range. @param[in] Cr3BaseAddress Cr3 Base Address (if zero then use current CR3) @param[in] BaseAddress Base address to check @param[in] Length Length of virtual address range @retval MemEncryptSevAddressRangeUnencrypted Address range is mapped unencrypted @retval MemEncryptSevAddressRangeEncrypted Address range is mapped encrypted @retval MemEncryptSevAddressRangeMixed Address range is mapped mixed @retval MemEncryptSevAddressRangeError Address range is not mapped **/ MEM_ENCRYPT_SEV_ADDRESS_RANGE_STATE EFIAPI MemEncryptSevGetAddressRangeState ( IN PHYSICAL_ADDRESS Cr3BaseAddress, IN PHYSICAL_ADDRESS BaseAddress, IN UINTN Length ) { return InternalMemEncryptSevGetAddressRangeState ( Cr3BaseAddress, BaseAddress, Length ); } /** This function clears memory encryption bit for the mmio region specified by BaseAddress and NumPages. @param[in] Cr3BaseAddress Cr3 Base Address (if zero then use current CR3) @param[in] BaseAddress The physical address that is the start address of a mmio region. @param[in] NumPages The number of pages from start memory region. @retval RETURN_SUCCESS The attributes were cleared for the memory region. @retval RETURN_INVALID_PARAMETER Number of pages is zero. @retval RETURN_UNSUPPORTED Clearing the memory encryption attribute is not supported **/ RETURN_STATUS EFIAPI MemEncryptSevClearMmioPageEncMask ( IN PHYSICAL_ADDRESS Cr3BaseAddress, IN PHYSICAL_ADDRESS BaseAddress, IN UINTN NumPages ) { return InternalMemEncryptSevClearMmioPageEncMask ( Cr3BaseAddress, BaseAddress, EFI_PAGES_TO_SIZE (NumPages) ); }