13eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++ 23eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 364bb20fb9c05f1a7f8b731fae736069e1c2f0401lgaoCopyright (c) 2004 - 2012, Intel Corporation. All rights reserved.<BR> 4f57387d54bd8f2c0261834b2ad16155f1db63291hhtianThis program and the accompanying materials 53eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangare licensed and made available under the terms and conditions of the BSD License 63eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangwhich accompanies this distribution. The full text of the license may be found at 73eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwanghttp://opensource.org/licenses/bsd-license.php 83eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 93eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangModule Name: 133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EfiBind.h 153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangAbstract: 173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang Processor or Compiler specific defines and types for IA-32. 193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang We are using the ANSI C 2000 _t type definitions for basic types. 203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang This it technically a violation of the coding standard, but they 213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang are used to make EfiTypes.h portable. Code other than EfiTypes.h 223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang should never use any ANSI C 2000 _t integer types. 233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/ 253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifndef _EFI_BIND_H_ 273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define _EFI_BIND_H_ 283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifdef EFI_DEBUG 303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifdef EFI_NT_EMULATOR 323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_DRIVER_ENTRY_POINT(InitFunction) \ 343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_STATUS \ 353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFIAPI \ 363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang InitFunction ( \ 373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_HANDLE ImageHandle, \ 383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_SYSTEM_TABLE *SystemTable \ 393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang ); \ 403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang \ 413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINTN \ 423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang __stdcall \ 433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang _DllMainCRTStartup ( \ 443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINTN Inst, \ 453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINTN reason_for_call, \ 463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang VOID *rserved \ 473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang ) \ 483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang { \ 493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang return 1; \ 503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang } \ 513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang \ 52c7f33ca42470dc87bc41a8583f427883123d67a1qwang EFI_STATUS \ 533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang __declspec( dllexport ) \ 543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang __cdecl \ 553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang InitializeDriver ( \ 56c7f33ca42470dc87bc41a8583f427883123d67a1qwang EFI_HANDLE ImageHandle, \ 57c7f33ca42470dc87bc41a8583f427883123d67a1qwang EFI_SYSTEM_TABLE *SystemTable \ 583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang ) \ 593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang { \ 603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang return InitFunction(ImageHandle, SystemTable); \ 613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang } 623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_APPLICATION_ENTRY_POINT EFI_DRIVER_ENTRY_POINT 643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#else 663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_DRIVER_ENTRY_POINT(InitFunction) 683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_APPLICATION_ENTRY_POINT EFI_DRIVER_ENTRY_POINT 693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif 713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#else 733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_DRIVER_ENTRY_POINT(InitFunction) 753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_APPLICATION_ENTRY_POINT EFI_DRIVER_ENTRY_POINT 763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif 783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Make sure we are useing the correct packing rules per EFI specification 853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 86e8de46808a7d2426116de79cdf2aeab43d5a5537AJFISH#ifndef __GNUC__ 873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma pack() 88e8de46808a7d2426116de79cdf2aeab43d5a5537AJFISH#endif 893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 90b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten#if __INTEL_COMPILER 91b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// 92b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// Disable ICC's warning: trailing comma is nonstandard 93b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// 94b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten//#pragma warning ( disable : 271 ) 95b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten 96b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// 97b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// Disable ICC's warning: extra ";" ignored 98b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// 99b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten#pragma warning ( disable : 424 ) 100b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten 101b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// 102b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// Disable ICC's warning: : variable "foo" was set but never used 103b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// 104b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten#pragma warning ( disable : 593 ) 105b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten 106b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// 107b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// Disable ICC's remark #1418: external function definition with no prior declaration. 108b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// This is legal ANSI C code so we disable the remark that is turned on with /W4 109b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// 110b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten#pragma warning ( disable : 1418 ) 111b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten 112b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten 113b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// 114b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// Disable ICC's remark #1419: external declaration in primary source file 115b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// This is legal ANSI C code so we disable the remark that is turned on with /W4 116b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten// 117b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten#pragma warning ( disable : 1419 ) 118b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten 11959a7e4f4bd159d4e91d29410ce0c3fa03646c363xli// 12059a7e4f4bd159d4e91d29410ce0c3fa03646c363xli// Disable ICC's remark #869: "Parameter" was never referenced warning. 12159a7e4f4bd159d4e91d29410ce0c3fa03646c363xli// This is legal ANSI C code so we disable the remark that is turned on with -Wall 12259a7e4f4bd159d4e91d29410ce0c3fa03646c363xli// 12359a7e4f4bd159d4e91d29410ce0c3fa03646c363xli#pragma warning ( disable : 869 ) 12459a7e4f4bd159d4e91d29410ce0c3fa03646c363xli 125b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten#endif 126b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten 127b9b478088b18cf3f4d3edcf94198eb0ba7f1b7eejljusten 1283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#if _MSC_EXTENSIONS 1293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Disable warning that make it impossible to compile at /W4 1323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// This only works for Microsoft* tools 1333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Disabling bitfield type checking warnings. 1373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma warning ( disable : 4214 ) 1393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Disabling the unreferenced formal parameter warnings. 1423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma warning ( disable : 4100 ) 1443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Disable slightly different base types warning as CHAR8 * can not be set 1473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// to a constant string. 1483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma warning ( disable : 4057 ) 1503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning 1533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma warning ( disable : 4127 ) 1553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Int64ShllMod32 unreferenced inline function 1583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma warning ( disable : 4514 ) 1603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Unreferenced formal parameter - We are object oriented, so we pass This even 1633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// if we don't need them. 1643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma warning ( disable : 4100 ) 1663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// This warning is caused by empty (after preprocessing) souce file. 1693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma warning ( disable : 4206 ) 1713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif 1743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1760e7e330262c29fd995a3ac4ea88b135d90587d96jljusten#if defined(_MSC_EXTENSIONS) 1770e7e330262c29fd995a3ac4ea88b135d90587d96jljusten 1783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang // 1790e7e330262c29fd995a3ac4ea88b135d90587d96jljusten // use Microsoft C complier dependent integer width types 1803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang // 1810e7e330262c29fd995a3ac4ea88b135d90587d96jljusten 1820e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef unsigned __int64 uint64_t; 1830e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef __int64 int64_t; 1840e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef unsigned __int32 uint32_t; 1850e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef __int32 int32_t; 1860e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef unsigned short uint16_t; 1870e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef short int16_t; 1880e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef unsigned char uint8_t; 18964bb20fb9c05f1a7f8b731fae736069e1c2f0401lgao typedef signed char int8_t; 1900e7e330262c29fd995a3ac4ea88b135d90587d96jljusten#else 1910e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef unsigned long long uint64_t; 1920e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef long long int64_t; 1930e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef unsigned int uint32_t; 1940e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef int int32_t; 1950e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef unsigned short uint16_t; 1960e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef short int16_t; 1970e7e330262c29fd995a3ac4ea88b135d90587d96jljusten typedef unsigned char uint8_t; 19864bb20fb9c05f1a7f8b731fae736069e1c2f0401lgao typedef signed char int8_t; 1993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif 2003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Native integer size in stdint.h 2033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef uint32_t uintn_t; 2053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef int32_t intn_t; 2063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Processor specific defines 2093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_MAX_BIT 0x80000000 2113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define MAX_2_BITS 0xC0000000 2123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Maximum legal IA-32 address 2153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_MAX_ADDRESS 0xFFFFFFFF 2173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Bad pointer value to use in check builds. 2203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// if you see this value you are using uninitialized or free'ed data 2213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_BAD_POINTER 0xAFAFAFAF 2233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_BAD_POINTER_AS_BYTE 0xAF 2243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Inject a break point in the code to assist debugging for NT Emulation Environment 2273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// For real hardware, just put in a halt loop. Don't do a while(1) because the 2283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// compiler will optimize away the rest of the function following, so that you run out in 2293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// the weeds if you skip over it with a debugger. 2303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2310d37437d289b8ce1c57c884debf27f8fe0e2cd8eqwang#ifdef _MSC_EXTENSIONS 2323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_BREAKPOINT() __asm { int 3 } 2330d37437d289b8ce1c57c884debf27f8fe0e2cd8eqwang#elif __GNUC__ 2340d37437d289b8ce1c57c884debf27f8fe0e2cd8eqwang#define EFI_BREAKPOINT() asm(" int $3"); 2350d37437d289b8ce1c57c884debf27f8fe0e2cd8eqwang#endif 2360d37437d289b8ce1c57c884debf27f8fe0e2cd8eqwang 2373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_DEADLOOP() { volatile UINTN __iii; __iii = 1; while (__iii); } 2383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Memory Fence forces serialization, and is needed to support out of order 2413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// memory transactions. The Memory Fence is mainly used to make sure IO 2423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// transactions complete in a deterministic sequence, and to syncronize locks 2433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// an other MP code. Currently no memory fencing is required. 2443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define MEMORY_FENCE() 2463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Some compilers don't support the forward reference construct: 2493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// typedef struct XXXXX. The forward reference is required for 2503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// ANSI compatibility. 2513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// The following macro provide a workaround for such cases. 2533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifdef EFI_NO_INTERFACE_DECL 2573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang #define EFI_FORWARD_DECLARATION(x) 2583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#else 2593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang #define EFI_FORWARD_DECLARATION(x) typedef struct _##x x 2603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif 2613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Some C compilers optimize the calling conventions to increase performance. 2653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// _EFIAPI is used to make all public APIs follow the standard C calling 2663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// convention. 2673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#if _MSC_EXTENSIONS 2693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang // 2703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang // Microsoft* compiler requires _EFIAPI useage, __cdecl is Microsoft* specific C. 2713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang // 2723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang #define _EFIAPI __cdecl 2743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#else 2753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang #define _EFIAPI 2763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif 2773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifdef _EFI_WINNT 2803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang #define EFI_SUPPRESS_BENIGN_REDEFINITION_OF_TYPE_WARNING() \ 2823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang warning ( disable : 4142 ) 2833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang #define EFI_DEFAULT_BENIGN_REDEFINITION_OF_TYPE_WARNING() \ 2853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang warning ( default : 4142 ) 2863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#else 2873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang #define EFI_SUPPRESS_BENIGN_REDEFINITION_OF_TYPE_WARNING() \ 2893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang warning ( disable : 4068 ) 2903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang #define EFI_DEFAULT_BENIGN_REDEFINITION_OF_TYPE_WARNING() \ 2923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang warning ( default : 4068 ) 2933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif 2953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 296297c148b7a05abc1a9dec34d63b35169e5f41809jljusten// 297297c148b7a05abc1a9dec34d63b35169e5f41809jljusten// For symbol name in GNU assembly code, an extra "_" is necessary 298297c148b7a05abc1a9dec34d63b35169e5f41809jljusten// 29978709ef8cf13fe387a5b72cab34de195e6438070eric_tian#if defined(__GNUC__) 300c113cd3272b5cde2f79a88ac5895e607ba2852e2eric_tian /// 301c113cd3272b5cde2f79a88ac5895e607ba2852e2eric_tian /// Private worker functions for ASM_PFX() 302c113cd3272b5cde2f79a88ac5895e607ba2852e2eric_tian /// 303c113cd3272b5cde2f79a88ac5895e607ba2852e2eric_tian #define _CONCATENATE(a, b) __CONCATENATE(a, b) 304c113cd3272b5cde2f79a88ac5895e607ba2852e2eric_tian #define __CONCATENATE(a, b) a ## b 305c113cd3272b5cde2f79a88ac5895e607ba2852e2eric_tian 306c113cd3272b5cde2f79a88ac5895e607ba2852e2eric_tian /// 307c113cd3272b5cde2f79a88ac5895e607ba2852e2eric_tian /// The __USER_LABEL_PREFIX__ macro predefined by GNUC represents the prefix 308c113cd3272b5cde2f79a88ac5895e607ba2852e2eric_tian /// on symbols in assembly language. 309c113cd3272b5cde2f79a88ac5895e607ba2852e2eric_tian /// 310c113cd3272b5cde2f79a88ac5895e607ba2852e2eric_tian #define ASM_PFX(name) _CONCATENATE (__USER_LABEL_PREFIX__, name) 311c113cd3272b5cde2f79a88ac5895e607ba2852e2eric_tian 312297c148b7a05abc1a9dec34d63b35169e5f41809jljusten#endif 3133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif 3153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 316