Fixed Header Format
[people/mcb30/basetools.git] / Source / C / Include / Ia32 / ProcessorBind.h
1 /** @file\r
2   Processor or Compiler specific defines and types for x64.\r
3 \r
4   Copyright (c) 2006 - 2008, Intel Corporation  All rights reserved.\r
5 \r
6   This program and the accompanying materials are licensed and made available\r
7   under the terms and conditions of the BSD License which accompanies this\r
8   distribution.  The full text of the license may be found at:\r
9     http://opensource.org/licenses/bsd-license.php\r
10 \r
11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13 \r
14   File Name:  ProcessorBind.h\r
15 \r
16 **/\r
17 \r
18 #ifndef __PROCESSOR_BIND_H__\r
19 #define __PROCESSOR_BIND_H__\r
20 \r
21 //\r
22 // Define the processor type so other code can make processor based choices\r
23 //\r
24 #define MDE_CPU_IA32\r
25 \r
26 //\r
27 // Make sure we are useing the correct packing rules per EFI specification\r
28 //\r
29 #ifndef __GNUC__\r
30 #pragma pack()\r
31 #endif\r
32 \r
33 #if _MSC_EXTENSIONS\r
34 \r
35 //\r
36 // Disable warning that make it impossible to compile at /W4\r
37 // This only works for Microsoft* tools\r
38 //\r
39 \r
40 //\r
41 // Disabling bitfield type checking warnings.\r
42 //\r
43 #pragma warning ( disable : 4214 )\r
44 \r
45 //\r
46 // Disabling the unreferenced formal parameter warnings.\r
47 //\r
48 #pragma warning ( disable : 4100 )\r
49 \r
50 //\r
51 // Disable slightly different base types warning as CHAR8 * can not be set\r
52 // to a constant string.\r
53 //\r
54 #pragma warning ( disable : 4057 )\r
55 \r
56 //\r
57 // ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning\r
58 //\r
59 #pragma warning ( disable : 4127 )\r
60 \r
61 \r
62 #endif\r
63 \r
64 \r
65 #if !defined(__GNUC__) && (__STDC_VERSION__ < 199901L)\r
66   //\r
67   // No ANSI C 2000 stdint.h integer width declarations, so define equivalents\r
68   //\r
69  \r
70   #if _MSC_EXTENSIONS \r
71     \r
72     //\r
73     // use Microsoft* C complier dependent interger width types \r
74     //\r
75     typedef unsigned __int64    UINT64;\r
76     typedef __int64             INT64;\r
77     typedef unsigned __int32    UINT32;\r
78     typedef __int32             INT32;\r
79     typedef unsigned short      UINT16;\r
80     typedef unsigned short      CHAR16;\r
81     typedef short               INT16;\r
82     typedef unsigned char       BOOLEAN;\r
83     typedef unsigned char       UINT8;\r
84     typedef char                CHAR8;\r
85     typedef char                INT8;\r
86   #else\r
87 \r
88     //\r
89     // Assume standard IA-32 alignment. \r
90     // BugBug: Need to check portability of long long\r
91     //\r
92     typedef unsigned long long  UINT64;\r
93     typedef long long           INT64;\r
94     typedef unsigned int        UINT32;\r
95     typedef int                 INT32;\r
96     typedef unsigned short      UINT16;\r
97     typedef unsigned short      CHAR16;\r
98     typedef short               INT16;\r
99     typedef unsigned char       BOOLEAN;\r
100     typedef unsigned char       UINT8;\r
101     typedef char                CHAR8;\r
102     typedef char                INT8;\r
103   #endif\r
104 \r
105   #define UINT8_MAX 0xff\r
106 \r
107 #else\r
108   //\r
109   // Use ANSI C 2000 stdint.h integer width declarations\r
110   //\r
111   #include "stdint.h"\r
112   typedef uint8_t   BOOLEAN;\r
113   typedef int8_t    INT8;\r
114   typedef uint8_t   UINT8;\r
115   typedef int16_t   INT16;\r
116   typedef uint16_t  UINT16;\r
117   typedef int32_t   INT32;\r
118   typedef uint32_t  UINT32;\r
119   typedef int64_t   INT64;\r
120   typedef uint64_t  UINT64;\r
121   typedef char      CHAR8;\r
122   typedef uint16_t  CHAR16;\r
123 \r
124 #endif\r
125 \r
126 typedef UINT32  UINTN;\r
127 typedef INT32   INTN;\r
128 \r
129 \r
130 //\r
131 // Processor specific defines\r
132 //\r
133 #define MAX_BIT     0x80000000\r
134 #define MAX_2_BITS  0xC0000000\r
135 \r
136 //\r
137 // Maximum legal IA-32 address\r
138 //\r
139 #define MAX_ADDRESS   0xFFFFFFFF\r
140 \r
141 //\r
142 // Modifier to ensure that all protocol member functions and EFI intrinsics\r
143 // use the correct C calling convention. All protocol member functions and\r
144 // EFI intrinsics are required to modify thier member functions with EFIAPI.\r
145 //\r
146 #if _MSC_EXTENSIONS\r
147   //\r
148   // Microsoft* compiler requires _EFIAPI useage, __cdecl is Microsoft* specific C.\r
149   // \r
150   #define EFIAPI __cdecl  \r
151 #endif\r
152 \r
153 #if __GNUC__\r
154   #define EFIAPI __attribute__((cdecl))    \r
155 #endif\r
156 \r
157 //\r
158 // The Microsoft* C compiler can removed references to unreferenced data items\r
159 //  if the /OPT:REF linker option is used. We defined a macro as this is a \r
160 //  a non standard extension\r
161 //\r
162 #if _MSC_EXTENSIONS\r
163   #define GLOBAL_REMOVE_IF_UNREFERENCED __declspec(selectany)\r
164 #else\r
165   #define GLOBAL_REMOVE_IF_UNREFERENCED\r
166 #endif\r
167 \r
168 #endif\r