]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdePkg/Include/Ipf/ProcessorBind.h
make change to support UnixPkg build. The changes are listed as follows:
[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\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 useing 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 #1418: external function definition with no prior declaration.\r
34// This is legal ANSI C code so we disable the remark that is turned on with /W4\r
35//\r
36#pragma warning ( disable : 1418 )\r
37\r
38\r
39//\r
40// Disable ICC's remark #1419: external declaration in primary source file\r
41// This is legal ANSI C code so we disable the remark that is turned on with /W4\r
42//\r
43#pragma warning ( disable : 1419 )\r
44\r
45#endif\r
46\r
47\r
48#if _MSC_EXTENSIONS\r
49//\r
50// Disable warning that make it impossible to compile at /W4\r
51// This only works for Microsoft tools. \r
52//\r
53\r
54//\r
55// Disabling bitfield type checking warnings.\r
56//\r
57#pragma warning ( disable : 4214 )\r
58\r
59\r
60// Disabling the unreferenced formal parameter warnings.\r
61//\r
62#pragma warning ( disable : 4100 )\r
63\r
64//\r
65// Disable slightly different base types warning as CHAR8 * can not be set\r
66// to a constant string.\r
67//\r
68#pragma warning ( disable : 4057 )\r
69\r
70//\r
71// Disable warning on conversion from function pointer to a data pointer\r
72//\r
73#pragma warning ( disable : 4054 )\r
74\r
75//\r
76// ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning\r
77//\r
78#pragma warning ( disable : 4127 )\r
79\r
80//\r
81// Can not cast a function pointer to a data pointer. We need to do this on\r
82// IPF to get access to the PLABEL.\r
83//\r
84#pragma warning ( disable : 4514 )\r
85\r
86//\r
87// This warning is caused by functions defined but not used. For precompiled header only.\r
88//\r
89#pragma warning ( disable : 4505 )\r
90\r
91//\r
92// This warning is caused by empty (after preprocessing) souce file. For precompiled header only.\r
93//\r
94#pragma warning ( disable : 4206 )\r
95\r
96#endif\r
97\r
98\r
99#if (__STDC_VERSION__ < 199901L)\r
100 //\r
101 // No ANSI C 2000 stdint.h integer width declarations, so define equivalents\r
102 //\r
103\r
104 #if _MSC_EXTENSIONS\r
105\r
106\r
107 //\r
108 // use Microsoft C complier dependent interger width types\r
109 //\r
110 typedef unsigned __int64 UINT64;\r
111 typedef __int64 INT64;\r
112 typedef unsigned __int32 UINT32;\r
113 typedef __int32 INT32;\r
114 typedef unsigned short UINT16;\r
115 typedef unsigned short CHAR16;\r
116 typedef short INT16;\r
117 typedef unsigned char BOOLEAN;\r
118 typedef unsigned char UINT8;\r
119 typedef char CHAR8;\r
120 typedef char INT8;\r
121 #else\r
122 #ifdef _EFI_P64\r
123 //\r
124 // P64 - is Intel Itanium(TM) speak for pointers being 64-bit and longs and ints\r
125 // are 32-bits\r
126 //\r
127 typedef unsigned long long UINT64;\r
128 typedef long long INT64;\r
129 typedef unsigned int UINT32;\r
130 typedef int INT32;\r
131 typedef unsigned short CHAR16;\r
132 typedef unsigned short UINT16;\r
133 typedef short INT16;\r
134 typedef unsigned char BOOLEAN;\r
135 typedef unsigned char UINT8;\r
136 typedef char CHAR8;\r
137 typedef char INT8;\r
138 #else\r
139 //\r
140 // Assume LP64 - longs and pointers are 64-bit. Ints are 32-bit.\r
141 //\r
142 typedef unsigned long UINT64;\r
143 typedef long INT64;\r
144 typedef unsigned int UINT32;\r
145 typedef int INT32;\r
146 typedef unsigned short UINT16;\r
147 typedef unsigned short CHAR16;\r
148 typedef short INT16;\r
149 typedef unsigned char BOOLEAN;\r
150 typedef unsigned char UINT8;\r
151 typedef char CHAR8;\r
152 typedef char INT8;\r
153 #endif\r
154 #endif\r
155\r
156 #define UINT8_MAX 0xff\r
157\r
158#else\r
159 //\r
160 // Use ANSI C 2000 stdint.h integer width declarations\r
161 //\r
162 #include <stdint.h>\r
163 typedef uint8_t BOOLEAN;\r
164 typedef int8_t INT8;\r
165 typedef uint8_t UINT8;\r
166 typedef int16_t INT16;\r
167 typedef uint16_t UINT16;\r
168 typedef int32_t INT32;\r
169 typedef uint32_t UINT32;\r
170 typedef int64_t INT64;\r
171 typedef uint64_t UINT64;\r
172 typedef char CHAR8;\r
173 typedef uint16_t CHAR16;\r
174\r
175#endif\r
176\r
177typedef UINT64 UINTN;\r
178typedef INT64 INTN;\r
179\r
180\r
181//\r
182// Processor specific defines\r
183//\r
184#define MAX_BIT 0x8000000000000000ULL\r
185#define MAX_2_BITS 0xC000000000000000ULL\r
186\r
187//\r
188// Maximum legal Itanium-based address\r
189//\r
190#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFFULL\r
191\r
192//\r
193// Per the Itanium Software Conventions and Runtime Architecture Guide,\r
194// section 3.3.4, IPF stack must always be 16-byte aligned.\r
195//\r
196#define CPU_STACK_ALIGNMENT 16\r
197\r
198//\r
199// Modifier to ensure that all protocol member functions and EFI intrinsics\r
200// use the correct C calling convention. All protocol member functions and\r
201// EFI intrinsics are required to modify thier member functions with EFIAPI.\r
202//\r
203#if _MSC_EXTENSIONS\r
204 //\r
205 // Microsoft* compiler requires _EFIAPI useage, __cdecl is Microsoft* specific C.\r
206 //\r
207 #define EFIAPI __cdecl\r
208#else\r
209 #define EFIAPI\r
210#endif\r
211\r
212//\r
213// The Microsoft* C compiler can removed references to unreferenced data items\r
214// if the /OPT:REF linker option is used. We defined a macro as this is a\r
215// a non standard extension\r
216//\r
217#if _MSC_EXTENSIONS\r
218 #define GLOBAL_REMOVE_IF_UNREFERENCED __declspec(selectany)\r
219#else\r
220 #define GLOBAL_REMOVE_IF_UNREFERENCED\r
221#endif\r
222\r
223//\r
224// A pointer to a function in IPF points to a plabel.\r
225//\r
226typedef struct {\r
227 UINT64 EntryPoint;\r
228 UINT64 GP;\r
229} EFI_PLABEL;\r
230\r
231typedef struct {\r
232 UINT64 Status;\r
233 UINT64 r9;\r
234 UINT64 r10;\r
235 UINT64 r11;\r
236} PAL_CALL_RETURN;\r
237\r
238#define FUNCTION_ENTRY_POINT(p) (((EFI_PLABEL *)(p))->EntryPoint)\r
239\r
240#endif\r
241\r