Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright 2014 The Android Open Source Project
      4  *  Copyright 2002 - 2004 Open Interface North America, Inc. All rights
      5  *                        reserved.
      6  *
      7  *  Licensed under the Apache License, Version 2.0 (the "License");
      8  *  you may not use this file except in compliance with the License.
      9  *  You may obtain a copy of the License at:
     10  *
     11  *  http://www.apache.org/licenses/LICENSE-2.0
     12  *
     13  *  Unless required by applicable law or agreed to in writing, software
     14  *  distributed under the License is distributed on an "AS IS" BASIS,
     15  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16  *  See the License for the specific language governing permissions and
     17  *  limitations under the License.
     18  *
     19  ******************************************************************************/
     20 #ifndef _OI_CPU_DEP_H
     21 #define _OI_CPU_DEP_H
     22 
     23 #include <stdint.h>
     24 
     25 /**
     26  * @file
     27  * This file contains definitions for characteristics of the target CPU and
     28  * compiler, including primitive data types and endianness.
     29  *
     30  * This file defines the byte order and primitive data types for various
     31  * CPU families. The preprocessor symbol 'CPU' must be defined to be an
     32  * appropriate value or this header will generate a compile-time error.
     33  *
     34  * @note The documentation for this header file uses the x86 family of
     35  * processors as an illustrative example for CPU/compiler-dependent data type
     36  * definitions. Go to the source code of this header file to see the details of
     37  * primitive type definitions for each platform.
     38  *
     39  * Additional information is available in the @ref data_types_docpage section.
     40  */
     41 
     42 /*******************************************************************************
     43   $Revision: #1 $
     44  ******************************************************************************/
     45 
     46 #ifdef __cplusplus
     47 extern "C" {
     48 #endif
     49 
     50 /** \addtogroup Misc Miscellaneous APIs */
     51 /**@{*/
     52 
     53 /** @name Definitions indicating family of target OI_CPU_TYPE
     54  *  @{
     55  */
     56 
     57 #define OI_CPU_X86 1 /**< x86 processor family */
     58 #define OI_CPU_ARM                            \
     59   2 /**< ARM processor family.                \
     60          @deprecated Use #OI_CPU_ARM7_LEND or \
     61          #OI_CPU_ARM7_BEND. */
     62 #define OI_CPU_ARC                                               \
     63   3                     /**< ARC processor family.               \
     64                              @deprecated Use #OI_CPU_ARC_LEND or \
     65                              #OI_CPU_ARC_BEND. */
     66 #define OI_CPU_SH3 4    /**< Hitachi SH-3 processor family */
     67 #define OI_CPU_H8 5     /**< Hitachi H8 processor family */
     68 #define OI_CPU_MIPS 6   /**< MIPS processor family */
     69 #define OI_CPU_SPARC 7  /**< SPARC processor family */
     70 #define OI_CPU_M68000 8 /**< Motorola M68000 processor family */
     71 #define OI_CPU_PPC 9    /**< PowerPC (PPC) processor family */
     72 #define OI_CPU_SH4_7750 \
     73   10                  /**< Hitachi SH7750 series in SH-4 processor family */
     74 #define OI_CPU_SH2 11 /**< Hitachi SH-2 processor family */
     75 #define OI_CPU_ARM7_LEND 12 /**< ARM7, little-endian */
     76 #define OI_CPU_ARM7_BEND 13 /**< ARM7, big-endian */
     77 #define OI_CPU_GDM1202 14   /**< GCT GDM1202 */
     78 #define OI_CPU_ARC_LEND 15  /**< ARC processor family, little-endian */
     79 #define OI_CPU_ARC_BEND 16  /**< ARC processor family, big-endian */
     80 #define OI_CPU_M30833F 17   /**< Mitsubishi M308 processor family */
     81 #define OI_CPU_CR16C 18  /**< National Semiconductor 16 bit processor family */
     82 #define OI_CPU_M64111 19 /**< Renesas M64111 processor (M32R family) */
     83 #define OI_CPU_ARMV5_LEND 20  //*< ARM5, little-endian */
     84 
     85 #define OI_CPU_TYPE 12
     86 
     87 #ifndef OI_CPU_TYPE
     88 #error "OI_CPU_TYPE type not defined"
     89 #endif
     90 
     91 /**@}*/
     92 
     93 /** @name Definitions indicating byte-wise endianness of target CPU
     94  *  @{
     95  */
     96 
     97 #define OI_BIG_ENDIAN_BYTE_ORDER                                           \
     98   0 /**< Multiple-byte values are stored in memory beginning with the most \
     99        significant byte at the lowest address.  */
    100 #define OI_LITTLE_ENDIAN_BYTE_ORDER                                         \
    101   1 /**< Multiple-byte values are stored in memory beginning with the least \
    102        significant byte at the lowest address. */
    103 
    104 /**@}*/
    105 
    106 /** @name  CPU/compiler-independent primitive data type definitions
    107  *  @{
    108  */
    109 
    110 typedef int
    111     OI_BOOL; /**< Boolean values use native integer data type for target CPU. */
    112 typedef int
    113     OI_INT; /**< Integer values use native integer data type for target CPU. */
    114 typedef unsigned int OI_UINT;  /**< Unsigned integer values use native unsigned
    115                                   integer data type for target CPU. */
    116 typedef unsigned char OI_BYTE; /**< Raw bytes type uses native character data
    117                                   type for target CPU. */
    118 typedef uint32_t OI_ELEMENT_UNION; /**< Type for first element of a union to
    119                                       support all data types up to pointer
    120                                       width. */
    121 
    122 /**@}*/
    123 
    124 /******************************************************************************/
    125 
    126 #if OI_CPU_TYPE == OI_CPU_X86
    127 
    128 #define OI_CPU_BYTE_ORDER                                                      \
    129   OI_LITTLE_ENDIAN_BYTE_ORDER /**< x86 platform byte ordering is little-endian \
    130                                  */
    131 
    132 #endif
    133 
    134 /******************************************************************************/
    135 
    136 #if OI_CPU_TYPE == OI_CPU_ARM
    137 /* This CPU type is deprecated (removed from use). Instead, use OI_CPU_ARM7_LEND
    138  * or OI_CPU_ARM7_BEND for little-endian or big-endian configurations of the
    139  * ARM7, respectively. */
    140 #error OI_CPU_ARM is deprecated
    141 #endif
    142 
    143 /******************************************************************************/
    144 
    145 #if OI_CPU_TYPE == OI_CPU_ARC
    146 /* This CPU type is deprecated (removed from use). Instead, use OI_CPU_ARC_LEND
    147  * or OI_CPU_ARC_BEND for little-endian or big-endian configurations of the
    148  * ARC, respectively. */
    149 #error OI_CPU_ARC is deprecated
    150 #endif
    151 
    152 /******************************************************************************/
    153 
    154 #if OI_CPU_TYPE == OI_CPU_SH3
    155 /* The Hitachi SH C compiler defines _LIT or _BIG, depending on the endianness
    156     specified to the compiler on the command line. */
    157 #if defined(_LIT)
    158 #define OI_CPU_BYTE_ORDER                                                 \
    159   OI_LITTLE_ENDIAN_BYTE_ORDER /**< If _LIT is defined, SH-3 platform byte \
    160                                  ordering is little-endian. */
    161 #elif defined(_BIG)
    162 #define OI_CPU_BYTE_ORDER                                              \
    163   OI_BIG_ENDIAN_BYTE_ORDER /**< If _BIG is defined, SH-3 platform byte \
    164                               ordering is big-endian. */
    165 #else
    166 #error SH compiler endianness undefined
    167 #endif
    168 
    169 #endif
    170 /******************************************************************************/
    171 
    172 #if OI_CPU_TYPE == OI_CPU_SH2
    173 
    174 #define OI_CPU_BYTE_ORDER \
    175   OI_BIG_ENDIAN_BYTE_ORDER /**< SH-2 platform byte ordering is big-endian. */
    176 
    177 #endif
    178 /******************************************************************************/
    179 
    180 #if OI_CPU_TYPE == OI_CPU_H8
    181 #define OI_CPU_BYTE_ORDER OI_BIG_ENDIAN_BYTE_ORDER
    182 #error basic types not defined
    183 #endif
    184 
    185 /******************************************************************************/
    186 
    187 #if OI_CPU_TYPE == OI_CPU_MIPS
    188 #define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER
    189 #endif
    190 
    191 /******************************************************************************/
    192 
    193 #if OI_CPU_TYPE == OI_CPU_SPARC
    194 #define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER
    195 #error basic types not defined
    196 #endif
    197 
    198 /******************************************************************************/
    199 
    200 #if OI_CPU_TYPE == OI_CPU_M68000
    201 #define OI_CPU_BYTE_ORDER                                                    \
    202   OI_BIG_ENDIAN_BYTE_ORDER /**< M68000 platform byte ordering is big-endian. \
    203                               */
    204 #endif
    205 
    206 /******************************************************************************/
    207 
    208 #if OI_CPU_TYPE == OI_CPU_PPC
    209 #define OI_CPU_BYTE_ORDER OI_BIG_ENDIAN_BYTE_ORDER
    210 #endif
    211 
    212 /******************************************************************************/
    213 
    214 #if OI_CPU_TYPE == OI_CPU_SH4_7750
    215 #define OI_CPU_BYTE_ORDER                                                    \
    216   OI_BIG_ENDIAN_BYTE_ORDER /**< SH7750 platform byte ordering is big-endian. \
    217                               */
    218 #endif
    219 
    220 /******************************************************************************/
    221 
    222 #if OI_CPU_TYPE == OI_CPU_ARM7_LEND
    223 #define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER
    224 #endif
    225 
    226 /******************************************************************************/
    227 
    228 #if OI_CPU_TYPE == OI_CPU_ARM7_BEND
    229 #define OI_CPU_BYTE_ORDER OI_BIG_ENDIAN_BYTE_ORDER
    230 #endif
    231 
    232 /******************************************************************************/
    233 
    234 #if OI_CPU_TYPE == OI_CPU_GDM1202
    235 #define OI_CPU_BYTE_ORDER OI_BIG_ENDIAN_BYTE_ORDER
    236 #endif
    237 
    238 /******************************************************************************/
    239 
    240 #if OI_CPU_TYPE == OI_CPU_ARC_LEND
    241 
    242 #define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER
    243 #endif
    244 
    245 /******************************************************************************/
    246 
    247 #if OI_CPU_TYPE == OI_CPU_ARC_BEND
    248 #define OI_CPU_BYTE_ORDER OI_BIG_ENDIAN_BYTE_ORDER
    249 #endif
    250 
    251 /******************************************************************************/
    252 
    253 #if OI_CPU_TYPE == OI_CPU_M30833F
    254 #define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER
    255 #endif
    256 
    257 /******************************************************************************/
    258 
    259 #if OI_CPU_TYPE == OI_CPU_CR16C
    260 #define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER
    261 #endif
    262 
    263 /******************************************************************************/
    264 
    265 #if OI_CPU_TYPE == OI_CPU_M64111
    266 #define OI_CPU_BYTE_ORDER OI_BIG_ENDIAN_BYTE_ORDER
    267 #endif
    268 
    269 /******************************************************************************/
    270 
    271 #if OI_CPU_TYPE == OI_CPU_ARMV5_LEND
    272 #define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER
    273 #endif
    274 
    275 /******************************************************************************/
    276 
    277 #ifndef OI_CPU_BYTE_ORDER
    278 #error "Byte order (endian-ness) not defined"
    279 #endif
    280 
    281 /**@}*/
    282 
    283 #ifdef __cplusplus
    284 }
    285 #endif
    286 
    287 /******************************************************************************/
    288 #endif /* _OI_CPU_DEP_H */
    289