]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Include/Chipset/AArch64.h
ArmPkg/CpuDxe: move PageAttributeToGcdAttribute() out of ArmMmuLib
[mirror_edk2.git] / ArmPkg / Include / Chipset / AArch64.h
CommitLineData
25402f5d
HL
1/** @file\r
2\r
3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
23d6348f 4 Copyright (c) 2011 - 2017, ARM Ltd. All rights reserved.<BR>\r
25402f5d 5\r
4059386c 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
25402f5d
HL
7\r
8**/\r
9\r
10#ifndef __AARCH64_H__\r
11#define __AARCH64_H__\r
12\r
13#include <Chipset/AArch64Mmu.h>\r
25402f5d
HL
14\r
15// ARM Interrupt ID in Exception Table\r
16#define ARM_ARCH_EXCEPTION_IRQ EXCEPT_AARCH64_IRQ\r
17\r
18// CPACR - Coprocessor Access Control Register definitions\r
19#define CPACR_TTA_EN (1UL << 28)\r
20#define CPACR_FPEN_EL1 (1UL << 20)\r
21#define CPACR_FPEN_FULL (3UL << 20)\r
22#define CPACR_CP_FULL_ACCESS 0x300000\r
23\r
24// Coprocessor Trap Register (CPTR)\r
25#define AARCH64_CPTR_TFP (1 << 10)\r
26\r
27// ID_AA64PFR0 - AArch64 Processor Feature Register 0 definitions\r
28#define AARCH64_PFR0_FP (0xF << 16)\r
27331bff 29#define AARCH64_PFR0_GIC (0xF << 24)\r
25402f5d 30\r
25402f5d
HL
31// SCR - Secure Configuration Register definitions\r
32#define SCR_NS (1 << 0)\r
33#define SCR_IRQ (1 << 1)\r
34#define SCR_FIQ (1 << 2)\r
35#define SCR_EA (1 << 3)\r
36#define SCR_FW (1 << 4)\r
37#define SCR_AW (1 << 5)\r
38\r
39// MIDR - Main ID Register definitions\r
7aec2926 40#define ARM_CPU_TYPE_SHIFT 4\r
25402f5d
HL
41#define ARM_CPU_TYPE_MASK 0xFFF\r
42#define ARM_CPU_TYPE_AEMv8 0xD0F\r
b7dd4dbd
OM
43#define ARM_CPU_TYPE_A53 0xD03\r
44#define ARM_CPU_TYPE_A57 0xD07\r
25654e24 45#define ARM_CPU_TYPE_A72 0xD08\r
25402f5d
HL
46#define ARM_CPU_TYPE_A15 0xC0F\r
47#define ARM_CPU_TYPE_A9 0xC09\r
7aec2926 48#define ARM_CPU_TYPE_A7 0xC07\r
25402f5d
HL
49#define ARM_CPU_TYPE_A5 0xC05\r
50\r
b7dd4dbd
OM
51#define ARM_CPU_REV_MASK ((0xF << 20) | (0xF) )\r
52#define ARM_CPU_REV(rn, pn) ((((rn) & 0xF) << 20) | ((pn) & 0xF))\r
53\r
25402f5d 54// Hypervisor Configuration Register\r
6a44c227
OM
55#define ARM_HCR_FMO BIT3\r
56#define ARM_HCR_IMO BIT4\r
57#define ARM_HCR_AMO BIT5\r
58#define ARM_HCR_TSC BIT19\r
59#define ARM_HCR_TGE BIT27\r
25402f5d 60\r
f3c5066f
OM
61// Exception Syndrome Register\r
62#define AARCH64_ESR_EC(Ecr) ((0x3F << 26) & (Ecr))\r
63#define AARCH64_ESR_ISS(Ecr) ((0x1FFFFFF) & (Ecr))\r
64\r
65#define AARCH64_ESR_EC_SMC32 (0x13 << 26)\r
66#define AARCH64_ESR_EC_SMC64 (0x17 << 26)\r
67\r
25402f5d
HL
68// AArch64 Exception Level\r
69#define AARCH64_EL3 0xC\r
70#define AARCH64_EL2 0x8\r
71#define AARCH64_EL1 0x4\r
72\r
7e119c67
OM
73// Saved Program Status Register definitions\r
74#define SPSR_A BIT8\r
75#define SPSR_I BIT7\r
76#define SPSR_F BIT6\r
77\r
78#define SPSR_AARCH32 BIT4\r
79\r
80#define SPSR_AARCH32_MODE_USER 0x0\r
81#define SPSR_AARCH32_MODE_FIQ 0x1\r
82#define SPSR_AARCH32_MODE_IRQ 0x2\r
83#define SPSR_AARCH32_MODE_SVC 0x3\r
84#define SPSR_AARCH32_MODE_ABORT 0x7\r
85#define SPSR_AARCH32_MODE_UNDEF 0xB\r
86#define SPSR_AARCH32_MODE_SYS 0xF\r
87\r
88// Counter-timer Hypervisor Control register definitions\r
89#define CNTHCTL_EL2_EL1PCTEN BIT0\r
90#define CNTHCTL_EL2_EL1PCEN BIT1\r
91\r
25402f5d
HL
92#define ARM_VECTOR_TABLE_ALIGNMENT ((1 << 11)-1)\r
93\r
d855b261
MR
94// Vector table offset definitions\r
95#define ARM_VECTOR_CUR_SP0_SYNC 0x000\r
96#define ARM_VECTOR_CUR_SP0_IRQ 0x080\r
97#define ARM_VECTOR_CUR_SP0_FIQ 0x100\r
98#define ARM_VECTOR_CUR_SP0_SERR 0x180\r
99\r
100#define ARM_VECTOR_CUR_SPx_SYNC 0x200\r
101#define ARM_VECTOR_CUR_SPx_IRQ 0x280\r
102#define ARM_VECTOR_CUR_SPx_FIQ 0x300\r
103#define ARM_VECTOR_CUR_SPx_SERR 0x380\r
104\r
105#define ARM_VECTOR_LOW_A64_SYNC 0x400\r
106#define ARM_VECTOR_LOW_A64_IRQ 0x480\r
107#define ARM_VECTOR_LOW_A64_FIQ 0x500\r
108#define ARM_VECTOR_LOW_A64_SERR 0x580\r
109\r
110#define ARM_VECTOR_LOW_A32_SYNC 0x600\r
111#define ARM_VECTOR_LOW_A32_IRQ 0x680\r
112#define ARM_VECTOR_LOW_A32_FIQ 0x700\r
113#define ARM_VECTOR_LOW_A32_SERR 0x780\r
114\r
115#define VECTOR_BASE(tbl) \\r
e7e12013 116 .section .text.##tbl##,"ax"; \\r
d855b261 117 .align 11; \\r
e7e12013 118 .org 0x0; \\r
d855b261
MR
119 GCC_ASM_EXPORT(tbl); \\r
120 ASM_PFX(tbl): \\r
121\r
122#define VECTOR_ENTRY(tbl, off) \\r
e7e12013 123 .org off\r
d855b261
MR
124\r
125#define VECTOR_END(tbl) \\r
e7e12013
AB
126 .org 0x800; \\r
127 .previous\r
d855b261 128\r
25402f5d
HL
129VOID\r
130EFIAPI\r
131ArmEnableSWPInstruction (\r
132 VOID\r
133 );\r
134\r
135UINTN\r
136EFIAPI\r
137ArmReadCbar (\r
138 VOID\r
139 );\r
140\r
141UINTN\r
142EFIAPI\r
143ArmReadTpidrurw (\r
144 VOID\r
145 );\r
146\r
147VOID\r
148EFIAPI\r
149ArmWriteTpidrurw (\r
150 UINTN Value\r
151 );\r
152\r
25402f5d
HL
153UINTN\r
154EFIAPI\r
155ArmGetTCR (\r
156 VOID\r
157 );\r
158\r
159VOID\r
160EFIAPI\r
161ArmSetTCR (\r
162 UINTN Value\r
163 );\r
164\r
165UINTN\r
166EFIAPI\r
167ArmGetMAIR (\r
168 VOID\r
169 );\r
170\r
171VOID\r
172EFIAPI\r
173ArmSetMAIR (\r
174 UINTN Value\r
175 );\r
176\r
177VOID\r
178EFIAPI\r
179ArmDisableAlignmentCheck (\r
180 VOID\r
181 );\r
182\r
25402f5d
HL
183VOID\r
184EFIAPI\r
185ArmEnableAlignmentCheck (\r
186 VOID\r
187 );\r
188\r
97f0d01d
AB
189VOID\r
190EFIAPI\r
191ArmDisableStackAlignmentCheck (\r
192 VOID\r
193 );\r
194\r
195VOID\r
196EFIAPI\r
197ArmEnableStackAlignmentCheck (\r
198 VOID\r
199 );\r
200\r
25402f5d
HL
201VOID\r
202EFIAPI\r
203ArmDisableAllExceptions (\r
204 VOID\r
205 );\r
206\r
207VOID\r
208ArmWriteHcr (\r
209 IN UINTN Hcr\r
210 );\r
211\r
d2bb61a2
EC
212UINTN\r
213ArmReadHcr (\r
214 VOID\r
215 );\r
216\r
25402f5d
HL
217UINTN\r
218ArmReadCurrentEL (\r
219 VOID\r
220 );\r
221\r
d6dc67ba
OM
222UINTN\r
223ArmWriteCptr (\r
224 IN UINT64 Cptr\r
225 );\r
226\r
23d6348f
SM
227UINT32\r
228ArmReadCntHctl (\r
229 VOID\r
230 );\r
231\r
232VOID\r
233ArmWriteCntHctl (\r
234 IN UINT32 CntHctl\r
235 );\r
236\r
25402f5d 237#endif // __AARCH64_H__\r