blob: e6e7572541387406c0d05c797ebb1c6a32c7614e [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/******************************************************************************
2 *
Bob Mooree0c437b2009-04-22 13:39:47 +08003 * Name: aclinux.h - OS specific defines, etc. for Linux
Linus Torvalds1da177e2005-04-16 15:20:36 -07004 *
5 *****************************************************************************/
6
7/*
Bob Mooreda6f8322018-01-04 10:06:38 -08008 * Copyright (C) 2000 - 2018, Intel Corp.
Linus Torvalds1da177e2005-04-16 15:20:36 -07009 * 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 __ACLINUX_H__
45#define __ACLINUX_H__
46
Lv Zheng417b4a72014-07-16 16:58:53 +080047#ifdef __KERNEL__
48
49/* ACPICA external files should not include ACPICA headers directly. */
50
51#if !defined(BUILDING_ACPICA) && !defined(_LINUX_ACPI_H)
52#error "Please don't include <acpi/acpi.h> directly, include <linux/acpi.h> instead."
53#endif
54
55#endif
56
Bob Mooree0c437b2009-04-22 13:39:47 +080057/* Common (in-kernel/user-space) ACPICA configuration */
58
Linus Torvalds1da177e2005-04-16 15:20:36 -070059#define ACPI_USE_SYSTEM_CLIBRARY
60#define ACPI_USE_DO_WHILE_0
Bob Moore959c38a2018-02-15 13:09:31 -080061#define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS
Linus Torvalds1da177e2005-04-16 15:20:36 -070062
63#ifdef __KERNEL__
64
Lv Zhenge2526522014-02-11 10:51:43 +080065#define ACPI_USE_SYSTEM_INTTYPES
66
Lv Zheng4d946f72015-10-19 10:25:56 +080067/* Kernel specific ACPICA configuration */
Al Stoneaf1ae782014-01-17 11:51:30 -070068
69#ifdef CONFIG_ACPI_REDUCED_HARDWARE_ONLY
70#define ACPI_REDUCED_HARDWARE 1
71#endif
72
Lv Zheng4d946f72015-10-19 10:25:56 +080073#ifdef CONFIG_ACPI_DEBUGGER
74#define ACPI_DEBUGGER
75#endif
76
Lv Zhengb4219a82016-07-05 13:53:04 +080077#ifdef CONFIG_ACPI_DEBUG
78#define ACPI_MUTEX_DEBUG
79#endif
80
Linus Torvalds1da177e2005-04-16 15:20:36 -070081#include <linux/string.h>
82#include <linux/kernel.h>
83#include <linux/ctype.h>
Alexey Starikovskiy8bd108d2008-09-25 21:40:30 +040084#include <linux/sched.h>
Arun Sharma600634972011-07-26 16:09:06 -070085#include <linux/atomic.h>
Lv Zheng93220582013-10-29 09:30:41 +080086#include <linux/math64.h>
Robert Moore73459f72005-06-24 00:00:00 -040087#include <linux/slab.h>
Bob Moore967440e32006-06-23 17:04:00 -040088#include <linux/spinlock_types.h>
Lv Zheng93220582013-10-29 09:30:41 +080089#ifdef EXPORT_ACPI_INTERFACES
90#include <linux/export.h>
91#endif
Lv Zhengd334c822014-07-16 16:58:08 +080092#ifdef CONFIG_ACPI
Lv Zheng07d83912014-05-12 15:46:38 +080093#include <asm/acenv.h>
Lv Zhengd334c822014-07-16 16:58:08 +080094#endif
Bob Moore83135242006-10-03 00:00:00 -040095
Lv Zheng2368b1a2016-08-04 16:43:19 +080096#define ACPI_INIT_FUNCTION __init
97
Lv Zheng42873a82014-04-30 10:05:15 +080098#ifndef CONFIG_ACPI
99
100/* External globals for __KERNEL__, stubs is needed */
101
102#define ACPI_GLOBAL(t,a)
103#define ACPI_INIT_GLOBAL(t,a,b)
104
105/* Generating stubs for configurable ACPICA macros */
106
107#define ACPI_NO_MEM_ALLOCATIONS
108
109/* Generating stubs for configurable ACPICA functions */
110
111#define ACPI_NO_ERROR_MESSAGES
112#undef ACPI_DEBUG_OUTPUT
113
114/* External interface for __KERNEL__, stub is needed */
115
116#define ACPI_EXTERNAL_RETURN_STATUS(prototype) \
117 static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);}
118#define ACPI_EXTERNAL_RETURN_OK(prototype) \
119 static ACPI_INLINE prototype {return(AE_OK);}
120#define ACPI_EXTERNAL_RETURN_VOID(prototype) \
121 static ACPI_INLINE prototype {return;}
122#define ACPI_EXTERNAL_RETURN_UINT32(prototype) \
123 static ACPI_INLINE prototype {return(0);}
124#define ACPI_EXTERNAL_RETURN_PTR(prototype) \
125 static ACPI_INLINE prototype {return(NULL);}
126
127#endif /* CONFIG_ACPI */
128
Bob Mooree0c437b2009-04-22 13:39:47 +0800129/* Host-dependent types and defines for in-kernel ACPICA */
Bob Moore83135242006-10-03 00:00:00 -0400130
131#define ACPI_MACHINE_WIDTH BITS_PER_LONG
Lv Zheng65082bf2017-08-03 14:26:50 +0800132#define ACPI_USE_NATIVE_MATH64
Bob Moore83135242006-10-03 00:00:00 -0400133#define ACPI_EXPORT_SYMBOL(symbol) EXPORT_SYMBOL(symbol);
134#define strtoul simple_strtoul
Robert Moore73459f72005-06-24 00:00:00 -0400135
Bob Mooree0c437b2009-04-22 13:39:47 +0800136#define acpi_cache_t struct kmem_cache
137#define acpi_spinlock spinlock_t *
138#define acpi_cpu_flags unsigned long
Bob Mooree0c437b2009-04-22 13:39:47 +0800139
Lv Zhengd13bd5a2014-05-12 15:46:32 +0800140/* Use native linux version of acpi_os_allocate_zeroed */
141
142#define USE_NATIVE_ALLOCATE_ZEROED
143
144/*
145 * Overrides for in-kernel ACPICA
146 */
147#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize
148#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate
149#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate
150#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate_zeroed
151#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_free
152#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_object
153#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_thread_id
154#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_lock
Lv Zhengd13bd5a2014-05-12 15:46:32 +0800155
156/*
157 * OSL interfaces used by debugger/disassembler
158 */
159#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_readable
160#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_writable
Lv Zheng703ecd22016-12-28 15:28:07 +0800161#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize_debugger
162#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate_debugger
Lv Zhengd13bd5a2014-05-12 15:46:32 +0800163
164/*
165 * OSL interfaces used by utilities
166 */
167#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_redirect_output
Lv Zhengd13bd5a2014-05-12 15:46:32 +0800168#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_name
169#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_index
170#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_address
171#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_directory
172#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_next_filename
173#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_directory
174
Lv Zhengb5c08752016-08-04 16:42:49 +0800175#define ACPI_MSG_ERROR KERN_ERR "ACPI Error: "
176#define ACPI_MSG_EXCEPTION KERN_ERR "ACPI Exception: "
177#define ACPI_MSG_WARNING KERN_WARNING "ACPI Warning: "
178#define ACPI_MSG_INFO KERN_INFO "ACPI: "
179
180#define ACPI_MSG_BIOS_ERROR KERN_ERR "ACPI BIOS Error (bug): "
181#define ACPI_MSG_BIOS_WARNING KERN_WARNING "ACPI BIOS Warning (bug): "
182
Kees Cook99e597a2017-07-10 15:23:08 +0800183/*
184 * Linux wants to use designated initializers for function pointer structs.
185 */
Kees Cook3d867f62017-06-27 00:53:07 +0200186#define ACPI_STRUCT_INIT(field, value) .field = value
187
Lv Zheng839e9282013-10-29 09:29:51 +0800188#else /* !__KERNEL__ */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700189
Lv Zhengda24f312016-08-04 16:44:44 +0800190#define ACPI_USE_STANDARD_HEADERS
191
192#ifdef ACPI_USE_STANDARD_HEADERS
Linus Torvalds1da177e2005-04-16 15:20:36 -0700193#include <unistd.h>
Lv Zhengda24f312016-08-04 16:44:44 +0800194#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -0700195
Lv Zhenga3a80da2014-04-04 12:37:59 +0800196/* Define/disable kernel-specific declarators */
Lv Zheng7e66b462014-02-11 10:51:33 +0800197
198#ifndef __init
199#define __init
200#endif
Lv Zhengd5a4b1a2016-11-16 17:27:34 +0800201#ifndef __iomem
202#define __iomem
203#endif
Lv Zheng7e66b462014-02-11 10:51:33 +0800204
Bob Mooree0c437b2009-04-22 13:39:47 +0800205/* Host-dependent types and defines for user-space ACPICA */
206
207#define ACPI_FLUSH_CPU_CACHE()
Lin Ming28eb3fc2010-09-15 13:55:13 +0800208#define ACPI_CAST_PTHREAD_T(pthread) ((acpi_thread_id) (pthread))
Bob Mooree0c437b2009-04-22 13:39:47 +0800209
Anuj Mittal0eedae82018-01-24 15:42:29 -0800210#if defined(__ia64__) || (defined(__x86_64__) && !defined(__ILP32__)) ||\
Colin Ian King23741562016-12-28 15:28:56 +0800211 defined(__aarch64__) || defined(__PPC64__) ||\
212 defined(__s390x__)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700213#define ACPI_MACHINE_WIDTH 64
214#define COMPILER_DEPENDENT_INT64 long
215#define COMPILER_DEPENDENT_UINT64 unsigned long
216#else
217#define ACPI_MACHINE_WIDTH 32
218#define COMPILER_DEPENDENT_INT64 long long
219#define COMPILER_DEPENDENT_UINT64 unsigned long long
220#define ACPI_USE_NATIVE_DIVIDE
Lv Zheng65082bf2017-08-03 14:26:50 +0800221#define ACPI_USE_NATIVE_MATH64
Linus Torvalds1da177e2005-04-16 15:20:36 -0700222#endif
223
Bob Moorea0a3f6c2007-03-27 20:25:46 -0400224#ifndef __cdecl
Linus Torvalds1da177e2005-04-16 15:20:36 -0700225#define __cdecl
Bob Moorea0a3f6c2007-03-27 20:25:46 -0400226#endif
227
Lv Zheng839e9282013-10-29 09:29:51 +0800228#endif /* __KERNEL__ */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700229
Lv Zheng839e9282013-10-29 09:29:51 +0800230#endif /* __ACLINUX_H__ */