/** @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;
}
