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