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