195857638SErik Schmauss /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 21da177e4SLinus Torvalds /****************************************************************************** 31da177e4SLinus Torvalds * 4e0c437bcSBob Moore * Name: aclinux.h - OS specific defines, etc. for Linux 51da177e4SLinus Torvalds * 6612c2932SBob Moore * Copyright (C) 2000 - 2023, Intel Corp. 71da177e4SLinus Torvalds * 895857638SErik Schmauss *****************************************************************************/ 91da177e4SLinus Torvalds 101da177e4SLinus Torvalds #ifndef __ACLINUX_H__ 111da177e4SLinus Torvalds #define __ACLINUX_H__ 121da177e4SLinus Torvalds 13417b4a73SLv Zheng #ifdef __KERNEL__ 14417b4a73SLv Zheng 15417b4a73SLv Zheng /* ACPICA external files should not include ACPICA headers directly. */ 16417b4a73SLv Zheng 17417b4a73SLv Zheng #if !defined(BUILDING_ACPICA) && !defined(_LINUX_ACPI_H) 18*a7306f3cSNataniel Farzan #error "Please do not include <acpi/acpi.h> directly, include <linux/acpi.h> instead." 19417b4a73SLv Zheng #endif 20417b4a73SLv Zheng 21417b4a73SLv Zheng #endif 22417b4a73SLv Zheng 23e0c437bcSBob Moore /* Common (in-kernel/user-space) ACPICA configuration */ 24e0c437bcSBob Moore 251da177e4SLinus Torvalds #define ACPI_USE_SYSTEM_CLIBRARY 261da177e4SLinus Torvalds #define ACPI_USE_DO_WHILE_0 27959c38a7SBob Moore #define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS 281da177e4SLinus Torvalds 291da177e4SLinus Torvalds #ifdef __KERNEL__ 301da177e4SLinus Torvalds 31e252652fSLv Zheng #define ACPI_USE_SYSTEM_INTTYPES 3287cd826bSErik Schmauss #define ACPI_USE_GPE_POLLING 33e252652fSLv Zheng 344d946f79SLv Zheng /* Kernel specific ACPICA configuration */ 35af1ae78aSAl Stone 36bd23fac3SSinan Kaya #ifdef CONFIG_PCI 37bd23fac3SSinan Kaya #define ACPI_PCI_CONFIGURED 38bd23fac3SSinan Kaya #endif 39bd23fac3SSinan Kaya 40af1ae78aSAl Stone #ifdef CONFIG_ACPI_REDUCED_HARDWARE_ONLY 41af1ae78aSAl Stone #define ACPI_REDUCED_HARDWARE 1 42af1ae78aSAl Stone #endif 43af1ae78aSAl Stone 444d946f79SLv Zheng #ifdef CONFIG_ACPI_DEBUGGER 454d946f79SLv Zheng #define ACPI_DEBUGGER 464d946f79SLv Zheng #endif 474d946f79SLv Zheng 48b4219a89SLv Zheng #ifdef CONFIG_ACPI_DEBUG 49b4219a89SLv Zheng #define ACPI_MUTEX_DEBUG 50b4219a89SLv Zheng #endif 51b4219a89SLv Zheng 521da177e4SLinus Torvalds #include <linux/string.h> 531da177e4SLinus Torvalds #include <linux/kernel.h> 541da177e4SLinus Torvalds #include <linux/ctype.h> 558bd108d1SAlexey Starikovskiy #include <linux/sched.h> 5660063497SArun Sharma #include <linux/atomic.h> 5793220587SLv Zheng #include <linux/math64.h> 588313524aSBob Moore #include <linux/slab.h> 59967440e3SBob Moore #include <linux/spinlock_types.h> 6093220587SLv Zheng #ifdef EXPORT_ACPI_INTERFACES 6193220587SLv Zheng #include <linux/export.h> 6293220587SLv Zheng #endif 63d334c823SLv Zheng #ifdef CONFIG_ACPI 6407d83914SLv Zheng #include <asm/acenv.h> 65d334c823SLv Zheng #endif 661da177e4SLinus Torvalds 672368b1a1SLv Zheng #define ACPI_INIT_FUNCTION __init 682368b1a1SLv Zheng 6911207b4dSErik Schmauss /* Use a specific bugging default separate from ACPICA */ 7011207b4dSErik Schmauss 7111207b4dSErik Schmauss #undef ACPI_DEBUG_DEFAULT 7211207b4dSErik Schmauss #define ACPI_DEBUG_DEFAULT (ACPI_LV_INFO | ACPI_LV_REPAIR) 7311207b4dSErik Schmauss 7442873a84SLv Zheng #ifndef CONFIG_ACPI 7542873a84SLv Zheng 7642873a84SLv Zheng /* External globals for __KERNEL__, stubs is needed */ 7742873a84SLv Zheng 7842873a84SLv Zheng #define ACPI_GLOBAL(t,a) 7942873a84SLv Zheng #define ACPI_INIT_GLOBAL(t,a,b) 8042873a84SLv Zheng 8142873a84SLv Zheng /* Generating stubs for configurable ACPICA macros */ 8242873a84SLv Zheng 8342873a84SLv Zheng #define ACPI_NO_MEM_ALLOCATIONS 8442873a84SLv Zheng 8542873a84SLv Zheng /* Generating stubs for configurable ACPICA functions */ 8642873a84SLv Zheng 8742873a84SLv Zheng #define ACPI_NO_ERROR_MESSAGES 8842873a84SLv Zheng #undef ACPI_DEBUG_OUTPUT 8942873a84SLv Zheng 9042873a84SLv Zheng /* External interface for __KERNEL__, stub is needed */ 9142873a84SLv Zheng 9242873a84SLv Zheng #define ACPI_EXTERNAL_RETURN_STATUS(prototype) \ 9342873a84SLv Zheng static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);} 9442873a84SLv Zheng #define ACPI_EXTERNAL_RETURN_OK(prototype) \ 9542873a84SLv Zheng static ACPI_INLINE prototype {return(AE_OK);} 9642873a84SLv Zheng #define ACPI_EXTERNAL_RETURN_VOID(prototype) \ 9742873a84SLv Zheng static ACPI_INLINE prototype {return;} 9842873a84SLv Zheng #define ACPI_EXTERNAL_RETURN_UINT32(prototype) \ 9942873a84SLv Zheng static ACPI_INLINE prototype {return(0);} 10042873a84SLv Zheng #define ACPI_EXTERNAL_RETURN_PTR(prototype) \ 10142873a84SLv Zheng static ACPI_INLINE prototype {return(NULL);} 10242873a84SLv Zheng 10342873a84SLv Zheng #endif /* CONFIG_ACPI */ 10442873a84SLv Zheng 105e0c437bcSBob Moore /* Host-dependent types and defines for in-kernel ACPICA */ 1061da177e4SLinus Torvalds 1071da177e4SLinus Torvalds #define ACPI_MACHINE_WIDTH BITS_PER_LONG 10865082bfcSLv Zheng #define ACPI_USE_NATIVE_MATH64 1098313524aSBob Moore #define ACPI_EXPORT_SYMBOL(symbol) EXPORT_SYMBOL(symbol); 1108313524aSBob Moore #define strtoul simple_strtoul 11173459f73SRobert Moore 112e0c437bcSBob Moore #define acpi_cache_t struct kmem_cache 113e0c437bcSBob Moore #define acpi_spinlock spinlock_t * 114c3052594SSebastian Andrzej Siewior #define acpi_raw_spinlock raw_spinlock_t * 115e0c437bcSBob Moore #define acpi_cpu_flags unsigned long 116e0c437bcSBob Moore 117ae57857bSRafael J. Wysocki #define acpi_uintptr_t uintptr_t 118ae57857bSRafael J. Wysocki 119ae57857bSRafael J. Wysocki #define ACPI_TO_INTEGER(p) ((uintptr_t)(p)) 120ae57857bSRafael J. Wysocki #define ACPI_OFFSET(d, f) offsetof(d, f) 121ae57857bSRafael J. Wysocki 122d13bd5a6SLv Zheng /* Use native linux version of acpi_os_allocate_zeroed */ 123d13bd5a6SLv Zheng 124d13bd5a6SLv Zheng #define USE_NATIVE_ALLOCATE_ZEROED 125d13bd5a6SLv Zheng 12685f94020SRafael J. Wysocki /* Use logical addresses for accessing GPE registers in system memory */ 12785f94020SRafael J. Wysocki 12885f94020SRafael J. Wysocki #define ACPI_GPE_USE_LOGICAL_ADDRESSES 12985f94020SRafael J. Wysocki 130d13bd5a6SLv Zheng /* 131d13bd5a6SLv Zheng * Overrides for in-kernel ACPICA 132d13bd5a6SLv Zheng */ 133d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize 134d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate 135d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate 136d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate_zeroed 137d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_free 138d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_object 139d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_thread_id 140d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_lock 141c3052594SSebastian Andrzej Siewior #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_raw_lock 142c3052594SSebastian Andrzej Siewior #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_raw_lock 143c3052594SSebastian Andrzej Siewior #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_raw_lock 144c3052594SSebastian Andrzej Siewior #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_raw_lock 145d13bd5a6SLv Zheng 146d13bd5a6SLv Zheng /* 147d13bd5a6SLv Zheng * OSL interfaces used by debugger/disassembler 148d13bd5a6SLv Zheng */ 149d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_readable 150d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_writable 151703ecd22SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize_debugger 152703ecd22SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate_debugger 153d13bd5a6SLv Zheng 154d13bd5a6SLv Zheng /* 155d13bd5a6SLv Zheng * OSL interfaces used by utilities 156d13bd5a6SLv Zheng */ 157d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_redirect_output 158d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_name 159d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_index 160d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_address 161d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_directory 162d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_next_filename 163d13bd5a6SLv Zheng #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_directory 164d13bd5a6SLv Zheng 165b5c0875aSLv Zheng #define ACPI_MSG_ERROR KERN_ERR "ACPI Error: " 166b5c0875aSLv Zheng #define ACPI_MSG_EXCEPTION KERN_ERR "ACPI Exception: " 167b5c0875aSLv Zheng #define ACPI_MSG_WARNING KERN_WARNING "ACPI Warning: " 168b5c0875aSLv Zheng #define ACPI_MSG_INFO KERN_INFO "ACPI: " 169b5c0875aSLv Zheng 170b5c0875aSLv Zheng #define ACPI_MSG_BIOS_ERROR KERN_ERR "ACPI BIOS Error (bug): " 171b5c0875aSLv Zheng #define ACPI_MSG_BIOS_WARNING KERN_WARNING "ACPI BIOS Warning (bug): " 172b5c0875aSLv Zheng 17399e597adSKees Cook /* 17499e597adSKees Cook * Linux wants to use designated initializers for function pointer structs. 17599e597adSKees Cook */ 1763d867f6cSKees Cook #define ACPI_STRUCT_INIT(field, value) .field = value 1773d867f6cSKees Cook 1781da177e4SLinus Torvalds #else /* !__KERNEL__ */ 1791da177e4SLinus Torvalds 180da24f31dSLv Zheng #define ACPI_USE_STANDARD_HEADERS 181da24f31dSLv Zheng 182da24f31dSLv Zheng #ifdef ACPI_USE_STANDARD_HEADERS 1834cf8a606STamir Duberstein #include <stddef.h> 1841da177e4SLinus Torvalds #include <unistd.h> 1857c94858eSPhilip Prindeville #include <stdint.h> 1864cf8a606STamir Duberstein 1874cf8a606STamir Duberstein #define ACPI_OFFSET(d, f) offsetof(d, f) 188da24f31dSLv Zheng #endif 1891da177e4SLinus Torvalds 190a3a80da3SLv Zheng /* Define/disable kernel-specific declarators */ 1917e66b46bSLv Zheng 1927e66b46bSLv Zheng #ifndef __init 1937e66b46bSLv Zheng #define __init 1947e66b46bSLv Zheng #endif 195d5a4b1a5SLv Zheng #ifndef __iomem 196d5a4b1a5SLv Zheng #define __iomem 197d5a4b1a5SLv Zheng #endif 1987e66b46bSLv Zheng 199e0c437bcSBob Moore /* Host-dependent types and defines for user-space ACPICA */ 200e0c437bcSBob Moore 201e0c437bcSBob Moore #define ACPI_FLUSH_CPU_CACHE() 20228eb3fcfSLin Ming #define ACPI_CAST_PTHREAD_T(pthread) ((acpi_thread_id) (pthread)) 203e0c437bcSBob Moore 2040eedae8eSAnuj Mittal #if defined(__ia64__) || (defined(__x86_64__) && !defined(__ILP32__)) ||\ 20523741569SColin Ian King defined(__aarch64__) || defined(__PPC64__) ||\ 206a47a0c2aSHuacai Chen defined(__s390x__) || defined(__loongarch__) ||\ 2073d21044eSColin Ian King (defined(__riscv) && (defined(__LP64__) || defined(_LP64))) 2081da177e4SLinus Torvalds #define ACPI_MACHINE_WIDTH 64 2091da177e4SLinus Torvalds #define COMPILER_DEPENDENT_INT64 long 2101da177e4SLinus Torvalds #define COMPILER_DEPENDENT_UINT64 unsigned long 2111da177e4SLinus Torvalds #else 2121da177e4SLinus Torvalds #define ACPI_MACHINE_WIDTH 32 2131da177e4SLinus Torvalds #define COMPILER_DEPENDENT_INT64 long long 2141da177e4SLinus Torvalds #define COMPILER_DEPENDENT_UINT64 unsigned long long 2151da177e4SLinus Torvalds #define ACPI_USE_NATIVE_DIVIDE 21665082bfcSLv Zheng #define ACPI_USE_NATIVE_MATH64 2171da177e4SLinus Torvalds #endif 2181da177e4SLinus Torvalds 219a0a3f6c6SBob Moore #ifndef __cdecl 2201da177e4SLinus Torvalds #define __cdecl 221a0a3f6c6SBob Moore #endif 222a0a3f6c6SBob Moore 2231da177e4SLinus Torvalds #endif /* __KERNEL__ */ 2241da177e4SLinus Torvalds 2251da177e4SLinus Torvalds #endif /* __ACLINUX_H__ */ 226