1*4882a593Smuzhiyun /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 2*4882a593Smuzhiyun /****************************************************************************** 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Name: acenv.h - Host and compiler configuration 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Copyright (C) 2000 - 2020, Intel Corp. 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun *****************************************************************************/ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef __ACENV_H__ 11*4882a593Smuzhiyun #define __ACENV_H__ 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /* 14*4882a593Smuzhiyun * Environment configuration. The purpose of this file is to interface ACPICA 15*4882a593Smuzhiyun * to the local environment. This includes compiler-specific, OS-specific, 16*4882a593Smuzhiyun * and machine-specific configuration. 17*4882a593Smuzhiyun */ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* Types for ACPI_MUTEX_TYPE */ 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define ACPI_BINARY_SEMAPHORE 0 22*4882a593Smuzhiyun #define ACPI_OSL_MUTEX 1 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /* Types for DEBUGGER_THREADING */ 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define DEBUGGER_SINGLE_THREADED 0 27*4882a593Smuzhiyun #define DEBUGGER_MULTI_THREADED 1 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /****************************************************************************** 30*4882a593Smuzhiyun * 31*4882a593Smuzhiyun * Configuration for ACPI tools and utilities 32*4882a593Smuzhiyun * 33*4882a593Smuzhiyun *****************************************************************************/ 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* Common application configuration. All single threaded except for acpi_exec. */ 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #if (defined ACPI_ASL_COMPILER) || \ 38*4882a593Smuzhiyun (defined ACPI_BIN_APP) || \ 39*4882a593Smuzhiyun (defined ACPI_DUMP_APP) || \ 40*4882a593Smuzhiyun (defined ACPI_HELP_APP) || \ 41*4882a593Smuzhiyun (defined ACPI_NAMES_APP) || \ 42*4882a593Smuzhiyun (defined ACPI_SRC_APP) || \ 43*4882a593Smuzhiyun (defined ACPI_XTRACT_APP) || \ 44*4882a593Smuzhiyun (defined ACPI_EXAMPLE_APP) || \ 45*4882a593Smuzhiyun (defined ACPI_EFI_HELLO) 46*4882a593Smuzhiyun #define ACPI_APPLICATION 47*4882a593Smuzhiyun #define ACPI_SINGLE_THREADED 48*4882a593Smuzhiyun #define USE_NATIVE_ALLOCATE_ZEROED 49*4882a593Smuzhiyun #endif 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun /* iASL configuration */ 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #ifdef ACPI_ASL_COMPILER 54*4882a593Smuzhiyun #define ACPI_DEBUG_OUTPUT 55*4882a593Smuzhiyun #define ACPI_CONSTANT_EVAL_ONLY 56*4882a593Smuzhiyun #define ACPI_LARGE_NAMESPACE_NODE 57*4882a593Smuzhiyun #define ACPI_DATA_TABLE_DISASSEMBLY 58*4882a593Smuzhiyun #define ACPI_32BIT_PHYSICAL_ADDRESS 59*4882a593Smuzhiyun #define ACPI_DISASSEMBLER 1 60*4882a593Smuzhiyun #endif 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun /* acpi_exec configuration. Multithreaded with full AML debugger */ 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun #ifdef ACPI_EXEC_APP 65*4882a593Smuzhiyun #define ACPI_APPLICATION 66*4882a593Smuzhiyun #define ACPI_FULL_DEBUG 67*4882a593Smuzhiyun #define ACPI_MUTEX_DEBUG 68*4882a593Smuzhiyun #define ACPI_DBG_TRACK_ALLOCATIONS 69*4882a593Smuzhiyun #endif 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun /* acpi_help configuration. Error messages disabled. */ 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #ifdef ACPI_HELP_APP 74*4882a593Smuzhiyun #define ACPI_NO_ERROR_MESSAGES 75*4882a593Smuzhiyun #endif 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun /* acpi_names configuration. Debug output enabled. */ 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #ifdef ACPI_NAMES_APP 80*4882a593Smuzhiyun #define ACPI_DEBUG_OUTPUT 81*4882a593Smuzhiyun #endif 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun /* acpi_exec/acpi_names/Example configuration. Native RSDP used. */ 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun #if (defined ACPI_EXEC_APP) || \ 86*4882a593Smuzhiyun (defined ACPI_EXAMPLE_APP) || \ 87*4882a593Smuzhiyun (defined ACPI_NAMES_APP) 88*4882a593Smuzhiyun #define ACPI_USE_NATIVE_RSDP_POINTER 89*4882a593Smuzhiyun #endif 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun /* acpi_dump configuration. Native mapping used if provided by the host */ 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun #ifdef ACPI_DUMP_APP 94*4882a593Smuzhiyun #define ACPI_USE_NATIVE_MEMORY_MAPPING 95*4882a593Smuzhiyun #endif 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun /* acpi_names/Example configuration. Hardware disabled */ 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun #if (defined ACPI_EXAMPLE_APP) || \ 100*4882a593Smuzhiyun (defined ACPI_NAMES_APP) 101*4882a593Smuzhiyun #define ACPI_REDUCED_HARDWARE 1 102*4882a593Smuzhiyun #endif 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun /* Linkable ACPICA library. Two versions, one with full debug. */ 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun #ifdef ACPI_LIBRARY 107*4882a593Smuzhiyun #define ACPI_USE_LOCAL_CACHE 108*4882a593Smuzhiyun #define ACPI_DEBUGGER 1 109*4882a593Smuzhiyun #define ACPI_DISASSEMBLER 1 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun #ifdef _DEBUG 112*4882a593Smuzhiyun #define ACPI_DEBUG_OUTPUT 113*4882a593Smuzhiyun #endif 114*4882a593Smuzhiyun #endif 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun /* Common for all ACPICA applications */ 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun #ifdef ACPI_APPLICATION 119*4882a593Smuzhiyun #define ACPI_USE_LOCAL_CACHE 120*4882a593Smuzhiyun #endif 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun /* Common debug/disassembler support */ 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun #ifdef ACPI_FULL_DEBUG 125*4882a593Smuzhiyun #define ACPI_DEBUG_OUTPUT 126*4882a593Smuzhiyun #define ACPI_DEBUGGER 1 127*4882a593Smuzhiyun #define ACPI_DISASSEMBLER 1 128*4882a593Smuzhiyun #endif 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun /* 132*4882a593Smuzhiyun * acpisrc CR\LF support 133*4882a593Smuzhiyun * Unix file line endings do not include the carriage return. 134*4882a593Smuzhiyun * If the acpisrc utility is being built using a microsoft compiler, it means 135*4882a593Smuzhiyun * that it will be running on a windows machine which means that the output is 136*4882a593Smuzhiyun * expected to have CR/LF newlines. If the acpisrc utility is built with 137*4882a593Smuzhiyun * anything else, it will likely run on a system with LF newlines. This flag 138*4882a593Smuzhiyun * tells the acpisrc utility that newlines will be in the LF format. 139*4882a593Smuzhiyun */ 140*4882a593Smuzhiyun #define ACPI_SRC_OS_LF_ONLY 0 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun /*! [Begin] no source code translation */ 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun /****************************************************************************** 145*4882a593Smuzhiyun * 146*4882a593Smuzhiyun * Host configuration files. The compiler configuration files are included 147*4882a593Smuzhiyun * first. 148*4882a593Smuzhiyun * 149*4882a593Smuzhiyun *****************************************************************************/ 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun #if defined(__GNUC__) && !defined(__INTEL_COMPILER) 152*4882a593Smuzhiyun #include <acpi/platform/acgcc.h> 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun #elif defined(_MSC_VER) 155*4882a593Smuzhiyun #include "acmsvc.h" 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun #elif defined(__INTEL_COMPILER) 158*4882a593Smuzhiyun #include <acpi/platform/acintel.h> 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun #endif 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun #if defined(_LINUX) || defined(__linux__) 163*4882a593Smuzhiyun #include <acpi/platform/aclinux.h> 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun #elif defined(_APPLE) || defined(__APPLE__) 166*4882a593Smuzhiyun #include "acmacosx.h" 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun #elif defined(__DragonFly__) 169*4882a593Smuzhiyun #include "acdragonfly.h" 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) 172*4882a593Smuzhiyun #include "acfreebsd.h" 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun #elif defined(__NetBSD__) 175*4882a593Smuzhiyun #include "acnetbsd.h" 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun #elif defined(__sun) 178*4882a593Smuzhiyun #include "acsolaris.h" 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun #elif defined(MODESTO) 181*4882a593Smuzhiyun #include "acmodesto.h" 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun #elif defined(NETWARE) 184*4882a593Smuzhiyun #include "acnetware.h" 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun #elif defined(_CYGWIN) 187*4882a593Smuzhiyun #include "accygwin.h" 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun #elif defined(WIN32) 190*4882a593Smuzhiyun #include "acwin.h" 191*4882a593Smuzhiyun 192*4882a593Smuzhiyun #elif defined(WIN64) 193*4882a593Smuzhiyun #include "acwin64.h" 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun #elif defined(_WRS_LIB_BUILD) 196*4882a593Smuzhiyun #include "acvxworks.h" 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun #elif defined(__OS2__) 199*4882a593Smuzhiyun #include "acos2.h" 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun #elif defined(__HAIKU__) 202*4882a593Smuzhiyun #include "achaiku.h" 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun #elif defined(__QNX__) 205*4882a593Smuzhiyun #include "acqnx.h" 206*4882a593Smuzhiyun 207*4882a593Smuzhiyun /* 208*4882a593Smuzhiyun * EFI applications can be built with -nostdlib, in this case, it must be 209*4882a593Smuzhiyun * included after including all other host environmental definitions, in 210*4882a593Smuzhiyun * order to override the definitions. 211*4882a593Smuzhiyun */ 212*4882a593Smuzhiyun #elif defined(_AED_EFI) || defined(_GNU_EFI) || defined(_EDK2_EFI) 213*4882a593Smuzhiyun #include "acefi.h" 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun #else 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun /* Unknown environment */ 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun #error Unknown target environment 220*4882a593Smuzhiyun #endif 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun /*! [End] no source code translation !*/ 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun /****************************************************************************** 225*4882a593Smuzhiyun * 226*4882a593Smuzhiyun * Setup defaults for the required symbols that were not defined in one of 227*4882a593Smuzhiyun * the host/compiler files above. 228*4882a593Smuzhiyun * 229*4882a593Smuzhiyun *****************************************************************************/ 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun /* 64-bit data types */ 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun #ifndef COMPILER_DEPENDENT_INT64 234*4882a593Smuzhiyun #define COMPILER_DEPENDENT_INT64 long long 235*4882a593Smuzhiyun #endif 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun #ifndef COMPILER_DEPENDENT_UINT64 238*4882a593Smuzhiyun #define COMPILER_DEPENDENT_UINT64 unsigned long long 239*4882a593Smuzhiyun #endif 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun /* Type of mutex supported by host. Default is binary semaphores. */ 242*4882a593Smuzhiyun #ifndef ACPI_MUTEX_TYPE 243*4882a593Smuzhiyun #define ACPI_MUTEX_TYPE ACPI_BINARY_SEMAPHORE 244*4882a593Smuzhiyun #endif 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun /* Global Lock acquire/release */ 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun #ifndef ACPI_ACQUIRE_GLOBAL_LOCK 249*4882a593Smuzhiyun #define ACPI_ACQUIRE_GLOBAL_LOCK(Glptr, acquired) acquired = 1 250*4882a593Smuzhiyun #endif 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun #ifndef ACPI_RELEASE_GLOBAL_LOCK 253*4882a593Smuzhiyun #define ACPI_RELEASE_GLOBAL_LOCK(Glptr, pending) pending = 0 254*4882a593Smuzhiyun #endif 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun /* Flush CPU cache - used when going to sleep. Wbinvd or similar. */ 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun #ifndef ACPI_FLUSH_CPU_CACHE 259*4882a593Smuzhiyun #define ACPI_FLUSH_CPU_CACHE() 260*4882a593Smuzhiyun #endif 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun /* "inline" keywords - configurable since inline is not standardized */ 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun #ifndef ACPI_INLINE 265*4882a593Smuzhiyun #define ACPI_INLINE 266*4882a593Smuzhiyun #endif 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun /* Use ordered initialization if compiler doesn't support designated. */ 269*4882a593Smuzhiyun #ifndef ACPI_STRUCT_INIT 270*4882a593Smuzhiyun #define ACPI_STRUCT_INIT(field, value) value 271*4882a593Smuzhiyun #endif 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun /* 274*4882a593Smuzhiyun * Configurable calling conventions: 275*4882a593Smuzhiyun * 276*4882a593Smuzhiyun * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads) 277*4882a593Smuzhiyun * ACPI_EXTERNAL_XFACE - External ACPI interfaces 278*4882a593Smuzhiyun * ACPI_INTERNAL_XFACE - Internal ACPI interfaces 279*4882a593Smuzhiyun * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces 280*4882a593Smuzhiyun */ 281*4882a593Smuzhiyun #ifndef ACPI_SYSTEM_XFACE 282*4882a593Smuzhiyun #define ACPI_SYSTEM_XFACE 283*4882a593Smuzhiyun #endif 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun #ifndef ACPI_EXTERNAL_XFACE 286*4882a593Smuzhiyun #define ACPI_EXTERNAL_XFACE 287*4882a593Smuzhiyun #endif 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun #ifndef ACPI_INTERNAL_XFACE 290*4882a593Smuzhiyun #define ACPI_INTERNAL_XFACE 291*4882a593Smuzhiyun #endif 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun #ifndef ACPI_INTERNAL_VAR_XFACE 294*4882a593Smuzhiyun #define ACPI_INTERNAL_VAR_XFACE 295*4882a593Smuzhiyun #endif 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun /* 298*4882a593Smuzhiyun * Debugger threading model 299*4882a593Smuzhiyun * Use single threaded if the entire subsystem is contained in an application 300*4882a593Smuzhiyun * Use multiple threaded when the subsystem is running in the kernel. 301*4882a593Smuzhiyun * 302*4882a593Smuzhiyun * By default the model is single threaded if ACPI_APPLICATION is set, 303*4882a593Smuzhiyun * multi-threaded if ACPI_APPLICATION is not set. 304*4882a593Smuzhiyun */ 305*4882a593Smuzhiyun #ifndef DEBUGGER_THREADING 306*4882a593Smuzhiyun #if !defined (ACPI_APPLICATION) || defined (ACPI_EXEC_APP) 307*4882a593Smuzhiyun #define DEBUGGER_THREADING DEBUGGER_MULTI_THREADED 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun #else 310*4882a593Smuzhiyun #define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED 311*4882a593Smuzhiyun #endif 312*4882a593Smuzhiyun #endif /* !DEBUGGER_THREADING */ 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun /****************************************************************************** 315*4882a593Smuzhiyun * 316*4882a593Smuzhiyun * C library configuration 317*4882a593Smuzhiyun * 318*4882a593Smuzhiyun *****************************************************************************/ 319*4882a593Smuzhiyun 320*4882a593Smuzhiyun /* 321*4882a593Smuzhiyun * ACPI_USE_SYSTEM_CLIBRARY - Define this if linking to an actual C library. 322*4882a593Smuzhiyun * Otherwise, local versions of string/memory functions will be used. 323*4882a593Smuzhiyun * ACPI_USE_STANDARD_HEADERS - Define this if linking to a C library and 324*4882a593Smuzhiyun * the standard header files may be used. Defining this implies that 325*4882a593Smuzhiyun * ACPI_USE_SYSTEM_CLIBRARY has been defined. 326*4882a593Smuzhiyun * 327*4882a593Smuzhiyun * The ACPICA subsystem only uses low level C library functions that do not 328*4882a593Smuzhiyun * call operating system services and may therefore be inlined in the code. 329*4882a593Smuzhiyun * 330*4882a593Smuzhiyun * It may be necessary to tailor these include files to the target 331*4882a593Smuzhiyun * generation environment. 332*4882a593Smuzhiyun */ 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun /* Use the standard C library headers. We want to keep these to a minimum. */ 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun #ifdef ACPI_USE_STANDARD_HEADERS 337*4882a593Smuzhiyun 338*4882a593Smuzhiyun /* Use the standard headers from the standard locations */ 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun #include <stdlib.h> 341*4882a593Smuzhiyun #include <string.h> 342*4882a593Smuzhiyun #include <ctype.h> 343*4882a593Smuzhiyun #if defined (ACPI_APPLICATION) || defined(ACPI_LIBRARY) 344*4882a593Smuzhiyun #include <stdio.h> 345*4882a593Smuzhiyun #include <fcntl.h> 346*4882a593Smuzhiyun #include <errno.h> 347*4882a593Smuzhiyun #include <time.h> 348*4882a593Smuzhiyun #include <signal.h> 349*4882a593Smuzhiyun #endif 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun #endif /* ACPI_USE_STANDARD_HEADERS */ 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun #ifdef ACPI_APPLICATION 354*4882a593Smuzhiyun #define ACPI_FILE FILE * 355*4882a593Smuzhiyun #define ACPI_FILE_OUT stdout 356*4882a593Smuzhiyun #define ACPI_FILE_ERR stderr 357*4882a593Smuzhiyun #else 358*4882a593Smuzhiyun #define ACPI_FILE void * 359*4882a593Smuzhiyun #define ACPI_FILE_OUT NULL 360*4882a593Smuzhiyun #define ACPI_FILE_ERR NULL 361*4882a593Smuzhiyun #endif /* ACPI_APPLICATION */ 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun #ifndef ACPI_INIT_FUNCTION 364*4882a593Smuzhiyun #define ACPI_INIT_FUNCTION 365*4882a593Smuzhiyun #endif 366*4882a593Smuzhiyun 367*4882a593Smuzhiyun #endif /* __ACENV_H__ */ 368