/*++ | |
Copyright (c) 2004 - 2012, Intel Corporation. All rights reserved.<BR> | |
This program and the accompanying materials | |
are licensed and made available under the terms and conditions of the BSD License | |
which accompanies this distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
Module Name: | |
EfiBind.h | |
Abstract: | |
Processor or compiler specific defines and types for EBC. | |
--*/ | |
#ifndef _EFI_BIND_H_ | |
#define _EFI_BIND_H_ | |
#define EFI_DRIVER_ENTRY_POINT(InitFunction) | |
#define EFI_APPLICATION_ENTRY_POINT EFI_DRIVER_ENTRY_POINT | |
// | |
// Disable warning that make it impossible to compile at /W3 | |
// This only works for Intel EBC Compiler tools | |
// | |
// | |
// Disabling argument of type "TYPE **" is incompatible with parameter of type "void **" | |
// | |
#pragma warning ( disable : 167 ) | |
// | |
// Disabling pointless comparison of unsigned integer with zero | |
// | |
#pragma warning ( disable : 186 ) | |
// | |
// Disabling enumerated type mixed with another type | |
// | |
#pragma warning ( disable : 188 ) | |
// | |
// Native integer types | |
// | |
typedef signed char int8_t; | |
typedef unsigned char uint8_t; | |
typedef short int16_t; | |
typedef unsigned short uint16_t; | |
typedef int int32_t; | |
typedef unsigned int uint32_t; | |
typedef __int64 int64_t; | |
typedef unsigned __int64 uint64_t; | |
// | |
// "long" type scales to the processor native size with EBC compiler | |
// | |
typedef long intn_t; | |
typedef unsigned long uintn_t; | |
// | |
// Scalable macro to set the most significant bit in a natural number | |
// | |
#define EFI_MAX_BIT ((UINTN)0x01 << ((sizeof (char *) * 8) - 1)) | |
#define MAX_2_BITS (EFI_MAX_BIT | (EFI_MAX_BIT >> 1)) | |
// | |
// Maximum legal EBC address | |
// | |
#define EFI_MAX_ADDRESS (UINTN)~0 | |
// | |
// Bad pointer value to use in check builds. | |
// if you see this value you are using uninitialized or free'ed data | |
// | |
#define EFI_BAD_POINTER (UINTN)0xAFAFAFAFAFAFAFAF | |
#define EFI_BAD_POINTER_AS_BYTE (UINTN)0xAF | |
// | |
// _break() is an EBC compiler intrinsic function | |
// | |
extern | |
uint64_t | |
_break ( | |
unsigned char BreakCode | |
); | |
// | |
// Macro to inject a break point in the code to assist debugging. | |
// | |
#define EFI_BREAKPOINT() _break ( 3 ) | |
#define EFI_DEADLOOP() while (TRUE) | |
// | |
// Memory Fence forces serialization, and is needed to support out of order | |
// memory transactions. The Memory Fence is mainly used to make sure IO | |
// transactions complete in a deterministic sequence, and to syncronize locks | |
// an other MP code. Currently no memory fencing is required. | |
// | |
#define MEMORY_FENCE() | |
// | |
// Some compilers don't support the forward reference construct: | |
// typedef struct XXXXX. The forward reference is required for | |
// ANSI compatibility. | |
// | |
// The following macro provide a workaround for such cases. | |
// | |
#ifdef EFI_NO_INTERFACE_DECL | |
#define EFI_FORWARD_DECLARATION(x) | |
#else | |
#define EFI_FORWARD_DECLARATION(x) typedef struct _##x x | |
#endif | |
#define _EFIAPI | |
#endif // ifndef _EFI_BIND_H_ | |