162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 262306a36Sopenharmony_ci/****************************************************************************** 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Name: aclocal.h - Internal data types used across the ACPI subsystem 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 2000 - 2023, Intel Corp. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci *****************************************************************************/ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef __ACLOCAL_H__ 1162306a36Sopenharmony_ci#define __ACLOCAL_H__ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* acpisrc:struct_defs -- for acpisrc conversion */ 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#define ACPI_SERIALIZED 0xFF 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_citypedef u32 acpi_mutex_handle; 1862306a36Sopenharmony_ci#define ACPI_GLOBAL_LOCK (acpi_semaphore) (-1) 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci/* Total number of aml opcodes defined */ 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#define AML_NUM_OPCODES 0x83 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci/* Forward declarations */ 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cistruct acpi_walk_state; 2762306a36Sopenharmony_cistruct acpi_obj_mutex; 2862306a36Sopenharmony_ciunion acpi_parse_object; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci/***************************************************************************** 3162306a36Sopenharmony_ci * 3262306a36Sopenharmony_ci * Mutex typedefs and structs 3362306a36Sopenharmony_ci * 3462306a36Sopenharmony_ci ****************************************************************************/ 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci/* 3762306a36Sopenharmony_ci * Predefined handles for the mutex objects used within the subsystem 3862306a36Sopenharmony_ci * All mutex objects are automatically created by acpi_ut_mutex_initialize. 3962306a36Sopenharmony_ci * 4062306a36Sopenharmony_ci * The acquire/release ordering protocol is implied via this list. Mutexes 4162306a36Sopenharmony_ci * with a lower value must be acquired before mutexes with a higher value. 4262306a36Sopenharmony_ci * 4362306a36Sopenharmony_ci * NOTE: any changes here must be reflected in the acpi_gbl_mutex_names 4462306a36Sopenharmony_ci * table below also! 4562306a36Sopenharmony_ci */ 4662306a36Sopenharmony_ci#define ACPI_MTX_INTERPRETER 0 /* AML Interpreter, main lock */ 4762306a36Sopenharmony_ci#define ACPI_MTX_NAMESPACE 1 /* ACPI Namespace */ 4862306a36Sopenharmony_ci#define ACPI_MTX_TABLES 2 /* Data for ACPI tables */ 4962306a36Sopenharmony_ci#define ACPI_MTX_EVENTS 3 /* Data for ACPI events */ 5062306a36Sopenharmony_ci#define ACPI_MTX_CACHES 4 /* Internal caches, general purposes */ 5162306a36Sopenharmony_ci#define ACPI_MTX_MEMORY 5 /* Debug memory tracking lists */ 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci#define ACPI_MAX_MUTEX 5 5462306a36Sopenharmony_ci#define ACPI_NUM_MUTEX (ACPI_MAX_MUTEX+1) 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci/* Lock structure for reader/writer interfaces */ 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_cistruct acpi_rw_lock { 5962306a36Sopenharmony_ci acpi_mutex writer_mutex; 6062306a36Sopenharmony_ci acpi_mutex reader_mutex; 6162306a36Sopenharmony_ci u32 num_readers; 6262306a36Sopenharmony_ci}; 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci/* 6562306a36Sopenharmony_ci * Predefined handles for spinlocks used within the subsystem. 6662306a36Sopenharmony_ci * These spinlocks are created by acpi_ut_mutex_initialize 6762306a36Sopenharmony_ci */ 6862306a36Sopenharmony_ci#define ACPI_LOCK_GPES 0 6962306a36Sopenharmony_ci#define ACPI_LOCK_HARDWARE 1 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci#define ACPI_MAX_LOCK 1 7262306a36Sopenharmony_ci#define ACPI_NUM_LOCK (ACPI_MAX_LOCK+1) 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci/* This Thread ID means that the mutex is not in use (unlocked) */ 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci#define ACPI_MUTEX_NOT_ACQUIRED ((acpi_thread_id) 0) 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci/* This Thread ID means an invalid thread ID */ 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci#ifdef ACPI_OS_INVALID_THREAD_ID 8162306a36Sopenharmony_ci#define ACPI_INVALID_THREAD_ID ACPI_OS_INVALID_THREAD_ID 8262306a36Sopenharmony_ci#else 8362306a36Sopenharmony_ci#define ACPI_INVALID_THREAD_ID ((acpi_thread_id) 0xFFFFFFFF) 8462306a36Sopenharmony_ci#endif 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci/* Table for the global mutexes */ 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_cistruct acpi_mutex_info { 8962306a36Sopenharmony_ci acpi_mutex mutex; 9062306a36Sopenharmony_ci u32 use_count; 9162306a36Sopenharmony_ci acpi_thread_id thread_id; 9262306a36Sopenharmony_ci}; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci/* Lock flag parameter for various interfaces */ 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci#define ACPI_MTX_DO_NOT_LOCK 0 9762306a36Sopenharmony_ci#define ACPI_MTX_LOCK 1 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci/* Field access granularities */ 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci#define ACPI_FIELD_BYTE_GRANULARITY 1 10262306a36Sopenharmony_ci#define ACPI_FIELD_WORD_GRANULARITY 2 10362306a36Sopenharmony_ci#define ACPI_FIELD_DWORD_GRANULARITY 4 10462306a36Sopenharmony_ci#define ACPI_FIELD_QWORD_GRANULARITY 8 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci#define ACPI_ENTRY_NOT_FOUND NULL 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci/***************************************************************************** 10962306a36Sopenharmony_ci * 11062306a36Sopenharmony_ci * Namespace typedefs and structs 11162306a36Sopenharmony_ci * 11262306a36Sopenharmony_ci ****************************************************************************/ 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci/* Operational modes of the AML interpreter/scanner */ 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_citypedef enum { 11762306a36Sopenharmony_ci ACPI_IMODE_LOAD_PASS1 = 0x01, 11862306a36Sopenharmony_ci ACPI_IMODE_LOAD_PASS2 = 0x02, 11962306a36Sopenharmony_ci ACPI_IMODE_EXECUTE = 0x03 12062306a36Sopenharmony_ci} acpi_interpreter_mode; 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci/* 12362306a36Sopenharmony_ci * The Namespace Node describes a named object that appears in the AML. 12462306a36Sopenharmony_ci * descriptor_type is used to differentiate between internal descriptors. 12562306a36Sopenharmony_ci * 12662306a36Sopenharmony_ci * The node is optimized for both 32-bit and 64-bit platforms: 12762306a36Sopenharmony_ci * 20 bytes for the 32-bit case, 32 bytes for the 64-bit case. 12862306a36Sopenharmony_ci * 12962306a36Sopenharmony_ci * Note: The descriptor_type and Type fields must appear in the identical 13062306a36Sopenharmony_ci * position in both the struct acpi_namespace_node and union acpi_operand_object 13162306a36Sopenharmony_ci * structures. 13262306a36Sopenharmony_ci */ 13362306a36Sopenharmony_cistruct acpi_namespace_node { 13462306a36Sopenharmony_ci union acpi_operand_object *object; /* Interpreter object */ 13562306a36Sopenharmony_ci u8 descriptor_type; /* Differentiate object descriptor types */ 13662306a36Sopenharmony_ci u8 type; /* ACPI Type associated with this name */ 13762306a36Sopenharmony_ci u16 flags; /* Miscellaneous flags */ 13862306a36Sopenharmony_ci union acpi_name_union name; /* ACPI Name, always 4 chars per ACPI spec */ 13962306a36Sopenharmony_ci struct acpi_namespace_node *parent; /* Parent node */ 14062306a36Sopenharmony_ci struct acpi_namespace_node *child; /* First child */ 14162306a36Sopenharmony_ci struct acpi_namespace_node *peer; /* First peer */ 14262306a36Sopenharmony_ci acpi_owner_id owner_id; /* Node creator */ 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci /* 14562306a36Sopenharmony_ci * The following fields are used by the ASL compiler and disassembler only 14662306a36Sopenharmony_ci */ 14762306a36Sopenharmony_ci#ifdef ACPI_LARGE_NAMESPACE_NODE 14862306a36Sopenharmony_ci union acpi_parse_object *op; 14962306a36Sopenharmony_ci void *method_locals; 15062306a36Sopenharmony_ci void *method_args; 15162306a36Sopenharmony_ci u32 value; 15262306a36Sopenharmony_ci u32 length; 15362306a36Sopenharmony_ci u8 arg_count; 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci#endif 15662306a36Sopenharmony_ci}; 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci/* Namespace Node flags */ 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci#define ANOBJ_RESERVED 0x01 /* Available for use */ 16162306a36Sopenharmony_ci#define ANOBJ_TEMPORARY 0x02 /* Node is create by a method and is temporary */ 16262306a36Sopenharmony_ci#define ANOBJ_METHOD_ARG 0x04 /* Node is a method argument */ 16362306a36Sopenharmony_ci#define ANOBJ_METHOD_LOCAL 0x08 /* Node is a method local */ 16462306a36Sopenharmony_ci#define ANOBJ_SUBTREE_HAS_INI 0x10 /* Used to optimize device initialization */ 16562306a36Sopenharmony_ci#define ANOBJ_EVALUATED 0x20 /* Set on first evaluation of node */ 16662306a36Sopenharmony_ci#define ANOBJ_ALLOCATED_BUFFER 0x40 /* Method AML buffer is dynamic (install_method) */ 16762306a36Sopenharmony_ci#define ANOBJ_NODE_EARLY_INIT 0x80 /* acpi_exec only: Node was create via init file (-fi) */ 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci#define ANOBJ_IS_EXTERNAL 0x08 /* iASL only: This object created via External() */ 17062306a36Sopenharmony_ci#define ANOBJ_METHOD_NO_RETVAL 0x10 /* iASL only: Method has no return value */ 17162306a36Sopenharmony_ci#define ANOBJ_METHOD_SOME_NO_RETVAL 0x20 /* iASL only: Method has at least one return value */ 17262306a36Sopenharmony_ci#define ANOBJ_IS_REFERENCED 0x80 /* iASL only: Object was referenced */ 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci/* Internal ACPI table management - master table list */ 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_cistruct acpi_table_list { 17762306a36Sopenharmony_ci struct acpi_table_desc *tables; /* Table descriptor array */ 17862306a36Sopenharmony_ci u32 current_table_count; /* Tables currently in the array */ 17962306a36Sopenharmony_ci u32 max_table_count; /* Max tables array will hold */ 18062306a36Sopenharmony_ci u8 flags; 18162306a36Sopenharmony_ci}; 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci/* Flags for above */ 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci#define ACPI_ROOT_ORIGIN_UNKNOWN (0) /* ~ORIGIN_ALLOCATED */ 18662306a36Sopenharmony_ci#define ACPI_ROOT_ORIGIN_ALLOCATED (1) 18762306a36Sopenharmony_ci#define ACPI_ROOT_ALLOW_RESIZE (2) 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci/* List to manage incoming ACPI tables */ 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_cistruct acpi_new_table_desc { 19262306a36Sopenharmony_ci struct acpi_table_header *table; 19362306a36Sopenharmony_ci struct acpi_new_table_desc *next; 19462306a36Sopenharmony_ci}; 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci/* Predefined table indexes */ 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_ci#define ACPI_INVALID_TABLE_INDEX (0xFFFFFFFF) 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_cistruct acpi_find_context { 20162306a36Sopenharmony_ci char *search_for; 20262306a36Sopenharmony_ci acpi_handle *list; 20362306a36Sopenharmony_ci u32 *count; 20462306a36Sopenharmony_ci}; 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_cistruct acpi_ns_search_data { 20762306a36Sopenharmony_ci struct acpi_namespace_node *node; 20862306a36Sopenharmony_ci}; 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ci/* Object types used during package copies */ 21162306a36Sopenharmony_ci 21262306a36Sopenharmony_ci#define ACPI_COPY_TYPE_SIMPLE 0 21362306a36Sopenharmony_ci#define ACPI_COPY_TYPE_PACKAGE 1 21462306a36Sopenharmony_ci 21562306a36Sopenharmony_ci/* Info structure used to convert external<->internal namestrings */ 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_cistruct acpi_namestring_info { 21862306a36Sopenharmony_ci const char *external_name; 21962306a36Sopenharmony_ci const char *next_external_char; 22062306a36Sopenharmony_ci char *internal_name; 22162306a36Sopenharmony_ci u32 length; 22262306a36Sopenharmony_ci u32 num_segments; 22362306a36Sopenharmony_ci u32 num_carats; 22462306a36Sopenharmony_ci u8 fully_qualified; 22562306a36Sopenharmony_ci}; 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_ci/* Field creation info */ 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_cistruct acpi_create_field_info { 23062306a36Sopenharmony_ci struct acpi_namespace_node *region_node; 23162306a36Sopenharmony_ci struct acpi_namespace_node *field_node; 23262306a36Sopenharmony_ci struct acpi_namespace_node *register_node; 23362306a36Sopenharmony_ci struct acpi_namespace_node *data_register_node; 23462306a36Sopenharmony_ci struct acpi_namespace_node *connection_node; 23562306a36Sopenharmony_ci u8 *resource_buffer; 23662306a36Sopenharmony_ci u32 bank_value; 23762306a36Sopenharmony_ci u32 field_bit_position; 23862306a36Sopenharmony_ci u32 field_bit_length; 23962306a36Sopenharmony_ci u16 resource_length; 24062306a36Sopenharmony_ci u16 pin_number_index; 24162306a36Sopenharmony_ci u8 field_flags; 24262306a36Sopenharmony_ci u8 attribute; 24362306a36Sopenharmony_ci u8 field_type; 24462306a36Sopenharmony_ci u8 access_length; 24562306a36Sopenharmony_ci}; 24662306a36Sopenharmony_ci 24762306a36Sopenharmony_citypedef 24862306a36Sopenharmony_ciacpi_status (*acpi_internal_method) (struct acpi_walk_state * walk_state); 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ci/* 25162306a36Sopenharmony_ci * Bitmapped ACPI types. Used internally only 25262306a36Sopenharmony_ci */ 25362306a36Sopenharmony_ci#define ACPI_BTYPE_ANY 0x00000000 25462306a36Sopenharmony_ci#define ACPI_BTYPE_INTEGER 0x00000001 25562306a36Sopenharmony_ci#define ACPI_BTYPE_STRING 0x00000002 25662306a36Sopenharmony_ci#define ACPI_BTYPE_BUFFER 0x00000004 25762306a36Sopenharmony_ci#define ACPI_BTYPE_PACKAGE 0x00000008 25862306a36Sopenharmony_ci#define ACPI_BTYPE_FIELD_UNIT 0x00000010 25962306a36Sopenharmony_ci#define ACPI_BTYPE_DEVICE 0x00000020 26062306a36Sopenharmony_ci#define ACPI_BTYPE_EVENT 0x00000040 26162306a36Sopenharmony_ci#define ACPI_BTYPE_METHOD 0x00000080 26262306a36Sopenharmony_ci#define ACPI_BTYPE_MUTEX 0x00000100 26362306a36Sopenharmony_ci#define ACPI_BTYPE_REGION 0x00000200 26462306a36Sopenharmony_ci#define ACPI_BTYPE_POWER 0x00000400 26562306a36Sopenharmony_ci#define ACPI_BTYPE_PROCESSOR 0x00000800 26662306a36Sopenharmony_ci#define ACPI_BTYPE_THERMAL 0x00001000 26762306a36Sopenharmony_ci#define ACPI_BTYPE_BUFFER_FIELD 0x00002000 26862306a36Sopenharmony_ci#define ACPI_BTYPE_DDB_HANDLE 0x00004000 26962306a36Sopenharmony_ci#define ACPI_BTYPE_DEBUG_OBJECT 0x00008000 27062306a36Sopenharmony_ci#define ACPI_BTYPE_REFERENCE_OBJECT 0x00010000 /* From Index(), ref_of(), etc (type6_opcodes) */ 27162306a36Sopenharmony_ci#define ACPI_BTYPE_RESOURCE 0x00020000 27262306a36Sopenharmony_ci#define ACPI_BTYPE_NAMED_REFERENCE 0x00040000 /* Generic unresolved Name or Namepath */ 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_ci#define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER) 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_ci#define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_PACKAGE) 27762306a36Sopenharmony_ci 27862306a36Sopenharmony_ci /* Used by Copy, de_ref_of, Store, Printf, Fprintf */ 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_ci#define ACPI_BTYPE_DATA_REFERENCE (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE_OBJECT | ACPI_BTYPE_DDB_HANDLE) 28162306a36Sopenharmony_ci#define ACPI_BTYPE_DEVICE_OBJECTS (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR) 28262306a36Sopenharmony_ci#define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */ 28362306a36Sopenharmony_ci#define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_ci#pragma pack(1) 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_ci/* 28862306a36Sopenharmony_ci * Information structure for ACPI predefined names. 28962306a36Sopenharmony_ci * Each entry in the table contains the following items: 29062306a36Sopenharmony_ci * 29162306a36Sopenharmony_ci * name - The ACPI reserved name 29262306a36Sopenharmony_ci * param_count - Number of arguments to the method 29362306a36Sopenharmony_ci * expected_return_btypes - Allowed type(s) for the return value 29462306a36Sopenharmony_ci */ 29562306a36Sopenharmony_cistruct acpi_name_info { 29662306a36Sopenharmony_ci char name[ACPI_NAMESEG_SIZE]; 29762306a36Sopenharmony_ci u16 argument_list; 29862306a36Sopenharmony_ci u8 expected_btypes; 29962306a36Sopenharmony_ci}; 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ci/* 30262306a36Sopenharmony_ci * Secondary information structures for ACPI predefined objects that return 30362306a36Sopenharmony_ci * package objects. This structure appears as the next entry in the table 30462306a36Sopenharmony_ci * after the NAME_INFO structure above. 30562306a36Sopenharmony_ci * 30662306a36Sopenharmony_ci * The reason for this is to minimize the size of the predefined name table. 30762306a36Sopenharmony_ci */ 30862306a36Sopenharmony_ci 30962306a36Sopenharmony_ci/* 31062306a36Sopenharmony_ci * Used for ACPI_PTYPE1_FIXED, ACPI_PTYPE1_VAR, ACPI_PTYPE2, 31162306a36Sopenharmony_ci * ACPI_PTYPE2_MIN, ACPI_PTYPE2_PKG_COUNT, ACPI_PTYPE2_COUNT, 31262306a36Sopenharmony_ci * ACPI_PTYPE2_FIX_VAR 31362306a36Sopenharmony_ci */ 31462306a36Sopenharmony_cistruct acpi_package_info { 31562306a36Sopenharmony_ci u8 type; 31662306a36Sopenharmony_ci u8 object_type1; 31762306a36Sopenharmony_ci u8 count1; 31862306a36Sopenharmony_ci u8 object_type2; 31962306a36Sopenharmony_ci u8 count2; 32062306a36Sopenharmony_ci u16 reserved; 32162306a36Sopenharmony_ci}; 32262306a36Sopenharmony_ci 32362306a36Sopenharmony_ci/* Used for ACPI_PTYPE2_FIXED */ 32462306a36Sopenharmony_ci 32562306a36Sopenharmony_cistruct acpi_package_info2 { 32662306a36Sopenharmony_ci u8 type; 32762306a36Sopenharmony_ci u8 count; 32862306a36Sopenharmony_ci u8 object_type[4]; 32962306a36Sopenharmony_ci u8 reserved; 33062306a36Sopenharmony_ci}; 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_ci/* Used for ACPI_PTYPE1_OPTION */ 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_cistruct acpi_package_info3 { 33562306a36Sopenharmony_ci u8 type; 33662306a36Sopenharmony_ci u8 count; 33762306a36Sopenharmony_ci u8 object_type[2]; 33862306a36Sopenharmony_ci u8 tail_object_type; 33962306a36Sopenharmony_ci u16 reserved; 34062306a36Sopenharmony_ci}; 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_cistruct acpi_package_info4 { 34362306a36Sopenharmony_ci u8 type; 34462306a36Sopenharmony_ci u8 object_type1; 34562306a36Sopenharmony_ci u8 count1; 34662306a36Sopenharmony_ci u8 sub_object_types; 34762306a36Sopenharmony_ci u8 pkg_count; 34862306a36Sopenharmony_ci u16 reserved; 34962306a36Sopenharmony_ci}; 35062306a36Sopenharmony_ci 35162306a36Sopenharmony_ciunion acpi_predefined_info { 35262306a36Sopenharmony_ci struct acpi_name_info info; 35362306a36Sopenharmony_ci struct acpi_package_info ret_info; 35462306a36Sopenharmony_ci struct acpi_package_info2 ret_info2; 35562306a36Sopenharmony_ci struct acpi_package_info3 ret_info3; 35662306a36Sopenharmony_ci struct acpi_package_info4 ret_info4; 35762306a36Sopenharmony_ci}; 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_ci/* Reset to default packing */ 36062306a36Sopenharmony_ci 36162306a36Sopenharmony_ci#pragma pack() 36262306a36Sopenharmony_ci 36362306a36Sopenharmony_ci/* Return object auto-repair info */ 36462306a36Sopenharmony_ci 36562306a36Sopenharmony_citypedef acpi_status (*acpi_object_converter) (struct acpi_namespace_node * 36662306a36Sopenharmony_ci scope, 36762306a36Sopenharmony_ci union acpi_operand_object * 36862306a36Sopenharmony_ci original_object, 36962306a36Sopenharmony_ci union acpi_operand_object ** 37062306a36Sopenharmony_ci converted_object); 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_cistruct acpi_simple_repair_info { 37362306a36Sopenharmony_ci char name[ACPI_NAMESEG_SIZE]; 37462306a36Sopenharmony_ci u32 unexpected_btypes; 37562306a36Sopenharmony_ci u32 package_index; 37662306a36Sopenharmony_ci acpi_object_converter object_converter; 37762306a36Sopenharmony_ci}; 37862306a36Sopenharmony_ci 37962306a36Sopenharmony_ci/* 38062306a36Sopenharmony_ci * Bitmapped return value types 38162306a36Sopenharmony_ci * Note: the actual data types must be contiguous, a loop in nspredef.c 38262306a36Sopenharmony_ci * depends on this. 38362306a36Sopenharmony_ci */ 38462306a36Sopenharmony_ci#define ACPI_RTYPE_ANY 0x00 38562306a36Sopenharmony_ci#define ACPI_RTYPE_NONE 0x01 38662306a36Sopenharmony_ci#define ACPI_RTYPE_INTEGER 0x02 38762306a36Sopenharmony_ci#define ACPI_RTYPE_STRING 0x04 38862306a36Sopenharmony_ci#define ACPI_RTYPE_BUFFER 0x08 38962306a36Sopenharmony_ci#define ACPI_RTYPE_PACKAGE 0x10 39062306a36Sopenharmony_ci#define ACPI_RTYPE_REFERENCE 0x20 39162306a36Sopenharmony_ci#define ACPI_RTYPE_ALL 0x3F 39262306a36Sopenharmony_ci 39362306a36Sopenharmony_ci#define ACPI_NUM_RTYPES 5 /* Number of actual object types */ 39462306a36Sopenharmony_ci 39562306a36Sopenharmony_ci/* Info for running the _REG methods */ 39662306a36Sopenharmony_ci 39762306a36Sopenharmony_cistruct acpi_reg_walk_info { 39862306a36Sopenharmony_ci u32 function; 39962306a36Sopenharmony_ci u32 reg_run_count; 40062306a36Sopenharmony_ci acpi_adr_space_type space_id; 40162306a36Sopenharmony_ci}; 40262306a36Sopenharmony_ci 40362306a36Sopenharmony_ci/***************************************************************************** 40462306a36Sopenharmony_ci * 40562306a36Sopenharmony_ci * Event typedefs and structs 40662306a36Sopenharmony_ci * 40762306a36Sopenharmony_ci ****************************************************************************/ 40862306a36Sopenharmony_ci 40962306a36Sopenharmony_ci/* Dispatch info for each host-installed SCI handler */ 41062306a36Sopenharmony_ci 41162306a36Sopenharmony_cistruct acpi_sci_handler_info { 41262306a36Sopenharmony_ci struct acpi_sci_handler_info *next; 41362306a36Sopenharmony_ci acpi_sci_handler address; /* Address of handler */ 41462306a36Sopenharmony_ci void *context; /* Context to be passed to handler */ 41562306a36Sopenharmony_ci}; 41662306a36Sopenharmony_ci 41762306a36Sopenharmony_ci/* Dispatch info for each GPE -- either a method or handler, cannot be both */ 41862306a36Sopenharmony_ci 41962306a36Sopenharmony_cistruct acpi_gpe_handler_info { 42062306a36Sopenharmony_ci acpi_gpe_handler address; /* Address of handler, if any */ 42162306a36Sopenharmony_ci void *context; /* Context to be passed to handler */ 42262306a36Sopenharmony_ci struct acpi_namespace_node *method_node; /* Method node for this GPE level (saved) */ 42362306a36Sopenharmony_ci u8 original_flags; /* Original (pre-handler) GPE info */ 42462306a36Sopenharmony_ci u8 originally_enabled; /* True if GPE was originally enabled */ 42562306a36Sopenharmony_ci}; 42662306a36Sopenharmony_ci 42762306a36Sopenharmony_ci/* Notify info for implicit notify, multiple device objects */ 42862306a36Sopenharmony_ci 42962306a36Sopenharmony_cistruct acpi_gpe_notify_info { 43062306a36Sopenharmony_ci struct acpi_namespace_node *device_node; /* Device to be notified */ 43162306a36Sopenharmony_ci struct acpi_gpe_notify_info *next; 43262306a36Sopenharmony_ci}; 43362306a36Sopenharmony_ci 43462306a36Sopenharmony_ci/* 43562306a36Sopenharmony_ci * GPE dispatch info. At any time, the GPE can have at most one type 43662306a36Sopenharmony_ci * of dispatch - Method, Handler, or Implicit Notify. 43762306a36Sopenharmony_ci */ 43862306a36Sopenharmony_ciunion acpi_gpe_dispatch_info { 43962306a36Sopenharmony_ci struct acpi_namespace_node *method_node; /* Method node for this GPE level */ 44062306a36Sopenharmony_ci struct acpi_gpe_handler_info *handler; /* Installed GPE handler */ 44162306a36Sopenharmony_ci struct acpi_gpe_notify_info *notify_list; /* List of _PRW devices for implicit notifies */ 44262306a36Sopenharmony_ci}; 44362306a36Sopenharmony_ci 44462306a36Sopenharmony_ci/* 44562306a36Sopenharmony_ci * Information about a GPE, one per each GPE in an array. 44662306a36Sopenharmony_ci * NOTE: Important to keep this struct as small as possible. 44762306a36Sopenharmony_ci */ 44862306a36Sopenharmony_cistruct acpi_gpe_event_info { 44962306a36Sopenharmony_ci union acpi_gpe_dispatch_info dispatch; /* Either Method, Handler, or notify_list */ 45062306a36Sopenharmony_ci struct acpi_gpe_register_info *register_info; /* Backpointer to register info */ 45162306a36Sopenharmony_ci u8 flags; /* Misc info about this GPE */ 45262306a36Sopenharmony_ci u8 gpe_number; /* This GPE */ 45362306a36Sopenharmony_ci u8 runtime_count; /* References to a run GPE */ 45462306a36Sopenharmony_ci u8 disable_for_dispatch; /* Masked during dispatching */ 45562306a36Sopenharmony_ci}; 45662306a36Sopenharmony_ci 45762306a36Sopenharmony_ci/* GPE register address */ 45862306a36Sopenharmony_ci 45962306a36Sopenharmony_cistruct acpi_gpe_address { 46062306a36Sopenharmony_ci u8 space_id; /* Address space where the register exists */ 46162306a36Sopenharmony_ci u64 address; /* 64-bit address of the register */ 46262306a36Sopenharmony_ci}; 46362306a36Sopenharmony_ci 46462306a36Sopenharmony_ci/* Information about a GPE register pair, one per each status/enable pair in an array */ 46562306a36Sopenharmony_ci 46662306a36Sopenharmony_cistruct acpi_gpe_register_info { 46762306a36Sopenharmony_ci struct acpi_gpe_address status_address; /* Address of status reg */ 46862306a36Sopenharmony_ci struct acpi_gpe_address enable_address; /* Address of enable reg */ 46962306a36Sopenharmony_ci u16 base_gpe_number; /* Base GPE number for this register */ 47062306a36Sopenharmony_ci u8 enable_for_wake; /* GPEs to keep enabled when sleeping */ 47162306a36Sopenharmony_ci u8 enable_for_run; /* GPEs to keep enabled when running */ 47262306a36Sopenharmony_ci u8 mask_for_run; /* GPEs to keep masked when running */ 47362306a36Sopenharmony_ci u8 enable_mask; /* Current mask of enabled GPEs */ 47462306a36Sopenharmony_ci}; 47562306a36Sopenharmony_ci 47662306a36Sopenharmony_ci/* 47762306a36Sopenharmony_ci * Information about a GPE register block, one per each installed block -- 47862306a36Sopenharmony_ci * GPE0, GPE1, and one per each installed GPE Block Device. 47962306a36Sopenharmony_ci */ 48062306a36Sopenharmony_cistruct acpi_gpe_block_info { 48162306a36Sopenharmony_ci struct acpi_namespace_node *node; 48262306a36Sopenharmony_ci struct acpi_gpe_block_info *previous; 48362306a36Sopenharmony_ci struct acpi_gpe_block_info *next; 48462306a36Sopenharmony_ci struct acpi_gpe_xrupt_info *xrupt_block; /* Backpointer to interrupt block */ 48562306a36Sopenharmony_ci struct acpi_gpe_register_info *register_info; /* One per GPE register pair */ 48662306a36Sopenharmony_ci struct acpi_gpe_event_info *event_info; /* One for each GPE */ 48762306a36Sopenharmony_ci u64 address; /* Base address of the block */ 48862306a36Sopenharmony_ci u32 register_count; /* Number of register pairs in block */ 48962306a36Sopenharmony_ci u16 gpe_count; /* Number of individual GPEs in block */ 49062306a36Sopenharmony_ci u16 block_base_number; /* Base GPE number for this block */ 49162306a36Sopenharmony_ci u8 space_id; 49262306a36Sopenharmony_ci u8 initialized; /* TRUE if this block is initialized */ 49362306a36Sopenharmony_ci}; 49462306a36Sopenharmony_ci 49562306a36Sopenharmony_ci/* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */ 49662306a36Sopenharmony_ci 49762306a36Sopenharmony_cistruct acpi_gpe_xrupt_info { 49862306a36Sopenharmony_ci struct acpi_gpe_xrupt_info *previous; 49962306a36Sopenharmony_ci struct acpi_gpe_xrupt_info *next; 50062306a36Sopenharmony_ci struct acpi_gpe_block_info *gpe_block_list_head; /* List of GPE blocks for this xrupt */ 50162306a36Sopenharmony_ci u32 interrupt_number; /* System interrupt number */ 50262306a36Sopenharmony_ci}; 50362306a36Sopenharmony_ci 50462306a36Sopenharmony_cistruct acpi_gpe_walk_info { 50562306a36Sopenharmony_ci struct acpi_namespace_node *gpe_device; 50662306a36Sopenharmony_ci struct acpi_gpe_block_info *gpe_block; 50762306a36Sopenharmony_ci u16 count; 50862306a36Sopenharmony_ci acpi_owner_id owner_id; 50962306a36Sopenharmony_ci u8 execute_by_owner_id; 51062306a36Sopenharmony_ci}; 51162306a36Sopenharmony_ci 51262306a36Sopenharmony_cistruct acpi_gpe_device_info { 51362306a36Sopenharmony_ci u32 index; 51462306a36Sopenharmony_ci u32 next_block_base_index; 51562306a36Sopenharmony_ci acpi_status status; 51662306a36Sopenharmony_ci struct acpi_namespace_node *gpe_device; 51762306a36Sopenharmony_ci}; 51862306a36Sopenharmony_ci 51962306a36Sopenharmony_citypedef acpi_status (*acpi_gpe_callback) (struct acpi_gpe_xrupt_info * 52062306a36Sopenharmony_ci gpe_xrupt_info, 52162306a36Sopenharmony_ci struct acpi_gpe_block_info * 52262306a36Sopenharmony_ci gpe_block, void *context); 52362306a36Sopenharmony_ci 52462306a36Sopenharmony_ci/* Information about each particular fixed event */ 52562306a36Sopenharmony_ci 52662306a36Sopenharmony_cistruct acpi_fixed_event_handler { 52762306a36Sopenharmony_ci acpi_event_handler handler; /* Address of handler. */ 52862306a36Sopenharmony_ci void *context; /* Context to be passed to handler */ 52962306a36Sopenharmony_ci}; 53062306a36Sopenharmony_ci 53162306a36Sopenharmony_cistruct acpi_fixed_event_info { 53262306a36Sopenharmony_ci u8 status_register_id; 53362306a36Sopenharmony_ci u8 enable_register_id; 53462306a36Sopenharmony_ci u16 status_bit_mask; 53562306a36Sopenharmony_ci u16 enable_bit_mask; 53662306a36Sopenharmony_ci}; 53762306a36Sopenharmony_ci 53862306a36Sopenharmony_ci/* Information used during field processing */ 53962306a36Sopenharmony_ci 54062306a36Sopenharmony_cistruct acpi_field_info { 54162306a36Sopenharmony_ci u8 skip_field; 54262306a36Sopenharmony_ci u8 field_flag; 54362306a36Sopenharmony_ci u32 pkg_length; 54462306a36Sopenharmony_ci}; 54562306a36Sopenharmony_ci 54662306a36Sopenharmony_ci/* Information about the interrupt ID and _EVT of a GED device */ 54762306a36Sopenharmony_ci 54862306a36Sopenharmony_cistruct acpi_ged_handler_info { 54962306a36Sopenharmony_ci struct acpi_ged_handler_info *next; 55062306a36Sopenharmony_ci u32 int_id; /* The interrupt ID that triggers the execution ofthe evt_method. */ 55162306a36Sopenharmony_ci struct acpi_namespace_node *evt_method; /* The _EVT method to be executed when an interrupt with ID = int_ID is received */ 55262306a36Sopenharmony_ci}; 55362306a36Sopenharmony_ci 55462306a36Sopenharmony_ci/***************************************************************************** 55562306a36Sopenharmony_ci * 55662306a36Sopenharmony_ci * Generic "state" object for stacks 55762306a36Sopenharmony_ci * 55862306a36Sopenharmony_ci ****************************************************************************/ 55962306a36Sopenharmony_ci 56062306a36Sopenharmony_ci#define ACPI_CONTROL_NORMAL 0xC0 56162306a36Sopenharmony_ci#define ACPI_CONTROL_CONDITIONAL_EXECUTING 0xC1 56262306a36Sopenharmony_ci#define ACPI_CONTROL_PREDICATE_EXECUTING 0xC2 56362306a36Sopenharmony_ci#define ACPI_CONTROL_PREDICATE_FALSE 0xC3 56462306a36Sopenharmony_ci#define ACPI_CONTROL_PREDICATE_TRUE 0xC4 56562306a36Sopenharmony_ci 56662306a36Sopenharmony_ci#define ACPI_STATE_COMMON \ 56762306a36Sopenharmony_ci void *next; \ 56862306a36Sopenharmony_ci u8 descriptor_type; /* To differentiate various internal objs */\ 56962306a36Sopenharmony_ci u8 flags; \ 57062306a36Sopenharmony_ci u16 value; \ 57162306a36Sopenharmony_ci u16 state 57262306a36Sopenharmony_ci 57362306a36Sopenharmony_ci /* There are 2 bytes available here until the next natural alignment boundary */ 57462306a36Sopenharmony_ci 57562306a36Sopenharmony_cistruct acpi_common_state { 57662306a36Sopenharmony_ci ACPI_STATE_COMMON; 57762306a36Sopenharmony_ci}; 57862306a36Sopenharmony_ci 57962306a36Sopenharmony_ci/* 58062306a36Sopenharmony_ci * Update state - used to traverse complex objects such as packages 58162306a36Sopenharmony_ci */ 58262306a36Sopenharmony_cistruct acpi_update_state { 58362306a36Sopenharmony_ci ACPI_STATE_COMMON; 58462306a36Sopenharmony_ci union acpi_operand_object *object; 58562306a36Sopenharmony_ci}; 58662306a36Sopenharmony_ci 58762306a36Sopenharmony_ci/* 58862306a36Sopenharmony_ci * Pkg state - used to traverse nested package structures 58962306a36Sopenharmony_ci */ 59062306a36Sopenharmony_cistruct acpi_pkg_state { 59162306a36Sopenharmony_ci ACPI_STATE_COMMON; 59262306a36Sopenharmony_ci u32 index; 59362306a36Sopenharmony_ci union acpi_operand_object *source_object; 59462306a36Sopenharmony_ci union acpi_operand_object *dest_object; 59562306a36Sopenharmony_ci struct acpi_walk_state *walk_state; 59662306a36Sopenharmony_ci void *this_target_obj; 59762306a36Sopenharmony_ci u32 num_packages; 59862306a36Sopenharmony_ci}; 59962306a36Sopenharmony_ci 60062306a36Sopenharmony_ci/* 60162306a36Sopenharmony_ci * Control state - one per if/else and while constructs. 60262306a36Sopenharmony_ci * Allows nesting of these constructs 60362306a36Sopenharmony_ci */ 60462306a36Sopenharmony_cistruct acpi_control_state { 60562306a36Sopenharmony_ci ACPI_STATE_COMMON; 60662306a36Sopenharmony_ci u16 opcode; 60762306a36Sopenharmony_ci union acpi_parse_object *predicate_op; 60862306a36Sopenharmony_ci u8 *aml_predicate_start; /* Start of if/while predicate */ 60962306a36Sopenharmony_ci u8 *package_end; /* End of if/while block */ 61062306a36Sopenharmony_ci u64 loop_timeout; /* While() loop timeout */ 61162306a36Sopenharmony_ci}; 61262306a36Sopenharmony_ci 61362306a36Sopenharmony_ci/* 61462306a36Sopenharmony_ci * Scope state - current scope during namespace lookups 61562306a36Sopenharmony_ci */ 61662306a36Sopenharmony_cistruct acpi_scope_state { 61762306a36Sopenharmony_ci ACPI_STATE_COMMON; 61862306a36Sopenharmony_ci struct acpi_namespace_node *node; 61962306a36Sopenharmony_ci}; 62062306a36Sopenharmony_ci 62162306a36Sopenharmony_cistruct acpi_pscope_state { 62262306a36Sopenharmony_ci ACPI_STATE_COMMON; 62362306a36Sopenharmony_ci u32 arg_count; /* Number of fixed arguments */ 62462306a36Sopenharmony_ci union acpi_parse_object *op; /* Current op being parsed */ 62562306a36Sopenharmony_ci u8 *arg_end; /* Current argument end */ 62662306a36Sopenharmony_ci u8 *pkg_end; /* Current package end */ 62762306a36Sopenharmony_ci u32 arg_list; /* Next argument to parse */ 62862306a36Sopenharmony_ci}; 62962306a36Sopenharmony_ci 63062306a36Sopenharmony_ci/* 63162306a36Sopenharmony_ci * Thread state - one per thread across multiple walk states. Multiple walk 63262306a36Sopenharmony_ci * states are created when there are nested control methods executing. 63362306a36Sopenharmony_ci */ 63462306a36Sopenharmony_cistruct acpi_thread_state { 63562306a36Sopenharmony_ci ACPI_STATE_COMMON; 63662306a36Sopenharmony_ci u8 current_sync_level; /* Mutex Sync (nested acquire) level */ 63762306a36Sopenharmony_ci struct acpi_walk_state *walk_state_list; /* Head of list of walk_states for this thread */ 63862306a36Sopenharmony_ci union acpi_operand_object *acquired_mutex_list; /* List of all currently acquired mutexes */ 63962306a36Sopenharmony_ci acpi_thread_id thread_id; /* Running thread ID */ 64062306a36Sopenharmony_ci}; 64162306a36Sopenharmony_ci 64262306a36Sopenharmony_ci/* 64362306a36Sopenharmony_ci * Result values - used to accumulate the results of nested 64462306a36Sopenharmony_ci * AML arguments 64562306a36Sopenharmony_ci */ 64662306a36Sopenharmony_cistruct acpi_result_values { 64762306a36Sopenharmony_ci ACPI_STATE_COMMON; 64862306a36Sopenharmony_ci union acpi_operand_object *obj_desc[ACPI_RESULTS_FRAME_OBJ_NUM]; 64962306a36Sopenharmony_ci}; 65062306a36Sopenharmony_ci 65162306a36Sopenharmony_citypedef 65262306a36Sopenharmony_ciacpi_status (*acpi_parse_downwards) (struct acpi_walk_state * walk_state, 65362306a36Sopenharmony_ci union acpi_parse_object ** out_op); 65462306a36Sopenharmony_ci 65562306a36Sopenharmony_citypedef 65662306a36Sopenharmony_ciacpi_status (*acpi_parse_upwards) (struct acpi_walk_state * walk_state); 65762306a36Sopenharmony_ci 65862306a36Sopenharmony_ci/* Global handlers for AML Notifies */ 65962306a36Sopenharmony_ci 66062306a36Sopenharmony_cistruct acpi_global_notify_handler { 66162306a36Sopenharmony_ci acpi_notify_handler handler; 66262306a36Sopenharmony_ci void *context; 66362306a36Sopenharmony_ci}; 66462306a36Sopenharmony_ci 66562306a36Sopenharmony_ci/* 66662306a36Sopenharmony_ci * Notify info - used to pass info to the deferred notify 66762306a36Sopenharmony_ci * handler/dispatcher. 66862306a36Sopenharmony_ci */ 66962306a36Sopenharmony_cistruct acpi_notify_info { 67062306a36Sopenharmony_ci ACPI_STATE_COMMON; 67162306a36Sopenharmony_ci u8 handler_list_id; 67262306a36Sopenharmony_ci struct acpi_namespace_node *node; 67362306a36Sopenharmony_ci union acpi_operand_object *handler_list_head; 67462306a36Sopenharmony_ci struct acpi_global_notify_handler *global; 67562306a36Sopenharmony_ci}; 67662306a36Sopenharmony_ci 67762306a36Sopenharmony_ci/* Generic state is union of structs above */ 67862306a36Sopenharmony_ci 67962306a36Sopenharmony_ciunion acpi_generic_state { 68062306a36Sopenharmony_ci struct acpi_common_state common; 68162306a36Sopenharmony_ci struct acpi_control_state control; 68262306a36Sopenharmony_ci struct acpi_update_state update; 68362306a36Sopenharmony_ci struct acpi_scope_state scope; 68462306a36Sopenharmony_ci struct acpi_pscope_state parse_scope; 68562306a36Sopenharmony_ci struct acpi_pkg_state pkg; 68662306a36Sopenharmony_ci struct acpi_thread_state thread; 68762306a36Sopenharmony_ci struct acpi_result_values results; 68862306a36Sopenharmony_ci struct acpi_notify_info notify; 68962306a36Sopenharmony_ci}; 69062306a36Sopenharmony_ci 69162306a36Sopenharmony_ci/***************************************************************************** 69262306a36Sopenharmony_ci * 69362306a36Sopenharmony_ci * Interpreter typedefs and structs 69462306a36Sopenharmony_ci * 69562306a36Sopenharmony_ci ****************************************************************************/ 69662306a36Sopenharmony_ci 69762306a36Sopenharmony_citypedef 69862306a36Sopenharmony_ciacpi_status (*acpi_execute_op) (struct acpi_walk_state * walk_state); 69962306a36Sopenharmony_ci 70062306a36Sopenharmony_ci/* Address Range info block */ 70162306a36Sopenharmony_ci 70262306a36Sopenharmony_cistruct acpi_address_range { 70362306a36Sopenharmony_ci struct acpi_address_range *next; 70462306a36Sopenharmony_ci struct acpi_namespace_node *region_node; 70562306a36Sopenharmony_ci acpi_physical_address start_address; 70662306a36Sopenharmony_ci acpi_physical_address end_address; 70762306a36Sopenharmony_ci}; 70862306a36Sopenharmony_ci 70962306a36Sopenharmony_ci/***************************************************************************** 71062306a36Sopenharmony_ci * 71162306a36Sopenharmony_ci * Parser typedefs and structs 71262306a36Sopenharmony_ci * 71362306a36Sopenharmony_ci ****************************************************************************/ 71462306a36Sopenharmony_ci 71562306a36Sopenharmony_ci/* 71662306a36Sopenharmony_ci * AML opcode, name, and argument layout 71762306a36Sopenharmony_ci */ 71862306a36Sopenharmony_cistruct acpi_opcode_info { 71962306a36Sopenharmony_ci#if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT) 72062306a36Sopenharmony_ci char *name; /* Opcode name (disassembler/debug only) */ 72162306a36Sopenharmony_ci#endif 72262306a36Sopenharmony_ci u32 parse_args; /* Grammar/Parse time arguments */ 72362306a36Sopenharmony_ci u32 runtime_args; /* Interpret time arguments */ 72462306a36Sopenharmony_ci u16 flags; /* Misc flags */ 72562306a36Sopenharmony_ci u8 object_type; /* Corresponding internal object type */ 72662306a36Sopenharmony_ci u8 class; /* Opcode class */ 72762306a36Sopenharmony_ci u8 type; /* Opcode type */ 72862306a36Sopenharmony_ci}; 72962306a36Sopenharmony_ci 73062306a36Sopenharmony_ci/* Value associated with the parse object */ 73162306a36Sopenharmony_ci 73262306a36Sopenharmony_ciunion acpi_parse_value { 73362306a36Sopenharmony_ci u64 integer; /* Integer constant (Up to 64 bits) */ 73462306a36Sopenharmony_ci u32 size; /* bytelist or field size */ 73562306a36Sopenharmony_ci char *string; /* NULL terminated string */ 73662306a36Sopenharmony_ci u8 *buffer; /* buffer or string */ 73762306a36Sopenharmony_ci char *name; /* NULL terminated string */ 73862306a36Sopenharmony_ci union acpi_parse_object *arg; /* arguments and contained ops */ 73962306a36Sopenharmony_ci}; 74062306a36Sopenharmony_ci 74162306a36Sopenharmony_ci#if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT) 74262306a36Sopenharmony_ci#define ACPI_DISASM_ONLY_MEMBERS(a) a; 74362306a36Sopenharmony_ci#else 74462306a36Sopenharmony_ci#define ACPI_DISASM_ONLY_MEMBERS(a) 74562306a36Sopenharmony_ci#endif 74662306a36Sopenharmony_ci 74762306a36Sopenharmony_ci#if defined(ACPI_ASL_COMPILER) 74862306a36Sopenharmony_ci#define ACPI_CONVERTER_ONLY_MEMBERS(a) a; 74962306a36Sopenharmony_ci#else 75062306a36Sopenharmony_ci#define ACPI_CONVERTER_ONLY_MEMBERS(a) 75162306a36Sopenharmony_ci#endif 75262306a36Sopenharmony_ci 75362306a36Sopenharmony_ci#define ACPI_PARSE_COMMON \ 75462306a36Sopenharmony_ci union acpi_parse_object *parent; /* Parent op */\ 75562306a36Sopenharmony_ci u8 descriptor_type; /* To differentiate various internal objs */\ 75662306a36Sopenharmony_ci u8 flags; /* Type of Op */\ 75762306a36Sopenharmony_ci u16 aml_opcode; /* AML opcode */\ 75862306a36Sopenharmony_ci u8 *aml; /* Address of declaration in AML */\ 75962306a36Sopenharmony_ci union acpi_parse_object *next; /* Next op */\ 76062306a36Sopenharmony_ci struct acpi_namespace_node *node; /* For use by interpreter */\ 76162306a36Sopenharmony_ci union acpi_parse_value value; /* Value or args associated with the opcode */\ 76262306a36Sopenharmony_ci u8 arg_list_length; /* Number of elements in the arg list */\ 76362306a36Sopenharmony_ci ACPI_DISASM_ONLY_MEMBERS (\ 76462306a36Sopenharmony_ci u16 disasm_flags; /* Used during AML disassembly */\ 76562306a36Sopenharmony_ci u8 disasm_opcode; /* Subtype used for disassembly */\ 76662306a36Sopenharmony_ci char *operator_symbol; /* Used for C-style operator name strings */\ 76762306a36Sopenharmony_ci char aml_op_name[16]) /* Op name (debug only) */\ 76862306a36Sopenharmony_ci ACPI_CONVERTER_ONLY_MEMBERS (\ 76962306a36Sopenharmony_ci char *inline_comment; /* Inline comment */\ 77062306a36Sopenharmony_ci char *end_node_comment; /* End of node comment */\ 77162306a36Sopenharmony_ci char *name_comment; /* Comment associated with the first parameter of the name node */\ 77262306a36Sopenharmony_ci char *close_brace_comment; /* Comments that come after } on the same as } */\ 77362306a36Sopenharmony_ci struct acpi_comment_node *comment_list; /* comments that appears before this node */\ 77462306a36Sopenharmony_ci struct acpi_comment_node *end_blk_comment; /* comments that at the end of a block but before ) or } */\ 77562306a36Sopenharmony_ci char *cv_filename; /* Filename associated with this node. Used for ASL/ASL+ converter */\ 77662306a36Sopenharmony_ci char *cv_parent_filename) /* Parent filename associated with this node. Used for ASL/ASL+ converter */ 77762306a36Sopenharmony_ci 77862306a36Sopenharmony_ci/* categories of comments */ 77962306a36Sopenharmony_ci 78062306a36Sopenharmony_citypedef enum { 78162306a36Sopenharmony_ci STANDARD_COMMENT = 1, 78262306a36Sopenharmony_ci INLINE_COMMENT, 78362306a36Sopenharmony_ci ENDNODE_COMMENT, 78462306a36Sopenharmony_ci OPENBRACE_COMMENT, 78562306a36Sopenharmony_ci CLOSE_BRACE_COMMENT, 78662306a36Sopenharmony_ci STD_DEFBLK_COMMENT, 78762306a36Sopenharmony_ci END_DEFBLK_COMMENT, 78862306a36Sopenharmony_ci FILENAME_COMMENT, 78962306a36Sopenharmony_ci PARENTFILENAME_COMMENT, 79062306a36Sopenharmony_ci ENDBLK_COMMENT, 79162306a36Sopenharmony_ci INCLUDE_COMMENT 79262306a36Sopenharmony_ci} asl_comment_types; 79362306a36Sopenharmony_ci 79462306a36Sopenharmony_ci/* Internal opcodes for disasm_opcode field above */ 79562306a36Sopenharmony_ci 79662306a36Sopenharmony_ci#define ACPI_DASM_BUFFER 0x00 /* Buffer is a simple data buffer */ 79762306a36Sopenharmony_ci#define ACPI_DASM_RESOURCE 0x01 /* Buffer is a Resource Descriptor */ 79862306a36Sopenharmony_ci#define ACPI_DASM_STRING 0x02 /* Buffer is a ASCII string */ 79962306a36Sopenharmony_ci#define ACPI_DASM_UNICODE 0x03 /* Buffer is a Unicode string */ 80062306a36Sopenharmony_ci#define ACPI_DASM_PLD_METHOD 0x04 /* Buffer is a _PLD method bit-packed buffer */ 80162306a36Sopenharmony_ci#define ACPI_DASM_UUID 0x05 /* Buffer is a UUID/GUID */ 80262306a36Sopenharmony_ci#define ACPI_DASM_EISAID 0x06 /* Integer is an EISAID */ 80362306a36Sopenharmony_ci#define ACPI_DASM_MATCHOP 0x07 /* Parent opcode is a Match() operator */ 80462306a36Sopenharmony_ci#define ACPI_DASM_LNOT_PREFIX 0x08 /* Start of a Lnot_equal (etc.) pair of opcodes */ 80562306a36Sopenharmony_ci#define ACPI_DASM_LNOT_SUFFIX 0x09 /* End of a Lnot_equal (etc.) pair of opcodes */ 80662306a36Sopenharmony_ci#define ACPI_DASM_HID_STRING 0x0A /* String is a _HID or _CID */ 80762306a36Sopenharmony_ci#define ACPI_DASM_IGNORE_SINGLE 0x0B /* Ignore the opcode but not it's children */ 80862306a36Sopenharmony_ci#define ACPI_DASM_SWITCH 0x0C /* While is a Switch */ 80962306a36Sopenharmony_ci#define ACPI_DASM_SWITCH_PREDICATE 0x0D /* Object is a predicate for a Switch or Case block */ 81062306a36Sopenharmony_ci#define ACPI_DASM_CASE 0x0E /* If/Else is a Case in a Switch/Case block */ 81162306a36Sopenharmony_ci#define ACPI_DASM_DEFAULT 0x0F /* Else is a Default in a Switch/Case block */ 81262306a36Sopenharmony_ci 81362306a36Sopenharmony_ci/* 81462306a36Sopenharmony_ci * List struct used in the -ca option 81562306a36Sopenharmony_ci */ 81662306a36Sopenharmony_cistruct acpi_comment_node { 81762306a36Sopenharmony_ci char *comment; 81862306a36Sopenharmony_ci struct acpi_comment_node *next; 81962306a36Sopenharmony_ci}; 82062306a36Sopenharmony_ci 82162306a36Sopenharmony_cistruct acpi_comment_addr_node { 82262306a36Sopenharmony_ci u8 *addr; 82362306a36Sopenharmony_ci struct acpi_comment_addr_node *next; 82462306a36Sopenharmony_ci}; 82562306a36Sopenharmony_ci 82662306a36Sopenharmony_ci/* 82762306a36Sopenharmony_ci * File node - used for "Include" operator file stack and 82862306a36Sopenharmony_ci * dependency tree for the -ca option 82962306a36Sopenharmony_ci */ 83062306a36Sopenharmony_cistruct acpi_file_node { 83162306a36Sopenharmony_ci void *file; 83262306a36Sopenharmony_ci char *filename; 83362306a36Sopenharmony_ci char *file_start; /* Points to AML and indicates when the AML for this particular file starts. */ 83462306a36Sopenharmony_ci char *file_end; /* Points to AML and indicates when the AML for this particular file ends. */ 83562306a36Sopenharmony_ci struct acpi_file_node *next; 83662306a36Sopenharmony_ci struct acpi_file_node *parent; 83762306a36Sopenharmony_ci u8 include_written; 83862306a36Sopenharmony_ci struct acpi_comment_node *include_comment; 83962306a36Sopenharmony_ci}; 84062306a36Sopenharmony_ci 84162306a36Sopenharmony_ci/* 84262306a36Sopenharmony_ci * Generic operation (for example: If, While, Store) 84362306a36Sopenharmony_ci */ 84462306a36Sopenharmony_cistruct acpi_parse_obj_common { 84562306a36Sopenharmony_ciACPI_PARSE_COMMON}; 84662306a36Sopenharmony_ci 84762306a36Sopenharmony_ci/* 84862306a36Sopenharmony_ci * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and op_regions), 84962306a36Sopenharmony_ci * and bytelists. 85062306a36Sopenharmony_ci */ 85162306a36Sopenharmony_cistruct acpi_parse_obj_named { 85262306a36Sopenharmony_ci ACPI_PARSE_COMMON char *path; 85362306a36Sopenharmony_ci u8 *data; /* AML body or bytelist data */ 85462306a36Sopenharmony_ci u32 length; /* AML length */ 85562306a36Sopenharmony_ci u32 name; /* 4-byte name or zero if no name */ 85662306a36Sopenharmony_ci}; 85762306a36Sopenharmony_ci 85862306a36Sopenharmony_ci/* This version is used by the iASL compiler only */ 85962306a36Sopenharmony_ci 86062306a36Sopenharmony_ci#define ACPI_MAX_PARSEOP_NAME 20 86162306a36Sopenharmony_ci 86262306a36Sopenharmony_cistruct acpi_parse_obj_asl { 86362306a36Sopenharmony_ci ACPI_PARSE_COMMON union acpi_parse_object *child; 86462306a36Sopenharmony_ci union acpi_parse_object *parent_method; 86562306a36Sopenharmony_ci char *filename; 86662306a36Sopenharmony_ci u8 file_changed; 86762306a36Sopenharmony_ci char *parent_filename; 86862306a36Sopenharmony_ci char *external_name; 86962306a36Sopenharmony_ci char *namepath; 87062306a36Sopenharmony_ci char name_seg[4]; 87162306a36Sopenharmony_ci u32 extra_value; 87262306a36Sopenharmony_ci u32 column; 87362306a36Sopenharmony_ci u32 line_number; 87462306a36Sopenharmony_ci u32 logical_line_number; 87562306a36Sopenharmony_ci u32 logical_byte_offset; 87662306a36Sopenharmony_ci u32 end_line; 87762306a36Sopenharmony_ci u32 end_logical_line; 87862306a36Sopenharmony_ci u32 acpi_btype; 87962306a36Sopenharmony_ci u32 aml_length; 88062306a36Sopenharmony_ci u32 aml_subtree_length; 88162306a36Sopenharmony_ci u32 final_aml_length; 88262306a36Sopenharmony_ci u32 final_aml_offset; 88362306a36Sopenharmony_ci u32 compile_flags; 88462306a36Sopenharmony_ci u16 parse_opcode; 88562306a36Sopenharmony_ci u8 aml_opcode_length; 88662306a36Sopenharmony_ci u8 aml_pkg_len_bytes; 88762306a36Sopenharmony_ci u8 extra; 88862306a36Sopenharmony_ci char parse_op_name[ACPI_MAX_PARSEOP_NAME]; 88962306a36Sopenharmony_ci}; 89062306a36Sopenharmony_ci 89162306a36Sopenharmony_ciunion acpi_parse_object { 89262306a36Sopenharmony_ci struct acpi_parse_obj_common common; 89362306a36Sopenharmony_ci struct acpi_parse_obj_named named; 89462306a36Sopenharmony_ci struct acpi_parse_obj_asl asl; 89562306a36Sopenharmony_ci}; 89662306a36Sopenharmony_ci 89762306a36Sopenharmony_cistruct asl_comment_state { 89862306a36Sopenharmony_ci u8 comment_type; 89962306a36Sopenharmony_ci u32 spaces_before; 90062306a36Sopenharmony_ci union acpi_parse_object *latest_parse_op; 90162306a36Sopenharmony_ci union acpi_parse_object *parsing_paren_brace_node; 90262306a36Sopenharmony_ci u8 capture_comments; 90362306a36Sopenharmony_ci}; 90462306a36Sopenharmony_ci 90562306a36Sopenharmony_ci/* 90662306a36Sopenharmony_ci * Parse state - one state per parser invocation and each control 90762306a36Sopenharmony_ci * method. 90862306a36Sopenharmony_ci */ 90962306a36Sopenharmony_cistruct acpi_parse_state { 91062306a36Sopenharmony_ci u8 *aml_start; /* First AML byte */ 91162306a36Sopenharmony_ci u8 *aml; /* Next AML byte */ 91262306a36Sopenharmony_ci u8 *aml_end; /* (last + 1) AML byte */ 91362306a36Sopenharmony_ci u8 *pkg_start; /* Current package begin */ 91462306a36Sopenharmony_ci u8 *pkg_end; /* Current package end */ 91562306a36Sopenharmony_ci union acpi_parse_object *start_op; /* Root of parse tree */ 91662306a36Sopenharmony_ci struct acpi_namespace_node *start_node; 91762306a36Sopenharmony_ci union acpi_generic_state *scope; /* Current scope */ 91862306a36Sopenharmony_ci union acpi_parse_object *start_scope; 91962306a36Sopenharmony_ci u32 aml_size; 92062306a36Sopenharmony_ci}; 92162306a36Sopenharmony_ci 92262306a36Sopenharmony_ci/* Parse object flags */ 92362306a36Sopenharmony_ci 92462306a36Sopenharmony_ci#define ACPI_PARSEOP_GENERIC 0x01 92562306a36Sopenharmony_ci#define ACPI_PARSEOP_NAMED_OBJECT 0x02 92662306a36Sopenharmony_ci#define ACPI_PARSEOP_DEFERRED 0x04 92762306a36Sopenharmony_ci#define ACPI_PARSEOP_BYTELIST 0x08 92862306a36Sopenharmony_ci#define ACPI_PARSEOP_IN_STACK 0x10 92962306a36Sopenharmony_ci#define ACPI_PARSEOP_TARGET 0x20 93062306a36Sopenharmony_ci#define ACPI_PARSEOP_IN_CACHE 0x80 93162306a36Sopenharmony_ci 93262306a36Sopenharmony_ci/* Parse object disasm_flags */ 93362306a36Sopenharmony_ci 93462306a36Sopenharmony_ci#define ACPI_PARSEOP_IGNORE 0x0001 93562306a36Sopenharmony_ci#define ACPI_PARSEOP_PARAMETER_LIST 0x0002 93662306a36Sopenharmony_ci#define ACPI_PARSEOP_EMPTY_TERMLIST 0x0004 93762306a36Sopenharmony_ci#define ACPI_PARSEOP_PREDEFINED_CHECKED 0x0008 93862306a36Sopenharmony_ci#define ACPI_PARSEOP_CLOSING_PAREN 0x0010 93962306a36Sopenharmony_ci#define ACPI_PARSEOP_COMPOUND_ASSIGNMENT 0x0020 94062306a36Sopenharmony_ci#define ACPI_PARSEOP_ASSIGNMENT 0x0040 94162306a36Sopenharmony_ci#define ACPI_PARSEOP_ELSEIF 0x0080 94262306a36Sopenharmony_ci#define ACPI_PARSEOP_LEGACY_ASL_ONLY 0x0100 94362306a36Sopenharmony_ci 94462306a36Sopenharmony_ci/***************************************************************************** 94562306a36Sopenharmony_ci * 94662306a36Sopenharmony_ci * Hardware (ACPI registers) and PNP 94762306a36Sopenharmony_ci * 94862306a36Sopenharmony_ci ****************************************************************************/ 94962306a36Sopenharmony_ci 95062306a36Sopenharmony_cistruct acpi_bit_register_info { 95162306a36Sopenharmony_ci u8 parent_register; 95262306a36Sopenharmony_ci u8 bit_position; 95362306a36Sopenharmony_ci u16 access_bit_mask; 95462306a36Sopenharmony_ci}; 95562306a36Sopenharmony_ci 95662306a36Sopenharmony_ci/* 95762306a36Sopenharmony_ci * Some ACPI registers have bits that must be ignored -- meaning that they 95862306a36Sopenharmony_ci * must be preserved. 95962306a36Sopenharmony_ci */ 96062306a36Sopenharmony_ci#define ACPI_PM1_STATUS_PRESERVED_BITS 0x0800 /* Bit 11 */ 96162306a36Sopenharmony_ci 96262306a36Sopenharmony_ci/* Write-only bits must be zeroed by software */ 96362306a36Sopenharmony_ci 96462306a36Sopenharmony_ci#define ACPI_PM1_CONTROL_WRITEONLY_BITS 0x2004 /* Bits 13, 2 */ 96562306a36Sopenharmony_ci 96662306a36Sopenharmony_ci/* For control registers, both ignored and reserved bits must be preserved */ 96762306a36Sopenharmony_ci 96862306a36Sopenharmony_ci/* 96962306a36Sopenharmony_ci * For PM1 control, the SCI enable bit (bit 0, SCI_EN) is defined by the 97062306a36Sopenharmony_ci * ACPI specification to be a "preserved" bit - "OSPM always preserves this 97162306a36Sopenharmony_ci * bit position", section 4.7.3.2.1. However, on some machines the OS must 97262306a36Sopenharmony_ci * write a one to this bit after resume for the machine to work properly. 97362306a36Sopenharmony_ci * To enable this, we no longer attempt to preserve this bit. No machines 97462306a36Sopenharmony_ci * are known to fail if the bit is not preserved. (May 2009) 97562306a36Sopenharmony_ci */ 97662306a36Sopenharmony_ci#define ACPI_PM1_CONTROL_IGNORED_BITS 0x0200 /* Bit 9 */ 97762306a36Sopenharmony_ci#define ACPI_PM1_CONTROL_RESERVED_BITS 0xC1F8 /* Bits 14-15, 3-8 */ 97862306a36Sopenharmony_ci#define ACPI_PM1_CONTROL_PRESERVED_BITS \ 97962306a36Sopenharmony_ci (ACPI_PM1_CONTROL_IGNORED_BITS | ACPI_PM1_CONTROL_RESERVED_BITS) 98062306a36Sopenharmony_ci 98162306a36Sopenharmony_ci#define ACPI_PM2_CONTROL_PRESERVED_BITS 0xFFFFFFFE /* All except bit 0 */ 98262306a36Sopenharmony_ci 98362306a36Sopenharmony_ci/* 98462306a36Sopenharmony_ci * Register IDs 98562306a36Sopenharmony_ci * These are the full ACPI registers 98662306a36Sopenharmony_ci */ 98762306a36Sopenharmony_ci#define ACPI_REGISTER_PM1_STATUS 0x01 98862306a36Sopenharmony_ci#define ACPI_REGISTER_PM1_ENABLE 0x02 98962306a36Sopenharmony_ci#define ACPI_REGISTER_PM1_CONTROL 0x03 99062306a36Sopenharmony_ci#define ACPI_REGISTER_PM2_CONTROL 0x04 99162306a36Sopenharmony_ci#define ACPI_REGISTER_PM_TIMER 0x05 99262306a36Sopenharmony_ci#define ACPI_REGISTER_PROCESSOR_BLOCK 0x06 99362306a36Sopenharmony_ci#define ACPI_REGISTER_SMI_COMMAND_BLOCK 0x07 99462306a36Sopenharmony_ci 99562306a36Sopenharmony_ci/* Masks used to access the bit_registers */ 99662306a36Sopenharmony_ci 99762306a36Sopenharmony_ci#define ACPI_BITMASK_TIMER_STATUS 0x0001 99862306a36Sopenharmony_ci#define ACPI_BITMASK_BUS_MASTER_STATUS 0x0010 99962306a36Sopenharmony_ci#define ACPI_BITMASK_GLOBAL_LOCK_STATUS 0x0020 100062306a36Sopenharmony_ci#define ACPI_BITMASK_POWER_BUTTON_STATUS 0x0100 100162306a36Sopenharmony_ci#define ACPI_BITMASK_SLEEP_BUTTON_STATUS 0x0200 100262306a36Sopenharmony_ci#define ACPI_BITMASK_RT_CLOCK_STATUS 0x0400 100362306a36Sopenharmony_ci#define ACPI_BITMASK_PCIEXP_WAKE_STATUS 0x4000 /* ACPI 3.0 */ 100462306a36Sopenharmony_ci#define ACPI_BITMASK_WAKE_STATUS 0x8000 100562306a36Sopenharmony_ci 100662306a36Sopenharmony_ci#define ACPI_BITMASK_ALL_FIXED_STATUS (\ 100762306a36Sopenharmony_ci ACPI_BITMASK_TIMER_STATUS | \ 100862306a36Sopenharmony_ci ACPI_BITMASK_BUS_MASTER_STATUS | \ 100962306a36Sopenharmony_ci ACPI_BITMASK_GLOBAL_LOCK_STATUS | \ 101062306a36Sopenharmony_ci ACPI_BITMASK_POWER_BUTTON_STATUS | \ 101162306a36Sopenharmony_ci ACPI_BITMASK_SLEEP_BUTTON_STATUS | \ 101262306a36Sopenharmony_ci ACPI_BITMASK_RT_CLOCK_STATUS | \ 101362306a36Sopenharmony_ci ACPI_BITMASK_PCIEXP_WAKE_STATUS | \ 101462306a36Sopenharmony_ci ACPI_BITMASK_WAKE_STATUS) 101562306a36Sopenharmony_ci 101662306a36Sopenharmony_ci#define ACPI_BITMASK_TIMER_ENABLE 0x0001 101762306a36Sopenharmony_ci#define ACPI_BITMASK_GLOBAL_LOCK_ENABLE 0x0020 101862306a36Sopenharmony_ci#define ACPI_BITMASK_POWER_BUTTON_ENABLE 0x0100 101962306a36Sopenharmony_ci#define ACPI_BITMASK_SLEEP_BUTTON_ENABLE 0x0200 102062306a36Sopenharmony_ci#define ACPI_BITMASK_RT_CLOCK_ENABLE 0x0400 102162306a36Sopenharmony_ci#define ACPI_BITMASK_PCIEXP_WAKE_DISABLE 0x4000 /* ACPI 3.0 */ 102262306a36Sopenharmony_ci 102362306a36Sopenharmony_ci#define ACPI_BITMASK_SCI_ENABLE 0x0001 102462306a36Sopenharmony_ci#define ACPI_BITMASK_BUS_MASTER_RLD 0x0002 102562306a36Sopenharmony_ci#define ACPI_BITMASK_GLOBAL_LOCK_RELEASE 0x0004 102662306a36Sopenharmony_ci#define ACPI_BITMASK_SLEEP_TYPE 0x1C00 102762306a36Sopenharmony_ci#define ACPI_BITMASK_SLEEP_ENABLE 0x2000 102862306a36Sopenharmony_ci 102962306a36Sopenharmony_ci#define ACPI_BITMASK_ARB_DISABLE 0x0001 103062306a36Sopenharmony_ci 103162306a36Sopenharmony_ci/* Raw bit position of each bit_register */ 103262306a36Sopenharmony_ci 103362306a36Sopenharmony_ci#define ACPI_BITPOSITION_TIMER_STATUS 0x00 103462306a36Sopenharmony_ci#define ACPI_BITPOSITION_BUS_MASTER_STATUS 0x04 103562306a36Sopenharmony_ci#define ACPI_BITPOSITION_GLOBAL_LOCK_STATUS 0x05 103662306a36Sopenharmony_ci#define ACPI_BITPOSITION_POWER_BUTTON_STATUS 0x08 103762306a36Sopenharmony_ci#define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS 0x09 103862306a36Sopenharmony_ci#define ACPI_BITPOSITION_RT_CLOCK_STATUS 0x0A 103962306a36Sopenharmony_ci#define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS 0x0E /* ACPI 3.0 */ 104062306a36Sopenharmony_ci#define ACPI_BITPOSITION_WAKE_STATUS 0x0F 104162306a36Sopenharmony_ci 104262306a36Sopenharmony_ci#define ACPI_BITPOSITION_TIMER_ENABLE 0x00 104362306a36Sopenharmony_ci#define ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE 0x05 104462306a36Sopenharmony_ci#define ACPI_BITPOSITION_POWER_BUTTON_ENABLE 0x08 104562306a36Sopenharmony_ci#define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE 0x09 104662306a36Sopenharmony_ci#define ACPI_BITPOSITION_RT_CLOCK_ENABLE 0x0A 104762306a36Sopenharmony_ci#define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE 0x0E /* ACPI 3.0 */ 104862306a36Sopenharmony_ci 104962306a36Sopenharmony_ci#define ACPI_BITPOSITION_SCI_ENABLE 0x00 105062306a36Sopenharmony_ci#define ACPI_BITPOSITION_BUS_MASTER_RLD 0x01 105162306a36Sopenharmony_ci#define ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE 0x02 105262306a36Sopenharmony_ci#define ACPI_BITPOSITION_SLEEP_TYPE 0x0A 105362306a36Sopenharmony_ci#define ACPI_BITPOSITION_SLEEP_ENABLE 0x0D 105462306a36Sopenharmony_ci 105562306a36Sopenharmony_ci#define ACPI_BITPOSITION_ARB_DISABLE 0x00 105662306a36Sopenharmony_ci 105762306a36Sopenharmony_ci/* Structs and definitions for _OSI support and I/O port validation */ 105862306a36Sopenharmony_ci 105962306a36Sopenharmony_ci#define ACPI_ALWAYS_ILLEGAL 0x00 106062306a36Sopenharmony_ci 106162306a36Sopenharmony_cistruct acpi_interface_info { 106262306a36Sopenharmony_ci char *name; 106362306a36Sopenharmony_ci struct acpi_interface_info *next; 106462306a36Sopenharmony_ci u8 flags; 106562306a36Sopenharmony_ci u8 value; 106662306a36Sopenharmony_ci}; 106762306a36Sopenharmony_ci 106862306a36Sopenharmony_ci#define ACPI_OSI_INVALID 0x01 106962306a36Sopenharmony_ci#define ACPI_OSI_DYNAMIC 0x02 107062306a36Sopenharmony_ci#define ACPI_OSI_FEATURE 0x04 107162306a36Sopenharmony_ci#define ACPI_OSI_DEFAULT_INVALID 0x08 107262306a36Sopenharmony_ci#define ACPI_OSI_OPTIONAL_FEATURE (ACPI_OSI_FEATURE | ACPI_OSI_DEFAULT_INVALID | ACPI_OSI_INVALID) 107362306a36Sopenharmony_ci 107462306a36Sopenharmony_cistruct acpi_port_info { 107562306a36Sopenharmony_ci char *name; 107662306a36Sopenharmony_ci u16 start; 107762306a36Sopenharmony_ci u16 end; 107862306a36Sopenharmony_ci u8 osi_dependency; 107962306a36Sopenharmony_ci}; 108062306a36Sopenharmony_ci 108162306a36Sopenharmony_ci/***************************************************************************** 108262306a36Sopenharmony_ci * 108362306a36Sopenharmony_ci * Resource descriptors 108462306a36Sopenharmony_ci * 108562306a36Sopenharmony_ci ****************************************************************************/ 108662306a36Sopenharmony_ci 108762306a36Sopenharmony_ci/* resource_type values */ 108862306a36Sopenharmony_ci 108962306a36Sopenharmony_ci#define ACPI_ADDRESS_TYPE_MEMORY_RANGE 0 109062306a36Sopenharmony_ci#define ACPI_ADDRESS_TYPE_IO_RANGE 1 109162306a36Sopenharmony_ci#define ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE 2 109262306a36Sopenharmony_ci 109362306a36Sopenharmony_ci/* Resource descriptor types and masks */ 109462306a36Sopenharmony_ci 109562306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_LARGE 0x80 109662306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_SMALL 0x00 109762306a36Sopenharmony_ci 109862306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_SMALL_MASK 0x78 /* Bits 6:3 contain the type */ 109962306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK 0x07 /* Bits 2:0 contain the length */ 110062306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_LARGE_MASK 0x7F /* Bits 6:0 contain the type */ 110162306a36Sopenharmony_ci 110262306a36Sopenharmony_ci/* 110362306a36Sopenharmony_ci * Small resource descriptor "names" as defined by the ACPI specification. 110462306a36Sopenharmony_ci * Note: Bits 2:0 are used for the descriptor length 110562306a36Sopenharmony_ci */ 110662306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_IRQ 0x20 110762306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_DMA 0x28 110862306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_START_DEPENDENT 0x30 110962306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_END_DEPENDENT 0x38 111062306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_IO 0x40 111162306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_FIXED_IO 0x48 111262306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_FIXED_DMA 0x50 111362306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_RESERVED_S2 0x58 111462306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_RESERVED_S3 0x60 111562306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_RESERVED_S4 0x68 111662306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_VENDOR_SMALL 0x70 111762306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_END_TAG 0x78 111862306a36Sopenharmony_ci 111962306a36Sopenharmony_ci/* 112062306a36Sopenharmony_ci * Large resource descriptor "names" as defined by the ACPI specification. 112162306a36Sopenharmony_ci * Note: includes the Large Descriptor bit in bit[7] 112262306a36Sopenharmony_ci */ 112362306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_MEMORY24 0x81 112462306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_GENERIC_REGISTER 0x82 112562306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_RESERVED_L1 0x83 112662306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_VENDOR_LARGE 0x84 112762306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_MEMORY32 0x85 112862306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_FIXED_MEMORY32 0x86 112962306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_ADDRESS32 0x87 113062306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_ADDRESS16 0x88 113162306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_EXTENDED_IRQ 0x89 113262306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_ADDRESS64 0x8A 113362306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 0x8B 113462306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_GPIO 0x8C 113562306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_PIN_FUNCTION 0x8D 113662306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_SERIAL_BUS 0x8E 113762306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_PIN_CONFIG 0x8F 113862306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_PIN_GROUP 0x90 113962306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION 0x91 114062306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG 0x92 114162306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_CLOCK_INPUT 0x93 114262306a36Sopenharmony_ci#define ACPI_RESOURCE_NAME_LARGE_MAX 0x94 114362306a36Sopenharmony_ci 114462306a36Sopenharmony_ci/***************************************************************************** 114562306a36Sopenharmony_ci * 114662306a36Sopenharmony_ci * Miscellaneous 114762306a36Sopenharmony_ci * 114862306a36Sopenharmony_ci ****************************************************************************/ 114962306a36Sopenharmony_ci 115062306a36Sopenharmony_ci#define ACPI_ASCII_ZERO 0x30 115162306a36Sopenharmony_ci 115262306a36Sopenharmony_ci/***************************************************************************** 115362306a36Sopenharmony_ci * 115462306a36Sopenharmony_ci * Disassembler 115562306a36Sopenharmony_ci * 115662306a36Sopenharmony_ci ****************************************************************************/ 115762306a36Sopenharmony_ci 115862306a36Sopenharmony_cistruct acpi_external_list { 115962306a36Sopenharmony_ci char *path; 116062306a36Sopenharmony_ci char *internal_path; 116162306a36Sopenharmony_ci struct acpi_external_list *next; 116262306a36Sopenharmony_ci u32 value; 116362306a36Sopenharmony_ci u16 length; 116462306a36Sopenharmony_ci u16 flags; 116562306a36Sopenharmony_ci u8 type; 116662306a36Sopenharmony_ci}; 116762306a36Sopenharmony_ci 116862306a36Sopenharmony_ci/* Values for Flags field above */ 116962306a36Sopenharmony_ci 117062306a36Sopenharmony_ci#define ACPI_EXT_RESOLVED_REFERENCE 0x01 /* Object was resolved during cross ref */ 117162306a36Sopenharmony_ci#define ACPI_EXT_ORIGIN_FROM_FILE 0x02 /* External came from a file */ 117262306a36Sopenharmony_ci#define ACPI_EXT_INTERNAL_PATH_ALLOCATED 0x04 /* Deallocate internal path on completion */ 117362306a36Sopenharmony_ci#define ACPI_EXT_EXTERNAL_EMITTED 0x08 /* External() statement has been emitted */ 117462306a36Sopenharmony_ci#define ACPI_EXT_ORIGIN_FROM_OPCODE 0x10 /* External came from a External() opcode */ 117562306a36Sopenharmony_ci#define ACPI_EXT_CONFLICTING_DECLARATION 0x20 /* External has a conflicting declaration within AML */ 117662306a36Sopenharmony_ci 117762306a36Sopenharmony_cistruct acpi_external_file { 117862306a36Sopenharmony_ci char *path; 117962306a36Sopenharmony_ci struct acpi_external_file *next; 118062306a36Sopenharmony_ci}; 118162306a36Sopenharmony_ci 118262306a36Sopenharmony_cistruct acpi_parse_object_list { 118362306a36Sopenharmony_ci union acpi_parse_object *op; 118462306a36Sopenharmony_ci struct acpi_parse_object_list *next; 118562306a36Sopenharmony_ci}; 118662306a36Sopenharmony_ci 118762306a36Sopenharmony_ci/***************************************************************************** 118862306a36Sopenharmony_ci * 118962306a36Sopenharmony_ci * Debugger 119062306a36Sopenharmony_ci * 119162306a36Sopenharmony_ci ****************************************************************************/ 119262306a36Sopenharmony_ci 119362306a36Sopenharmony_cistruct acpi_db_method_info { 119462306a36Sopenharmony_ci acpi_handle method; 119562306a36Sopenharmony_ci acpi_handle main_thread_gate; 119662306a36Sopenharmony_ci acpi_handle thread_complete_gate; 119762306a36Sopenharmony_ci acpi_handle info_gate; 119862306a36Sopenharmony_ci acpi_thread_id *threads; 119962306a36Sopenharmony_ci u32 num_threads; 120062306a36Sopenharmony_ci u32 num_created; 120162306a36Sopenharmony_ci u32 num_completed; 120262306a36Sopenharmony_ci 120362306a36Sopenharmony_ci char *name; 120462306a36Sopenharmony_ci u32 flags; 120562306a36Sopenharmony_ci u32 num_loops; 120662306a36Sopenharmony_ci char pathname[ACPI_DB_LINE_BUFFER_SIZE]; 120762306a36Sopenharmony_ci char **args; 120862306a36Sopenharmony_ci acpi_object_type *types; 120962306a36Sopenharmony_ci 121062306a36Sopenharmony_ci /* 121162306a36Sopenharmony_ci * Arguments to be passed to method for the commands Threads and 121262306a36Sopenharmony_ci * Background. Note, ACPI specifies a maximum of 7 arguments (0 - 6). 121362306a36Sopenharmony_ci * 121462306a36Sopenharmony_ci * For the Threads command, the Number of threads, ID of current 121562306a36Sopenharmony_ci * thread and Index of current thread inside all them created. 121662306a36Sopenharmony_ci */ 121762306a36Sopenharmony_ci char init_args; 121862306a36Sopenharmony_ci#ifdef ACPI_DEBUGGER 121962306a36Sopenharmony_ci acpi_object_type arg_types[ACPI_METHOD_NUM_ARGS]; 122062306a36Sopenharmony_ci#endif 122162306a36Sopenharmony_ci char *arguments[ACPI_METHOD_NUM_ARGS]; 122262306a36Sopenharmony_ci char num_threads_str[11]; 122362306a36Sopenharmony_ci char id_of_thread_str[11]; 122462306a36Sopenharmony_ci char index_of_thread_str[11]; 122562306a36Sopenharmony_ci}; 122662306a36Sopenharmony_ci 122762306a36Sopenharmony_cistruct acpi_integrity_info { 122862306a36Sopenharmony_ci u32 nodes; 122962306a36Sopenharmony_ci u32 objects; 123062306a36Sopenharmony_ci}; 123162306a36Sopenharmony_ci 123262306a36Sopenharmony_ci#define ACPI_DB_DISABLE_OUTPUT 0x00 123362306a36Sopenharmony_ci#define ACPI_DB_REDIRECTABLE_OUTPUT 0x01 123462306a36Sopenharmony_ci#define ACPI_DB_CONSOLE_OUTPUT 0x02 123562306a36Sopenharmony_ci#define ACPI_DB_DUPLICATE_OUTPUT 0x03 123662306a36Sopenharmony_ci 123762306a36Sopenharmony_cistruct acpi_object_info { 123862306a36Sopenharmony_ci u32 types[ACPI_TOTAL_TYPES]; 123962306a36Sopenharmony_ci}; 124062306a36Sopenharmony_ci 124162306a36Sopenharmony_ci/***************************************************************************** 124262306a36Sopenharmony_ci * 124362306a36Sopenharmony_ci * Debug 124462306a36Sopenharmony_ci * 124562306a36Sopenharmony_ci ****************************************************************************/ 124662306a36Sopenharmony_ci 124762306a36Sopenharmony_ci/* Entry for a memory allocation (debug only) */ 124862306a36Sopenharmony_ci 124962306a36Sopenharmony_ci#define ACPI_MEM_MALLOC 0 125062306a36Sopenharmony_ci#define ACPI_MEM_CALLOC 1 125162306a36Sopenharmony_ci#define ACPI_MAX_MODULE_NAME 16 125262306a36Sopenharmony_ci 125362306a36Sopenharmony_ci#define ACPI_COMMON_DEBUG_MEM_HEADER \ 125462306a36Sopenharmony_ci struct acpi_debug_mem_block *previous; \ 125562306a36Sopenharmony_ci struct acpi_debug_mem_block *next; \ 125662306a36Sopenharmony_ci u32 size; \ 125762306a36Sopenharmony_ci u32 component; \ 125862306a36Sopenharmony_ci u32 line; \ 125962306a36Sopenharmony_ci char module[ACPI_MAX_MODULE_NAME]; \ 126062306a36Sopenharmony_ci u8 alloc_type; 126162306a36Sopenharmony_ci 126262306a36Sopenharmony_cistruct acpi_debug_mem_header { 126362306a36Sopenharmony_ciACPI_COMMON_DEBUG_MEM_HEADER}; 126462306a36Sopenharmony_ci 126562306a36Sopenharmony_cistruct acpi_debug_mem_block { 126662306a36Sopenharmony_ci ACPI_COMMON_DEBUG_MEM_HEADER u64 user_space; 126762306a36Sopenharmony_ci}; 126862306a36Sopenharmony_ci 126962306a36Sopenharmony_ci#define ACPI_MEM_LIST_GLOBAL 0 127062306a36Sopenharmony_ci#define ACPI_MEM_LIST_NSNODE 1 127162306a36Sopenharmony_ci#define ACPI_MEM_LIST_MAX 1 127262306a36Sopenharmony_ci#define ACPI_NUM_MEM_LISTS 2 127362306a36Sopenharmony_ci 127462306a36Sopenharmony_ci/***************************************************************************** 127562306a36Sopenharmony_ci * 127662306a36Sopenharmony_ci * Info/help support 127762306a36Sopenharmony_ci * 127862306a36Sopenharmony_ci ****************************************************************************/ 127962306a36Sopenharmony_ci 128062306a36Sopenharmony_cistruct ah_predefined_name { 128162306a36Sopenharmony_ci char *name; 128262306a36Sopenharmony_ci char *description; 128362306a36Sopenharmony_ci#ifndef ACPI_ASL_COMPILER 128462306a36Sopenharmony_ci char *action; 128562306a36Sopenharmony_ci#endif 128662306a36Sopenharmony_ci}; 128762306a36Sopenharmony_ci 128862306a36Sopenharmony_cistruct ah_device_id { 128962306a36Sopenharmony_ci char *name; 129062306a36Sopenharmony_ci char *description; 129162306a36Sopenharmony_ci}; 129262306a36Sopenharmony_ci 129362306a36Sopenharmony_cistruct ah_uuid { 129462306a36Sopenharmony_ci char *description; 129562306a36Sopenharmony_ci char *string; 129662306a36Sopenharmony_ci}; 129762306a36Sopenharmony_ci 129862306a36Sopenharmony_cistruct ah_table { 129962306a36Sopenharmony_ci char *signature; 130062306a36Sopenharmony_ci char *description; 130162306a36Sopenharmony_ci}; 130262306a36Sopenharmony_ci 130362306a36Sopenharmony_ci#endif /* __ACLOCAL_H__ */ 1304