mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-08 17:05:09 +02:00
MdePkg: Added ARM Aarch64 architecture support
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Harry Liebel <Harry.Liebel@arm.com> Signed-off-by: Olivier Martin <olivier.martin@arm.com> Reviewed-by: Liming Gao <liming.gao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14513 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
fed549d7be
commit
b4319afbda
135
MdePkg/Include/AArch64/ProcessorBind.h
Normal file
135
MdePkg/Include/AArch64/ProcessorBind.h
Normal file
@ -0,0 +1,135 @@
|
||||
/** @file
|
||||
Processor or Compiler specific defines and types for AArch64.
|
||||
|
||||
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
||||
Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>
|
||||
|
||||
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 __PROCESSOR_BIND_H__
|
||||
#define __PROCESSOR_BIND_H__
|
||||
|
||||
///
|
||||
/// Define the processor type so other code can make processor based choices
|
||||
///
|
||||
#define MDE_CPU_AARCH64
|
||||
|
||||
//
|
||||
// Make sure we are using the correct packing rules per EFI specification
|
||||
//
|
||||
#ifndef __GNUC__
|
||||
#pragma pack()
|
||||
#endif
|
||||
|
||||
#if _MSC_EXTENSIONS
|
||||
//
|
||||
// use Microsoft* C complier dependent interger width types
|
||||
//
|
||||
typedef unsigned __int64 UINT64;
|
||||
typedef __int64 INT64;
|
||||
typedef unsigned __int32 UINT32;
|
||||
typedef __int32 INT32;
|
||||
typedef unsigned short UINT16;
|
||||
typedef unsigned short CHAR16;
|
||||
typedef short INT16;
|
||||
typedef unsigned char BOOLEAN;
|
||||
typedef unsigned char UINT8;
|
||||
typedef char CHAR8;
|
||||
typedef char INT8;
|
||||
#else
|
||||
//
|
||||
// Assume standard AARCH64 alignment.
|
||||
typedef unsigned long long UINT64;
|
||||
typedef long long INT64;
|
||||
typedef unsigned int UINT32;
|
||||
typedef int INT32;
|
||||
typedef unsigned short UINT16;
|
||||
typedef unsigned short CHAR16;
|
||||
typedef short INT16;
|
||||
typedef unsigned char BOOLEAN;
|
||||
typedef unsigned char UINT8;
|
||||
typedef char CHAR8;
|
||||
typedef char INT8;
|
||||
#endif
|
||||
|
||||
///
|
||||
/// Unsigned value of native width. (4 bytes on supported 32-bit processor instructions,
|
||||
/// 8 bytes on supported 64-bit processor instructions)
|
||||
///
|
||||
typedef UINT64 UINTN;
|
||||
|
||||
///
|
||||
/// Signed value of native width. (4 bytes on supported 32-bit processor instructions,
|
||||
/// 8 bytes on supported 64-bit processor instructions)
|
||||
///
|
||||
typedef INT64 INTN;
|
||||
|
||||
//
|
||||
// Processor specific defines
|
||||
//
|
||||
|
||||
///
|
||||
/// A value of native width with the highest bit set.
|
||||
///
|
||||
#define MAX_BIT 0x8000000000000000
|
||||
|
||||
///
|
||||
/// A value of native width with the two highest bits set.
|
||||
///
|
||||
#define MAX_2_BITS 0xC000000000000000
|
||||
|
||||
///
|
||||
/// Maximum legal AARCH64 address
|
||||
///
|
||||
#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFF
|
||||
|
||||
///
|
||||
/// The stack alignment required for AARCH64
|
||||
///
|
||||
#define CPU_STACK_ALIGNMENT 16
|
||||
|
||||
//
|
||||
// Modifier to ensure that all protocol member functions and EFI intrinsics
|
||||
// use the correct C calling convention. All protocol member functions and
|
||||
// EFI intrinsics are required to modify their member functions with EFIAPI.
|
||||
//
|
||||
#define EFIAPI
|
||||
|
||||
#if defined(__GNUC__)
|
||||
///
|
||||
/// For GNU assembly code, .global or .globl can declare global symbols.
|
||||
/// Define this macro to unify the usage.
|
||||
///
|
||||
#define ASM_GLOBAL .globl
|
||||
|
||||
#define GCC_ASM_EXPORT(func__) \
|
||||
.global _CONCATENATE (__USER_LABEL_PREFIX__, func__) ;\
|
||||
.type ASM_PFX(func__), %function
|
||||
|
||||
#define GCC_ASM_IMPORT(func__) \
|
||||
.extern _CONCATENATE (__USER_LABEL_PREFIX__, func__)
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
Return the pointer to the first instruction of a function given a function pointer.
|
||||
On ARM CPU architectures, these two pointer values are the same,
|
||||
so the implementation of this macro is very simple.
|
||||
|
||||
@param FunctionPointer A pointer to a function.
|
||||
|
||||
@return The pointer to the first instruction of a function given a function pointer.
|
||||
|
||||
**/
|
||||
#define FUNCTION_ENTRY_POINT(FunctionPointer) (VOID *)(UINTN)(FunctionPointer)
|
||||
|
||||
#endif
|
@ -1,11 +1,13 @@
|
||||
/** @file
|
||||
DebugSupport protocol and supporting definitions as defined in the UEFI2.0
|
||||
DebugSupport protocol and supporting definitions as defined in the UEFI2.4
|
||||
specification.
|
||||
|
||||
The DebugSupport protocol is used by source level debuggers to abstract the
|
||||
processor and handle context save and restore operations.
|
||||
|
||||
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
The full text of the license may be found at
|
||||
@ -517,6 +519,97 @@ typedef struct {
|
||||
UINT32 IFAR;
|
||||
} EFI_SYSTEM_CONTEXT_ARM;
|
||||
|
||||
|
||||
///
|
||||
/// AARCH64 processor exception types.
|
||||
///
|
||||
#define EXCEPT_AARCH64_SYNCHRONOUS_EXCEPTIONS 0
|
||||
#define EXCEPT_AARCH64_IRQ 1
|
||||
#define EXCEPT_AARCH64_FIQ 2
|
||||
#define EXCEPT_AARCH64_SERROR 3
|
||||
|
||||
///
|
||||
/// For coding convenience, define the maximum valid ARM exception.
|
||||
///
|
||||
#define MAX_AARCH64_EXCEPTION EXCEPT_AARCH64_SERROR
|
||||
|
||||
typedef struct {
|
||||
// General Purpose Registers
|
||||
UINT64 X0;
|
||||
UINT64 X1;
|
||||
UINT64 X2;
|
||||
UINT64 X3;
|
||||
UINT64 X4;
|
||||
UINT64 X5;
|
||||
UINT64 X6;
|
||||
UINT64 X7;
|
||||
UINT64 X8;
|
||||
UINT64 X9;
|
||||
UINT64 X10;
|
||||
UINT64 X11;
|
||||
UINT64 X12;
|
||||
UINT64 X13;
|
||||
UINT64 X14;
|
||||
UINT64 X15;
|
||||
UINT64 X16;
|
||||
UINT64 X17;
|
||||
UINT64 X18;
|
||||
UINT64 X19;
|
||||
UINT64 X20;
|
||||
UINT64 X21;
|
||||
UINT64 X22;
|
||||
UINT64 X23;
|
||||
UINT64 X24;
|
||||
UINT64 X25;
|
||||
UINT64 X26;
|
||||
UINT64 X27;
|
||||
UINT64 X28;
|
||||
UINT64 FP; // x29 - Frame pointer
|
||||
UINT64 LR; // x30 - Link Register
|
||||
UINT64 SP; // x31 - Stack pointer
|
||||
|
||||
// FP/SIMD Registers
|
||||
UINT64 V0[2];
|
||||
UINT64 V1[2];
|
||||
UINT64 V2[2];
|
||||
UINT64 V3[2];
|
||||
UINT64 V4[2];
|
||||
UINT64 V5[2];
|
||||
UINT64 V6[2];
|
||||
UINT64 V7[2];
|
||||
UINT64 V8[2];
|
||||
UINT64 V9[2];
|
||||
UINT64 V10[2];
|
||||
UINT64 V11[2];
|
||||
UINT64 V12[2];
|
||||
UINT64 V13[2];
|
||||
UINT64 V14[2];
|
||||
UINT64 V15[2];
|
||||
UINT64 V16[2];
|
||||
UINT64 V17[2];
|
||||
UINT64 V18[2];
|
||||
UINT64 V19[2];
|
||||
UINT64 V20[2];
|
||||
UINT64 V21[2];
|
||||
UINT64 V22[2];
|
||||
UINT64 V23[2];
|
||||
UINT64 V24[2];
|
||||
UINT64 V25[2];
|
||||
UINT64 V26[2];
|
||||
UINT64 V27[2];
|
||||
UINT64 V28[2];
|
||||
UINT64 V29[2];
|
||||
UINT64 V30[2];
|
||||
UINT64 V31[2];
|
||||
|
||||
UINT64 ELR; // Exception Link Register
|
||||
UINT64 SPSR; // Saved Processor Status Register
|
||||
UINT64 FPSR; // Floating Point Status Register
|
||||
UINT64 ESR; // Exception syndrome register
|
||||
UINT64 FAR; // Fault Address Register
|
||||
} EFI_SYSTEM_CONTEXT_AARCH64;
|
||||
|
||||
|
||||
///
|
||||
/// Universal EFI_SYSTEM_CONTEXT definition.
|
||||
///
|
||||
@ -526,6 +619,7 @@ typedef union {
|
||||
EFI_SYSTEM_CONTEXT_X64 *SystemContextX64;
|
||||
EFI_SYSTEM_CONTEXT_IPF *SystemContextIpf;
|
||||
EFI_SYSTEM_CONTEXT_ARM *SystemContextArm;
|
||||
EFI_SYSTEM_CONTEXT_AARCH64 *SystemContextAArch64;
|
||||
} EFI_SYSTEM_CONTEXT;
|
||||
|
||||
//
|
||||
@ -566,7 +660,8 @@ typedef enum {
|
||||
IsaX64 = IMAGE_FILE_MACHINE_X64, ///< 0x8664
|
||||
IsaIpf = IMAGE_FILE_MACHINE_IA64, ///< 0x0200
|
||||
IsaEbc = IMAGE_FILE_MACHINE_EBC, ///< 0x0EBC
|
||||
IsaArm = IMAGE_FILE_MACHINE_ARMTHUMB_MIXED ///< 0x01c2
|
||||
IsaArm = IMAGE_FILE_MACHINE_ARMTHUMB_MIXED, ///< 0x01c2
|
||||
IsaAArch64 = IMAGE_FILE_MACHINE_ARM64 ///< 0xAA64
|
||||
} EFI_INSTRUCTION_SET_ARCHITECTURE;
|
||||
|
||||
|
||||
|
@ -2,6 +2,8 @@
|
||||
Defines data types and constants introduced in UEFI.
|
||||
|
||||
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||
Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
The full text of the license may be found at
|
||||
@ -241,6 +243,11 @@ typedef union {
|
||||
///
|
||||
#define EFI_IMAGE_MACHINE_ARMTHUMB_MIXED 0x01C2
|
||||
|
||||
///
|
||||
/// PE32+ Machine type for AARCH64 A64 images.
|
||||
///
|
||||
#define EFI_IMAGE_MACHINE_AARCH64 0xAA64
|
||||
|
||||
|
||||
#if defined (MDE_CPU_IA32)
|
||||
|
||||
@ -270,6 +277,13 @@ typedef union {
|
||||
|
||||
#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_ARMTHUMB_MIXED)
|
||||
|
||||
#elif defined (MDE_CPU_AARCH64)
|
||||
|
||||
#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \
|
||||
(((Machine) == EFI_IMAGE_MACHINE_AARCH64) || ((Machine) == EFI_IMAGE_MACHINE_EBC))
|
||||
|
||||
#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE)
|
||||
|
||||
#elif defined (MDE_CPU_EBC)
|
||||
|
||||
///
|
||||
|
@ -1,8 +1,8 @@
|
||||
/** @file
|
||||
Include file that supports UEFI.
|
||||
|
||||
This include file must contain things defined in the UEFI 2.3 specification.
|
||||
If a code construct is defined in the UEFI 2.3 specification it must be included
|
||||
This include file must contain things defined in the UEFI 2.4 specification.
|
||||
If a code construct is defined in the UEFI 2.4 specification it must be included
|
||||
by this include file.
|
||||
|
||||
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
@ -1732,6 +1732,7 @@ EFI_STATUS
|
||||
// EFI Runtime Services Table
|
||||
//
|
||||
#define EFI_SYSTEM_TABLE_SIGNATURE SIGNATURE_64 ('I','B','I',' ','S','Y','S','T')
|
||||
#define EFI_2_40_SYSTEM_TABLE_REVISION ((2 << 16) | (40))
|
||||
#define EFI_2_31_SYSTEM_TABLE_REVISION ((2 << 16) | (31))
|
||||
#define EFI_2_30_SYSTEM_TABLE_REVISION ((2 << 16) | (30))
|
||||
#define EFI_2_20_SYSTEM_TABLE_REVISION ((2 << 16) | (20))
|
||||
@ -2083,6 +2084,7 @@ typedef struct {
|
||||
#define EFI_REMOVABLE_MEDIA_FILE_NAME_IA64 L"\\EFI\\BOOT\\BOOTIA64.EFI"
|
||||
#define EFI_REMOVABLE_MEDIA_FILE_NAME_X64 L"\\EFI\\BOOT\\BOOTX64.EFI"
|
||||
#define EFI_REMOVABLE_MEDIA_FILE_NAME_ARM L"\\EFI\\BOOT\\BOOTARM.EFI"
|
||||
#define EFI_REMOVABLE_MEDIA_FILE_NAME_AARCH64 L"\\EFI\\BOOT\\BOOTAA64.EFI"
|
||||
|
||||
#if defined (MDE_CPU_IA32)
|
||||
#define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_IA32
|
||||
@ -2093,6 +2095,8 @@ typedef struct {
|
||||
#elif defined (MDE_CPU_EBC)
|
||||
#elif defined (MDE_CPU_ARM)
|
||||
#define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_ARM
|
||||
#elif defined (MDE_CPU_AARCH64)
|
||||
#define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_AARCH64
|
||||
#else
|
||||
#error Unknown Processor Type
|
||||
#endif
|
||||
|
@ -27,7 +27,7 @@
|
||||
|
||||
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC ARM
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC ARM AARCH64
|
||||
#
|
||||
|
||||
[Sources.IA32]
|
||||
@ -45,6 +45,9 @@
|
||||
[Sources.ARM]
|
||||
ArmCache.c
|
||||
|
||||
[Sources.AARCH64]
|
||||
ArmCache.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF ARM
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF ARM AARCH64
|
||||
#
|
||||
|
||||
[Sources]
|
||||
@ -54,6 +54,9 @@
|
||||
[Sources.ARM]
|
||||
IoLibArm.c
|
||||
|
||||
[Sources.AARCH64]
|
||||
IoLibArm.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
||||
|
@ -44,6 +44,9 @@
|
||||
[Includes.ARM]
|
||||
Include/Arm
|
||||
|
||||
[Includes.AARCH64]
|
||||
Include/AArch64
|
||||
|
||||
[LibraryClasses]
|
||||
## @libraryclass Provides most usb APIs to support the Hid requests defined in Usb Hid 1.1 spec
|
||||
# and the standard requests defined in Usb 1.1 spec.
|
||||
|
@ -20,7 +20,7 @@
|
||||
PLATFORM_VERSION = 1.03
|
||||
DSC_SPECIFICATION = 0x00010005
|
||||
OUTPUT_DIRECTORY = Build/Mde
|
||||
SUPPORTED_ARCHITECTURES = IA32|IPF|X64|EBC|ARM
|
||||
SUPPORTED_ARCHITECTURES = IA32|IPF|X64|EBC|ARM|AARCH64
|
||||
BUILD_TARGETS = DEBUG|RELEASE
|
||||
SKUID_IDENTIFIER = DEFAULT
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user