1 /******************************************************************************
   2  *
   3  * Name: acenv.h - Host and compiler configuration
   4  *
   5  *****************************************************************************/
   6 
   7 /*
   8  * Copyright (C) 2000 - 2014, Intel Corp.
   9  * All rights reserved.
  10  *
  11  * Redistribution and use in source and binary forms, with or without
  12  * modification, are permitted provided that the following conditions
  13  * are met:
  14  * 1. Redistributions of source code must retain the above copyright
  15  *    notice, this list of conditions, and the following disclaimer,
  16  *    without modification.
  17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  18  *    substantially similar to the "NO WARRANTY" disclaimer below
  19  *    ("Disclaimer") and any redistribution must be conditioned upon
  20  *    including a substantially similar Disclaimer requirement for further
  21  *    binary redistribution.
  22  * 3. Neither the names of the above-listed copyright holders nor the names
  23  *    of any contributors may be used to endorse or promote products derived
  24  *    from this software without specific prior written permission.
  25  *
  26  * Alternatively, this software may be distributed under the terms of the
  27  * GNU General Public License ("GPL") version 2 as published by the Free
  28  * Software Foundation.
  29  *
  30  * NO WARRANTY
  31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
  34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  41  * POSSIBILITY OF SUCH DAMAGES.
  42  */
  43 
  44 #ifndef __ACENV_H__
  45 #define __ACENV_H__
  46 
  47 /*
  48  * Environment configuration. The purpose of this file is to interface ACPICA
  49  * to the local environment. This includes compiler-specific, OS-specific,
  50  * and machine-specific configuration.
  51  */
  52 
  53 /* Types for ACPI_MUTEX_TYPE */
  54 
  55 #define ACPI_BINARY_SEMAPHORE       0
  56 #define ACPI_OSL_MUTEX              1
  57 
  58 /* Types for DEBUGGER_THREADING */
  59 
  60 #define DEBUGGER_SINGLE_THREADED    0
  61 #define DEBUGGER_MULTI_THREADED     1
  62 
  63 
  64 /******************************************************************************
  65  *
  66  * Configuration for ACPI tools and utilities
  67  *
  68  *****************************************************************************/
  69 
  70 /* iASL configuration */
  71 
  72 #ifdef ACPI_ASL_COMPILER
  73 #define ACPI_APPLICATION
  74 #define ACPI_DISASSEMBLER
  75 #define ACPI_DEBUG_OUTPUT
  76 #define ACPI_CONSTANT_EVAL_ONLY
  77 #define ACPI_LARGE_NAMESPACE_NODE
  78 #define ACPI_DATA_TABLE_DISASSEMBLY
  79 #define ACPI_SINGLE_THREADED
  80 #endif
  81 
  82 /* AcpiExec configuration. Multithreaded with full AML debugger */
  83 
  84 #ifdef ACPI_EXEC_APP
  85 #define ACPI_APPLICATION
  86 #define ACPI_FULL_DEBUG
  87 #define ACPI_MUTEX_DEBUG
  88 #define ACPI_DBG_TRACK_ALLOCATIONS
  89 #endif
  90 
  91 /* AcpiNames configuration. Single threaded with debugger output enabled. */
  92 
  93 #ifdef ACPI_NAMES_APP
  94 #define ACPI_DEBUGGER
  95 #define ACPI_APPLICATION
  96 #define ACPI_SINGLE_THREADED
  97 #endif
  98 
  99 /*
 100  * AcpiBin/AcpiDump/AcpiSrc/AcpiXtract/Example configuration. All single
 101  * threaded, with no debug output.
 102  */
 103 #if (defined ACPI_BIN_APP)      || \
 104     (defined ACPI_DUMP_APP)     || \
 105     (defined ACPI_SRC_APP)      || \
 106     (defined ACPI_XTRACT_APP)   || \
 107     (defined ACPI_EXAMPLE_APP)
 108 #define ACPI_APPLICATION
 109 #define ACPI_SINGLE_THREADED
 110 #endif
 111 
 112 #ifdef ACPI_HELP_APP
 113 #define ACPI_APPLICATION
 114 #define ACPI_SINGLE_THREADED
 115 #define ACPI_NO_ERROR_MESSAGES
 116 #endif
 117 
 118 /* Linkable ACPICA library */
 119 
 120 #ifdef ACPI_LIBRARY
 121 #define ACPI_USE_LOCAL_CACHE
 122 #endif
 123 
 124 /* Common for all ACPICA applications */
 125 
 126 #ifdef ACPI_APPLICATION
 127 #define ACPI_USE_SYSTEM_CLIBRARY
 128 #define ACPI_USE_LOCAL_CACHE
 129 #endif
 130 
 131 /* Common debug support */
 132 
 133 #ifdef ACPI_FULL_DEBUG
 134 #define ACPI_DEBUGGER
 135 #define ACPI_DEBUG_OUTPUT
 136 #define ACPI_DISASSEMBLER
 137 #endif
 138 
 139 
 140 /*! [Begin] no source code translation */
 141 
 142 /******************************************************************************
 143  *
 144  * Host configuration files. The compiler configuration files are included
 145  * by the host files.
 146  *
 147  *****************************************************************************/
 148 
 149 #if defined(_LINUX) || defined(__linux__)
 150 #include "aclinux.h"
 151 
 152 #elif defined(_APPLE) || defined(__APPLE__)
 153 #include "acmacosx.h"
 154 
 155 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 156 #include "acfreebsd.h"
 157 
 158 #elif defined(__NetBSD__)
 159 #include "acnetbsd.h"
 160 
 161 #elif defined(__sun)
 162 #include "acsolaris.h"
 163 
 164 #elif defined(MODESTO)
 165 #include "acmodesto.h"
 166 
 167 #elif defined(NETWARE)
 168 #include "acnetware.h"
 169 
 170 #elif defined(_CYGWIN)
 171 #include "accygwin.h"
 172 
 173 #elif defined(WIN32)
 174 #include "acwin.h"
 175 
 176 #elif defined(WIN64)
 177 #include "acwin64.h"
 178 
 179 #elif defined(_WRS_LIB_BUILD)
 180 #include "acvxworks.h"
 181 
 182 #elif defined(__OS2__)
 183 #include "acos2.h"
 184 
 185 #elif defined(_AED_EFI)
 186 #include "acefi.h"
 187 
 188 #elif defined(__HAIKU__)
 189 #include "achaiku.h"
 190 
 191 #else
 192 
 193 /* Unknown environment */
 194 
 195 #error Unknown target environment
 196 #endif
 197 
 198 /*! [End] no source code translation !*/
 199 
 200 
 201 /******************************************************************************
 202  *
 203  * Setup defaults for the required symbols that were not defined in one of
 204  * the host/compiler files above.
 205  *
 206  *****************************************************************************/
 207 
 208 /* 64-bit data types */
 209 
 210 #ifndef COMPILER_DEPENDENT_INT64
 211 #define COMPILER_DEPENDENT_INT64   long long
 212 #endif
 213 
 214 #ifndef COMPILER_DEPENDENT_UINT64
 215 #define COMPILER_DEPENDENT_UINT64  unsigned long long
 216 #endif
 217 
 218 /* Type of mutex supported by host. Default is binary semaphores. */
 219 
 220 #ifndef ACPI_MUTEX_TYPE
 221 #define ACPI_MUTEX_TYPE             ACPI_BINARY_SEMAPHORE
 222 #endif
 223 
 224 /* Global Lock acquire/release */
 225 
 226 #ifndef ACPI_ACQUIRE_GLOBAL_LOCK
 227 #define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acquired) Acquired = 1
 228 #endif
 229 
 230 #ifndef ACPI_RELEASE_GLOBAL_LOCK
 231 #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Pending) Pending = 0
 232 #endif
 233 
 234 /* Flush CPU cache - used when going to sleep. Wbinvd or similar. */
 235 
 236 #ifndef ACPI_FLUSH_CPU_CACHE
 237 #define ACPI_FLUSH_CPU_CACHE()
 238 #endif
 239 
 240 /* "inline" keywords - configurable since inline is not standardized */
 241 
 242 #ifndef ACPI_INLINE
 243 #define ACPI_INLINE
 244 #endif
 245 
 246 /*
 247  * Configurable calling conventions:
 248  *
 249  * ACPI_SYSTEM_XFACE        - Interfaces to host OS (handlers, threads)
 250  * ACPI_EXTERNAL_XFACE      - External ACPI interfaces
 251  * ACPI_INTERNAL_XFACE      - Internal ACPI interfaces
 252  * ACPI_INTERNAL_VAR_XFACE  - Internal variable-parameter list interfaces
 253  */
 254 #ifndef ACPI_SYSTEM_XFACE
 255 #define ACPI_SYSTEM_XFACE
 256 #endif
 257 
 258 #ifndef ACPI_EXTERNAL_XFACE
 259 #define ACPI_EXTERNAL_XFACE
 260 #endif
 261 
 262 #ifndef ACPI_INTERNAL_XFACE
 263 #define ACPI_INTERNAL_XFACE
 264 #endif
 265 
 266 #ifndef ACPI_INTERNAL_VAR_XFACE
 267 #define ACPI_INTERNAL_VAR_XFACE
 268 #endif
 269 
 270 /*
 271  * Debugger threading model
 272  * Use single threaded if the entire subsystem is contained in an application
 273  * Use multiple threaded when the subsystem is running in the kernel.
 274  *
 275  * By default the model is single threaded if ACPI_APPLICATION is set,
 276  * multi-threaded if ACPI_APPLICATION is not set.
 277  */
 278 #ifndef DEBUGGER_THREADING
 279 #ifdef ACPI_APPLICATION
 280 #define DEBUGGER_THREADING          DEBUGGER_SINGLE_THREADED
 281 
 282 #else
 283 #define DEBUGGER_THREADING          DEBUGGER_MULTI_THREADED
 284 #endif
 285 #endif /* !DEBUGGER_THREADING */
 286 
 287 
 288 /******************************************************************************
 289  *
 290  * C library configuration
 291  *
 292  *****************************************************************************/
 293 
 294 /*
 295  * ACPI_USE_SYSTEM_CLIBRARY - Define this if linking to an actual C library.
 296  *      Otherwise, local versions of string/memory functions will be used.
 297  * ACPI_USE_STANDARD_HEADERS - Define this if linking to a C library and
 298  *      the standard header files may be used.
 299  *
 300  * The ACPICA subsystem only uses low level C library functions that do not call
 301  * operating system services and may therefore be inlined in the code.
 302  *
 303  * It may be necessary to tailor these include files to the target
 304  * generation environment.
 305  */
 306 #ifdef ACPI_USE_SYSTEM_CLIBRARY
 307 
 308 /* Use the standard C library headers. We want to keep these to a minimum. */
 309 
 310 #ifdef ACPI_USE_STANDARD_HEADERS
 311 
 312 /* Use the standard headers from the standard locations */
 313 
 314 #include <stdarg.h>
 315 #include <stdlib.h>
 316 #include <string.h>
 317 #include <ctype.h>
 318 
 319 #endif /* ACPI_USE_STANDARD_HEADERS */
 320 
 321 /* We will be linking to the standard Clib functions */
 322 
 323 #define ACPI_STRSTR(s1,s2)      strstr((s1), (s2))
 324 #define ACPI_STRCHR(s1,c)       strchr((s1), (c))
 325 #define ACPI_STRLEN(s)          (ACPI_SIZE) strlen((s))
 326 #define ACPI_STRCPY(d,s)        (void) strcpy((d), (s))
 327 #define ACPI_STRNCPY(d,s,n)     (void) strncpy((d), (s), (ACPI_SIZE)(n))
 328 #define ACPI_STRNCMP(d,s,n)     strncmp((d), (s), (ACPI_SIZE)(n))
 329 #define ACPI_STRCMP(d,s)        strcmp((d), (s))
 330 #define ACPI_STRCAT(d,s)        (void) strcat((d), (s))
 331 #define ACPI_STRNCAT(d,s,n)     strncat((d), (s), (ACPI_SIZE)(n))
 332 #define ACPI_STRTOUL(d,s,n)     strtoul((d), (s), (ACPI_SIZE)(n))
 333 #define ACPI_MEMCMP(s1,s2,n)    memcmp((const char *)(s1), (const char *)(s2), (ACPI_SIZE)(n))
 334 #define ACPI_MEMCPY(d,s,n)      (void) memcpy((d), (s), (ACPI_SIZE)(n))
 335 #define ACPI_MEMSET(d,s,n)      (void) memset((d), (s), (ACPI_SIZE)(n))
 336 #define ACPI_TOUPPER(i)         toupper((int) (i))
 337 #define ACPI_TOLOWER(i)         tolower((int) (i))
 338 #define ACPI_IS_XDIGIT(i)       isxdigit((int) (i))
 339 #define ACPI_IS_DIGIT(i)        isdigit((int) (i))
 340 #define ACPI_IS_SPACE(i)        isspace((int) (i))
 341 #define ACPI_IS_UPPER(i)        isupper((int) (i))
 342 #define ACPI_IS_PRINT(i)        isprint((int) (i))
 343 #define ACPI_IS_ALPHA(i)        isalpha((int) (i))
 344 
 345 #else
 346 
 347 /******************************************************************************
 348  *
 349  * Not using native C library, use local implementations
 350  *
 351  *****************************************************************************/
 352 
 353 /*
 354  * Use local definitions of C library macros and functions. These function
 355  * implementations may not be as efficient as an inline or assembly code
 356  * implementation provided by a native C library, but they are functionally
 357  * equivalent.
 358  */
 359 #ifndef va_arg
 360 
 361 #ifndef _VALIST
 362 #define _VALIST
 363 typedef char *va_list;
 364 #endif /* _VALIST */
 365 
 366 /* Storage alignment properties */
 367 
 368 #define  _AUPBND                (sizeof (ACPI_NATIVE_INT) - 1)
 369 #define  _ADNBND                (sizeof (ACPI_NATIVE_INT) - 1)
 370 
 371 /* Variable argument list macro definitions */
 372 
 373 #define _Bnd(X, bnd)            (((sizeof (X)) + (bnd)) & (~(bnd)))
 374 #define va_arg(ap, T)           (*(T *)(((ap) += (_Bnd (T, _AUPBND))) - (_Bnd (T,_ADNBND))))
 375 #define va_end(ap)              (ap = (va_list) NULL)
 376 #define va_start(ap, A)         (void) ((ap) = (((char *) &(A)) + (_Bnd (A,_AUPBND))))
 377 
 378 #endif /* va_arg */
 379 
 380 /* Use the local (ACPICA) definitions of the clib functions */
 381 
 382 #define ACPI_STRSTR(s1,s2)      AcpiUtStrstr ((s1), (s2))
 383 #define ACPI_STRCHR(s1,c)       AcpiUtStrchr ((s1), (c))
 384 #define ACPI_STRLEN(s)          (ACPI_SIZE) AcpiUtStrlen ((s))
 385 #define ACPI_STRCPY(d,s)        (void) AcpiUtStrcpy ((d), (s))
 386 #define ACPI_STRNCPY(d,s,n)     (void) AcpiUtStrncpy ((d), (s), (ACPI_SIZE)(n))
 387 #define ACPI_STRNCMP(d,s,n)     AcpiUtStrncmp ((d), (s), (ACPI_SIZE)(n))
 388 #define ACPI_STRCMP(d,s)        AcpiUtStrcmp ((d), (s))
 389 #define ACPI_STRCAT(d,s)        (void) AcpiUtStrcat ((d), (s))
 390 #define ACPI_STRNCAT(d,s,n)     AcpiUtStrncat ((d), (s), (ACPI_SIZE)(n))
 391 #define ACPI_STRTOUL(d,s,n)     AcpiUtStrtoul ((d), (s), (ACPI_SIZE)(n))
 392 #define ACPI_MEMCMP(s1,s2,n)    AcpiUtMemcmp((const char *)(s1), (const char *)(s2), (ACPI_SIZE)(n))
 393 #define ACPI_MEMCPY(d,s,n)      (void) AcpiUtMemcpy ((d), (s), (ACPI_SIZE)(n))
 394 #define ACPI_MEMSET(d,v,n)      (void) AcpiUtMemset ((d), (v), (ACPI_SIZE)(n))
 395 #define ACPI_TOUPPER(c)         AcpiUtToUpper ((int) (c))
 396 #define ACPI_TOLOWER(c)         AcpiUtToLower ((int) (c))
 397 
 398 #endif /* ACPI_USE_SYSTEM_CLIBRARY */
 399 
 400 #ifndef ACPI_FILE
 401 #ifdef ACPI_APPLICATION
 402 #include <stdio.h>
 403 #define ACPI_FILE              FILE *
 404 #else
 405 #define ACPI_FILE              void *
 406 #endif /* ACPI_APPLICATION */
 407 #endif /* ACPI_FILE */
 408 
 409 #endif /* __ACENV_H__ */