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