]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Include/Ia32/EfiBind.h
For ECP, disable ICC's remark #869: "Parameter" was never referenced warning.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Include / Ia32 / EfiBind.h
1 /*++
2
3 Copyright (c) 2004 - 2008, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 EfiBind.h
15
16 Abstract:
17
18 Processor or Compiler specific defines and types for IA-32.
19 We are using the ANSI C 2000 _t type definitions for basic types.
20 This it technically a violation of the coding standard, but they
21 are used to make EfiTypes.h portable. Code other than EfiTypes.h
22 should never use any ANSI C 2000 _t integer types.
23
24 --*/
25
26 #ifndef _EFI_BIND_H_
27 #define _EFI_BIND_H_
28
29 #ifdef EFI_DEBUG
30
31 #ifdef EFI_NT_EMULATOR
32
33 #define EFI_DRIVER_ENTRY_POINT(InitFunction) \
34 EFI_STATUS \
35 EFIAPI \
36 InitFunction ( \
37 EFI_HANDLE ImageHandle, \
38 EFI_SYSTEM_TABLE *SystemTable \
39 ); \
40 \
41 UINTN \
42 __stdcall \
43 _DllMainCRTStartup ( \
44 UINTN Inst, \
45 UINTN reason_for_call, \
46 VOID *rserved \
47 ) \
48 { \
49 return 1; \
50 } \
51 \
52 EFI_STATUS \
53 __declspec( dllexport ) \
54 __cdecl \
55 InitializeDriver ( \
56 EFI_HANDLE ImageHandle, \
57 EFI_SYSTEM_TABLE *SystemTable \
58 ) \
59 { \
60 return InitFunction(ImageHandle, SystemTable); \
61 }
62
63 #define EFI_APPLICATION_ENTRY_POINT EFI_DRIVER_ENTRY_POINT
64
65 #else
66
67 #define EFI_DRIVER_ENTRY_POINT(InitFunction)
68 #define EFI_APPLICATION_ENTRY_POINT EFI_DRIVER_ENTRY_POINT
69
70 #endif
71
72 #else
73
74 #define EFI_DRIVER_ENTRY_POINT(InitFunction)
75 #define EFI_APPLICATION_ENTRY_POINT EFI_DRIVER_ENTRY_POINT
76
77 #endif
78
79
80
81
82
83 //
84 // Make sure we are useing the correct packing rules per EFI specification
85 //
86 #pragma pack()
87
88 #if __INTEL_COMPILER
89 //
90 // Disable ICC's warning: trailing comma is nonstandard
91 //
92 //#pragma warning ( disable : 271 )
93
94 //
95 // Disable ICC's warning: extra ";" ignored
96 //
97 #pragma warning ( disable : 424 )
98
99 //
100 // Disable ICC's warning: : variable "foo" was set but never used
101 //
102 #pragma warning ( disable : 593 )
103
104 //
105 // Disable ICC's remark #1418: external function definition with no prior declaration.
106 // This is legal ANSI C code so we disable the remark that is turned on with /W4
107 //
108 #pragma warning ( disable : 1418 )
109
110
111 //
112 // Disable ICC's remark #1419: external declaration in primary source file
113 // This is legal ANSI C code so we disable the remark that is turned on with /W4
114 //
115 #pragma warning ( disable : 1419 )
116
117 //
118 // Disable ICC's remark #869: "Parameter" was never referenced warning.
119 // This is legal ANSI C code so we disable the remark that is turned on with -Wall
120 //
121 #pragma warning ( disable : 869 )
122
123 #endif
124
125
126 #if _MSC_EXTENSIONS
127
128 //
129 // Disable warning that make it impossible to compile at /W4
130 // This only works for Microsoft* tools
131 //
132
133 //
134 // Disabling bitfield type checking warnings.
135 //
136 #pragma warning ( disable : 4214 )
137
138 //
139 // Disabling the unreferenced formal parameter warnings.
140 //
141 #pragma warning ( disable : 4100 )
142
143 //
144 // Disable slightly different base types warning as CHAR8 * can not be set
145 // to a constant string.
146 //
147 #pragma warning ( disable : 4057 )
148
149 //
150 // ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning
151 //
152 #pragma warning ( disable : 4127 )
153
154 //
155 // Int64ShllMod32 unreferenced inline function
156 //
157 #pragma warning ( disable : 4514 )
158
159 //
160 // Unreferenced formal parameter - We are object oriented, so we pass This even
161 // if we don't need them.
162 //
163 #pragma warning ( disable : 4100 )
164
165 //
166 // This warning is caused by empty (after preprocessing) souce file.
167 //
168 #pragma warning ( disable : 4206 )
169
170
171 #endif
172
173
174 #if !defined(__GNUC__) && (__STDC_VERSION__ < 199901L)
175 //
176 // No ANSI C 2000 stdint.h integer width declarations, so define equivalents
177 //
178
179 #if _MSC_EXTENSIONS
180
181 //
182 // use Microsoft* C complier dependent interger width types
183 //
184 typedef unsigned __int64 uint64_t;
185 typedef __int64 int64_t;
186 typedef unsigned __int32 uint32_t;
187 typedef __int32 int32_t;
188 typedef unsigned short uint16_t;
189 typedef short int16_t;
190 typedef unsigned char uint8_t;
191 typedef char int8_t;
192 #else
193
194 //
195 // Assume standard IA-32 alignment.
196 // BugBug: Need to check portability of long long
197 //
198 typedef unsigned long long uint64_t;
199 typedef long long int64_t;
200 typedef unsigned int uint32_t;
201 typedef int int32_t;
202 typedef unsigned short uint16_t;
203 typedef short int16_t;
204 typedef unsigned char uint8_t;
205 typedef char int8_t;
206 #endif
207 #else
208 //
209 // Use ANSI C 2000 stdint.h integer width declarations
210 //
211 #include "stdint.h"
212 #endif
213
214 //
215 // Native integer size in stdint.h
216 //
217 typedef uint32_t uintn_t;
218 typedef int32_t intn_t;
219
220 //
221 // Processor specific defines
222 //
223 #define EFI_MAX_BIT 0x80000000
224 #define MAX_2_BITS 0xC0000000
225
226 //
227 // Maximum legal IA-32 address
228 //
229 #define EFI_MAX_ADDRESS 0xFFFFFFFF
230
231 //
232 // Bad pointer value to use in check builds.
233 // if you see this value you are using uninitialized or free'ed data
234 //
235 #define EFI_BAD_POINTER 0xAFAFAFAF
236 #define EFI_BAD_POINTER_AS_BYTE 0xAF
237
238 //
239 // Inject a break point in the code to assist debugging for NT Emulation Environment
240 // For real hardware, just put in a halt loop. Don't do a while(1) because the
241 // compiler will optimize away the rest of the function following, so that you run out in
242 // the weeds if you skip over it with a debugger.
243 //
244 #ifdef _MSC_EXTENSIONS
245 #define EFI_BREAKPOINT() __asm { int 3 }
246 #elif __GNUC__
247 #define EFI_BREAKPOINT() asm(" int $3");
248 #endif
249
250 #define EFI_DEADLOOP() { volatile UINTN __iii; __iii = 1; while (__iii); }
251
252 //
253 // Memory Fence forces serialization, and is needed to support out of order
254 // memory transactions. The Memory Fence is mainly used to make sure IO
255 // transactions complete in a deterministic sequence, and to syncronize locks
256 // an other MP code. Currently no memory fencing is required.
257 //
258 #define MEMORY_FENCE()
259
260 //
261 // Some compilers don't support the forward reference construct:
262 // typedef struct XXXXX. The forward reference is required for
263 // ANSI compatibility.
264 //
265 // The following macro provide a workaround for such cases.
266 //
267
268
269 #ifdef EFI_NO_INTERFACE_DECL
270 #define EFI_FORWARD_DECLARATION(x)
271 #else
272 #define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
273 #endif
274
275
276 //
277 // Some C compilers optimize the calling conventions to increase performance.
278 // _EFIAPI is used to make all public APIs follow the standard C calling
279 // convention.
280 //
281 #if _MSC_EXTENSIONS
282 //
283 // Microsoft* compiler requires _EFIAPI useage, __cdecl is Microsoft* specific C.
284 //
285
286 #define _EFIAPI __cdecl
287 #else
288 #define _EFIAPI
289 #endif
290
291
292 #ifdef _EFI_WINNT
293
294 #define EFI_SUPPRESS_BENIGN_REDEFINITION_OF_TYPE_WARNING() \
295 warning ( disable : 4142 )
296
297 #define EFI_DEFAULT_BENIGN_REDEFINITION_OF_TYPE_WARNING() \
298 warning ( default : 4142 )
299 #else
300
301 #define EFI_SUPPRESS_BENIGN_REDEFINITION_OF_TYPE_WARNING() \
302 warning ( disable : 4068 )
303
304 #define EFI_DEFAULT_BENIGN_REDEFINITION_OF_TYPE_WARNING() \
305 warning ( default : 4068 )
306
307 #endif
308
309 //
310 // For symbol name in GNU assembly code, an extra "_" is necessary
311 //
312 #if __GNUC__
313 #if defined(linux)
314 #define ASM_PFX(name) name
315 #else
316 #define ASM_PFX(name) _##name
317 #endif
318 #endif
319
320 #endif
321