Home | History | Annotate | Download | only in Arm
      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 IA-32.
     19   We are using the ANSI C 2000 _t type definitions for basic types.
     20   This it technically a violation of the coding standard, but they
     21   are used to make EfiTypes.h portable. Code other than EfiTypes.h
     22   should never use any ANSI C 2000 _t integer types.
     23 
     24 --*/
     25 
     26 #ifndef _EFI_BIND_H_
     27 #define _EFI_BIND_H_
     28 
     29 
     30 #define EFI_DRIVER_ENTRY_POINT(InitFunction)
     31 #define EFI_APPLICATION_ENTRY_POINT EFI_DRIVER_ENTRY_POINT
     32 
     33 
     34 //
     35 // Make sure we are useing the correct packing rules per EFI specification
     36 //
     37 #ifndef __GNUC__
     38 #pragma pack()
     39 #endif
     40 
     41 
     42 //
     43 // Assume standard IA-32 alignment.
     44 // BugBug: Need to check portability of long long
     45 //
     46 typedef unsigned long long  uint64_t;
     47 typedef long long           int64_t;
     48 typedef unsigned int        uint32_t;
     49 typedef int                 int32_t;
     50 typedef unsigned short      uint16_t;
     51 typedef short               int16_t;
     52 typedef unsigned char       uint8_t;
     53 typedef signed char         int8_t;
     54 
     55 //
     56 // Native integer size in stdint.h
     57 //
     58 typedef uint32_t  uintn_t;
     59 typedef int32_t   intn_t;
     60 
     61 //
     62 // Processor specific defines
     63 //
     64 #define EFI_MAX_BIT       0x80000000
     65 #define MAX_2_BITS        0xC0000000
     66 
     67 //
     68 // Maximum legal IA-32 address
     69 //
     70 #define EFI_MAX_ADDRESS   0xFFFFFFFF
     71 
     72 //
     73 //  Bad pointer value to use in check builds.
     74 //  if you see this value you are using uninitialized or free'ed data
     75 //
     76 #define EFI_BAD_POINTER          0xAFAFAFAF
     77 #define EFI_BAD_POINTER_AS_BYTE  0xAF
     78 
     79 #define EFI_DEADLOOP()    { volatile UINTN __iii; __iii = 1; while (__iii); }
     80 
     81 //
     82 // Inject a break point in the code to assist debugging for NT Emulation Environment
     83 // For real hardware, just put in a halt loop. Don't do a while(1) because the
     84 // compiler will optimize away the rest of the function following, so that you run out in
     85 // the weeds if you skip over it with a debugger.
     86 //
     87 #define EFI_BREAKPOINT EFI_DEADLOOP()
     88 
     89 
     90 //
     91 // Memory Fence forces serialization, and is needed to support out of order
     92 //  memory transactions. The Memory Fence is mainly used to make sure IO
     93 //  transactions complete in a deterministic sequence, and to syncronize locks
     94 //  an other MP code. Currently no memory fencing is required.
     95 //
     96 #define MEMORY_FENCE()
     97 
     98 //
     99 // Some compilers don't support the forward reference construct:
    100 //  typedef struct XXXXX. The forward reference is required for
    101 //  ANSI compatibility.
    102 //
    103 // The following macro provide a workaround for such cases.
    104 //
    105 
    106 
    107 #ifdef EFI_NO_INTERFACE_DECL
    108   #define EFI_FORWARD_DECLARATION(x)
    109 #else
    110   #define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
    111 #endif
    112 
    113 
    114 //
    115 // Some C compilers optimize the calling conventions to increase performance.
    116 // _EFIAPI is used to make all public APIs follow the standard C calling
    117 // convention.
    118 //
    119 #define _EFIAPI
    120 
    121 
    122 
    123 //
    124 // For symbol name in GNU assembly code, an extra "_" is necessary
    125 //
    126 #if defined(__GNUC__)
    127   ///
    128   /// Private worker functions for ASM_PFX()
    129   ///
    130   #define _CONCATENATE(a, b)  __CONCATENATE(a, b)
    131   #define __CONCATENATE(a, b) a ## b
    132 
    133   ///
    134   /// The __USER_LABEL_PREFIX__ macro predefined by GNUC represents the prefix
    135   /// on symbols in assembly language.
    136   ///
    137   #define ASM_PFX(name) _CONCATENATE (__USER_LABEL_PREFIX__, name)
    138 
    139 #endif
    140 
    141 #endif
    142 
    143