ProcessorBind.h revision 959ccb23c6a14797ecaf5990bd5906b4b05a9b75
1959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang/** @file
2959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  Processor or Compiler specific defines and types for x64.
3959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
4959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  Copyright (c) 2006, Intel Corporation
5959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  All rights reserved. This program and the accompanying materials
6959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  are licensed and made available under the terms and conditions of the BSD License
7959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  which accompanies this distribution.  The full text of the license may be found at
8959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  http://opensource.org/licenses/bsd-license.php
9959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
10959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
13959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  Module Name:  ProcessorBind.h
14959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
15959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang**/
16959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
17959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#ifndef __PROCESSOR_BIND_H__
18959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define __PROCESSOR_BIND_H__
19959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
20959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
21959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Define the processor type so other code can make processor based choices
22959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
23959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MDE_CPU_IA32
24959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
25959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
26959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Make sure we are useing the correct packing rules per EFI specification
27959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
28959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#ifndef __GNUC__
29959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma pack()
30959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
31959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
32959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#if _MSC_EXTENSIONS
33959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
34959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
35959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Disable warning that make it impossible to compile at /W4
36959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// This only works for Microsoft* tools
37959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
38959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
39959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
40959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Disabling bitfield type checking warnings.
41959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
42959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4214 )
43959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
44959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
45959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Disabling the unreferenced formal parameter warnings.
46959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
47959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4100 )
48959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
49959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
50959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Disable slightly different base types warning as CHAR8 * can not be set
51959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// to a constant string.
52959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
53959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4057 )
54959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
55959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
56959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning
57959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
58959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4127 )
59959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
60959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
61959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// This warning is caused by functions defined but not used. For precompiled header only.
62959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
63959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4505 )
64959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
65959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
66959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// This warning is caused by empty (after preprocessing) souce file. For precompiled header only.
67959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
68959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4206 )
69959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
70959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
71959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
72959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
73959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#if !defined(__GNUC__) && (__STDC_VERSION__ < 199901L)
74959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  //
75959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  // No ANSI C 2000 stdint.h integer width declarations, so define equivalents
76959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  //
77959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
78959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  #if _MSC_EXTENSIONS
79959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
80959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    //
81959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    // use Microsoft* C complier dependent interger width types
82959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    //
83959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef unsigned __int64    UINT64;
84959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef __int64             INT64;
85959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef unsigned __int32    UINT32;
86959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef __int32             INT32;
87959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef unsigned short      UINT16;
88959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef unsigned short      CHAR16;
89959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef short               INT16;
90959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef unsigned char       BOOLEAN;
91959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef unsigned char       UINT8;
92959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef char                CHAR8;
93959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef char                INT8;
94959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  #else
95959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
96959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    //
97959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    // Assume standard IA-32 alignment.
98959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    // Need to check portability of long long
99959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    //
100959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef unsigned long long  UINT64;
101959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef long long           INT64;
102959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef unsigned int        UINT32;
103959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef int                 INT32;
104959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef unsigned short      UINT16;
105959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef unsigned short      CHAR16;
106959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef short               INT16;
107959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef unsigned char       BOOLEAN;
108959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef unsigned char       UINT8;
109959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef char                CHAR8;
110959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang    typedef char                INT8;
111959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  #endif
112959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
113959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  #define UINT8_MAX 0xff
114959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
115959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#else
116959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  //
117959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  // Use ANSI C 2000 stdint.h integer width declarations
118959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  //
119959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  #include "stdint.h"
120959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  typedef uint8_t   BOOLEAN;
121959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  typedef int8_t    INT8;
122959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  typedef uint8_t   UINT8;
123959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  typedef int16_t   INT16;
124959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  typedef uint16_t  UINT16;
125959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  typedef int32_t   INT32;
126959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  typedef uint32_t  UINT32;
127959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  typedef int64_t   INT64;
128959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  typedef uint64_t  UINT64;
129959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  typedef char      CHAR8;
130959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  typedef uint16_t  CHAR16;
131959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
132959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
133959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
134959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef UINT32  UINTN;
135959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef INT32   INTN;
136959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
137959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
138959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
139959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Processor specific defines
140959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
141959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MAX_BIT     0x80000000
142959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MAX_2_BITS  0xC0000000
143959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
144959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
145959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Maximum legal IA-32 address
146959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
147959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MAX_ADDRESS   0xFFFFFFFF
148959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
149959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
150959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// The stack alignment required for IA-32
151959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
152959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define CPU_STACK_ALIGNMENT   sizeof(UINTN)
153959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
154959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
155959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Modifier to ensure that all protocol member functions and EFI intrinsics
156959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// use the correct C calling convention. All protocol member functions and
157959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// EFI intrinsics are required to modify thier member functions with EFIAPI.
158959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
159959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#if _MSC_EXTENSIONS
160959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  //
161959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  // Microsoft* compiler requires _EFIAPI useage, __cdecl is Microsoft* specific C.
162959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  //
163959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  #define EFIAPI __cdecl
164959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
165959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
166959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#if __GNUC__
167959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  #define EFIAPI __attribute__((cdecl))
168959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
169959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
170959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
171959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// The Microsoft* C compiler can removed references to unreferenced data items
172959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//  if the /OPT:REF linker option is used. We defined a macro as this is a
173959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//  a non standard extension
174959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
175959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#if _MSC_EXTENSIONS
176959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  #define GLOBAL_REMOVE_IF_UNREFERENCED __declspec(selectany)
177959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#else
178959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  #define GLOBAL_REMOVE_IF_UNREFERENCED
179959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
180959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
181959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
182959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
183