1959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang/** @file 21a2f870c9babe077c2d3abea23b6e8e044778341pkandel Processor or Compiler specific defines and types for IA-32 architecture. 3959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 4a5077fd0d280b7160e14159144934b1d7391a045Shumin QiuCopyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR> 58c18db2750c60488f3889a0b6db96f746a66ccf7myronporterThis program and the accompanying materials are licensed and made available under 68c18db2750c60488f3889a0b6db96f746a66ccf7myronporterthe terms and conditions of the BSD License that accompanies this distribution. 78c18db2750c60488f3889a0b6db96f746a66ccf7myronporterThe full text of the license may be found at 88c18db2750c60488f3889a0b6db96f746a66ccf7myronporterhttp://opensource.org/licenses/bsd-license.php. 98c18db2750c60488f3889a0b6db96f746a66ccf7myronporter 108c18db2750c60488f3889a0b6db96f746a66ccf7myronporterTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 118c18db2750c60488f3889a0b6db96f746a66ccf7myronporterWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 13959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang**/ 14959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 15959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#ifndef __PROCESSOR_BIND_H__ 16959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define __PROCESSOR_BIND_H__ 17959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 183566565aa46899c26d5d8243966643f9a89a2133klu/// 198c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// Define the processor type so other code can make processor based choices. 203566565aa46899c26d5d8243966643f9a89a2133klu/// 21959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MDE_CPU_IA32 22959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 23959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 243963c4bf44b14be594c4253d695652e077856773gikidy// Make sure we are using the correct packing rules per EFI specification 25959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 265cfbd055878dcca6f3e4081fc5c8805fd2ce7107klu#if !defined(__GNUC__) 27959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma pack() 28959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif 29959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 305cfbd055878dcca6f3e4081fc5c8805fd2ce7107klu#if defined(__INTEL_COMPILER) 31b483e39524be82e44caa2804145415d17713a6a5AJFISH// 32ed300ce2a68ba42b7e140af9e7e71c706518c9f1jljusten// Disable ICC's remark #869: "Parameter" was never referenced warning. 33ed300ce2a68ba42b7e140af9e7e71c706518c9f1jljusten// This is legal ANSI C code so we disable the remark that is turned on with -Wall 34ed300ce2a68ba42b7e140af9e7e71c706518c9f1jljusten// 35ed300ce2a68ba42b7e140af9e7e71c706518c9f1jljusten#pragma warning ( disable : 869 ) 36ed300ce2a68ba42b7e140af9e7e71c706518c9f1jljusten 37ed300ce2a68ba42b7e140af9e7e71c706518c9f1jljusten// 38b483e39524be82e44caa2804145415d17713a6a5AJFISH// Disable ICC's remark #1418: external function definition with no prior declaration. 39b483e39524be82e44caa2804145415d17713a6a5AJFISH// This is legal ANSI C code so we disable the remark that is turned on with /W4 40b483e39524be82e44caa2804145415d17713a6a5AJFISH// 41b483e39524be82e44caa2804145415d17713a6a5AJFISH#pragma warning ( disable : 1418 ) 42b483e39524be82e44caa2804145415d17713a6a5AJFISH 43b483e39524be82e44caa2804145415d17713a6a5AJFISH// 44b483e39524be82e44caa2804145415d17713a6a5AJFISH// Disable ICC's remark #1419: external declaration in primary source file 45b483e39524be82e44caa2804145415d17713a6a5AJFISH// This is legal ANSI C code so we disable the remark that is turned on with /W4 46b483e39524be82e44caa2804145415d17713a6a5AJFISH// 47b483e39524be82e44caa2804145415d17713a6a5AJFISH#pragma warning ( disable : 1419 ) 48b483e39524be82e44caa2804145415d17713a6a5AJFISH 498fe69f133e7e2ad9010f96002da41d0b325682c7eric_tian// 508fe69f133e7e2ad9010f96002da41d0b325682c7eric_tian// Disable ICC's remark #593: "Variable" was set but never used. 518fe69f133e7e2ad9010f96002da41d0b325682c7eric_tian// This is legal ANSI C code so we disable the remark that is turned on with /W4 528fe69f133e7e2ad9010f96002da41d0b325682c7eric_tian// 538fe69f133e7e2ad9010f96002da41d0b325682c7eric_tian#pragma warning ( disable : 593 ) 548fe69f133e7e2ad9010f96002da41d0b325682c7eric_tian 55b483e39524be82e44caa2804145415d17713a6a5AJFISH#endif 56b483e39524be82e44caa2804145415d17713a6a5AJFISH 57b483e39524be82e44caa2804145415d17713a6a5AJFISH 585cfbd055878dcca6f3e4081fc5c8805fd2ce7107klu#if defined(_MSC_EXTENSIONS) 59959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 60959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 61959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Disable warning that make it impossible to compile at /W4 62959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// This only works for Microsoft* tools 63959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 64959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 65959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 66959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Disabling bitfield type checking warnings. 67959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 68959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4214 ) 69959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 70959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 71959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Disabling the unreferenced formal parameter warnings. 72959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 73959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4100 ) 74959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 75959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 76959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Disable slightly different base types warning as CHAR8 * can not be set 77959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// to a constant string. 78959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 79959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4057 ) 80959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 81959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 82959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning 83959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 84959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4127 ) 85959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 86959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 87959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// This warning is caused by functions defined but not used. For precompiled header only. 88959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 89959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4505 ) 90959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 91959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 923963c4bf44b14be594c4253d695652e077856773gikidy// This warning is caused by empty (after preprocessing) source file. For precompiled header only. 93959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 94959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4206 ) 95959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 96592a3790d8b39ed982216560b9608db71a758e83Liming Gao#if _MSC_VER == 1800 || _MSC_VER == 1900 97a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu 98a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu// 99a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu// Disable these warnings for VS2013. 100a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu// 101a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu 102a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu// 103a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu// This warning is for potentially uninitialized local variable, and it may cause false 104592a3790d8b39ed982216560b9608db71a758e83Liming Gao// positive issues in VS2013 and VS2015 build 105a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu// 106a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu#pragma warning ( disable : 4701 ) 107a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu 108a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu// 109a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu// This warning is for potentially uninitialized local pointer variable, and it may cause 110592a3790d8b39ed982216560b9608db71a758e83Liming Gao// false positive issues in VS2013 and VS2015 build 111a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu// 112a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu#pragma warning ( disable : 4703 ) 113a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu 114a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu#endif 115a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu 116959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif 117959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 118959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 11952aa9e136bb99c9c09d37179765344278251c618geekboy#if defined(_MSC_EXTENSIONS) 120f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney 121959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang // 12252aa9e136bb99c9c09d37179765344278251c618geekboy // use Microsoft C complier dependent integer width types 123959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang // 124f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney 125f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 1268c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 8-byte unsigned value. 12752aa9e136bb99c9c09d37179765344278251c618geekboy /// 12852aa9e136bb99c9c09d37179765344278251c618geekboy typedef unsigned __int64 UINT64; 12952aa9e136bb99c9c09d37179765344278251c618geekboy /// 1308c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 8-byte signed value. 13152aa9e136bb99c9c09d37179765344278251c618geekboy /// 13252aa9e136bb99c9c09d37179765344278251c618geekboy typedef __int64 INT64; 13352aa9e136bb99c9c09d37179765344278251c618geekboy /// 1348c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 4-byte unsigned value. 13552aa9e136bb99c9c09d37179765344278251c618geekboy /// 13652aa9e136bb99c9c09d37179765344278251c618geekboy typedef unsigned __int32 UINT32; 13752aa9e136bb99c9c09d37179765344278251c618geekboy /// 1388c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 4-byte signed value. 13952aa9e136bb99c9c09d37179765344278251c618geekboy /// 14052aa9e136bb99c9c09d37179765344278251c618geekboy typedef __int32 INT32; 14152aa9e136bb99c9c09d37179765344278251c618geekboy /// 1428c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 2-byte unsigned value. 14352aa9e136bb99c9c09d37179765344278251c618geekboy /// 14452aa9e136bb99c9c09d37179765344278251c618geekboy typedef unsigned short UINT16; 14552aa9e136bb99c9c09d37179765344278251c618geekboy /// 14652aa9e136bb99c9c09d37179765344278251c618geekboy /// 2-byte Character. Unless otherwise specified all strings are stored in the 14752aa9e136bb99c9c09d37179765344278251c618geekboy /// UTF-16 encoding format as defined by Unicode 2.1 and ISO/IEC 10646 standards. 14852aa9e136bb99c9c09d37179765344278251c618geekboy /// 14952aa9e136bb99c9c09d37179765344278251c618geekboy typedef unsigned short CHAR16; 15052aa9e136bb99c9c09d37179765344278251c618geekboy /// 1518c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 2-byte signed value. 15252aa9e136bb99c9c09d37179765344278251c618geekboy /// 15352aa9e136bb99c9c09d37179765344278251c618geekboy typedef short INT16; 15452aa9e136bb99c9c09d37179765344278251c618geekboy /// 155f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// Logical Boolean. 1-byte value containing 0 for FALSE or a 1 for TRUE. Other 156f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// values are undefined. 157f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 15852aa9e136bb99c9c09d37179765344278251c618geekboy typedef unsigned char BOOLEAN; 15952aa9e136bb99c9c09d37179765344278251c618geekboy /// 1608c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 1-byte unsigned value. 16152aa9e136bb99c9c09d37179765344278251c618geekboy /// 16252aa9e136bb99c9c09d37179765344278251c618geekboy typedef unsigned char UINT8; 16352aa9e136bb99c9c09d37179765344278251c618geekboy /// 1648c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 1-byte Character. 16552aa9e136bb99c9c09d37179765344278251c618geekboy /// 16652aa9e136bb99c9c09d37179765344278251c618geekboy typedef char CHAR8; 167f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 1688c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 1-byte signed value. 169f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 170d22ebbe39fcf3a7462492667345dabc401765454lgao typedef signed char INT8; 17152aa9e136bb99c9c09d37179765344278251c618geekboy#else 172f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 1738c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 8-byte unsigned value. 174f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 17552aa9e136bb99c9c09d37179765344278251c618geekboy typedef unsigned long long UINT64; 176f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 1778c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 8-byte signed value. 178f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 17952aa9e136bb99c9c09d37179765344278251c618geekboy typedef long long INT64; 180f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 1818c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 4-byte unsigned value. 182f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 18352aa9e136bb99c9c09d37179765344278251c618geekboy typedef unsigned int UINT32; 184f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 1858c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 4-byte signed value. 186f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 18752aa9e136bb99c9c09d37179765344278251c618geekboy typedef int INT32; 188f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 1898c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 2-byte unsigned value. 190f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 19152aa9e136bb99c9c09d37179765344278251c618geekboy typedef unsigned short UINT16; 192f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 19352aa9e136bb99c9c09d37179765344278251c618geekboy /// 2-byte Character. Unless otherwise specified all strings are stored in the 19452aa9e136bb99c9c09d37179765344278251c618geekboy /// UTF-16 encoding format as defined by Unicode 2.1 and ISO/IEC 10646 standards. 195f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 19652aa9e136bb99c9c09d37179765344278251c618geekboy typedef unsigned short CHAR16; 197f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 1988c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 2-byte signed value. 19952aa9e136bb99c9c09d37179765344278251c618geekboy /// 20052aa9e136bb99c9c09d37179765344278251c618geekboy typedef short INT16; 20152aa9e136bb99c9c09d37179765344278251c618geekboy /// 20252aa9e136bb99c9c09d37179765344278251c618geekboy /// Logical Boolean. 1-byte value containing 0 for FALSE or a 1 for TRUE. Other 20352aa9e136bb99c9c09d37179765344278251c618geekboy /// values are undefined. 204f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 20552aa9e136bb99c9c09d37179765344278251c618geekboy typedef unsigned char BOOLEAN; 20652aa9e136bb99c9c09d37179765344278251c618geekboy /// 2078c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// 1-byte unsigned value. 20852aa9e136bb99c9c09d37179765344278251c618geekboy /// 20952aa9e136bb99c9c09d37179765344278251c618geekboy typedef unsigned char UINT8; 210f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 211f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 1-byte Character 212f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 21352aa9e136bb99c9c09d37179765344278251c618geekboy typedef char CHAR8; 214f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 21552aa9e136bb99c9c09d37179765344278251c618geekboy /// 1-byte signed value 216f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney /// 217d22ebbe39fcf3a7462492667345dabc401765454lgao typedef signed char INT8; 218959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif 219959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 220f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney/// 2218c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// Unsigned value of native width. (4 bytes on supported 32-bit processor instructions; 2228c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// 8 bytes on supported 64-bit processor instructions.) 223f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney/// 224959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef UINT32 UINTN; 225f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney/// 2268c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// Signed value of native width. (4 bytes on supported 32-bit processor instructions; 2278c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// 8 bytes on supported 64-bit processor instructions.) 228f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney/// 229959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef INT32 INTN; 230959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 231f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney// 232f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney// Processor specific defines 233f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney// 234959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 2353566565aa46899c26d5d8243966643f9a89a2133klu/// 236f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney/// A value of native width with the highest bit set. 2373566565aa46899c26d5d8243966643f9a89a2133klu/// 238959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MAX_BIT 0x80000000 239f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney/// 240f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney/// A value of native width with the two highest bits set. 241f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney/// 242959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MAX_2_BITS 0xC0000000 243959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 2443566565aa46899c26d5d8243966643f9a89a2133klu/// 2458c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// Maximum legal IA-32 address. 2463566565aa46899c26d5d8243966643f9a89a2133klu/// 247959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MAX_ADDRESS 0xFFFFFFFF 248959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 2493566565aa46899c26d5d8243966643f9a89a2133klu/// 250068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao/// Maximum legal IA-32 INTN and UINTN values. 251068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao/// 252068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao#define MAX_INTN ((INTN)0x7FFFFFFF) 253068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao#define MAX_UINTN ((UINTN)0xFFFFFFFF) 254068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao 255068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao/// 2568c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// The stack alignment required for IA-32. 2573566565aa46899c26d5d8243966643f9a89a2133klu/// 258959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define CPU_STACK_ALIGNMENT sizeof(UINTN) 259959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 260959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 261959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Modifier to ensure that all protocol member functions and EFI intrinsics 262959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// use the correct C calling convention. All protocol member functions and 2633963c4bf44b14be594c4253d695652e077856773gikidy// EFI intrinsics are required to modify their member functions with EFIAPI. 264959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// 2656149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten#ifdef EFIAPI 2666149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten /// 2676149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten /// If EFIAPI is already defined, then we use that definition. 2686149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten /// 2696149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten#elif defined(_MSC_EXTENSIONS) 2703566565aa46899c26d5d8243966643f9a89a2133klu /// 2718c18db2750c60488f3889a0b6db96f746a66ccf7myronporter /// Microsoft* compiler specific method for EFIAPI calling convention. 2723566565aa46899c26d5d8243966643f9a89a2133klu /// 273959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang #define EFIAPI __cdecl 274a0e1b1273546ba882372f861abf514edfe2c3a6algao#elif defined(__GNUC__) 275a0e1b1273546ba882372f861abf514edfe2c3a6algao /// 276a0e1b1273546ba882372f861abf514edfe2c3a6algao /// GCC specific method for EFIAPI calling convention. 277a0e1b1273546ba882372f861abf514edfe2c3a6algao /// 278a0e1b1273546ba882372f861abf514edfe2c3a6algao #define EFIAPI __attribute__((cdecl)) 27986b2b825c48d9524db4870b87c185f707a3b1dfaklu#else 280a0e1b1273546ba882372f861abf514edfe2c3a6algao /// 281a0e1b1273546ba882372f861abf514edfe2c3a6algao /// The default for a non Microsoft* or GCC compiler is to assume the EFI ABI 282a0e1b1273546ba882372f861abf514edfe2c3a6algao /// is the standard. 283a0e1b1273546ba882372f861abf514edfe2c3a6algao /// 284a0e1b1273546ba882372f861abf514edfe2c3a6algao #define EFIAPI 285959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif 286959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 2875cfbd055878dcca6f3e4081fc5c8805fd2ce7107klu#if defined(__GNUC__) 288d4cf6b6c976d07af769ad3bfeeccbcf833e72c32eric_tian /// 28968167fed0e4ecb5393a3f036d14c438f65c85f80mdkinney /// For GNU assembly code, .global or .globl can declare global symbols. 29068167fed0e4ecb5393a3f036d14c438f65c85f80mdkinney /// Define this macro to unify the usage. 29168167fed0e4ecb5393a3f036d14c438f65c85f80mdkinney /// 29268167fed0e4ecb5393a3f036d14c438f65c85f80mdkinney #define ASM_GLOBAL .globl 29327af6b876a70c49928bdae7bedbb72cba9a18171jwang#endif 29427af6b876a70c49928bdae7bedbb72cba9a18171jwang 29514996c966991de1127fc2d6af8a08df47167b4ablgao/** 29614996c966991de1127fc2d6af8a08df47167b4ablgao Return the pointer to the first instruction of a function given a function pointer. 2971a2f870c9babe077c2d3abea23b6e8e044778341pkandel On IA-32 CPU architectures, these two pointer values are the same, 29814996c966991de1127fc2d6af8a08df47167b4ablgao so the implementation of this macro is very simple. 29914996c966991de1127fc2d6af8a08df47167b4ablgao 3003963c4bf44b14be594c4253d695652e077856773gikidy @param FunctionPointer A pointer to a function. 30114996c966991de1127fc2d6af8a08df47167b4ablgao 30214996c966991de1127fc2d6af8a08df47167b4ablgao @return The pointer to the first instruction of a function given a function pointer. 3033963c4bf44b14be594c4253d695652e077856773gikidy 30414996c966991de1127fc2d6af8a08df47167b4ablgao**/ 3059a1d00cbb571c019e98b28189f6619ff32e7bb49mdkinney#define FUNCTION_ENTRY_POINT(FunctionPointer) (VOID *)(UINTN)(FunctionPointer) 30624a7505cefd6dbb73bcdf2778f4e59095780aa50mdkinney 30702eef553114dea1e4d55071e91398a0625e4e18cJordan Justen#ifndef __USER_LABEL_PREFIX__ 30802eef553114dea1e4d55071e91398a0625e4e18cJordan Justen#define __USER_LABEL_PREFIX__ _ 30902eef553114dea1e4d55071e91398a0625e4e18cJordan Justen#endif 31002eef553114dea1e4d55071e91398a0625e4e18cJordan Justen 311959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif 312959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 313