11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
461686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore * Name: acobject.h - Definition of union acpi_operand_object  (Internal object only)
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *****************************************************************************/
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
977848130e53b06c22fe37a7b6acbb82bb3e9bfbaBob Moore * Copyright (C) 2000 - 2012, Intel Corp.
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * All rights reserved.
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Redistribution and use in source and binary forms, with or without
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * modification, are permitted provided that the following conditions
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * are met:
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 1. Redistributions of source code must retain the above copyright
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    notice, this list of conditions, and the following disclaimer,
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    without modification.
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 2. Redistributions in binary form must reproduce at minimum a disclaimer
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    substantially similar to the "NO WARRANTY" disclaimer below
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    ("Disclaimer") and any redistribution must be conditioned upon
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    including a substantially similar Disclaimer requirement for further
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    binary redistribution.
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 3. Neither the names of the above-listed copyright holders nor the names
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    of any contributors may be used to endorse or promote products derived
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    from this software without specific prior written permission.
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Alternatively, this software may be distributed under the terms of the
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License ("GPL") version 2 as published by the Free
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Software Foundation.
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * NO WARRANTY
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * POSSIBILITY OF SUCH DAMAGES.
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _ACOBJECT_H
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _ACOBJECT_H
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4861686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore/* acpisrc:struct_defs -- for acpisrc conversion */
4961686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
5161686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore * The union acpi_operand_object is used to pass AML operands from the dispatcher
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * to the interpreter, and to keep track of the various handlers such as
5361686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore * address space handlers and notify handlers. The object is a constant
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * size in order to allow it to be cached and reused.
557c9626bade13de3f160f0926455328650045d6cdBob Moore *
567c9626bade13de3f160f0926455328650045d6cdBob Moore * Note: The object is optimized to be aligned and will not work if it is
577c9626bade13de3f160f0926455328650045d6cdBob Moore * byte-packed.
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
597c9626bade13de3f160f0926455328650045d6cdBob Moore#if ACPI_MACHINE_WIDTH == 64
607c9626bade13de3f160f0926455328650045d6cdBob Moore#pragma pack(8)
617c9626bade13de3f160f0926455328650045d6cdBob Moore#else
627c9626bade13de3f160f0926455328650045d6cdBob Moore#pragma pack(4)
637c9626bade13de3f160f0926455328650045d6cdBob Moore#endif
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*******************************************************************************
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Common Descriptors
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Common area for all objects.
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
7461686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore * descriptor_type is used to differentiate between internal descriptors, and
7561686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore * must be in the same place across all descriptors
76793c2388cae3fd023b3b5166354931752d42353cBob Moore *
77793c2388cae3fd023b3b5166354931752d42353cBob Moore * Note: The descriptor_type and Type fields must appear in the identical
78793c2388cae3fd023b3b5166354931752d42353cBob Moore * position in both the struct acpi_namespace_node and union acpi_operand_object
79793c2388cae3fd023b3b5166354931752d42353cBob Moore * structures.
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
8161686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore#define ACPI_OBJECT_COMMON_HEADER \
8261686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	union acpi_operand_object       *next_object;       /* Objects linked to parent NS node */\
8361686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8                              descriptor_type;    /* To differentiate various internal objs */\
8461686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8                              type;               /* acpi_object_type */\
8561686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u16                             reference_count;    /* For object deletion management */\
8661686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8                              flags;
8761686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	/*
8861686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	 * Note: There are 3 bytes available here before the
8961686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	 * next natural alignment boundary (for both 32/64 cases)
9061686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	 */
9161686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore
9261686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore/* Values for Flag byte above */
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9420d33aea7ae7ad858f3f91c834d9043cd8122d38Bob Moore#define AOPOBJ_AML_CONSTANT         0x01	/* Integer is an AML constant */
9520d33aea7ae7ad858f3f91c834d9043cd8122d38Bob Moore#define AOPOBJ_STATIC_POINTER       0x02	/* Data is part of an ACPI table, don't delete */
96b595076a180a56d1bb170e6eceda6eb9d76f4cd3Uwe Kleine-König#define AOPOBJ_DATA_VALID           0x04	/* Object is initialized and data is valid */
9720d33aea7ae7ad858f3f91c834d9043cd8122d38Bob Moore#define AOPOBJ_OBJECT_INITIALIZED   0x08	/* Region is initialized, _REG was run */
9820d33aea7ae7ad858f3f91c834d9043cd8122d38Bob Moore#define AOPOBJ_SETUP_COMPLETE       0x10	/* Region setup is complete */
9920d33aea7ae7ad858f3f91c834d9043cd8122d38Bob Moore#define AOPOBJ_INVALID              0x20	/* Host OS won't allow a Region address */
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Basic data types
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *****************************************************************************/
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1074be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_common {
1084be44fcd3bf648b782f4460fd06dfae6c42ded4bLen BrownACPI_OBJECT_COMMON_HEADER};
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1104be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_integer {
1117c9626bade13de3f160f0926455328650045d6cdBob Moore	ACPI_OBJECT_COMMON_HEADER u8 fill[3];	/* Prevent warning on some compilers */
1125df7e6cb42da36c7d878239bebc81907b15f3943Bob Moore	u64 value;
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Note: The String and Buffer object must be identical through the Pointer
11761686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore * and length elements.  There is code that depends on this.
11861686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore *
11961686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore * Fields common to both Strings and Buffers
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
12161686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore#define ACPI_COMMON_BUFFER_INFO(_type) \
12261686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	_type                           *pointer; \
12361686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u32                             length;
12461686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore
1254be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_string {	/* Null terminated, ASCII characters only */
12661686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO(char)	/* String in AML stream or allocated string */
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1294be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_buffer {
13061686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO(u8)	/* Buffer in AML stream or allocated buffer */
1314be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	u32 aml_length;
13261686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8 *aml_start;
13361686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	struct acpi_namespace_node *node;	/* Link back to parent node */
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1364be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_package {
13761686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *node;	/* Link back to parent node */
1384be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	union acpi_operand_object **elements;	/* Array of pointers to acpi_objects */
13961686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8 *aml_start;
14061686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u32 aml_length;
14161686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u32 count;		/* # of elements in package */
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Complex data types
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *****************************************************************************/
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1504be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_event {
151967440e3be1af06ad4dc7bb18d2e3c16130fe067Bob Moore	ACPI_OBJECT_COMMON_HEADER acpi_semaphore os_semaphore;	/* Actual OS synchronization object */
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1544be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_mutex {
1554be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	ACPI_OBJECT_COMMON_HEADER u8 sync_level;	/* 0-15, specified in Mutex() call */
1564be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	u16 acquisition_depth;	/* Allow multiple Acquires, same thread */
157967440e3be1af06ad4dc7bb18d2e3c16130fe067Bob Moore	acpi_mutex os_mutex;	/* Actual OS synchronization object */
158ba886cd4ac957608777fbc8d137f6b9f0450e775Bob Moore	acpi_thread_id thread_id;	/* Current owner of the mutex */
159ba886cd4ac957608777fbc8d137f6b9f0450e775Bob Moore	struct acpi_thread_state *owner_thread;	/* Current owner of the mutex */
1604be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	union acpi_operand_object *prev;	/* Link for list of acquired mutexes */
1614be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	union acpi_operand_object *next;	/* Link for list of acquired mutexes */
1624be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_namespace_node *node;	/* Containing namespace node */
1634be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	u8 original_sync_level;	/* Owner's original sync level (0-15) */
1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1664be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_region {
1674be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	ACPI_OBJECT_COMMON_HEADER u8 space_id;
1684be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_namespace_node *node;	/* Containing namespace node */
16961686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	union acpi_operand_object *handler;	/* Handler for region access */
1704be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	union acpi_operand_object *next;
1714be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_physical_address address;
17261686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u32 length;
17361686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore};
17461686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore
17561686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moorestruct acpi_object_method {
176262948428878fb340127faca1791acb17146122eLin Ming	ACPI_OBJECT_COMMON_HEADER u8 info_flags;
17761686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8 param_count;
178967440e3be1af06ad4dc7bb18d2e3c16130fe067Bob Moore	u8 sync_level;
179967440e3be1af06ad4dc7bb18d2e3c16130fe067Bob Moore	union acpi_operand_object *mutex;
18061686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8 *aml_start;
181e31c32cfe52e98344dad28853c3331879f72c4b0Lin Ming	union {
182e31c32cfe52e98344dad28853c3331879f72c4b0Lin Ming		ACPI_INTERNAL_METHOD implementation;
183e31c32cfe52e98344dad28853c3331879f72c4b0Lin Ming		union acpi_operand_object *handler;
184262948428878fb340127faca1791acb17146122eLin Ming	} dispatch;
185e31c32cfe52e98344dad28853c3331879f72c4b0Lin Ming
18661686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u32 aml_length;
18761686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8 thread_count;
18861686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	acpi_owner_id owner_id;
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
191262948428878fb340127faca1791acb17146122eLin Ming/* Flags for info_flags field above */
192262948428878fb340127faca1791acb17146122eLin Ming
193262948428878fb340127faca1791acb17146122eLin Ming#define ACPI_METHOD_MODULE_LEVEL        0x01	/* Method is actually module-level code */
194262948428878fb340127faca1791acb17146122eLin Ming#define ACPI_METHOD_INTERNAL_ONLY       0x02	/* Method is implemented internally (_OSI) */
195262948428878fb340127faca1791acb17146122eLin Ming#define ACPI_METHOD_SERIALIZED          0x04	/* Method is serialized */
196262948428878fb340127faca1791acb17146122eLin Ming#define ACPI_METHOD_SERIALIZED_PENDING  0x08	/* Method is to be marked serialized */
197262948428878fb340127faca1791acb17146122eLin Ming#define ACPI_METHOD_MODIFIED_NAMESPACE  0x10	/* Method modified the namespace */
198262948428878fb340127faca1791acb17146122eLin Ming
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Objects that can be notified.  All share a common notify_info area.
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *****************************************************************************/
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
20561686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore/*
20661686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore * Common fields for objects that support ASL notifications
20761686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore */
20861686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore#define ACPI_COMMON_NOTIFY_INFO \
20961686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	union acpi_operand_object       *system_notify;     /* Handler for system notifies */\
21061686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	union acpi_operand_object       *device_notify;     /* Handler for driver notifies */\
21161686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	union acpi_operand_object       *handler;	/* Handler for Address space */
21261686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore
2134be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_notify_common {	/* COMMON NOTIFY for POWER, PROCESSOR, DEVICE, and THERMAL */
2144be44fcd3bf648b782f4460fd06dfae6c42ded4bLen BrownACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO};
2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2164be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_device {
2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_OBJECT_COMMON_HEADER
2184be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	    ACPI_COMMON_NOTIFY_INFO struct acpi_gpe_block_info *gpe_block;
2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2214be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_power_resource {
2224be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO u32 system_level;
2234be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	u32 resource_order;
2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2264be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_processor {
2277c9626bade13de3f160f0926455328650045d6cdBob Moore	ACPI_OBJECT_COMMON_HEADER
2287c9626bade13de3f160f0926455328650045d6cdBob Moore	    /* The next two fields take advantage of the 3-byte space before NOTIFY_INFO */
2297c9626bade13de3f160f0926455328650045d6cdBob Moore	u8 proc_id;
23061686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8 length;
231fd3509436fde38d4c854bf5a6b83d2c779904f8eLen Brown	ACPI_COMMON_NOTIFY_INFO acpi_io_address address;
2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2344be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_thermal_zone {
2354be44fcd3bf648b782f4460fd06dfae6c42ded4bLen BrownACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO};
2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Fields.  All share a common header/info field.
2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *****************************************************************************/
2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24361686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore/*
24461686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore * Common bitfield for the field objects
24561686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore * "Field Datum"  -- a datum from the actual field object
24661686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore * "Buffer Datum" -- a datum from a user buffer, read from or to be written to the field
24761686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore */
24861686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore#define ACPI_COMMON_FIELD_INFO \
24961686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8                              field_flags;        /* Access, update, and lock bits */\
25061686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8                              attribute;          /* From access_as keyword */\
25161686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8                              access_byte_width;  /* Read/Write size in bytes */\
25261686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	struct acpi_namespace_node      *node;              /* Link back to parent node */\
25361686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u32                             bit_length;         /* Length of field in bits */\
25461686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u32                             base_byte_offset;   /* Byte offset within containing object */\
25561686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u32                             value;              /* Value to store into the Bank or Index register */\
25661686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8                              start_field_bit_offset;/* Bit offset within first field datum (0-63) */\
2579ce81784c9c0396a6a6be05248928a71134fe60bBob Moore	u8                              access_length;	/* For serial regions/fields */
25809387b43153953006471dbb06ece6bf779d10937Bob Moore
25961686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore
2604be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_field_common {	/* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */
26161686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_object *region_obj;	/* Parent Operation Region object (REGION/BANK fields only) */
2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2644be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_region_field {
2659ce81784c9c0396a6a6be05248928a71134fe60bBob Moore	ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO u16 resource_length;
2669ce81784c9c0396a6a6be05248928a71134fe60bBob Moore	union acpi_operand_object *region_obj;	/* Containing op_region object */
2679ce81784c9c0396a6a6be05248928a71134fe60bBob Moore	u8 *resource_buffer;	/* resource_template for serial regions/fields */
2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2704be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_bank_field {
2714be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_object *region_obj;	/* Containing op_region object */
2724be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	union acpi_operand_object *bank_obj;	/* bank_select Register object */
2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2754be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_index_field {
2764be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO
2774be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	    /*
278b229cf92eee616c7cb5ad8cdb35a19b119f00bc8Bob Moore	     * No "RegionObj" pointer needed since the Index and Data registers
2794be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	     * are each field definitions unto themselves.
2804be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	     */
2814be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	union acpi_operand_object *index_obj;	/* Index register */
2824be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	union acpi_operand_object *data_obj;	/* Data register */
2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* The buffer_field is different in that it is part of a Buffer, not an op_region */
2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2874be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_buffer_field {
2884be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_object *buffer_obj;	/* Containing Buffer object */
2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Objects for handlers
2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *****************************************************************************/
2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2974be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_notify_handler {
2984be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *node;	/* Parent device */
2993f0be67188c60ebf1b5d00354b44b4b24f5af313Rafael J. Wysocki	u32 handler_type;
3004be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_notify_handler handler;
3014be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	void *context;
3023f0be67188c60ebf1b5d00354b44b4b24f5af313Rafael J. Wysocki	struct acpi_object_notify_handler *next;
3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3054be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_addr_handler {
3064be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	ACPI_OBJECT_COMMON_HEADER u8 space_id;
30761686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8 handler_flags;
3084be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_adr_space_handler handler;
3094be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_namespace_node *node;	/* Parent device */
3104be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	void *context;
3114be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_adr_space_setup setup;
3124be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	union acpi_operand_object *region_list;	/* regions using this handler */
3134be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	union acpi_operand_object *next;
3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31661686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore/* Flags for address handler (handler_flags) */
31761686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore
31861686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore#define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED  0x01
31961686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore
3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Special internal objects
3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *****************************************************************************/
3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
3271044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore * The Reference object is used for these opcodes:
3281044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore * Arg[0-6], Local[0-7], index_op, name_op, ref_of_op, load_op, load_table_op, debug_op
3291044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore * The Reference.Class differentiates these types.
3301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
3314be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_reference {
3321044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	ACPI_OBJECT_COMMON_HEADER u8 class;	/* Reference Class */
3331044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	u8 target_type;		/* Used for Index Op */
3341044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	u8 reserved;
33561686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	void *object;		/* name_op=>HANDLE to obj, index_op=>union acpi_operand_object */
3361044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	struct acpi_namespace_node *node;	/* ref_of or Namepath */
3371044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	union acpi_operand_object **where;	/* Target of Index */
3381044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	u32 value;		/* Used for Local/Arg/Index/ddb_handle */
3391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3411044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore/* Values for Reference.Class above */
3421044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore
3431044f1f65b7df2aae979e397904c4985eeb99ba2Bob Mooretypedef enum {
3441044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	ACPI_REFCLASS_LOCAL = 0,	/* Method local */
3451044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	ACPI_REFCLASS_ARG = 1,	/* Method argument */
3461044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	ACPI_REFCLASS_REFOF = 2,	/* Result of ref_of() TBD: Split to Ref/Node and Ref/operand_obj? */
3471044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	ACPI_REFCLASS_INDEX = 3,	/* Result of Index() */
3481044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	ACPI_REFCLASS_TABLE = 4,	/* ddb_handle - Load(), load_table() */
3491044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	ACPI_REFCLASS_NAME = 5,	/* Reference to a named object */
3501044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	ACPI_REFCLASS_DEBUG = 6,	/* Debug object */
3511044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore
3521044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore	ACPI_REFCLASS_MAX = 6
3531044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore} ACPI_REFERENCE_CLASSES;
3541044f1f65b7df2aae979e397904c4985eeb99ba2Bob Moore
3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
3561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Extra object is used as additional storage for types that
3571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * have AML code in their declarations (term_args) that must be
3581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * evaluated at run time.
3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Currently: Region and field_unit types
3611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
3624be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_extra {
36361686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *method_REG;	/* _REG method for this region (if any) */
3648931d9ea78848b073bf299594f148b83abde4a5eLin Ming	struct acpi_namespace_node *scope_node;
3654be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	void *region_context;	/* Region-specific data */
36661686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8 *aml_start;
36761686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u32 aml_length;
3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Additional data that can be attached to namespace nodes */
3711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3724be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_data {
3734be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	ACPI_OBJECT_COMMON_HEADER acpi_object_handler handler;
3744be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	void *pointer;
3751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Structure used when objects are cached for reuse */
3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3794be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstruct acpi_object_cache_list {
3804be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	ACPI_OBJECT_COMMON_HEADER union acpi_operand_object *next;	/* Link for object cache and internal lists */
3811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
3841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * union acpi_operand_object Descriptor - a giant union of all of the above
3861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *****************************************************************************/
3881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3894be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownunion acpi_operand_object {
3904be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_common common;
3914be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_integer integer;
3924be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_string string;
3934be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_buffer buffer;
3944be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_package package;
3954be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_event event;
3964be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_method method;
3974be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_mutex mutex;
3984be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_region region;
3994be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_notify_common common_notify;
4004be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_device device;
4014be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_power_resource power_resource;
4024be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_processor processor;
4034be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_thermal_zone thermal_zone;
4044be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_field_common common_field;
4054be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_region_field field;
4064be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_buffer_field buffer_field;
4074be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_bank_field bank_field;
4084be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_index_field index_field;
4094be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_notify_handler notify;
4104be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_addr_handler address_space;
4114be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_reference reference;
4124be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_extra extra;
4134be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_data data;
4144be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_object_cache_list cache;
4158d5c54b65b20bf81fa9841a27143e2f71f3a7756Bob Moore
4168d5c54b65b20bf81fa9841a27143e2f71f3a7756Bob Moore	/*
4178d5c54b65b20bf81fa9841a27143e2f71f3a7756Bob Moore	 * Add namespace node to union in order to simplify code that accepts both
4188d5c54b65b20bf81fa9841a27143e2f71f3a7756Bob Moore	 * ACPI_OPERAND_OBJECTs and ACPI_NAMESPACE_NODEs. The structures share
4198d5c54b65b20bf81fa9841a27143e2f71f3a7756Bob Moore	 * a common descriptor_type field in order to differentiate them.
4208d5c54b65b20bf81fa9841a27143e2f71f3a7756Bob Moore	 */
4218d5c54b65b20bf81fa9841a27143e2f71f3a7756Bob Moore	struct acpi_namespace_node node;
4221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
4231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
4251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * union acpi_descriptor - objects that share a common descriptor identifier
4271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *****************************************************************************/
4291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Object descriptor types */
4311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4324be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown#define ACPI_DESC_TYPE_CACHED           0x01	/* Used only when object is cached */
4331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_STATE            0x02
4341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_STATE_UPDATE     0x03
4351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_STATE_PACKAGE    0x04
4361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_STATE_CONTROL    0x05
4371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_STATE_RPSCOPE    0x06
4381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_STATE_PSCOPE     0x07
4391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_STATE_WSCOPE     0x08
4401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_STATE_RESULT     0x09
4411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_STATE_NOTIFY     0x0A
4421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_STATE_THREAD     0x0B
4431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_WALK             0x0C
4441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_PARSER           0x0D
4451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_OPERAND          0x0E
4461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_NAMED            0x0F
4471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_DESC_TYPE_MAX              0x0F
4481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
44961686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moorestruct acpi_common_descriptor {
45061686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	void *common_pointer;
45161686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	u8 descriptor_type;	/* To differentiate various internal objs */
45261686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore};
45361686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore
4544be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownunion acpi_descriptor {
45561686124f47d7c4b78610346c5f8f9d8a6d46bb5Bob Moore	struct acpi_common_descriptor common;
4564be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	union acpi_operand_object object;
4574be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	struct acpi_namespace_node node;
4584be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	union acpi_parse_object op;
4591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
4601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4617c9626bade13de3f160f0926455328650045d6cdBob Moore#pragma pack()
4627c9626bade13de3f160f0926455328650045d6cdBob Moore
4634be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown#endif				/* _ACOBJECT_H */
464