1433d6423SLionel Sambuc /****************************************************************************** 2433d6423SLionel Sambuc * 3433d6423SLionel Sambuc * Name: aclinux.h - OS specific defines, etc. for Linux 4433d6423SLionel Sambuc * 5433d6423SLionel Sambuc *****************************************************************************/ 6433d6423SLionel Sambuc 7*29492bb7SDavid van Moolenbroek /* 8*29492bb7SDavid van Moolenbroek * Copyright (C) 2000 - 2014, Intel Corp. 9433d6423SLionel Sambuc * All rights reserved. 10433d6423SLionel Sambuc * 11*29492bb7SDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 12*29492bb7SDavid van Moolenbroek * modification, are permitted provided that the following conditions 13*29492bb7SDavid van Moolenbroek * are met: 14*29492bb7SDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright 15*29492bb7SDavid van Moolenbroek * notice, this list of conditions, and the following disclaimer, 16*29492bb7SDavid van Moolenbroek * without modification. 17*29492bb7SDavid van Moolenbroek * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18*29492bb7SDavid van Moolenbroek * substantially similar to the "NO WARRANTY" disclaimer below 19*29492bb7SDavid van Moolenbroek * ("Disclaimer") and any redistribution must be conditioned upon 20*29492bb7SDavid van Moolenbroek * including a substantially similar Disclaimer requirement for further 21*29492bb7SDavid van Moolenbroek * binary redistribution. 22*29492bb7SDavid van Moolenbroek * 3. Neither the names of the above-listed copyright holders nor the names 23*29492bb7SDavid van Moolenbroek * of any contributors may be used to endorse or promote products derived 24*29492bb7SDavid van Moolenbroek * from this software without specific prior written permission. 25433d6423SLionel Sambuc * 26*29492bb7SDavid van Moolenbroek * Alternatively, this software may be distributed under the terms of the 27*29492bb7SDavid van Moolenbroek * GNU General Public License ("GPL") version 2 as published by the Free 28*29492bb7SDavid van Moolenbroek * Software Foundation. 29433d6423SLionel Sambuc * 30*29492bb7SDavid van Moolenbroek * NO WARRANTY 31*29492bb7SDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32*29492bb7SDavid van Moolenbroek * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33*29492bb7SDavid van Moolenbroek * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34*29492bb7SDavid van Moolenbroek * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35*29492bb7SDavid van Moolenbroek * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36*29492bb7SDavid van Moolenbroek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37*29492bb7SDavid van Moolenbroek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38*29492bb7SDavid van Moolenbroek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39*29492bb7SDavid van Moolenbroek * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40*29492bb7SDavid van Moolenbroek * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41*29492bb7SDavid van Moolenbroek * POSSIBILITY OF SUCH DAMAGES. 42*29492bb7SDavid van Moolenbroek */ 43433d6423SLionel Sambuc 44433d6423SLionel Sambuc #ifndef __ACLINUX_H__ 45433d6423SLionel Sambuc #define __ACLINUX_H__ 46433d6423SLionel Sambuc 47*29492bb7SDavid van Moolenbroek #ifdef __KERNEL__ 48*29492bb7SDavid van Moolenbroek 49*29492bb7SDavid van Moolenbroek /* ACPICA external files should not include ACPICA headers directly. */ 50*29492bb7SDavid van Moolenbroek 51*29492bb7SDavid van Moolenbroek #if !defined(BUILDING_ACPICA) && !defined(_LINUX_ACPI_H) 52*29492bb7SDavid van Moolenbroek #error "Please don't include <acpi/acpi.h> directly, include <linux/acpi.h> instead." 53*29492bb7SDavid van Moolenbroek #endif 54*29492bb7SDavid van Moolenbroek 55*29492bb7SDavid van Moolenbroek #endif 56*29492bb7SDavid van Moolenbroek 57433d6423SLionel Sambuc /* Common (in-kernel/user-space) ACPICA configuration */ 58433d6423SLionel Sambuc 59433d6423SLionel Sambuc #define ACPI_USE_SYSTEM_CLIBRARY 60433d6423SLionel Sambuc #define ACPI_USE_DO_WHILE_0 61433d6423SLionel Sambuc 62433d6423SLionel Sambuc 63433d6423SLionel Sambuc #ifdef __KERNEL__ 64433d6423SLionel Sambuc 65*29492bb7SDavid van Moolenbroek #define ACPI_USE_SYSTEM_INTTYPES 66*29492bb7SDavid van Moolenbroek 67*29492bb7SDavid van Moolenbroek /* Compile for reduced hardware mode only with this kernel config */ 68*29492bb7SDavid van Moolenbroek 69*29492bb7SDavid van Moolenbroek #ifdef CONFIG_ACPI_REDUCED_HARDWARE_ONLY 70*29492bb7SDavid van Moolenbroek #define ACPI_REDUCED_HARDWARE 1 71*29492bb7SDavid van Moolenbroek #endif 72*29492bb7SDavid van Moolenbroek 73433d6423SLionel Sambuc #include <linux/string.h> 74433d6423SLionel Sambuc #include <linux/kernel.h> 75433d6423SLionel Sambuc #include <linux/ctype.h> 76433d6423SLionel Sambuc #include <linux/sched.h> 77*29492bb7SDavid van Moolenbroek #include <linux/atomic.h> 78*29492bb7SDavid van Moolenbroek #include <linux/math64.h> 79433d6423SLionel Sambuc #include <linux/slab.h> 80433d6423SLionel Sambuc #include <linux/spinlock_types.h> 81*29492bb7SDavid van Moolenbroek #ifdef EXPORT_ACPI_INTERFACES 82*29492bb7SDavid van Moolenbroek #include <linux/export.h> 83*29492bb7SDavid van Moolenbroek #endif 84*29492bb7SDavid van Moolenbroek #ifdef CONFIG_ACPI 85*29492bb7SDavid van Moolenbroek #include <asm/acenv.h> 86*29492bb7SDavid van Moolenbroek #endif 87*29492bb7SDavid van Moolenbroek 88*29492bb7SDavid van Moolenbroek #ifndef CONFIG_ACPI 89*29492bb7SDavid van Moolenbroek 90*29492bb7SDavid van Moolenbroek /* External globals for __KERNEL__, stubs is needed */ 91*29492bb7SDavid van Moolenbroek 92*29492bb7SDavid van Moolenbroek #define ACPI_GLOBAL(t,a) 93*29492bb7SDavid van Moolenbroek #define ACPI_INIT_GLOBAL(t,a,b) 94*29492bb7SDavid van Moolenbroek 95*29492bb7SDavid van Moolenbroek /* Generating stubs for configurable ACPICA macros */ 96*29492bb7SDavid van Moolenbroek 97*29492bb7SDavid van Moolenbroek #define ACPI_NO_MEM_ALLOCATIONS 98*29492bb7SDavid van Moolenbroek 99*29492bb7SDavid van Moolenbroek /* Generating stubs for configurable ACPICA functions */ 100*29492bb7SDavid van Moolenbroek 101*29492bb7SDavid van Moolenbroek #define ACPI_NO_ERROR_MESSAGES 102*29492bb7SDavid van Moolenbroek #undef ACPI_DEBUG_OUTPUT 103*29492bb7SDavid van Moolenbroek 104*29492bb7SDavid van Moolenbroek /* External interface for __KERNEL__, stub is needed */ 105*29492bb7SDavid van Moolenbroek 106*29492bb7SDavid van Moolenbroek #define ACPI_EXTERNAL_RETURN_STATUS(Prototype) \ 107*29492bb7SDavid van Moolenbroek static ACPI_INLINE Prototype {return(AE_NOT_CONFIGURED);} 108*29492bb7SDavid van Moolenbroek #define ACPI_EXTERNAL_RETURN_OK(Prototype) \ 109*29492bb7SDavid van Moolenbroek static ACPI_INLINE Prototype {return(AE_OK);} 110*29492bb7SDavid van Moolenbroek #define ACPI_EXTERNAL_RETURN_VOID(Prototype) \ 111*29492bb7SDavid van Moolenbroek static ACPI_INLINE Prototype {return;} 112*29492bb7SDavid van Moolenbroek #define ACPI_EXTERNAL_RETURN_UINT32(Prototype) \ 113*29492bb7SDavid van Moolenbroek static ACPI_INLINE Prototype {return(0);} 114*29492bb7SDavid van Moolenbroek #define ACPI_EXTERNAL_RETURN_PTR(Prototype) \ 115*29492bb7SDavid van Moolenbroek static ACPI_INLINE Prototype {return(NULL);} 116*29492bb7SDavid van Moolenbroek 117*29492bb7SDavid van Moolenbroek #endif /* CONFIG_ACPI */ 118433d6423SLionel Sambuc 119433d6423SLionel Sambuc /* Host-dependent types and defines for in-kernel ACPICA */ 120433d6423SLionel Sambuc 121433d6423SLionel Sambuc #define ACPI_MACHINE_WIDTH BITS_PER_LONG 122433d6423SLionel Sambuc #define ACPI_EXPORT_SYMBOL(symbol) EXPORT_SYMBOL(symbol); 123433d6423SLionel Sambuc #define strtoul simple_strtoul 124433d6423SLionel Sambuc 125433d6423SLionel Sambuc #define ACPI_CACHE_T struct kmem_cache 126433d6423SLionel Sambuc #define ACPI_SPINLOCK spinlock_t * 127433d6423SLionel Sambuc #define ACPI_CPU_FLAGS unsigned long 128*29492bb7SDavid van Moolenbroek 129*29492bb7SDavid van Moolenbroek /* Use native linux version of AcpiOsAllocateZeroed */ 130*29492bb7SDavid van Moolenbroek 131*29492bb7SDavid van Moolenbroek #define USE_NATIVE_ALLOCATE_ZEROED 132*29492bb7SDavid van Moolenbroek 133*29492bb7SDavid van Moolenbroek /* 134*29492bb7SDavid van Moolenbroek * Overrides for in-kernel ACPICA 135*29492bb7SDavid van Moolenbroek */ 136*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitialize 137*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate 138*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocate 139*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed 140*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree 141*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject 142*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId 143*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock 144*29492bb7SDavid van Moolenbroek 145*29492bb7SDavid van Moolenbroek /* 146*29492bb7SDavid van Moolenbroek * OSL interfaces used by debugger/disassembler 147*29492bb7SDavid van Moolenbroek */ 148*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadable 149*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable 150*29492bb7SDavid van Moolenbroek 151*29492bb7SDavid van Moolenbroek /* 152*29492bb7SDavid van Moolenbroek * OSL interfaces used by utilities 153*29492bb7SDavid van Moolenbroek */ 154*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput 155*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine 156*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName 157*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex 158*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress 159*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory 160*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename 161*29492bb7SDavid van Moolenbroek #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory 162433d6423SLionel Sambuc 163433d6423SLionel Sambuc #else /* !__KERNEL__ */ 164433d6423SLionel Sambuc 165433d6423SLionel Sambuc #include <stdarg.h> 166433d6423SLionel Sambuc #include <string.h> 167433d6423SLionel Sambuc #include <stdlib.h> 168433d6423SLionel Sambuc #include <ctype.h> 169433d6423SLionel Sambuc #include <unistd.h> 170433d6423SLionel Sambuc 171*29492bb7SDavid van Moolenbroek /* Define/disable kernel-specific declarators */ 172*29492bb7SDavid van Moolenbroek 173*29492bb7SDavid van Moolenbroek #ifndef __init 174*29492bb7SDavid van Moolenbroek #define __init 175*29492bb7SDavid van Moolenbroek #endif 176*29492bb7SDavid van Moolenbroek 177433d6423SLionel Sambuc /* Host-dependent types and defines for user-space ACPICA */ 178433d6423SLionel Sambuc 179433d6423SLionel Sambuc #define ACPI_FLUSH_CPU_CACHE() 180*29492bb7SDavid van Moolenbroek #define ACPI_CAST_PTHREAD_T(Pthread) ((ACPI_THREAD_ID) (Pthread)) 181433d6423SLionel Sambuc 182*29492bb7SDavid van Moolenbroek #if defined(__ia64__) || defined(__x86_64__) ||\ 183*29492bb7SDavid van Moolenbroek defined(__aarch64__) || defined(__PPC64__) 184433d6423SLionel Sambuc #define ACPI_MACHINE_WIDTH 64 185433d6423SLionel Sambuc #define COMPILER_DEPENDENT_INT64 long 186433d6423SLionel Sambuc #define COMPILER_DEPENDENT_UINT64 unsigned long 187433d6423SLionel Sambuc #else 188433d6423SLionel Sambuc #define ACPI_MACHINE_WIDTH 32 189433d6423SLionel Sambuc #define COMPILER_DEPENDENT_INT64 long long 190433d6423SLionel Sambuc #define COMPILER_DEPENDENT_UINT64 unsigned long long 191433d6423SLionel Sambuc #define ACPI_USE_NATIVE_DIVIDE 192433d6423SLionel Sambuc #endif 193433d6423SLionel Sambuc 194433d6423SLionel Sambuc #ifndef __cdecl 195433d6423SLionel Sambuc #define __cdecl 196433d6423SLionel Sambuc #endif 197433d6423SLionel Sambuc 198433d6423SLionel Sambuc #endif /* __KERNEL__ */ 199433d6423SLionel Sambuc 200433d6423SLionel Sambuc /* Linux uses GCC */ 201433d6423SLionel Sambuc 202433d6423SLionel Sambuc #include "acgcc.h" 203433d6423SLionel Sambuc 204433d6423SLionel Sambuc #endif /* __ACLINUX_H__ */ 205