acobject.h revision 7b1019a6d29ccb7999dc76cba3dde1c627e8e609
/******************************************************************************
*
* Name: acobject.h - Definition of ACPI_OPERAND_OBJECT (Internal object only)
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2016, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#ifndef _ACOBJECT_H
#define _ACOBJECT_H
/* acpisrc:StructDefs -- for acpisrc conversion */
/*
* The ACPI_OPERAND_OBJECT is used to pass AML operands from the dispatcher
* to the interpreter, and to keep track of the various handlers such as
* address space handlers and notify handlers. The object is a constant
* size in order to allow it to be cached and reused.
*
* Note: The object is optimized to be aligned and will not work if it is
* byte-packed.
*/
#if ACPI_MACHINE_WIDTH == 64
#pragma pack(8)
#else
#pragma pack(4)
#endif
/*******************************************************************************
*
* Common Descriptors
*
******************************************************************************/
/*
* Common area for all objects.
*
* DescriptorType is used to differentiate between internal descriptors, and
* must be in the same place across all descriptors
*
* Note: The DescriptorType and Type fields must appear in the identical
* position in both the ACPI_NAMESPACE_NODE and ACPI_OPERAND_OBJECT
* structures.
*/
#define ACPI_OBJECT_COMMON_HEADER \
/*
* Note: There are 3 bytes available here before the
* next natural alignment boundary (for both 32/64 cases)
*/
/* Values for Flag byte above */
/******************************************************************************
*
* Basic data types
*
*****************************************************************************/
typedef struct acpi_object_common
{
typedef struct acpi_object_integer
{
/*
* Note: The String and Buffer object must be identical through the
* pointer and length elements. There is code that depends on this.
*
* Fields common to both Strings and Buffers
*/
#define ACPI_COMMON_BUFFER_INFO(_Type) \
typedef struct acpi_object_string /* Null terminated, ASCII characters only */
{
ACPI_COMMON_BUFFER_INFO (char) /* String in AML stream or allocated string */
typedef struct acpi_object_buffer
{
typedef struct acpi_object_package
{
/******************************************************************************
*
* Complex data types
*
*****************************************************************************/
typedef struct acpi_object_event
{
typedef struct acpi_object_mutex
{
typedef struct acpi_object_region
{
union acpi_operand_object *Next;
typedef struct acpi_object_method
{
union acpi_operand_object *Mutex;
union acpi_operand_object *Node;
union
{
union acpi_operand_object *Handler;
} Dispatch;
/* Flags for InfoFlags field above */
/******************************************************************************
*
* Objects that can be notified. All share a common NotifyInfo area.
*
*****************************************************************************/
/*
* Common fields for objects that support ASL notifications
*/
#define ACPI_COMMON_NOTIFY_INFO \
typedef struct acpi_object_notify_common /* COMMON NOTIFY for POWER, PROCESSOR, DEVICE, and THERMAL */
{
typedef struct acpi_object_device
{
typedef struct acpi_object_power_resource
{
typedef struct acpi_object_processor
{
/* The next two fields take advantage of the 3-byte space before NOTIFY_INFO */
typedef struct acpi_object_thermal_zone
{
/******************************************************************************
*
*
*****************************************************************************/
/*
* Common bitfield for the field objects
* "Field Datum" -- a datum from the actual field object
* "Buffer Datum" -- a datum from a user buffer, read from or to be written to the field
*/
#define ACPI_COMMON_FIELD_INFO \
typedef struct acpi_object_field_common /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */
{
union acpi_operand_object *RegionObj; /* Parent Operation Region object (REGION/BANK fields only) */
typedef struct acpi_object_region_field
{
typedef struct acpi_object_bank_field
{
typedef struct acpi_object_index_field
{
/*
* No "RegionObj" pointer needed since the Index and Data registers
* are each field definitions unto themselves.
*/
/* The BufferField is different in that it is part of a Buffer, not an OpRegion */
typedef struct acpi_object_buffer_field
{
/******************************************************************************
*
* Objects for handlers
*
*****************************************************************************/
typedef struct acpi_object_notify_handler
{
void *Context;
typedef struct acpi_object_addr_handler
{
void *Context;
union acpi_operand_object *Next;
/* Flags for address handler (HandlerFlags) */
#define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED 0x01
/******************************************************************************
*
* Special internal objects
*
*****************************************************************************/
/*
* The Reference object is used for these opcodes:
* Arg[0-6], Local[0-7], IndexOp, NameOp, RefOfOp, LoadOp, LoadTableOp, DebugOp
* The Reference.Class differentiates these types.
*/
typedef struct acpi_object_reference
{
void *Object; /* NameOp=>HANDLE to obj, IndexOp=>ACPI_OPERAND_OBJECT */
/* Values for Reference.Class above */
typedef enum
{
ACPI_REFCLASS_LOCAL = 0, /* Method local */
/*
* Extra object is used as additional storage for types that
* have AML code in their declarations (TermArgs) that must be
* evaluated at run time.
*
* Currently: Region and FieldUnit types
*/
typedef struct acpi_object_extra
{
void *RegionContext; /* Region-specific data */
/* Additional data that can be attached to namespace nodes */
typedef struct acpi_object_data
{
void *Pointer;
/* Structure used when objects are cached for reuse */
typedef struct acpi_object_cache_list
{
/******************************************************************************
*
* ACPI_OPERAND_OBJECT Descriptor - a giant union of all of the above
*
*****************************************************************************/
typedef union acpi_operand_object
{
/*
* Add namespace node to union in order to simplify code that accepts both
* ACPI_OPERAND_OBJECTs and ACPI_NAMESPACE_NODEs. The structures share
* a common DescriptorType field in order to differentiate them.
*/
/******************************************************************************
*
* ACPI_DESCRIPTOR - objects that share a common descriptor identifier
*
*****************************************************************************/
/* Object descriptor types */
#define ACPI_DESC_TYPE_STATE 0x02
#define ACPI_DESC_TYPE_STATE_UPDATE 0x03
#define ACPI_DESC_TYPE_STATE_PACKAGE 0x04
#define ACPI_DESC_TYPE_STATE_CONTROL 0x05
#define ACPI_DESC_TYPE_STATE_RPSCOPE 0x06
#define ACPI_DESC_TYPE_STATE_PSCOPE 0x07
#define ACPI_DESC_TYPE_STATE_WSCOPE 0x08
#define ACPI_DESC_TYPE_STATE_RESULT 0x09
#define ACPI_DESC_TYPE_STATE_NOTIFY 0x0A
#define ACPI_DESC_TYPE_STATE_THREAD 0x0B
#define ACPI_DESC_TYPE_WALK 0x0C
#define ACPI_DESC_TYPE_PARSER 0x0D
#define ACPI_DESC_TYPE_OPERAND 0x0E
#define ACPI_DESC_TYPE_NAMED 0x0F
#define ACPI_DESC_TYPE_MAX 0x0F
typedef struct acpi_common_descriptor
{
void *CommonPointer;
typedef union acpi_descriptor
{
#pragma pack()
#endif /* _ACOBJECT_H */