/** @file Copyright (c) 2015 - 2016, Linaro Ltd. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef ARM_MMU_LIB_H_ #define ARM_MMU_LIB_H_ #include #include EFI_STATUS EFIAPI ArmConfigureMmu ( IN ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable, OUT VOID **TranslationTableBase OPTIONAL, OUT UINTN *TranslationTableSize OPTIONAL ); VOID EFIAPI ArmReplaceLiveTranslationEntry ( IN UINT64 *Entry, IN UINT64 Value, IN UINT64 RegionStart, IN BOOLEAN DisableMmu ); /** Set the requested memory permission attributes on a region of memory. BaseAddress and Length must be aligned to EFI_PAGE_SIZE. If Attributes contains a memory type attribute (EFI_MEMORY_UC/WC/WT/WB), the region is mapped according to this memory type, and additional memory permission attributes (EFI_MEMORY_RP/RO/XP) are taken into account as well, discarding any permission attributes that are currently set for the region. AttributeMask is ignored in this case, and must be set to 0x0. If Attributes contains only a combination of memory permission attributes (EFI_MEMORY_RP/RO/XP), each page in the region will retain its existing memory type, even if it is not uniformly set across the region. In this case, AttributesMask may be set to a mask of permission attributes, and memory permissions omitted from this mask will not be updated for any page in the region. All attributes appearing in Attributes must appear in AttributeMask as well. (Attributes & ~AttributeMask must produce 0x0) @param[in] BaseAddress The physical address that is the start address of a memory region. @param[in] Length The size in bytes of the memory region. @param[in] Attributes Mask of memory attributes to set. @param[in] AttributeMask Mask of memory attributes to take into account. @retval EFI_SUCCESS The attributes were set for the memory region. @retval EFI_INVALID_PARAMETER BaseAddress or Length is not suitably aligned. Invalid combination of Attributes and AttributeMask. @retval EFI_OUT_OF_RESOURCES Requested attributes cannot be applied due to lack of system resources. **/ EFI_STATUS ArmSetMemoryAttributes ( IN EFI_PHYSICAL_ADDRESS BaseAddress, IN UINT64 Length, IN UINT64 Attributes, IN UINT64 AttributeMask ); #endif // ARM_MMU_LIB_H_