xref: /OK3568_Linux_fs/kernel/include/acpi/platform/acenv.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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