1*ca987d46SWarner Losh /*++ 2*ca987d46SWarner Losh 3*ca987d46SWarner Losh Copyright (c) 2004 - 2012, Intel Corporation. All rights reserved. 4*ca987d46SWarner Losh 5*ca987d46SWarner Losh This program and the accompanying materials 6*ca987d46SWarner Losh are licensed and made available under the terms and conditions of the BSD License 7*ca987d46SWarner Losh which accompanies this distribution. The full text of the license may be found at 8*ca987d46SWarner Losh http://opensource.org/licenses/bsd-license.php 9*ca987d46SWarner Losh 10*ca987d46SWarner Losh THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11*ca987d46SWarner Losh WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12*ca987d46SWarner Losh 13*ca987d46SWarner Losh Module Name: 14*ca987d46SWarner Losh 15*ca987d46SWarner Losh EfiBind.h 16*ca987d46SWarner Losh 17*ca987d46SWarner Losh Abstract: 18*ca987d46SWarner Losh 19*ca987d46SWarner Losh Processor or Compiler specific defines and types for IA-32. 20*ca987d46SWarner Losh We are using the ANSI C 2000 _t type definitions for basic types. 21*ca987d46SWarner Losh This it technically a violation of the coding standard, but they 22*ca987d46SWarner Losh are used to make EfiTypes.h portable. Code other than EfiTypes.h 23*ca987d46SWarner Losh should never use any ANSI C 2000 _t integer types. 24*ca987d46SWarner Losh 25*ca987d46SWarner Losh --*/ 26*ca987d46SWarner Losh 27*ca987d46SWarner Losh #ifndef _EFI_BIND_H_ 28*ca987d46SWarner Losh #define _EFI_BIND_H_ 29*ca987d46SWarner Losh 30*ca987d46SWarner Losh 31*ca987d46SWarner Losh #define EFI_DRIVER_ENTRY_POINT(InitFunction) 32*ca987d46SWarner Losh #define EFI_APPLICATION_ENTRY_POINT EFI_DRIVER_ENTRY_POINT 33*ca987d46SWarner Losh 34*ca987d46SWarner Losh 35*ca987d46SWarner Losh // 36*ca987d46SWarner Losh // Make sure we are using the correct packing rules per EFI specification 37*ca987d46SWarner Losh // 38*ca987d46SWarner Losh #ifndef __GNUC__ 39*ca987d46SWarner Losh #pragma pack() 40*ca987d46SWarner Losh #endif 41*ca987d46SWarner Losh 42*ca987d46SWarner Losh 43*ca987d46SWarner Losh #define EFIERR(a) (0x80000000 | a) 44*ca987d46SWarner Losh #define EFI_ERROR_MASK 0x80000000 45*ca987d46SWarner Losh #define EFIERR_OEM(a) (0xc0000000 | a) 46*ca987d46SWarner Losh 47*ca987d46SWarner Losh // 48*ca987d46SWarner Losh // Processor specific defines 49*ca987d46SWarner Losh // 50*ca987d46SWarner Losh #define EFI_MAX_BIT 0x80000000 51*ca987d46SWarner Losh #define MAX_2_BITS 0xC0000000 52*ca987d46SWarner Losh 53*ca987d46SWarner Losh // 54*ca987d46SWarner Losh // Maximum legal IA-32 address 55*ca987d46SWarner Losh // 56*ca987d46SWarner Losh #define EFI_MAX_ADDRESS 0xFFFFFFFF 57*ca987d46SWarner Losh 58*ca987d46SWarner Losh // 59*ca987d46SWarner Losh // Bad pointer value to use in check builds. 60*ca987d46SWarner Losh // if you see this value you are using uninitialized or free'ed data 61*ca987d46SWarner Losh // 62*ca987d46SWarner Losh #define EFI_BAD_POINTER 0xAFAFAFAF 63*ca987d46SWarner Losh #define EFI_BAD_POINTER_AS_BYTE 0xAF 64*ca987d46SWarner Losh 65*ca987d46SWarner Losh #define EFI_DEADLOOP() { volatile UINTN __iii; __iii = 1; while (__iii); } 66*ca987d46SWarner Losh 67*ca987d46SWarner Losh // 68*ca987d46SWarner Losh // Inject a break point in the code to assist debugging for NT Emulation Environment 69*ca987d46SWarner Losh // For real hardware, just put in a halt loop. Don't do a while(1) because the 70*ca987d46SWarner Losh // compiler will optimize away the rest of the function following, so that you run out in 71*ca987d46SWarner Losh // the weeds if you skip over it with a debugger. 72*ca987d46SWarner Losh // 73*ca987d46SWarner Losh #define EFI_BREAKPOINT EFI_DEADLOOP() 74*ca987d46SWarner Losh 75*ca987d46SWarner Losh 76*ca987d46SWarner Losh // 77*ca987d46SWarner Losh // Memory Fence forces serialization, and is needed to support out of order 78*ca987d46SWarner Losh // memory transactions. The Memory Fence is mainly used to make sure IO 79*ca987d46SWarner Losh // transactions complete in a deterministic sequence, and to syncronize locks 80*ca987d46SWarner Losh // an other MP code. Currently no memory fencing is required. 81*ca987d46SWarner Losh // 82*ca987d46SWarner Losh #define MEMORY_FENCE() 83*ca987d46SWarner Losh 84*ca987d46SWarner Losh // 85*ca987d46SWarner Losh // Some compilers don't support the forward reference construct: 86*ca987d46SWarner Losh // typedef struct XXXXX. The forward reference is required for 87*ca987d46SWarner Losh // ANSI compatibility. 88*ca987d46SWarner Losh // 89*ca987d46SWarner Losh // The following macro provide a workaround for such cases. 90*ca987d46SWarner Losh // 91*ca987d46SWarner Losh 92*ca987d46SWarner Losh 93*ca987d46SWarner Losh #ifdef EFI_NO_INTERFACE_DECL 94*ca987d46SWarner Losh #define EFI_FORWARD_DECLARATION(x) 95*ca987d46SWarner Losh #else 96*ca987d46SWarner Losh #define EFI_FORWARD_DECLARATION(x) typedef struct _##x x 97*ca987d46SWarner Losh #endif 98*ca987d46SWarner Losh 99*ca987d46SWarner Losh 100*ca987d46SWarner Losh // 101*ca987d46SWarner Losh // Some C compilers optimize the calling conventions to increase performance. 102*ca987d46SWarner Losh // EFIAPI is used to make all public APIs follow the standard C calling 103*ca987d46SWarner Losh // convention. 104*ca987d46SWarner Losh // 105*ca987d46SWarner Losh #define EFIAPI 106*ca987d46SWarner Losh 107*ca987d46SWarner Losh 108*ca987d46SWarner Losh 109*ca987d46SWarner Losh // 110*ca987d46SWarner Losh // For symbol name in GNU assembly code, an extra "_" is necessary 111*ca987d46SWarner Losh // 112*ca987d46SWarner Losh #if defined(__GNUC__) 113*ca987d46SWarner Losh /// 114*ca987d46SWarner Losh /// Private worker functions for ASM_PFX() 115*ca987d46SWarner Losh /// 116*ca987d46SWarner Losh #define _CONCATENATE(a, b) __CONCATENATE(a, b) 117*ca987d46SWarner Losh #define __CONCATENATE(a, b) a ## b 118*ca987d46SWarner Losh 119*ca987d46SWarner Losh /// 120*ca987d46SWarner Losh /// The __USER_LABEL_PREFIX__ macro predefined by GNUC represents the prefix 121*ca987d46SWarner Losh /// on symbols in assembly language. 122*ca987d46SWarner Losh /// 123*ca987d46SWarner Losh #define ASM_PFX(name) _CONCATENATE (__USER_LABEL_PREFIX__, name) 124*ca987d46SWarner Losh 125*ca987d46SWarner Losh #endif 126*ca987d46SWarner Losh 127*ca987d46SWarner Losh #define INTERFACE_DECL(x) struct x 128*ca987d46SWarner Losh 129*ca987d46SWarner Losh #endif 130