]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdePkg/Include/Ipf/ProcessorBind.h
1) Add descriptions for the enum values or struc members for the following types:
[mirror_edk2.git] / MdePkg / Include / Ipf / ProcessorBind.h
... / ...
CommitLineData
1/** @file\r
2 Processor or Compiler specific defines and types for Intel Itanium(TM).\r
3\r
4 Copyright (c) 2006, Intel Corporation<BR>\r
5 All rights reserved. This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#ifndef __PROCESSOR_BIND_H__\r
16#define __PROCESSOR_BIND_H__\r
17\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_IPF\r
23\r
24\r
25//\r
26// Make sure we are using the correct packing rules per EFI specification\r
27//\r
28#pragma pack()\r
29\r
30\r
31#if __INTEL_COMPILER\r
32//\r
33// Disable ICC's remark #869: "Parameter" was never referenced warning.\r
34// This is legal ANSI C code so we disable the remark that is turned on with -Wall\r
35//\r
36#pragma warning ( disable : 869 )\r
37\r
38//\r
39// Disable ICC's remark #1418: external function definition with no prior declaration.\r
40// This is legal ANSI C code so we disable the remark that is turned on with /W4\r
41//\r
42#pragma warning ( disable : 1418 )\r
43\r
44//\r
45// Disable ICC's remark #1419: external declaration in primary source file\r
46// This is legal ANSI C code so we disable the remark that is turned on with /W4\r
47//\r
48#pragma warning ( disable : 1419 )\r
49\r
50#endif\r
51\r
52\r
53#if _MSC_EXTENSIONS\r
54//\r
55// Disable warning that make it impossible to compile at /W4\r
56// This only works for Microsoft tools. \r
57//\r
58\r
59//\r
60// Disabling bitfield type checking warnings.\r
61//\r
62#pragma warning ( disable : 4214 )\r
63\r
64\r
65// Disabling the unreferenced formal parameter warnings.\r
66//\r
67#pragma warning ( disable : 4100 )\r
68\r
69//\r
70// Disable slightly different base types warning as CHAR8 * can not be set\r
71// to a constant string.\r
72//\r
73#pragma warning ( disable : 4057 )\r
74\r
75//\r
76// Disable warning on conversion from function pointer to a data pointer\r
77//\r
78#pragma warning ( disable : 4054 )\r
79\r
80//\r
81// ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning\r
82//\r
83#pragma warning ( disable : 4127 )\r
84\r
85//\r
86// Can not cast a function pointer to a data pointer. We need to do this on\r
87// IPF to get access to the PLABEL.\r
88//\r
89#pragma warning ( disable : 4514 )\r
90\r
91//\r
92// This warning is caused by functions defined but not used. For precompiled header only.\r
93//\r
94#pragma warning ( disable : 4505 )\r
95\r
96//\r
97// This warning is caused by empty (after preprocessing) source file. For precompiled header only.\r
98//\r
99#pragma warning ( disable : 4206 )\r
100\r
101#endif\r
102\r
103\r
104#if (__STDC_VERSION__ < 199901L)\r
105 //\r
106 // No ANSI C 2000 stdint.h integer width declarations, so define equivalents\r
107 //\r
108\r
109 #if _MSC_EXTENSIONS\r
110 //\r
111 // use Microsoft C complier dependent integer width types\r
112 //\r
113 typedef unsigned __int64 UINT64;\r
114 typedef __int64 INT64;\r
115 typedef unsigned __int32 UINT32;\r
116 typedef __int32 INT32;\r
117 typedef unsigned short UINT16;\r
118 typedef unsigned short CHAR16;\r
119 typedef short INT16;\r
120 typedef unsigned char BOOLEAN;\r
121 typedef unsigned char UINT8;\r
122 typedef char CHAR8;\r
123 typedef char INT8;\r
124 #else\r
125 #ifdef _EFI_P64\r
126 //\r
127 // P64 - pointers being 64-bit and longs and ints are 32-bits.\r
128 //\r
129 typedef unsigned long long UINT64;\r
130 typedef long long INT64;\r
131 typedef unsigned int UINT32;\r
132 typedef int INT32;\r
133 typedef unsigned short CHAR16;\r
134 typedef unsigned short UINT16;\r
135 typedef short INT16;\r
136 typedef unsigned char BOOLEAN;\r
137 typedef unsigned char UINT8;\r
138 typedef char CHAR8;\r
139 typedef char INT8;\r
140 #else\r
141 //\r
142 // Assume LP64 - longs and pointers are 64-bit. Ints are 32-bit.\r
143 //\r
144 typedef unsigned long UINT64;\r
145 typedef long INT64;\r
146 typedef unsigned int UINT32;\r
147 typedef int INT32;\r
148 typedef unsigned short UINT16;\r
149 typedef unsigned short CHAR16;\r
150 typedef short INT16;\r
151 typedef unsigned char BOOLEAN;\r
152 typedef unsigned char UINT8;\r
153 typedef char CHAR8;\r
154 typedef char INT8;\r
155 #endif\r
156 #endif\r
157\r
158 #define UINT8_MAX 0xff\r
159\r
160#else\r
161 //\r
162 // Use ANSI C 2000 stdint.h integer width declarations\r
163 //\r
164 #include <stdint.h>\r
165 typedef uint8_t BOOLEAN;\r
166 typedef int8_t INT8;\r
167 typedef uint8_t UINT8;\r
168 typedef int16_t INT16;\r
169 typedef uint16_t UINT16;\r
170 typedef int32_t INT32;\r
171 typedef uint32_t UINT32;\r
172 typedef int64_t INT64;\r
173 typedef uint64_t UINT64;\r
174 typedef char CHAR8;\r
175 typedef uint16_t CHAR16;\r
176\r
177#endif\r
178\r
179typedef UINT64 UINTN;\r
180typedef INT64 INTN;\r
181\r
182\r
183//\r
184// Processor specific defines\r
185//\r
186#define MAX_BIT 0x8000000000000000ULL\r
187#define MAX_2_BITS 0xC000000000000000ULL\r
188\r
189//\r
190// Maximum legal Itanium-based address\r
191//\r
192#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFFULL\r
193\r
194//\r
195// Per the Itanium Software Conventions and Runtime Architecture Guide,\r
196// section 3.3.4, IPF stack must always be 16-byte aligned.\r
197//\r
198#define CPU_STACK_ALIGNMENT 16\r
199\r
200//\r
201// Modifier to ensure that all protocol member functions and EFI intrinsics\r
202// use the correct C calling convention. All protocol member functions and\r
203// EFI intrinsics are required to modify their member functions with EFIAPI.\r
204//\r
205#if _MSC_EXTENSIONS\r
206 //\r
207 // Microsoft* compiler requires _EFIAPI useage, __cdecl is Microsoft* specific C.\r
208 //\r
209 #define EFIAPI __cdecl\r
210#else\r
211 #define EFIAPI\r
212#endif\r
213\r
214//\r
215// The Microsoft* C compiler can removed references to unreferenced data items\r
216// if the /OPT:REF linker option is used. We defined a macro as this is a\r
217// a non standard extension\r
218//\r
219#if _MSC_EXTENSIONS\r
220 #define GLOBAL_REMOVE_IF_UNREFERENCED __declspec(selectany)\r
221#else\r
222 #define GLOBAL_REMOVE_IF_UNREFERENCED\r
223#endif\r
224\r
225///\r
226/// A pointer to a function in IPF points to a plabel.\r
227///\r
228typedef struct {\r
229 UINT64 EntryPoint;\r
230 UINT64 GP;\r
231} EFI_PLABEL;\r
232\r
233typedef struct {\r
234 UINT64 Status;\r
235 UINT64 r9;\r
236 UINT64 r10;\r
237 UINT64 r11;\r
238} PAL_CALL_RETURN;\r
239\r
240/**\r
241 Return the pointer to the first instruction of a function given a function pointer.\r
242 For Itanium CPUs, all function calls are made through a PLABEL, so a pointer to a function \r
243 is actually a pointer to a PLABEL. The pointer to the first instruction of the function \r
244 is contained within the PLABEL. This macro may be used to retrieve a pointer to the first \r
245 instruction of a function independent of the CPU architecture being used. This is very \r
246 useful when printing function addresses through DEBUG() macros.\r
247 \r
248 @param FunctionPointer A pointer to a function.\r
249\r
250 @return The pointer to the first instruction of a function given a function pointer.\r
251 \r
252**/\r
253#define FUNCTION_ENTRY_POINT(FunctionPointer) (VOID *)(UINTN)(((EFI_PLABEL *)(FunctionPointer))->EntryPoint)\r
254\r
255#endif\r
256\r