]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdePkg/Include/Arm/ProcessorBind.h
MdePkg: TpmPtp: Add CapCRBIdleBypass definition
[mirror_edk2.git] / MdePkg / Include / Arm / ProcessorBind.h
... / ...
CommitLineData
1/** @file\r
2 Processor or Compiler specific defines and types for ARM.\r
3\r
4 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
5 Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\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 __PROCESSOR_BIND_H__\r
17#define __PROCESSOR_BIND_H__\r
18\r
19///\r
20/// Define the processor type so other code can make processor based choices\r
21///\r
22#define MDE_CPU_ARM\r
23\r
24//\r
25// Make sure we are using the correct packing rules per EFI specification\r
26//\r
27#if !defined(__GNUC__) && !defined(__ASSEMBLER__)\r
28#pragma pack()\r
29#endif\r
30\r
31#if defined(_MSC_EXTENSIONS)\r
32\r
33//\r
34// Disable some level 4 compilation warnings (same as IA32 and X64)\r
35//\r
36\r
37//\r
38// Disabling bitfield type checking warnings.\r
39//\r
40#pragma warning ( disable : 4214 )\r
41\r
42//\r
43// Disabling the unreferenced formal parameter warnings.\r
44//\r
45#pragma warning ( disable : 4100 )\r
46\r
47//\r
48// Disable slightly different base types warning as CHAR8 * can not be set\r
49// to a constant string.\r
50//\r
51#pragma warning ( disable : 4057 )\r
52\r
53//\r
54// ASSERT(FALSE) or while (TRUE) are legal constructs so suppress this warning\r
55//\r
56#pragma warning ( disable : 4127 )\r
57\r
58//\r
59// This warning is caused by functions defined but not used. For precompiled header only.\r
60//\r
61#pragma warning ( disable : 4505 )\r
62\r
63//\r
64// This warning is caused by empty (after preprocessing) source file. For precompiled header only.\r
65//\r
66#pragma warning ( disable : 4206 )\r
67\r
68//\r
69// Disable 'potentially uninitialized local variable X used' warnings\r
70//\r
71#pragma warning ( disable : 4701 )\r
72\r
73//\r
74// Disable 'potentially uninitialized local pointer variable X used' warnings\r
75//\r
76#pragma warning ( disable : 4703 )\r
77\r
78#endif\r
79\r
80//\r
81// RVCT and MSFT don't support the __builtin_unreachable() macro\r
82//\r
83#if defined(__ARMCC_VERSION) || defined(_MSC_EXTENSIONS)\r
84#define UNREACHABLE()\r
85#endif\r
86\r
87#if defined(_MSC_EXTENSIONS)\r
88 //\r
89 // use Microsoft* C compiler dependent integer width types\r
90 //\r
91 typedef unsigned __int64 UINT64;\r
92 typedef __int64 INT64;\r
93 typedef unsigned __int32 UINT32;\r
94 typedef __int32 INT32;\r
95 typedef unsigned short UINT16;\r
96 typedef unsigned short CHAR16;\r
97 typedef short INT16;\r
98 typedef unsigned char BOOLEAN;\r
99 typedef unsigned char UINT8;\r
100 typedef char CHAR8;\r
101 typedef signed char INT8;\r
102#else\r
103 //\r
104 // Assume standard ARM alignment.\r
105 // Need to check portability of long long\r
106 //\r
107 typedef unsigned long long UINT64;\r
108 typedef long long INT64;\r
109 typedef unsigned int UINT32;\r
110 typedef int INT32;\r
111 typedef unsigned short UINT16;\r
112 typedef unsigned short CHAR16;\r
113 typedef short INT16;\r
114 typedef unsigned char BOOLEAN;\r
115 typedef unsigned char UINT8;\r
116 typedef char CHAR8;\r
117 typedef signed char INT8;\r
118#endif\r
119\r
120///\r
121/// Unsigned value of native width. (4 bytes on supported 32-bit processor instructions,\r
122/// 8 bytes on supported 64-bit processor instructions)\r
123///\r
124typedef UINT32 UINTN;\r
125\r
126///\r
127/// Signed value of native width. (4 bytes on supported 32-bit processor instructions,\r
128/// 8 bytes on supported 64-bit processor instructions)\r
129///\r
130typedef INT32 INTN;\r
131\r
132//\r
133// Processor specific defines\r
134//\r
135\r
136///\r
137/// A value of native width with the highest bit set.\r
138///\r
139#define MAX_BIT 0x80000000\r
140\r
141///\r
142/// A value of native width with the two highest bits set.\r
143///\r
144#define MAX_2_BITS 0xC0000000\r
145\r
146///\r
147/// Maximum legal ARM address\r
148///\r
149#define MAX_ADDRESS 0xFFFFFFFF\r
150\r
151///\r
152/// Maximum legal ARM INTN and UINTN values.\r
153///\r
154#define MAX_INTN ((INTN)0x7FFFFFFF)\r
155#define MAX_UINTN ((UINTN)0xFFFFFFFF)\r
156\r
157///\r
158/// Minimum legal ARM INTN value.\r
159///\r
160#define MIN_INTN (((INTN)-2147483647) - 1)\r
161\r
162///\r
163/// The stack alignment required for ARM\r
164///\r
165#define CPU_STACK_ALIGNMENT sizeof(UINT64)\r
166\r
167///\r
168/// Page allocation granularity for ARM\r
169///\r
170#define DEFAULT_PAGE_ALLOCATION_GRANULARITY (0x1000)\r
171#define RUNTIME_PAGE_ALLOCATION_GRANULARITY (0x1000)\r
172\r
173//\r
174// Modifier to ensure that all protocol member functions and EFI intrinsics\r
175// use the correct C calling convention. All protocol member functions and\r
176// EFI intrinsics are required to modify their member functions with EFIAPI.\r
177//\r
178#define EFIAPI\r
179\r
180// When compiling with Clang, we still use GNU as for the assembler, so we still\r
181// need to define the GCC_ASM* macros.\r
182#if defined(__GNUC__) || defined(__clang__)\r
183 ///\r
184 /// For GNU assembly code, .global or .globl can declare global symbols.\r
185 /// Define this macro to unify the usage.\r
186 ///\r
187 #define ASM_GLOBAL .globl\r
188\r
189 #if !defined(__APPLE__)\r
190 ///\r
191 /// ARM EABI defines that the linker should not manipulate call relocations\r
192 /// (do bl/blx conversion) unless the target symbol has function type.\r
193 /// CodeSourcery 2010.09 started requiring the .type to function properly\r
194 ///\r
195 #define INTERWORK_FUNC(func__) .type ASM_PFX(func__), %function\r
196\r
197 #define GCC_ASM_EXPORT(func__) \\r
198 .global _CONCATENATE (__USER_LABEL_PREFIX__, func__) ;\\r
199 .type ASM_PFX(func__), %function\r
200\r
201 #define GCC_ASM_IMPORT(func__) \\r
202 .extern _CONCATENATE (__USER_LABEL_PREFIX__, func__)\r
203\r
204 #else\r
205 //\r
206 // .type not supported by Apple Xcode tools\r
207 //\r
208 #define INTERWORK_FUNC(func__)\r
209\r
210 #define GCC_ASM_EXPORT(func__) \\r
211 .globl _CONCATENATE (__USER_LABEL_PREFIX__, func__) \\r
212\r
213 #define GCC_ASM_IMPORT(name)\r
214\r
215 #endif\r
216#elif defined(_MSC_EXTENSIONS)\r
217 //\r
218 // PRESERVE8 is not supported by the MSFT assembler.\r
219 //\r
220 #define PRESERVE8\r
221#endif\r
222\r
223/**\r
224 Return the pointer to the first instruction of a function given a function pointer.\r
225 On ARM CPU architectures, these two pointer values are the same,\r
226 so the implementation of this macro is very simple.\r
227\r
228 @param FunctionPointer A pointer to a function.\r
229\r
230 @return The pointer to the first instruction of a function given a function pointer.\r
231\r
232**/\r
233#define FUNCTION_ENTRY_POINT(FunctionPointer) (VOID *)(UINTN)(FunctionPointer)\r
234\r
235#ifndef __USER_LABEL_PREFIX__\r
236#define __USER_LABEL_PREFIX__\r
237#endif\r
238\r
239#endif\r
240\r
241\r