1 /******************************************************************************
   2  *
   3  * Name: acenv.h - Host and compiler configuration
   4  *
   5  *****************************************************************************/
   6 
   7 /*
   8  * Copyright (C) 2000 - 2011, 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 and AcpiBin configuration */
  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 #ifdef ACPI_BIN_APP
  92 #define ACPI_APPLICATION
  93 #define ACPI_SINGLE_THREADED
  94 #endif
  95 
  96 /* Linkable ACPICA library */
  97 
  98 #ifdef ACPI_LIBRARY
  99 #define ACPI_USE_LOCAL_CACHE
 100 #endif
 101 
 102 /* Common for all ACPICA applications */
 103 
 104 #ifdef ACPI_APPLICATION
 105 #define ACPI_USE_SYSTEM_CLIBRARY
 106 #define ACPI_USE_LOCAL_CACHE
 107 #endif
 108 
 109 /* Common debug support */
 110 
 111 #ifdef ACPI_FULL_DEBUG
 112 #define ACPI_DEBUGGER
 113 #define ACPI_DEBUG_OUTPUT
 114 #define ACPI_DISASSEMBLER
 115 #endif
 116 
 117 
 118 /*! [Begin] no source code translation */
 119 
 120 /******************************************************************************
 121  *
 122  * Host configuration files. The compiler configuration files are included
 123  * by the host files.
 124  *
 125  *****************************************************************************/
 126 
 127 #if defined(_LINUX) || defined(__linux__)
 128 #include "aclinux.h"
 129 
 130 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 131 #include "acfreebsd.h"
 132 
 133 #elif defined(__NetBSD__)
 134 #include "acnetbsd.h"
 135 
 136 #elif defined(__sun)
 137 #include "acsolaris.h"
 138 
 139 #elif defined(MODESTO)
 140 #include "acmodesto.h"
 141 
 142 #elif defined(NETWARE)
 143 #include "acnetware.h"
 144 
 145 #elif defined(_CYGWIN)
 146 #include "accygwin.h"
 147 
 148 #elif defined(WIN32)
 149 #include "acwin.h"
 150 
 151 #elif defined(WIN64)
 152 #include "acwin64.h"
 153 
 154 #elif defined(_WRS_LIB_BUILD)
 155 #include "acvxworks.h"
 156 
 157 #elif defined(__OS2__)
 158 #include "acos2.h"
 159 
 160 #elif defined(_AED_EFI)
 161 #include "acefi.h"
 162 
 163 #else
 164 
 165 /* Unknown environment */
 166 
 167 #error Unknown target environment
 168 #endif
 169 
 170 /*! [End] no source code translation !*/
 171 
 172 
 173 /******************************************************************************
 174  *
 175  * Setup defaults for the required symbols that were not defined in one of
 176  * the host/compiler files above.
 177  *
 178  *****************************************************************************/
 179 
 180 /* 64-bit data types */
 181 
 182 #ifndef COMPILER_DEPENDENT_INT64
 183 #define COMPILER_DEPENDENT_INT64   long long
 184 #endif
 185 
 186 #ifndef COMPILER_DEPENDENT_UINT64
 187 #define COMPILER_DEPENDENT_UINT64  unsigned long long
 188 #endif
 189 
 190 /* Type of mutex supported by host. Default is binary semaphores. */
 191 
 192 #ifndef ACPI_MUTEX_TYPE
 193 #define ACPI_MUTEX_TYPE             ACPI_BINARY_SEMAPHORE
 194 #endif
 195 
 196 /* Global Lock acquire/release */
 197 
 198 #ifndef ACPI_ACQUIRE_GLOBAL_LOCK
 199 #define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acquired) Acquired = 1
 200 #endif
 201 
 202 #ifndef ACPI_RELEASE_GLOBAL_LOCK
 203 #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Pending) Pending = 0
 204 #endif
 205 
 206 /* Flush CPU cache - used when going to sleep. Wbinvd or similar. */
 207 
 208 #ifndef ACPI_FLUSH_CPU_CACHE
 209 #define ACPI_FLUSH_CPU_CACHE()
 210 #endif
 211 
 212 /* "inline" keywords - configurable since inline is not standardized */
 213 
 214 #ifndef ACPI_INLINE
 215 #define ACPI_INLINE
 216 #endif
 217 
 218 /*
 219  * Configurable calling conventions:
 220  *
 221  * ACPI_SYSTEM_XFACE        - Interfaces to host OS (handlers, threads)
 222  * ACPI_EXTERNAL_XFACE      - External ACPI interfaces
 223  * ACPI_INTERNAL_XFACE      - Internal ACPI interfaces
 224  * ACPI_INTERNAL_VAR_XFACE  - Internal variable-parameter list interfaces
 225  */
 226 #ifndef ACPI_SYSTEM_XFACE
 227 #define ACPI_SYSTEM_XFACE
 228 #endif
 229 
 230 #ifndef ACPI_EXTERNAL_XFACE
 231 #define ACPI_EXTERNAL_XFACE
 232 #endif
 233 
 234 #ifndef ACPI_INTERNAL_XFACE
 235 #define ACPI_INTERNAL_XFACE
 236 #endif
 237 
 238 #ifndef ACPI_INTERNAL_VAR_XFACE
 239 #define ACPI_INTERNAL_VAR_XFACE
 240 #endif
 241 
 242 /*
 243  * Debugger threading model
 244  * Use single threaded if the entire subsystem is contained in an application
 245  * Use multiple threaded when the subsystem is running in the kernel.
 246  *
 247  * By default the model is single threaded if ACPI_APPLICATION is set,
 248  * multi-threaded if ACPI_APPLICATION is not set.
 249  */
 250 #ifndef DEBUGGER_THREADING
 251 #ifdef ACPI_APPLICATION
 252 #define DEBUGGER_THREADING          DEBUGGER_SINGLE_THREADED
 253 
 254 #else
 255 #define DEBUGGER_THREADING          DEBUGGER_MULTI_THREADED
 256 #endif
 257 #endif /* !DEBUGGER_THREADING */
 258 
 259 
 260 /******************************************************************************
 261  *
 262  * C library configuration
 263  *
 264  *****************************************************************************/
 265 
 266 /*
 267  * ACPI_USE_SYSTEM_CLIBRARY - Define this if linking to an actual C library.
 268  *      Otherwise, local versions of string/memory functions will be used.
 269  * ACPI_USE_STANDARD_HEADERS - Define this if linking to a C library and
 270  *      the standard header files may be used.
 271  *
 272  * The ACPICA subsystem only uses low level C library functions that do not call
 273  * operating system services and may therefore be inlined in the code.
 274  *
 275  * It may be necessary to tailor these include files to the target
 276  * generation environment.
 277  */
 278 #ifdef ACPI_USE_SYSTEM_CLIBRARY
 279 
 280 /* Use the standard C library headers. We want to keep these to a minimum */
 281 
 282 #ifdef ACPI_USE_STANDARD_HEADERS
 283 
 284 /* Use the standard headers from the standard locations */
 285 
 286 #include <stdarg.h>
 287 #include <stdlib.h>
 288 #include <string.h>
 289 #include <ctype.h>
 290 
 291 #endif /* ACPI_USE_STANDARD_HEADERS */
 292 
 293 /* We will be linking to the standard Clib functions */
 294 
 295 #define ACPI_STRSTR(s1,s2)      strstr((s1), (s2))
 296 #define ACPI_STRCHR(s1,c)       strchr((s1), (c))
 297 #define ACPI_STRLEN(s)          (ACPI_SIZE) strlen((s))
 298 #define ACPI_STRCPY(d,s)        (void) strcpy((d), (s))
 299 #define ACPI_STRNCPY(d,s,n)     (void) strncpy((d), (s), (ACPI_SIZE)(n))
 300 #define ACPI_STRNCMP(d,s,n)     strncmp((d), (s), (ACPI_SIZE)(n))
 301 #define ACPI_STRCMP(d,s)        strcmp((d), (s))
 302 #define ACPI_STRCAT(d,s)        (void) strcat((d), (s))
 303 #define ACPI_STRNCAT(d,s,n)     strncat((d), (s), (ACPI_SIZE)(n))
 304 #define ACPI_STRTOUL(d,s,n)     strtoul((d), (s), (ACPI_SIZE)(n))
 305 #define ACPI_MEMCMP(s1,s2,n)    memcmp((const char *)(s1), (const char *)(s2), (ACPI_SIZE)(n))
 306 #define ACPI_MEMCPY(d,s,n)      (void) memcpy((d), (s), (ACPI_SIZE)(n))
 307 #define ACPI_MEMSET(d,s,n)      (void) memset((d), (s), (ACPI_SIZE)(n))
 308 #define ACPI_TOUPPER(i)         toupper((int) (i))
 309 #define ACPI_TOLOWER(i)         tolower((int) (i))
 310 #define ACPI_IS_XDIGIT(i)       isxdigit((int) (i))
 311 #define ACPI_IS_DIGIT(i)        isdigit((int) (i))
 312 #define ACPI_IS_SPACE(i)        isspace((int) (i))
 313 #define ACPI_IS_UPPER(i)        isupper((int) (i))
 314 #define ACPI_IS_PRINT(i)        isprint((int) (i))
 315 #define ACPI_IS_ALPHA(i)        isalpha((int) (i))
 316 
 317 #else
 318 
 319 /******************************************************************************
 320  *
 321  * Not using native C library, use local implementations
 322  *
 323  *****************************************************************************/
 324 
 325 /*
 326  * Use local definitions of C library macros and functions. These function
 327  * implementations may not be as efficient as an inline or assembly code
 328  * implementation provided by a native C library, but they are functionally
 329  * equivalent.
 330  */
 331 #ifndef va_arg
 332 
 333 #ifndef _VALIST
 334 #define _VALIST
 335 typedef char *va_list;
 336 #endif /* _VALIST */
 337 
 338 /* Storage alignment properties */
 339 
 340 #define  _AUPBND                (sizeof (ACPI_NATIVE_INT) - 1)
 341 #define  _ADNBND                (sizeof (ACPI_NATIVE_INT) - 1)
 342 
 343 /* Variable argument list macro definitions */
 344 
 345 #define _Bnd(X, bnd)            (((sizeof (X)) + (bnd)) & (~(bnd)))
 346 #define va_arg(ap, T)           (*(T *)(((ap) += (_Bnd (T, _AUPBND))) - (_Bnd (T,_ADNBND))))
 347 #define va_end(ap)              (void) 0
 348 #define va_start(ap, A)         (void) ((ap) = (((char *) &(A)) + (_Bnd (A,_AUPBND))))
 349 
 350 #endif /* va_arg */
 351 
 352 /* Use the local (ACPICA) definitions of the clib functions */
 353 
 354 #define ACPI_STRSTR(s1,s2)      AcpiUtStrstr ((s1), (s2))
 355 #define ACPI_STRCHR(s1,c)       AcpiUtStrchr ((s1), (c))
 356 #define ACPI_STRLEN(s)          (ACPI_SIZE) AcpiUtStrlen ((s))
 357 #define ACPI_STRCPY(d,s)        (void) AcpiUtStrcpy ((d), (s))
 358 #define ACPI_STRNCPY(d,s,n)     (void) AcpiUtStrncpy ((d), (s), (ACPI_SIZE)(n))
 359 #define ACPI_STRNCMP(d,s,n)     AcpiUtStrncmp ((d), (s), (ACPI_SIZE)(n))
 360 #define ACPI_STRCMP(d,s)        AcpiUtStrcmp ((d), (s))
 361 #define ACPI_STRCAT(d,s)        (void) AcpiUtStrcat ((d), (s))
 362 #define ACPI_STRNCAT(d,s,n)     AcpiUtStrncat ((d), (s), (ACPI_SIZE)(n))
 363 #define ACPI_STRTOUL(d,s,n)     AcpiUtStrtoul ((d), (s), (ACPI_SIZE)(n))
 364 #define ACPI_MEMCMP(s1,s2,n)    AcpiUtMemcmp((const char *)(s1), (const char *)(s2), (ACPI_SIZE)(n))
 365 #define ACPI_MEMCPY(d,s,n)      (void) AcpiUtMemcpy ((d), (s), (ACPI_SIZE)(n))
 366 #define ACPI_MEMSET(d,v,n)      (void) AcpiUtMemset ((d), (v), (ACPI_SIZE)(n))
 367 #define ACPI_TOUPPER(c)         AcpiUtToUpper ((int) (c))
 368 #define ACPI_TOLOWER(c)         AcpiUtToLower ((int) (c))
 369 
 370 #endif /* ACPI_USE_SYSTEM_CLIBRARY */
 371 
 372 #endif /* __ACENV_H__ */