| /** @file | |
| Copyright (c) 2014-2017, Linaro Limited. All rights reserved. | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #include <Base.h> | |
| #include <Library/ArmLib.h> | |
| #include <Library/BaseLib.h> | |
| #include <Library/DebugLib.h> | |
| STATIC ARM_MEMORY_REGION_DESCRIPTOR mVirtualMemoryTable[2]; | |
| /** | |
| Return the Virtual Memory Map of your platform | |
| This Virtual Memory Map is used by MemoryInitPei Module to initialize the MMU | |
| on your platform. | |
| @param[out] VirtualMemoryMap Array of ARM_MEMORY_REGION_DESCRIPTOR | |
| describing a Physical-to-Virtual Memory | |
| mapping. This array must be ended by a | |
| zero-filled entry. The allocated memory | |
| will not be freed. | |
| **/ | |
| VOID | |
| EFIAPI | |
| ArmVirtGetMemoryMap ( | |
| OUT ARM_MEMORY_REGION_DESCRIPTOR **VirtualMemoryMap | |
| ) | |
| { | |
| EFI_PHYSICAL_ADDRESS TopOfAddressSpace; | |
| ASSERT (VirtualMemoryMap != NULL); | |
| TopOfAddressSpace = LShiftU64 (1ULL, ArmGetPhysicalAddressBits ()); | |
| // | |
| // Map the entire physical memory space as cached. The only device | |
| // we care about is the GIC, which will be stage 2 mapped as a device | |
| // by the hypervisor, overriding the cached mapping we install here. | |
| // | |
| mVirtualMemoryTable[0].PhysicalBase = 0x0; | |
| mVirtualMemoryTable[0].VirtualBase = 0x0; | |
| mVirtualMemoryTable[0].Length = TopOfAddressSpace; | |
| mVirtualMemoryTable[0].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK; | |
| mVirtualMemoryTable[1].PhysicalBase = 0x0; | |
| mVirtualMemoryTable[1].VirtualBase = 0x0; | |
| mVirtualMemoryTable[1].Length = 0x0; | |
| mVirtualMemoryTable[1].Attributes = 0x0; | |
| *VirtualMemoryMap = mVirtualMemoryTable; | |
| } |