/******************************************************************************1*2* Name: actypes.h - Common data types for the entire ACPI subsystem3*4*****************************************************************************/56/*7* Copyright (C) 2000 - 2011, Intel Corp.8* All rights reserved.9*10* Redistribution and use in source and binary forms, with or without11* modification, are permitted provided that the following conditions12* are met:13* 1. Redistributions of source code must retain the above copyright14* notice, this list of conditions, and the following disclaimer,15* without modification.16* 2. Redistributions in binary form must reproduce at minimum a disclaimer17* substantially similar to the "NO WARRANTY" disclaimer below18* ("Disclaimer") and any redistribution must be conditioned upon19* including a substantially similar Disclaimer requirement for further20* binary redistribution.21* 3. Neither the names of the above-listed copyright holders nor the names22* of any contributors may be used to endorse or promote products derived23* from this software without specific prior written permission.24*25* Alternatively, this software may be distributed under the terms of the26* GNU General Public License ("GPL") version 2 as published by the Free27* Software Foundation.28*29* NO WARRANTY30* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS31* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT32* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR33* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT34* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL35* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS36* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)37* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,38* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING39* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE40* POSSIBILITY OF SUCH DAMAGES.41*/4243#ifndef __ACTYPES_H__44#define __ACTYPES_H__4546/* acpisrc:struct_defs -- for acpisrc conversion */4748/*49* ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent header50* and must be either 32 or 64. 16-bit ACPICA is no longer supported, as of51* 12/2006.52*/53#ifndef ACPI_MACHINE_WIDTH54#error ACPI_MACHINE_WIDTH not defined55#endif5657/*! [Begin] no source code translation */5859/*60* Data type ranges61* Note: These macros are designed to be compiler independent as well as62* working around problems that some 32-bit compilers have with 64-bit63* constants.64*/65#define ACPI_UINT8_MAX (UINT8) (~((UINT8) 0)) /* 0xFF */66#define ACPI_UINT16_MAX (UINT16)(~((UINT16) 0)) /* 0xFFFF */67#define ACPI_UINT32_MAX (UINT32)(~((UINT32) 0)) /* 0xFFFFFFFF */68#define ACPI_UINT64_MAX (UINT64)(~((UINT64) 0)) /* 0xFFFFFFFFFFFFFFFF */69#define ACPI_ASCII_MAX 0x7F7071/*72* Architecture-specific ACPICA Subsystem Data Types73*74* The goal of these types is to provide source code portability across75* 16-bit, 32-bit, and 64-bit targets.76*77* 1) The following types are of fixed size for all targets (16/32/64):78*79* BOOLEAN Logical boolean80*81* UINT8 8-bit (1 byte) unsigned value82* UINT16 16-bit (2 byte) unsigned value83* UINT32 32-bit (4 byte) unsigned value84* UINT64 64-bit (8 byte) unsigned value85*86* INT16 16-bit (2 byte) signed value87* INT32 32-bit (4 byte) signed value88* INT64 64-bit (8 byte) signed value89*90* COMPILER_DEPENDENT_UINT64/INT64 - These types are defined in the91* compiler-dependent header(s) and were introduced because there is no common92* 64-bit integer type across the various compilation models, as shown in93* the table below.94*95* Datatype LP64 ILP64 LLP64 ILP32 LP32 16bit96* char 8 8 8 8 8 897* short 16 16 16 16 16 1698* _int32 3299* int 32 64 32 32 16 16100* long 64 64 32 32 32 32101* long long 64 64102* pointer 64 64 64 32 32 32103*104* Note: ILP64 and LP32 are currently not supported.105*106*107* 2) These types represent the native word size of the target mode of the108* processor, and may be 16-bit, 32-bit, or 64-bit as required. They are109* usually used for memory allocation, efficient loop counters, and array110* indexes. The types are similar to the size_t type in the C library and are111* required because there is no C type that consistently represents the native112* data width. ACPI_SIZE is needed because there is no guarantee that a113* kernel-level C library is present.114*115* ACPI_SIZE 16/32/64-bit unsigned value116* ACPI_NATIVE_INT 16/32/64-bit signed value117*/118119/*******************************************************************************120*121* Common types for all compilers, all targets122*123******************************************************************************/124125typedef unsigned char BOOLEAN;126typedef unsigned char UINT8;127typedef unsigned short UINT16;128typedef COMPILER_DEPENDENT_UINT64 UINT64;129typedef COMPILER_DEPENDENT_INT64 INT64;130131/*! [End] no source code translation !*/132133/*134* Value returned by acpi_os_get_thread_id. There is no standard "thread_id"135* across operating systems or even the various UNIX systems. Since ACPICA136* only needs the thread ID as a unique thread identifier, we use a u64137* as the only common data type - it will accommodate any type of pointer or138* any type of integer. It is up to the host-dependent OSL to cast the139* native thread ID type to a u64 (in acpi_os_get_thread_id).140*/141#define acpi_thread_id u64142143/*******************************************************************************144*145* Types specific to 64-bit targets146*147******************************************************************************/148149#if ACPI_MACHINE_WIDTH == 64150151/*! [Begin] no source code translation (keep the typedefs as-is) */152153typedef unsigned int UINT32;154typedef int INT32;155156/*! [End] no source code translation !*/157158typedef s64 acpi_native_int;159160typedef u64 acpi_size;161typedef u64 acpi_io_address;162typedef u64 acpi_physical_address;163164#define ACPI_MAX_PTR ACPI_UINT64_MAX165#define ACPI_SIZE_MAX ACPI_UINT64_MAX166167#define ACPI_USE_NATIVE_DIVIDE /* Has native 64-bit integer support */168169/*170* In the case of the Itanium Processor Family (IPF), the hardware does not171* support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag172* to indicate that special precautions must be taken to avoid alignment faults.173* (IA64 or ia64 is currently used by existing compilers to indicate IPF.)174*175* Note: Em64_t and other X86-64 processors support misaligned transfers,176* so there is no need to define this flag.177*/178#if defined (__IA64__) || defined (__ia64__)179#define ACPI_MISALIGNMENT_NOT_SUPPORTED180#endif181182/*******************************************************************************183*184* Types specific to 32-bit targets185*186******************************************************************************/187188#elif ACPI_MACHINE_WIDTH == 32189190/*! [Begin] no source code translation (keep the typedefs as-is) */191192typedef unsigned int UINT32;193typedef int INT32;194195/*! [End] no source code translation !*/196197typedef s32 acpi_native_int;198199typedef u32 acpi_size;200typedef u32 acpi_io_address;201typedef u32 acpi_physical_address;202203#define ACPI_MAX_PTR ACPI_UINT32_MAX204#define ACPI_SIZE_MAX ACPI_UINT32_MAX205206#else207208/* ACPI_MACHINE_WIDTH must be either 64 or 32 */209210#error unknown ACPI_MACHINE_WIDTH211#endif212213/*******************************************************************************214*215* OS-dependent types216*217* If the defaults below are not appropriate for the host system, they can218* be defined in the OS-specific header, and this will take precedence.219*220******************************************************************************/221222/* Flags for acpi_os_acquire_lock/acpi_os_release_lock */223224#ifndef acpi_cpu_flags225#define acpi_cpu_flags acpi_size226#endif227228/* Object returned from acpi_os_create_cache */229230#ifndef acpi_cache_t231#ifdef ACPI_USE_LOCAL_CACHE232#define acpi_cache_t struct acpi_memory_list233#else234#define acpi_cache_t void *235#endif236#endif237238/*239* Synchronization objects - Mutexes, Semaphores, and spin_locks240*/241#if (ACPI_MUTEX_TYPE == ACPI_BINARY_SEMAPHORE)242/*243* These macros are used if the host OS does not support a mutex object.244* Map the OSL Mutex interfaces to binary semaphores.245*/246#define acpi_mutex acpi_semaphore247#define acpi_os_create_mutex(out_handle) acpi_os_create_semaphore (1, 1, out_handle)248#define acpi_os_delete_mutex(handle) (void) acpi_os_delete_semaphore (handle)249#define acpi_os_acquire_mutex(handle,time) acpi_os_wait_semaphore (handle, 1, time)250#define acpi_os_release_mutex(handle) (void) acpi_os_signal_semaphore (handle, 1)251#endif252253/* Configurable types for synchronization objects */254255#ifndef acpi_spinlock256#define acpi_spinlock void *257#endif258259#ifndef acpi_semaphore260#define acpi_semaphore void *261#endif262263#ifndef acpi_mutex264#define acpi_mutex void *265#endif266267/*******************************************************************************268*269* Compiler-dependent types270*271* If the defaults below are not appropriate for the host compiler, they can272* be defined in the compiler-specific header, and this will take precedence.273*274******************************************************************************/275276/* Use C99 uintptr_t for pointer casting if available, "void *" otherwise */277278#ifndef acpi_uintptr_t279#define acpi_uintptr_t void *280#endif281282/*283* ACPI_PRINTF_LIKE is used to tag functions as "printf-like" because284* some compilers can catch printf format string problems285*/286#ifndef ACPI_PRINTF_LIKE287#define ACPI_PRINTF_LIKE(c)288#endif289290/*291* Some compilers complain about unused variables. Sometimes we don't want to292* use all the variables (for example, _acpi_module_name). This allows us293* to tell the compiler in a per-variable manner that a variable294* is unused295*/296#ifndef ACPI_UNUSED_VAR297#define ACPI_UNUSED_VAR298#endif299300/*301* All ACPICA functions that are available to the rest of the kernel are302* tagged with this macro which can be defined as appropriate for the host.303*/304#ifndef ACPI_EXPORT_SYMBOL305#define ACPI_EXPORT_SYMBOL(symbol)306#endif307308/******************************************************************************309*310* ACPI Specification constants (Do not change unless the specification changes)311*312*****************************************************************************/313314/* Number of distinct FADT-based GPE register blocks (GPE0 and GPE1) */315316#define ACPI_MAX_GPE_BLOCKS 2317318/* Default ACPI register widths */319320#define ACPI_GPE_REGISTER_WIDTH 8321#define ACPI_PM1_REGISTER_WIDTH 16322#define ACPI_PM2_REGISTER_WIDTH 8323#define ACPI_PM_TIMER_WIDTH 32324325/* Names within the namespace are 4 bytes long */326327#define ACPI_NAME_SIZE 4328#define ACPI_PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 char for separator */329#define ACPI_PATH_SEPARATOR '.'330331/* Sizes for ACPI table headers */332333#define ACPI_OEM_ID_SIZE 6334#define ACPI_OEM_TABLE_ID_SIZE 8335336/* ACPI/PNP hardware IDs */337338#define PCI_ROOT_HID_STRING "PNP0A03"339#define PCI_EXPRESS_ROOT_HID_STRING "PNP0A08"340341/* PM Timer ticks per second (HZ) */342343#define PM_TIMER_FREQUENCY 3579545344345/*******************************************************************************346*347* Independent types348*349******************************************************************************/350351/* Logical defines and NULL */352353#ifdef FALSE354#undef FALSE355#endif356#define FALSE (1 == 0)357358#ifdef TRUE359#undef TRUE360#endif361#define TRUE (1 == 1)362363#ifndef NULL364#define NULL (void *) 0365#endif366367/*368* Miscellaneous types369*/370typedef u32 acpi_status; /* All ACPI Exceptions */371typedef u32 acpi_name; /* 4-byte ACPI name */372typedef char *acpi_string; /* Null terminated ASCII string */373typedef void *acpi_handle; /* Actually a ptr to a NS Node */374375/* Owner IDs are used to track namespace nodes for selective deletion */376377typedef u8 acpi_owner_id;378#define ACPI_OWNER_ID_MAX 0xFF379380#define ACPI_INTEGER_BIT_SIZE 64381#define ACPI_MAX_DECIMAL_DIGITS 20 /* 2^64 = 18,446,744,073,709,551,616 */382383#if ACPI_MACHINE_WIDTH == 64384#define ACPI_USE_NATIVE_DIVIDE /* Use compiler native 64-bit divide */385#endif386387#define ACPI_MAX64_DECIMAL_DIGITS 20388#define ACPI_MAX32_DECIMAL_DIGITS 10389#define ACPI_MAX16_DECIMAL_DIGITS 5390#define ACPI_MAX8_DECIMAL_DIGITS 3391392/* PM Timer ticks per second (HZ) */393394#define PM_TIMER_FREQUENCY 3579545395396/*397* Constants with special meanings398*/399#define ACPI_ROOT_OBJECT ACPI_ADD_PTR (acpi_handle, NULL, ACPI_MAX_PTR)400#define ACPI_WAIT_FOREVER 0xFFFF /* u16, as per ACPI spec */401#define ACPI_DO_NOT_WAIT 0402403/*404* Obsolete: Acpi integer width. In ACPI version 1 (1996), integers are 32 bits.405* In ACPI version 2 (2000) and later, integers are 64 bits. Note that this406* pertains to the ACPI integer type only, not to other integers used in the407* implementation of the ACPICA subsystem.408*409* 01/2010: This type is obsolete and has been removed from the entire ACPICA410* code base. It remains here for compatibility with device drivers that use411* the type. However, it will be removed in the future.412*/413typedef u64 acpi_integer;414#define ACPI_INTEGER_MAX ACPI_UINT64_MAX415416/*******************************************************************************417*418* Commonly used macros419*420******************************************************************************/421422/* Data manipulation */423424#define ACPI_LOBYTE(integer) ((u8) (u16)(integer))425#define ACPI_HIBYTE(integer) ((u8) (((u16)(integer)) >> 8))426#define ACPI_LOWORD(integer) ((u16) (u32)(integer))427#define ACPI_HIWORD(integer) ((u16)(((u32)(integer)) >> 16))428#define ACPI_LODWORD(integer64) ((u32) (u64)(integer64))429#define ACPI_HIDWORD(integer64) ((u32)(((u64)(integer64)) >> 32))430431#define ACPI_SET_BIT(target,bit) ((target) |= (bit))432#define ACPI_CLEAR_BIT(target,bit) ((target) &= ~(bit))433#define ACPI_MIN(a,b) (((a)<(b))?(a):(b))434#define ACPI_MAX(a,b) (((a)>(b))?(a):(b))435436/* Size calculation */437438#define ACPI_ARRAY_LENGTH(x) (sizeof(x) / sizeof((x)[0]))439440/* Pointer manipulation */441442#define ACPI_CAST_PTR(t, p) ((t *) (acpi_uintptr_t) (p))443#define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (acpi_uintptr_t) (p))444#define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8, (a)) + (acpi_size)(b)))445#define ACPI_PTR_DIFF(a, b) (acpi_size) (ACPI_CAST_PTR (u8, (a)) - ACPI_CAST_PTR (u8, (b)))446447/* Pointer/Integer type conversions */448449#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) NULL,(acpi_size) i)450#define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) NULL)451#define ACPI_OFFSET(d, f) (acpi_size) ACPI_PTR_DIFF (&(((d *)0)->f), (void *) NULL)452#define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i)453#define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i)454455#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED456#define ACPI_COMPARE_NAME(a,b) (*ACPI_CAST_PTR (u32, (a)) == *ACPI_CAST_PTR (u32, (b)))457#else458#define ACPI_COMPARE_NAME(a,b) (!ACPI_STRNCMP (ACPI_CAST_PTR (char, (a)), ACPI_CAST_PTR (char, (b)), ACPI_NAME_SIZE))459#endif460461/*******************************************************************************462*463* Miscellaneous constants464*465******************************************************************************/466467/*468* Initialization sequence469*/470#define ACPI_FULL_INITIALIZATION 0x00471#define ACPI_NO_ADDRESS_SPACE_INIT 0x01472#define ACPI_NO_HARDWARE_INIT 0x02473#define ACPI_NO_EVENT_INIT 0x04474#define ACPI_NO_HANDLER_INIT 0x08475#define ACPI_NO_ACPI_ENABLE 0x10476#define ACPI_NO_DEVICE_INIT 0x20477#define ACPI_NO_OBJECT_INIT 0x40478479/*480* Initialization state481*/482#define ACPI_SUBSYSTEM_INITIALIZE 0x01483#define ACPI_INITIALIZED_OK 0x02484485/*486* Power state values487*/488#define ACPI_STATE_UNKNOWN (u8) 0xFF489490#define ACPI_STATE_S0 (u8) 0491#define ACPI_STATE_S1 (u8) 1492#define ACPI_STATE_S2 (u8) 2493#define ACPI_STATE_S3 (u8) 3494#define ACPI_STATE_S4 (u8) 4495#define ACPI_STATE_S5 (u8) 5496#define ACPI_S_STATES_MAX ACPI_STATE_S5497#define ACPI_S_STATE_COUNT 6498499#define ACPI_STATE_D0 (u8) 0500#define ACPI_STATE_D1 (u8) 1501#define ACPI_STATE_D2 (u8) 2502#define ACPI_STATE_D3 (u8) 3503#define ACPI_STATE_D3_COLD (u8) 4504#define ACPI_D_STATES_MAX ACPI_STATE_D3_COLD505#define ACPI_D_STATE_COUNT 5506507#define ACPI_STATE_C0 (u8) 0508#define ACPI_STATE_C1 (u8) 1509#define ACPI_STATE_C2 (u8) 2510#define ACPI_STATE_C3 (u8) 3511#define ACPI_C_STATES_MAX ACPI_STATE_C3512#define ACPI_C_STATE_COUNT 4513514/*515* Sleep type invalid value516*/517#define ACPI_SLEEP_TYPE_MAX 0x7518#define ACPI_SLEEP_TYPE_INVALID 0xFF519520/*521* Standard notify values522*/523#define ACPI_NOTIFY_BUS_CHECK (u8) 0x00524#define ACPI_NOTIFY_DEVICE_CHECK (u8) 0x01525#define ACPI_NOTIFY_DEVICE_WAKE (u8) 0x02526#define ACPI_NOTIFY_EJECT_REQUEST (u8) 0x03527#define ACPI_NOTIFY_DEVICE_CHECK_LIGHT (u8) 0x04528#define ACPI_NOTIFY_FREQUENCY_MISMATCH (u8) 0x05529#define ACPI_NOTIFY_BUS_MODE_MISMATCH (u8) 0x06530#define ACPI_NOTIFY_POWER_FAULT (u8) 0x07531#define ACPI_NOTIFY_CAPABILITIES_CHECK (u8) 0x08532#define ACPI_NOTIFY_DEVICE_PLD_CHECK (u8) 0x09533#define ACPI_NOTIFY_RESERVED (u8) 0x0A534#define ACPI_NOTIFY_LOCALITY_UPDATE (u8) 0x0B535536#define ACPI_NOTIFY_MAX 0x0B537538/*539* Types associated with ACPI names and objects. The first group of540* values (up to ACPI_TYPE_EXTERNAL_MAX) correspond to the definition541* of the ACPI object_type() operator (See the ACPI Spec). Therefore,542* only add to the first group if the spec changes.543*544* NOTE: Types must be kept in sync with the global acpi_ns_properties545* and acpi_ns_type_names arrays.546*/547typedef u32 acpi_object_type;548549#define ACPI_TYPE_ANY 0x00550#define ACPI_TYPE_INTEGER 0x01 /* Byte/Word/Dword/Zero/One/Ones */551#define ACPI_TYPE_STRING 0x02552#define ACPI_TYPE_BUFFER 0x03553#define ACPI_TYPE_PACKAGE 0x04 /* byte_const, multiple data_term/Constant/super_name */554#define ACPI_TYPE_FIELD_UNIT 0x05555#define ACPI_TYPE_DEVICE 0x06 /* Name, multiple Node */556#define ACPI_TYPE_EVENT 0x07557#define ACPI_TYPE_METHOD 0x08 /* Name, byte_const, multiple Code */558#define ACPI_TYPE_MUTEX 0x09559#define ACPI_TYPE_REGION 0x0A560#define ACPI_TYPE_POWER 0x0B /* Name,byte_const,word_const,multi Node */561#define ACPI_TYPE_PROCESSOR 0x0C /* Name,byte_const,Dword_const,byte_const,multi nm_o */562#define ACPI_TYPE_THERMAL 0x0D /* Name, multiple Node */563#define ACPI_TYPE_BUFFER_FIELD 0x0E564#define ACPI_TYPE_DDB_HANDLE 0x0F565#define ACPI_TYPE_DEBUG_OBJECT 0x10566567#define ACPI_TYPE_EXTERNAL_MAX 0x10568569/*570* These are object types that do not map directly to the ACPI571* object_type() operator. They are used for various internal purposes only.572* If new predefined ACPI_TYPEs are added (via the ACPI specification), these573* internal types must move upwards. (There is code that depends on these574* values being contiguous with the external types above.)575*/576#define ACPI_TYPE_LOCAL_REGION_FIELD 0x11577#define ACPI_TYPE_LOCAL_BANK_FIELD 0x12578#define ACPI_TYPE_LOCAL_INDEX_FIELD 0x13579#define ACPI_TYPE_LOCAL_REFERENCE 0x14 /* Arg#, Local#, Name, Debug, ref_of, Index */580#define ACPI_TYPE_LOCAL_ALIAS 0x15581#define ACPI_TYPE_LOCAL_METHOD_ALIAS 0x16582#define ACPI_TYPE_LOCAL_NOTIFY 0x17583#define ACPI_TYPE_LOCAL_ADDRESS_HANDLER 0x18584#define ACPI_TYPE_LOCAL_RESOURCE 0x19585#define ACPI_TYPE_LOCAL_RESOURCE_FIELD 0x1A586#define ACPI_TYPE_LOCAL_SCOPE 0x1B /* 1 Name, multiple object_list Nodes */587588#define ACPI_TYPE_NS_NODE_MAX 0x1B /* Last typecode used within a NS Node */589590/*591* These are special object types that never appear in592* a Namespace node, only in a union acpi_operand_object593*/594#define ACPI_TYPE_LOCAL_EXTRA 0x1C595#define ACPI_TYPE_LOCAL_DATA 0x1D596597#define ACPI_TYPE_LOCAL_MAX 0x1D598599/* All types above here are invalid */600601#define ACPI_TYPE_INVALID 0x1E602#define ACPI_TYPE_NOT_FOUND 0xFF603604#define ACPI_NUM_NS_TYPES (ACPI_TYPE_INVALID + 1)605606/*607* All I/O608*/609#define ACPI_READ 0610#define ACPI_WRITE 1611#define ACPI_IO_MASK 1612613/*614* Event Types: Fixed & General Purpose615*/616typedef u32 acpi_event_type;617618/*619* Fixed events620*/621#define ACPI_EVENT_PMTIMER 0622#define ACPI_EVENT_GLOBAL 1623#define ACPI_EVENT_POWER_BUTTON 2624#define ACPI_EVENT_SLEEP_BUTTON 3625#define ACPI_EVENT_RTC 4626#define ACPI_EVENT_MAX 4627#define ACPI_NUM_FIXED_EVENTS ACPI_EVENT_MAX + 1628629/*630* Event Status - Per event631* -------------632* The encoding of acpi_event_status is illustrated below.633* Note that a set bit (1) indicates the property is TRUE634* (e.g. if bit 0 is set then the event is enabled).635* +-------------+-+-+-+636* | Bits 31:3 |2|1|0|637* +-------------+-+-+-+638* | | | |639* | | | +- Enabled?640* | | +--- Enabled for wake?641* | +----- Set?642* +----------- <Reserved>643*/644typedef u32 acpi_event_status;645646#define ACPI_EVENT_FLAG_DISABLED (acpi_event_status) 0x00647#define ACPI_EVENT_FLAG_ENABLED (acpi_event_status) 0x01648#define ACPI_EVENT_FLAG_WAKE_ENABLED (acpi_event_status) 0x02649#define ACPI_EVENT_FLAG_SET (acpi_event_status) 0x04650#define ACPI_EVENT_FLAG_HANDLE (acpi_event_status) 0x08651652/*653* General Purpose Events (GPE)654*/655#define ACPI_GPE_INVALID 0xFF656#define ACPI_GPE_MAX 0xFF657#define ACPI_NUM_GPE 256658659/* Actions for acpi_set_gpe_wake_mask, acpi_hw_low_set_gpe */660661#define ACPI_GPE_ENABLE 0662#define ACPI_GPE_DISABLE 1663#define ACPI_GPE_CONDITIONAL_ENABLE 2664665/*666* GPE info flags - Per GPE667* +-------+-+-+---+668* | 7:4 |3|2|1:0|669* +-------+-+-+---+670* | | | |671* | | | +-- Type of dispatch:to method, handler, notify, or none672* | | +----- Interrupt type: edge or level triggered673* | +------- Is a Wake GPE674* +------------ <Reserved>675*/676#define ACPI_GPE_DISPATCH_NONE (u8) 0x00677#define ACPI_GPE_DISPATCH_METHOD (u8) 0x01678#define ACPI_GPE_DISPATCH_HANDLER (u8) 0x02679#define ACPI_GPE_DISPATCH_NOTIFY (u8) 0x03680#define ACPI_GPE_DISPATCH_MASK (u8) 0x03681682#define ACPI_GPE_LEVEL_TRIGGERED (u8) 0x04683#define ACPI_GPE_EDGE_TRIGGERED (u8) 0x00684#define ACPI_GPE_XRUPT_TYPE_MASK (u8) 0x04685686#define ACPI_GPE_CAN_WAKE (u8) 0x08687688/*689* Flags for GPE and Lock interfaces690*/691#define ACPI_NOT_ISR 0x1692#define ACPI_ISR 0x0693694/* Notify types */695696#define ACPI_SYSTEM_NOTIFY 0x1697#define ACPI_DEVICE_NOTIFY 0x2698#define ACPI_ALL_NOTIFY (ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY)699#define ACPI_MAX_NOTIFY_HANDLER_TYPE 0x3700701#define ACPI_MAX_SYS_NOTIFY 0x7f702703/* Address Space (Operation Region) Types */704705typedef u8 acpi_adr_space_type;706707#define ACPI_ADR_SPACE_SYSTEM_MEMORY (acpi_adr_space_type) 0708#define ACPI_ADR_SPACE_SYSTEM_IO (acpi_adr_space_type) 1709#define ACPI_ADR_SPACE_PCI_CONFIG (acpi_adr_space_type) 2710#define ACPI_ADR_SPACE_EC (acpi_adr_space_type) 3711#define ACPI_ADR_SPACE_SMBUS (acpi_adr_space_type) 4712#define ACPI_ADR_SPACE_CMOS (acpi_adr_space_type) 5713#define ACPI_ADR_SPACE_PCI_BAR_TARGET (acpi_adr_space_type) 6714#define ACPI_ADR_SPACE_IPMI (acpi_adr_space_type) 7715716#define ACPI_NUM_PREDEFINED_REGIONS 8717718/*719* Special Address Spaces720*721* Note: A Data Table region is a special type of operation region722* that has its own AML opcode. However, internally, the AML723* interpreter simply creates an operation region with an an address724* space type of ACPI_ADR_SPACE_DATA_TABLE.725*/726#define ACPI_ADR_SPACE_DATA_TABLE (acpi_adr_space_type) 0x7E /* Internal to ACPICA only */727#define ACPI_ADR_SPACE_FIXED_HARDWARE (acpi_adr_space_type) 0x7F728729/* Values for _REG connection code */730731#define ACPI_REG_DISCONNECT 0732#define ACPI_REG_CONNECT 1733734/*735* bit_register IDs736*737* These values are intended to be used by the hardware interfaces738* and are mapped to individual bitfields defined within the ACPI739* registers. See the acpi_gbl_bit_register_info global table in utglobal.c740* for this mapping.741*/742743/* PM1 Status register */744745#define ACPI_BITREG_TIMER_STATUS 0x00746#define ACPI_BITREG_BUS_MASTER_STATUS 0x01747#define ACPI_BITREG_GLOBAL_LOCK_STATUS 0x02748#define ACPI_BITREG_POWER_BUTTON_STATUS 0x03749#define ACPI_BITREG_SLEEP_BUTTON_STATUS 0x04750#define ACPI_BITREG_RT_CLOCK_STATUS 0x05751#define ACPI_BITREG_WAKE_STATUS 0x06752#define ACPI_BITREG_PCIEXP_WAKE_STATUS 0x07753754/* PM1 Enable register */755756#define ACPI_BITREG_TIMER_ENABLE 0x08757#define ACPI_BITREG_GLOBAL_LOCK_ENABLE 0x09758#define ACPI_BITREG_POWER_BUTTON_ENABLE 0x0A759#define ACPI_BITREG_SLEEP_BUTTON_ENABLE 0x0B760#define ACPI_BITREG_RT_CLOCK_ENABLE 0x0C761#define ACPI_BITREG_PCIEXP_WAKE_DISABLE 0x0D762763/* PM1 Control register */764765#define ACPI_BITREG_SCI_ENABLE 0x0E766#define ACPI_BITREG_BUS_MASTER_RLD 0x0F767#define ACPI_BITREG_GLOBAL_LOCK_RELEASE 0x10768#define ACPI_BITREG_SLEEP_TYPE 0x11769#define ACPI_BITREG_SLEEP_ENABLE 0x12770771/* PM2 Control register */772773#define ACPI_BITREG_ARB_DISABLE 0x13774775#define ACPI_BITREG_MAX 0x13776#define ACPI_NUM_BITREG ACPI_BITREG_MAX + 1777778/* Status register values. A 1 clears a status bit. 0 = no effect */779780#define ACPI_CLEAR_STATUS 1781782/* Enable and Control register values */783784#define ACPI_ENABLE_EVENT 1785#define ACPI_DISABLE_EVENT 0786787/*788* External ACPI object definition789*/790791/*792* Note: Type == ACPI_TYPE_ANY (0) is used to indicate a NULL package element793* or an unresolved named reference.794*/795union acpi_object {796acpi_object_type type; /* See definition of acpi_ns_type for values */797struct {798acpi_object_type type; /* ACPI_TYPE_INTEGER */799u64 value; /* The actual number */800} integer;801802struct {803acpi_object_type type; /* ACPI_TYPE_STRING */804u32 length; /* # of bytes in string, excluding trailing null */805char *pointer; /* points to the string value */806} string;807808struct {809acpi_object_type type; /* ACPI_TYPE_BUFFER */810u32 length; /* # of bytes in buffer */811u8 *pointer; /* points to the buffer */812} buffer;813814struct {815acpi_object_type type; /* ACPI_TYPE_PACKAGE */816u32 count; /* # of elements in package */817union acpi_object *elements; /* Pointer to an array of ACPI_OBJECTs */818} package;819820struct {821acpi_object_type type; /* ACPI_TYPE_LOCAL_REFERENCE */822acpi_object_type actual_type; /* Type associated with the Handle */823acpi_handle handle; /* object reference */824} reference;825826struct {827acpi_object_type type; /* ACPI_TYPE_PROCESSOR */828u32 proc_id;829acpi_io_address pblk_address;830u32 pblk_length;831} processor;832833struct {834acpi_object_type type; /* ACPI_TYPE_POWER */835u32 system_level;836u32 resource_order;837} power_resource;838};839840/*841* List of objects, used as a parameter list for control method evaluation842*/843struct acpi_object_list {844u32 count;845union acpi_object *pointer;846};847848/*849* Miscellaneous common Data Structures used by the interfaces850*/851#define ACPI_NO_BUFFER 0852#define ACPI_ALLOCATE_BUFFER (acpi_size) (-1)853#define ACPI_ALLOCATE_LOCAL_BUFFER (acpi_size) (-2)854855struct acpi_buffer {856acpi_size length; /* Length in bytes of the buffer */857void *pointer; /* pointer to buffer */858};859860/*861* name_type for acpi_get_name862*/863#define ACPI_FULL_PATHNAME 0864#define ACPI_SINGLE_NAME 1865#define ACPI_NAME_TYPE_MAX 1866867/*868* Predefined Namespace items869*/870struct acpi_predefined_names {871char *name;872u8 type;873char *val;874};875876/*877* Structure and flags for acpi_get_system_info878*/879#define ACPI_SYS_MODE_UNKNOWN 0x0000880#define ACPI_SYS_MODE_ACPI 0x0001881#define ACPI_SYS_MODE_LEGACY 0x0002882#define ACPI_SYS_MODES_MASK 0x0003883884/*885* System info returned by acpi_get_system_info()886*/887struct acpi_system_info {888u32 acpi_ca_version;889u32 flags;890u32 timer_resolution;891u32 reserved1;892u32 reserved2;893u32 debug_level;894u32 debug_layer;895};896897/* Table Event Types */898899#define ACPI_TABLE_EVENT_LOAD 0x0900#define ACPI_TABLE_EVENT_UNLOAD 0x1901#define ACPI_NUM_TABLE_EVENTS 2902903/*904* Types specific to the OS service interfaces905*/906typedef u32(ACPI_SYSTEM_XFACE * acpi_osd_handler) (void *context);907908typedef void909(ACPI_SYSTEM_XFACE * acpi_osd_exec_callback) (void *context);910911/*912* Various handlers and callback procedures913*/914typedef915void (*ACPI_GBL_EVENT_HANDLER) (u32 event_type,916acpi_handle device,917u32 event_number, void *context);918919#define ACPI_EVENT_TYPE_GPE 0920#define ACPI_EVENT_TYPE_FIXED 1921922typedef u32(*acpi_event_handler) (void *context);923924typedef925u32 (*acpi_gpe_handler) (acpi_handle gpe_device, u32 gpe_number, void *context);926927typedef928void (*acpi_notify_handler) (acpi_handle device, u32 value, void *context);929930typedef931void (*acpi_object_handler) (acpi_handle object, void *data);932933typedef acpi_status(*acpi_init_handler) (acpi_handle object, u32 function);934935#define ACPI_INIT_DEVICE_INI 1936937typedef938acpi_status(*acpi_exception_handler) (acpi_status aml_status,939acpi_name name,940u16 opcode,941u32 aml_offset, void *context);942943/* Table Event handler (Load, load_table, etc.) and types */944945typedef946acpi_status(*acpi_tbl_handler) (u32 event, void *table, void *context);947948/* Address Spaces (For Operation Regions) */949950typedef951acpi_status(*acpi_adr_space_handler) (u32 function,952acpi_physical_address address,953u32 bit_width,954u64 *value,955void *handler_context,956void *region_context);957958#define ACPI_DEFAULT_HANDLER NULL959960typedef961acpi_status(*acpi_adr_space_setup) (acpi_handle region_handle,962u32 function,963void *handler_context,964void **region_context);965966#define ACPI_REGION_ACTIVATE 0967#define ACPI_REGION_DEACTIVATE 1968969typedef970acpi_status(*acpi_walk_callback) (acpi_handle object,971u32 nesting_level,972void *context, void **return_value);973974typedef975u32 (*acpi_interface_handler) (acpi_string interface_name, u32 supported);976977/* Interrupt handler return values */978979#define ACPI_INTERRUPT_NOT_HANDLED 0x00980#define ACPI_INTERRUPT_HANDLED 0x01981982/* GPE handler return values */983984#define ACPI_REENABLE_GPE 0x80985986/* Length of 32-bit EISAID values when converted back to a string */987988#define ACPI_EISAID_STRING_SIZE 8 /* Includes null terminator */989990/* Length of UUID (string) values */991992#define ACPI_UUID_LENGTH 16993994/* Structures used for device/processor HID, UID, CID */995996struct acpica_device_id {997u32 length; /* Length of string + null */998char *string;999};10001001struct acpica_device_id_list {1002u32 count; /* Number of IDs in Ids array */1003u32 list_size; /* Size of list, including ID strings */1004struct acpica_device_id ids[1]; /* ID array */1005};10061007/*1008* Structure returned from acpi_get_object_info.1009* Optimized for both 32- and 64-bit builds1010*/1011struct acpi_device_info {1012u32 info_size; /* Size of info, including ID strings */1013u32 name; /* ACPI object Name */1014acpi_object_type type; /* ACPI object Type */1015u8 param_count; /* If a method, required parameter count */1016u8 valid; /* Indicates which optional fields are valid */1017u8 flags; /* Miscellaneous info */1018u8 highest_dstates[4]; /* _sx_d values: 0xFF indicates not valid */1019u8 lowest_dstates[5]; /* _sx_w values: 0xFF indicates not valid */1020u32 current_status; /* _STA value */1021u64 address; /* _ADR value */1022struct acpica_device_id hardware_id; /* _HID value */1023struct acpica_device_id unique_id; /* _UID value */1024struct acpica_device_id_list compatible_id_list; /* _CID list <must be last> */1025};10261027/* Values for Flags field above (acpi_get_object_info) */10281029#define ACPI_PCI_ROOT_BRIDGE 0x0110301031/* Flags for Valid field above (acpi_get_object_info) */10321033#define ACPI_VALID_STA 0x011034#define ACPI_VALID_ADR 0x021035#define ACPI_VALID_HID 0x041036#define ACPI_VALID_UID 0x081037#define ACPI_VALID_CID 0x101038#define ACPI_VALID_SXDS 0x201039#define ACPI_VALID_SXWS 0x4010401041/* Flags for _STA method */10421043#define ACPI_STA_DEVICE_PRESENT 0x011044#define ACPI_STA_DEVICE_ENABLED 0x021045#define ACPI_STA_DEVICE_UI 0x041046#define ACPI_STA_DEVICE_FUNCTIONING 0x081047#define ACPI_STA_DEVICE_OK 0x08 /* Synonym */1048#define ACPI_STA_BATTERY_PRESENT 0x1010491050/* Context structs for address space handlers */10511052struct acpi_pci_id {1053u16 segment;1054u16 bus;1055u16 device;1056u16 function;1057};10581059struct acpi_mem_space_context {1060u32 length;1061acpi_physical_address address;1062acpi_physical_address mapped_physical_address;1063u8 *mapped_logical_address;1064acpi_size mapped_length;1065};10661067/*1068* struct acpi_memory_list is used only if the ACPICA local cache is enabled1069*/1070struct acpi_memory_list {1071char *list_name;1072void *list_head;1073u16 object_size;1074u16 max_depth;1075u16 current_depth;1076u16 link_offset;10771078#ifdef ACPI_DBG_TRACK_ALLOCATIONS10791080/* Statistics for debug memory tracking only */10811082u32 total_allocated;1083u32 total_freed;1084u32 max_occupied;1085u32 total_size;1086u32 current_total_size;1087u32 requests;1088u32 hits;1089#endif1090};10911092#endif /* __ACTYPES_H__ */109310941095