Home | History | Annotate | Download | only in Ebc
      1 /*++
      2 
      3 Copyright (c) 2004 - 2012, Intel Corporation. All rights reserved.<BR>
      4 This program and the accompanying materials
      5 are licensed and made available under the terms and conditions of the BSD License
      6 which accompanies this distribution.  The full text of the license may be found at
      7 http://opensource.org/licenses/bsd-license.php
      8 
      9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 Module Name:
     13 
     14   EfiBind.h
     15 
     16 Abstract:
     17 
     18   Processor or compiler specific defines and types for EBC.
     19 
     20 --*/
     21 
     22 #ifndef _EFI_BIND_H_
     23 #define _EFI_BIND_H_
     24 
     25 #define EFI_DRIVER_ENTRY_POINT(InitFunction)
     26 #define EFI_APPLICATION_ENTRY_POINT EFI_DRIVER_ENTRY_POINT
     27 
     28 //
     29 // Disable warning that make it impossible to compile at /W3
     30 // This only works for Intel EBC Compiler tools
     31 //
     32 
     33 //
     34 // Disabling argument of type "TYPE **" is incompatible with parameter of type "void **"
     35 //
     36 #pragma warning ( disable : 167 )
     37 
     38 //
     39 // Disabling pointless comparison of unsigned integer with zero
     40 //
     41 #pragma warning ( disable : 186 )
     42 
     43 //
     44 // Disabling enumerated type mixed with another type
     45 //
     46 #pragma warning ( disable : 188 )
     47 
     48 //
     49 // Native integer types
     50 //
     51 typedef signed char           int8_t;
     52 typedef unsigned char         uint8_t;
     53 
     54 typedef short                 int16_t;
     55 typedef unsigned short        uint16_t;
     56 
     57 typedef int                   int32_t;
     58 typedef unsigned int          uint32_t;
     59 
     60 typedef __int64               int64_t;
     61 typedef unsigned __int64      uint64_t;
     62 
     63 //
     64 // "long" type scales to the processor native size with EBC compiler
     65 //
     66 typedef long                  intn_t;
     67 typedef unsigned long         uintn_t;
     68 
     69 //
     70 // Scalable macro to set the most significant bit in a natural number
     71 //
     72 #define EFI_MAX_BIT           ((UINTN)0x01 << ((sizeof (char *) * 8) - 1))
     73 #define MAX_2_BITS            (EFI_MAX_BIT | (EFI_MAX_BIT >> 1))
     74 
     75 //
     76 // Maximum legal EBC address
     77 //
     78 #define EFI_MAX_ADDRESS   (UINTN)~0
     79 
     80 //
     81 //  Bad pointer value to use in check builds.
     82 //  if you see this value you are using uninitialized or free'ed data
     83 //
     84 #define EFI_BAD_POINTER          (UINTN)0xAFAFAFAFAFAFAFAF
     85 #define EFI_BAD_POINTER_AS_BYTE  (UINTN)0xAF
     86 
     87 //
     88 // _break() is an EBC compiler intrinsic function
     89 //
     90 extern
     91 uint64_t
     92 _break (
     93   unsigned char BreakCode
     94   );
     95 
     96 //
     97 // Macro to inject a break point in the code to assist debugging.
     98 //
     99 #define EFI_BREAKPOINT()  _break ( 3 )
    100 #define EFI_DEADLOOP()    while (TRUE)
    101 
    102 //
    103 // Memory Fence forces serialization, and is needed to support out of order
    104 //  memory transactions. The Memory Fence is mainly used to make sure IO
    105 //  transactions complete in a deterministic sequence, and to syncronize locks
    106 //  an other MP code. Currently no memory fencing is required.
    107 //
    108 #define MEMORY_FENCE()
    109 
    110 //
    111 // Some compilers don't support the forward reference construct:
    112 //  typedef struct XXXXX. The forward reference is required for
    113 //  ANSI compatibility.
    114 //
    115 // The following macro provide a workaround for such cases.
    116 //
    117 
    118 
    119 #ifdef EFI_NO_INTERFACE_DECL
    120   #define EFI_FORWARD_DECLARATION(x)
    121 #else
    122   #define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
    123 #endif
    124 
    125 
    126 #define _EFIAPI
    127 
    128 #endif // ifndef _EFI_BIND_H_
    129 
    130