blob: 310501994c028561c2dda7feeed24efc9ecddad2 [file] [log] [blame]
Erik Schmauss95857632018-03-14 16:13:07 -07001/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002/******************************************************************************
3 *
Bob Mooree0c437b2009-04-22 13:39:47 +08004 * Name: aclinux.h - OS specific defines, etc. for Linux
Linus Torvalds1da177e2005-04-16 15:20:36 -07005 *
Bob Moore840c02c2019-01-14 09:55:25 -08006 * Copyright (C) 2000 - 2019, Intel Corp.
Linus Torvalds1da177e2005-04-16 15:20:36 -07007 *
Erik Schmauss95857632018-03-14 16:13:07 -07008 *****************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -07009
10#ifndef __ACLINUX_H__
11#define __ACLINUX_H__
12
Lv Zheng417b4a72014-07-16 16:58:53 +080013#ifdef __KERNEL__
14
15/* ACPICA external files should not include ACPICA headers directly. */
16
17#if !defined(BUILDING_ACPICA) && !defined(_LINUX_ACPI_H)
18#error "Please don't include <acpi/acpi.h> directly, include <linux/acpi.h> instead."
19#endif
20
21#endif
22
Bob Mooree0c437b2009-04-22 13:39:47 +080023/* Common (in-kernel/user-space) ACPICA configuration */
24
Linus Torvalds1da177e2005-04-16 15:20:36 -070025#define ACPI_USE_SYSTEM_CLIBRARY
26#define ACPI_USE_DO_WHILE_0
Bob Moore959c38a2018-02-15 13:09:31 -080027#define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS
Linus Torvalds1da177e2005-04-16 15:20:36 -070028
29#ifdef __KERNEL__
30
Lv Zhenge2526522014-02-11 10:51:43 +080031#define ACPI_USE_SYSTEM_INTTYPES
Erik Schmauss87cd8262018-03-14 16:12:59 -070032#define ACPI_USE_GPE_POLLING
Lv Zhenge2526522014-02-11 10:51:43 +080033
Lv Zheng4d946f72015-10-19 10:25:56 +080034/* Kernel specific ACPICA configuration */
Al Stoneaf1ae782014-01-17 11:51:30 -070035
Sinan Kayabd23fac2018-12-19 22:46:55 +000036#ifdef CONFIG_PCI
37#define ACPI_PCI_CONFIGURED
38#endif
39
Al Stoneaf1ae782014-01-17 11:51:30 -070040#ifdef CONFIG_ACPI_REDUCED_HARDWARE_ONLY
41#define ACPI_REDUCED_HARDWARE 1
42#endif
43
Lv Zheng4d946f72015-10-19 10:25:56 +080044#ifdef CONFIG_ACPI_DEBUGGER
45#define ACPI_DEBUGGER
46#endif
47
Lv Zhengb4219a82016-07-05 13:53:04 +080048#ifdef CONFIG_ACPI_DEBUG
49#define ACPI_MUTEX_DEBUG
50#endif
51
Linus Torvalds1da177e2005-04-16 15:20:36 -070052#include <linux/string.h>
53#include <linux/kernel.h>
54#include <linux/ctype.h>
Alexey Starikovskiy8bd108d2008-09-25 21:40:30 +040055#include <linux/sched.h>
Arun Sharma600634972011-07-26 16:09:06 -070056#include <linux/atomic.h>
Lv Zheng93220582013-10-29 09:30:41 +080057#include <linux/math64.h>
Robert Moore73459f72005-06-24 00:00:00 -040058#include <linux/slab.h>
Bob Moore967440e32006-06-23 17:04:00 -040059#include <linux/spinlock_types.h>
Lv Zheng93220582013-10-29 09:30:41 +080060#ifdef EXPORT_ACPI_INTERFACES
61#include <linux/export.h>
62#endif
Lv Zhengd334c822014-07-16 16:58:08 +080063#ifdef CONFIG_ACPI
Lv Zheng07d83912014-05-12 15:46:38 +080064#include <asm/acenv.h>
Lv Zhengd334c822014-07-16 16:58:08 +080065#endif
Bob Moore83135242006-10-03 00:00:00 -040066
Lv Zheng2368b1a2016-08-04 16:43:19 +080067#define ACPI_INIT_FUNCTION __init
68
Erik Schmauss11207b42019-05-10 10:25:42 -070069/* Use a specific bugging default separate from ACPICA */
70
71#undef ACPI_DEBUG_DEFAULT
72#define ACPI_DEBUG_DEFAULT (ACPI_LV_INFO | ACPI_LV_REPAIR)
73
Lv Zheng42873a82014-04-30 10:05:15 +080074#ifndef CONFIG_ACPI
75
76/* External globals for __KERNEL__, stubs is needed */
77
78#define ACPI_GLOBAL(t,a)
79#define ACPI_INIT_GLOBAL(t,a,b)
80
81/* Generating stubs for configurable ACPICA macros */
82
83#define ACPI_NO_MEM_ALLOCATIONS
84
85/* Generating stubs for configurable ACPICA functions */
86
87#define ACPI_NO_ERROR_MESSAGES
88#undef ACPI_DEBUG_OUTPUT
89
90/* External interface for __KERNEL__, stub is needed */
91
92#define ACPI_EXTERNAL_RETURN_STATUS(prototype) \
93 static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);}
94#define ACPI_EXTERNAL_RETURN_OK(prototype) \
95 static ACPI_INLINE prototype {return(AE_OK);}
96#define ACPI_EXTERNAL_RETURN_VOID(prototype) \
97 static ACPI_INLINE prototype {return;}
98#define ACPI_EXTERNAL_RETURN_UINT32(prototype) \
99 static ACPI_INLINE prototype {return(0);}
100#define ACPI_EXTERNAL_RETURN_PTR(prototype) \
101 static ACPI_INLINE prototype {return(NULL);}
102
103#endif /* CONFIG_ACPI */
104
Bob Mooree0c437b2009-04-22 13:39:47 +0800105/* Host-dependent types and defines for in-kernel ACPICA */
Bob Moore83135242006-10-03 00:00:00 -0400106
107#define ACPI_MACHINE_WIDTH BITS_PER_LONG
Lv Zheng65082bf2017-08-03 14:26:50 +0800108#define ACPI_USE_NATIVE_MATH64
Bob Moore83135242006-10-03 00:00:00 -0400109#define ACPI_EXPORT_SYMBOL(symbol) EXPORT_SYMBOL(symbol);
110#define strtoul simple_strtoul
Robert Moore73459f72005-06-24 00:00:00 -0400111
Bob Mooree0c437b2009-04-22 13:39:47 +0800112#define acpi_cache_t struct kmem_cache
113#define acpi_spinlock spinlock_t *
Sebastian Andrzej Siewiorc3052592018-04-25 16:28:26 +0200114#define acpi_raw_spinlock raw_spinlock_t *
Bob Mooree0c437b2009-04-22 13:39:47 +0800115#define acpi_cpu_flags unsigned long
Bob Mooree0c437b2009-04-22 13:39:47 +0800116
Lv Zhengd13bd5a2014-05-12 15:46:32 +0800117/* Use native linux version of acpi_os_allocate_zeroed */
118
119#define USE_NATIVE_ALLOCATE_ZEROED
120
121/*
122 * Overrides for in-kernel ACPICA
123 */
124#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize
125#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate
126#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate
127#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate_zeroed
128#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_free
129#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_object
130#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_thread_id
131#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_lock
Sebastian Andrzej Siewiorc3052592018-04-25 16:28:26 +0200132#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_raw_lock
133#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_raw_lock
134#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_raw_lock
135#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_raw_lock
Lv Zhengd13bd5a2014-05-12 15:46:32 +0800136
137/*
138 * OSL interfaces used by debugger/disassembler
139 */
140#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_readable
141#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_writable
Lv Zheng703ecd22016-12-28 15:28:07 +0800142#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize_debugger
143#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate_debugger
Lv Zhengd13bd5a2014-05-12 15:46:32 +0800144
145/*
146 * OSL interfaces used by utilities
147 */
148#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_redirect_output
Lv Zhengd13bd5a2014-05-12 15:46:32 +0800149#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_name
150#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_index
151#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_address
152#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_directory
153#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_next_filename
154#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_directory
155
Lv Zhengb5c08752016-08-04 16:42:49 +0800156#define ACPI_MSG_ERROR KERN_ERR "ACPI Error: "
157#define ACPI_MSG_EXCEPTION KERN_ERR "ACPI Exception: "
158#define ACPI_MSG_WARNING KERN_WARNING "ACPI Warning: "
159#define ACPI_MSG_INFO KERN_INFO "ACPI: "
160
161#define ACPI_MSG_BIOS_ERROR KERN_ERR "ACPI BIOS Error (bug): "
162#define ACPI_MSG_BIOS_WARNING KERN_WARNING "ACPI BIOS Warning (bug): "
163
Kees Cook99e597a2017-07-10 15:23:08 +0800164/*
165 * Linux wants to use designated initializers for function pointer structs.
166 */
Kees Cook3d867f62017-06-27 00:53:07 +0200167#define ACPI_STRUCT_INIT(field, value) .field = value
168
Lv Zheng839e9282013-10-29 09:29:51 +0800169#else /* !__KERNEL__ */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700170
Lv Zhengda24f312016-08-04 16:44:44 +0800171#define ACPI_USE_STANDARD_HEADERS
172
173#ifdef ACPI_USE_STANDARD_HEADERS
Linus Torvalds1da177e2005-04-16 15:20:36 -0700174#include <unistd.h>
Lv Zhengda24f312016-08-04 16:44:44 +0800175#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -0700176
Lv Zhenga3a80da2014-04-04 12:37:59 +0800177/* Define/disable kernel-specific declarators */
Lv Zheng7e66b462014-02-11 10:51:33 +0800178
179#ifndef __init
180#define __init
181#endif
Lv Zhengd5a4b1a2016-11-16 17:27:34 +0800182#ifndef __iomem
183#define __iomem
184#endif
Lv Zheng7e66b462014-02-11 10:51:33 +0800185
Bob Mooree0c437b2009-04-22 13:39:47 +0800186/* Host-dependent types and defines for user-space ACPICA */
187
188#define ACPI_FLUSH_CPU_CACHE()
Lin Ming28eb3fc2010-09-15 13:55:13 +0800189#define ACPI_CAST_PTHREAD_T(pthread) ((acpi_thread_id) (pthread))
Bob Mooree0c437b2009-04-22 13:39:47 +0800190
Anuj Mittal0eedae82018-01-24 15:42:29 -0800191#if defined(__ia64__) || (defined(__x86_64__) && !defined(__ILP32__)) ||\
Colin Ian King23741562016-12-28 15:28:56 +0800192 defined(__aarch64__) || defined(__PPC64__) ||\
193 defined(__s390x__)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700194#define ACPI_MACHINE_WIDTH 64
195#define COMPILER_DEPENDENT_INT64 long
196#define COMPILER_DEPENDENT_UINT64 unsigned long
197#else
198#define ACPI_MACHINE_WIDTH 32
199#define COMPILER_DEPENDENT_INT64 long long
200#define COMPILER_DEPENDENT_UINT64 unsigned long long
201#define ACPI_USE_NATIVE_DIVIDE
Lv Zheng65082bf2017-08-03 14:26:50 +0800202#define ACPI_USE_NATIVE_MATH64
Linus Torvalds1da177e2005-04-16 15:20:36 -0700203#endif
204
Bob Moorea0a3f6c2007-03-27 20:25:46 -0400205#ifndef __cdecl
Linus Torvalds1da177e2005-04-16 15:20:36 -0700206#define __cdecl
Bob Moorea0a3f6c2007-03-27 20:25:46 -0400207#endif
208
Lv Zheng839e9282013-10-29 09:29:51 +0800209#endif /* __KERNEL__ */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700210
Lv Zheng839e9282013-10-29 09:29:51 +0800211#endif /* __ACLINUX_H__ */