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