Add a function to ArmVExpressDxe to identify the current platform we are running on. This includes ARM32 and AArch64 models and hardware. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16931 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			183 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
*
 | 
						|
*  Copyright (c) 2011-2013, ARM Limited. All rights reserved.
 | 
						|
*
 | 
						|
*  This program and the accompanying materials
 | 
						|
*  are licensed and made available under the terms and conditions of the BSD License
 | 
						|
*  which accompanies this distribution.  The full text of the license may be found at
 | 
						|
*  http://opensource.org/licenses/bsd-license.php
 | 
						|
*
 | 
						|
*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
*
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _ARMPLATFORMLIB_H_
 | 
						|
#define _ARMPLATFORMLIB_H_
 | 
						|
 | 
						|
//
 | 
						|
// The package level header files this module uses
 | 
						|
//
 | 
						|
#include <PiPei.h>
 | 
						|
//
 | 
						|
// The protocols, PPI and GUID defintions for this module
 | 
						|
//
 | 
						|
#include <Ppi/MasterBootMode.h>
 | 
						|
#include <Ppi/BootInRecoveryMode.h>
 | 
						|
 | 
						|
#include <Library/ArmLib.h>
 | 
						|
 | 
						|
/**
 | 
						|
  This structure is used to describe a region of the EFI memory map
 | 
						|
 | 
						|
  Every EFI regions of the system memory described by their physical start address and their size
 | 
						|
  can have different attributes. Some regions can be tested and other untested.
 | 
						|
 | 
						|
**/
 | 
						|
typedef struct {
 | 
						|
  EFI_RESOURCE_ATTRIBUTE_TYPE  ResourceAttribute;
 | 
						|
  EFI_PHYSICAL_ADDRESS         PhysicalStart;
 | 
						|
  UINT64                       NumberOfBytes;
 | 
						|
} ARM_SYSTEM_MEMORY_REGION_DESCRIPTOR;
 | 
						|
 | 
						|
/**
 | 
						|
  Return the core per cluster. The method may differ per core type
 | 
						|
 | 
						|
  This function might be called from assembler before any stack is set.
 | 
						|
 | 
						|
  @return   Return the core count per cluster
 | 
						|
 | 
						|
**/
 | 
						|
UINTN
 | 
						|
ArmGetCpuCountPerCluster (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Return the core position from the value of its MpId register
 | 
						|
 | 
						|
  This function returns the core position from the position 0 in the processor.
 | 
						|
  This function might be called from assembler before any stack is set.
 | 
						|
 | 
						|
  @return   Return the core position
 | 
						|
 | 
						|
**/
 | 
						|
UINTN
 | 
						|
ArmPlatformGetCorePosition (
 | 
						|
  IN UINTN MpId
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Return a non-zero value if the callee is the primary core
 | 
						|
 | 
						|
  This function returns a non-zero value if the callee is the primary core.
 | 
						|
  The primary core is the core responsible to initialize the hardware and run UEFI.
 | 
						|
  This function might be called from assembler before any stack is set.
 | 
						|
 | 
						|
  @return   Return a non-zero value if the callee is the primary core.
 | 
						|
 | 
						|
**/
 | 
						|
UINTN
 | 
						|
ArmPlatformIsPrimaryCore (
 | 
						|
  IN UINTN MpId
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Return the MpId of the primary core
 | 
						|
 | 
						|
  This function returns the MpId of the primary core.
 | 
						|
  This function might be called from assembler before any stack is set.
 | 
						|
 | 
						|
  @return   Return the MpId of the primary core
 | 
						|
 | 
						|
**/
 | 
						|
UINTN
 | 
						|
ArmPlatformGetPrimaryCoreMpId (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Return the current Boot Mode
 | 
						|
 | 
						|
  This function returns the boot reason on the platform
 | 
						|
 | 
						|
  @return   Return the current Boot Mode of the platform
 | 
						|
 | 
						|
**/
 | 
						|
EFI_BOOT_MODE
 | 
						|
ArmPlatformGetBootMode (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  First platform specific function to be called in the PEI phase
 | 
						|
 | 
						|
  This function is actually the first function called by the PrePi
 | 
						|
  or PrePeiCore modules. It allows to retrieve arguments passed to
 | 
						|
  the UEFI firmware through the CPU registers.
 | 
						|
 | 
						|
  This function might be written into assembler as no stack are set
 | 
						|
  when the function is invoked.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
ArmPlatformPeiBootAction (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize controllers that must setup in the normal world
 | 
						|
 | 
						|
  This function is called by the ArmPlatformPkg/PrePi or ArmPlatformPkg/PlatformPei
 | 
						|
  in the PEI phase.
 | 
						|
 | 
						|
**/
 | 
						|
RETURN_STATUS
 | 
						|
ArmPlatformInitialize (
 | 
						|
  IN  UINTN                     MpId
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize the system (or sometimes called permanent) memory
 | 
						|
 | 
						|
  This memory is generally represented by the DRAM.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
ArmPlatformInitializeSystemMemory (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  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
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
ArmPlatformGetVirtualMemoryMap (
 | 
						|
  OUT ARM_MEMORY_REGION_DESCRIPTOR** VirtualMemoryMap
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Return the Platform specific PPIs
 | 
						|
 | 
						|
  This function exposes the Platform Specific PPIs. They can be used by any PrePi modules or passed
 | 
						|
  to the PeiCore by PrePeiCore.
 | 
						|
 | 
						|
  @param[out]   PpiListSize         Size in Bytes of the Platform PPI List
 | 
						|
  @param[out]   PpiList             Platform PPI List
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
ArmPlatformGetPlatformPpiList (
 | 
						|
  OUT UINTN                   *PpiListSize,
 | 
						|
  OUT EFI_PEI_PPI_DESCRIPTOR  **PpiList
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |