
/******************************************************************************
 *
 * Name: acobject.h - Definition of union acpi_operand_object    (Internal object only)
 *
 *****************************************************************************/

/*
 * Copyright (C) 2000 - 2005, R. Byron Moore
 * 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


/*
 * The union 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.
 */

/*******************************************************************************
 *
 * Common Descriptors
 *
 ******************************************************************************/

/*
 * Common area for all objects.
 *
 * data_type is used to differentiate between internal descriptors, and MUST
 * be the first byte in this structure.
 */
#define ACPI_OBJECT_COMMON_HEADER   /* SIZE/ALIGNMENT: 32 bits, one ptr plus trailing 8-bit flag */\
	u8                                      descriptor;         /* To differentiate various internal objs */\
	u8                                      type;               /* acpi_object_type */\
	u16                                     reference_count;    /* For object deletion management */\
	union acpi_operand_object               *next_object;       /* Objects linked to parent NS node */\
	u8                                      flags; \

/* Values for flag byte above */

#define AOPOBJ_AML_CONSTANT         0x01
#define AOPOBJ_STATIC_POINTER       0x02
#define AOPOBJ_DATA_VALID           0x04
#define AOPOBJ_OBJECT_INITIALIZED   0x08
#define AOPOBJ_SETUP_COMPLETE       0x10
#define AOPOBJ_SINGLE_DATUM         0x20


/*
 * 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      /* SIZE/ALIGNMENT: 24 bits + three 32-bit values */\
	u8                                      field_flags;        /* Access, update, and lock bits */\
	u8                                      attribute;          /* From access_as keyword */\
	u8                                      access_byte_width;  /* Read/Write size in bytes */\
	u32                                     bit_length;         /* Length of field in bits */\
	u32                                     base_byte_offset;   /* Byte offset within containing object */\
	u8                                      start_field_bit_offset;/* Bit offset within first field datum (0-63) */\
	u8                                      access_bit_width;   /* Read/Write size in bits (8-64) */\
	u32                                     value;              /* Value to store into the Bank or Index register */\
	struct acpi_namespace_node              *node;              /* Link back to parent node */


/*
 * Fields common to both Strings and Buffers
 */
#define ACPI_COMMON_BUFFER_INFO \
	u32                                     length;


/*
 * Common fields for objects that support ASL notifications
 */
#define ACPI_COMMON_NOTIFY_INFO \
	union acpi_operand_object               *system_notify;     /* Handler for system notifies */\
	union acpi_operand_object               *device_notify;     /* Handler for driver notifies */\
	union acpi_operand_object               *handler;           /* Handler for Address space */


/******************************************************************************
 *
 * Basic data types
 *
 *****************************************************************************/

struct acpi_object_common
{
	ACPI_OBJECT_COMMON_HEADER
};


struct acpi_object_integer
{
	ACPI_OBJECT_COMMON_HEADER
	acpi_integer                            value;
};


/*
 * Note: The String and Buffer object must be identical through the Pointer
 * element.  There is code that depends on this.
 */
struct acpi_object_string           /* Null terminated, ASCII characters only */
{
	ACPI_OBJECT_COMMON_HEADER
	ACPI_COMMON_BUFFER_INFO
	char                                    *pointer;           /* String in AML stream or allocated string */
};


struct acpi_object_buffer
{
	ACPI_OBJECT_COMMON_HEADER
	ACPI_COMMON_BUFFER_INFO
	u8                                      *pointer;           /* Buffer in AML stream or allocated buffer */
	struct acpi_namespace_node              *node;              /* Link back to parent node */
	u8                                      *aml_start;
	u32                                     aml_length;
};


struct acpi_object_package
{
	ACPI_OBJECT_COMMON_HEADER

	u32                                     count;              /* # of elements in package */
	u32                                     aml_length;
	u8                                      *aml_start;
	struct acpi_namespace_node              *node;              /* Link back to parent node */
	union acpi_operand_object               **elements;         /* Array of pointers to acpi_objects */
};


/******************************************************************************
 *
 * Complex data types
 *
 *****************************************************************************/

struct acpi_object_event
{
	ACPI_OBJECT_COMMON_HEADER
	void                                    *semaphore;
};


#define ACPI_INFINITE_CONCURRENCY   0xFF

typedef
acpi_status (*ACPI_INTERNAL_METHOD) (
	struct acpi_walk_state          *walk_state);

struct acpi_object_method
{
	ACPI_OBJECT_COMMON_HEADER
	u8                                      method_flags;
	u8                                      param_count;
	u32                                     aml_length;
	void                                    *semaphore;
	u8                                      *aml_start;
	ACPI_INTERNAL_METHOD            implementation;
	u8                                      concurrency;
	u8                                      thread_count;
	acpi_owner_id                           owning_id;
};


struct acpi_object_mutex
{
	ACPI_OBJECT_COMMON_HEADER
	u8                                      sync_level;         /* 0-15, specified in Mutex() call */
	u16                                     acquisition_depth;  /* Allow multiple Acquires, same thread */
	struct acpi_thread_state                *owner_thread;      /* Current owner of the mutex */
	void                                    *semaphore;         /* Actual OS synchronization object */
	union acpi_operand_object               *prev;              /* Link for list of acquired mutexes */
	union acpi_operand_object               *next;              /* Link for list of acquired mutexes */
	struct acpi_namespace_node              *node;              /* Containing namespace node */
	u8                                      original_sync_level; /* Owner's original sync level (0-15) */
};


struct acpi_object_region
{
	ACPI_OBJECT_COMMON_HEADER

	u8                                      space_id;
	union acpi_operand_object               *handler;           /* Handler for region access */
	struct acpi_namespace_node              *node;              /* Containing namespace node */
	union acpi_operand_object               *next;
	u32                                     length;
	acpi_physical_address                   address;
};


/******************************************************************************
 *
 * Objects that can be notified.  All share a common notify_info area.
 *
 *****************************************************************************/

struct acpi_object_notify_common            /* COMMON NOTIFY for POWER, PROCESSOR, DEVICE, and THERMAL */
{
	ACPI_OBJECT_COMMON_HEADER
	ACPI_COMMON_NOTIFY_INFO
};


struct acpi_object_device
{
	ACPI_OBJECT_COMMON_HEADER
	ACPI_COMMON_NOTIFY_INFO
	struct acpi_gpe_block_info              *gpe_block;
};


struct acpi_object_power_resource
{
	ACPI_OBJECT_COMMON_HEADER
	ACPI_COMMON_NOTIFY_INFO
	u32                                     system_level;
	u32                                     resource_order;
};


struct acpi_object_processor
{
	ACPI_OBJECT_COMMON_HEADER
	ACPI_COMMON_NOTIFY_INFO
	u32                                     proc_id;
	u32                                     length;
	acpi_io_address                         address;
};


struct acpi_object_thermal_zone
{
	ACPI_OBJECT_COMMON_HEADER
	ACPI_COMMON_NOTIFY_INFO
};


/******************************************************************************
 *
 * Fields.  All share a common header/info field.
 *
 *****************************************************************************/

struct acpi_object_field_common                         /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */
{
	ACPI_OBJECT_COMMON_HEADER
	ACPI_COMMON_FIELD_INFO
	union acpi_operand_object               *region_obj;        /* Containing Operation Region object */
			  /* (REGION/BANK fields only) */
};


struct acpi_object_region_field
{
	ACPI_OBJECT_COMMON_HEADER
	ACPI_COMMON_FIELD_INFO
	union acpi_operand_object               *region_obj;        /* Containing op_region object */
};


struct acpi_object_bank_field
{
	ACPI_OBJECT_COMMON_HEADER
	ACPI_COMMON_FIELD_INFO
	union acpi_operand_object               *region_obj;        /* Containing op_region object */
	union acpi_operand_object               *bank_obj;          /* bank_select Register object */
};


struct acpi_object_index_field
{
	ACPI_OBJECT_COMMON_HEADER
	ACPI_COMMON_FIELD_INFO

	/*
	 * No "region_obj" pointer needed since the Index and Data registers
	 * are each field definitions unto themselves.
	 */
	union acpi_operand_object               *index_obj;         /* Index register */
	union acpi_operand_object               *data_obj;          /* Data register */
};


/* The buffer_field is different in that it is part of a Buffer, not an op_region */

struct acpi_object_buffer_field
{
	ACPI_OBJECT_COMMON_HEADER
	ACPI_COMMON_FIELD_INFO
	union acpi_operand_object               *buffer_obj;        /* Containing Buffer object */
};


/******************************************************************************
 *
 * Objects for handlers
 *
 *****************************************************************************/

struct acpi_object_notify_handler
{
	ACPI_OBJECT_COMMON_HEADER
	struct acpi_namespace_node              *node;              /* Parent device */
	acpi_notify_handler                     handler;
	void                                    *context;
};


/* Flags for address handler */

#define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED  0x1


struct acpi_object_addr_handler
{
	ACPI_OBJECT_COMMON_HEADER
	u8                                      space_id;
	u16                                     hflags;
	acpi_adr_space_handler                  handler;
	struct acpi_namespace_node              *node;              /* Parent device */
	void                                    *context;
	acpi_adr_space_setup                    setup;
	union acpi_operand_object               *region_list;       /* regions using this handler */
	union acpi_operand_object               *next;
};


/******************************************************************************
 *
 * Special internal objects
 *
 *****************************************************************************/

/*
 * The Reference object type is used for these opcodes:
 * Arg[0-6], Local[0-7], index_op, name_op, zero_op, one_op, ones_op, debug_op
 */
struct acpi_object_reference
{
	ACPI_OBJECT_COMMON_HEADER
	u8                                      target_type;        /* Used for index_op */
	u16                                     opcode;
	u32                                     offset;             /* Used for arg_op, local_op, and index_op */
	void                                    *object;            /* name_op=>HANDLE to obj, index_op=>union acpi_operand_object  */
	struct acpi_namespace_node              *node;
	union acpi_operand_object               **where;
};


/*
 * Extra object is used as additional storage for types that
 * have AML code in their declarations (term_args) that must be
 * evaluated at run time.
 *
 * Currently: Region and field_unit types
 */
struct acpi_object_extra
{
	ACPI_OBJECT_COMMON_HEADER
	u8                                      byte_fill1;
	u16                                     word_fill1;
	u32                                     aml_length;
	u8                                      *aml_start;
	struct acpi_namespace_node              *method_REG;        /* _REG method for this region (if any) */
	void                                    *region_context;    /* Region-specific data */
};


/* Additional data that can be attached to namespace nodes */

struct acpi_object_data
{
	ACPI_OBJECT_COMMON_HEADER
	acpi_object_handler                     handler;
	void                                    *pointer;
};


/* Structure used when objects are cached for reuse */

struct acpi_object_cache_list
{
	ACPI_OBJECT_COMMON_HEADER
	union acpi_operand_object               *next;              /* Link for object cache and internal lists*/
};


/******************************************************************************
 *
 * union acpi_operand_object Descriptor - a giant union of all of the above
 *
 *****************************************************************************/

union acpi_operand_object
{
	struct acpi_object_common               common;
	struct acpi_object_integer              integer;
	struct acpi_object_string               string;
	struct acpi_object_buffer               buffer;
	struct acpi_object_package              package;
	struct acpi_object_event                event;
	struct acpi_object_method               method;
	struct acpi_object_mutex                mutex;
	struct acpi_object_region               region;
	struct acpi_object_notify_common        common_notify;
	struct acpi_object_device               device;
	struct acpi_object_power_resource       power_resource;
	struct acpi_object_processor            processor;
	struct acpi_object_thermal_zone         thermal_zone;
	struct acpi_object_field_common         common_field;
	struct acpi_object_region_field         field;
	struct acpi_object_buffer_field         buffer_field;
	struct acpi_object_bank_field           bank_field;
	struct acpi_object_index_field          index_field;
	struct acpi_object_notify_handler       notify;
	struct acpi_object_addr_handler         address_space;
	struct acpi_object_reference            reference;
	struct acpi_object_extra                extra;
	struct acpi_object_data                 data;
	struct acpi_object_cache_list           cache;
};


/******************************************************************************
 *
 * union acpi_descriptor - objects that share a common descriptor identifier
 *
 *****************************************************************************/

/* Object descriptor types */

#define ACPI_DESC_TYPE_CACHED           0x01        /* Used only when object is cached */
#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


union acpi_descriptor
{
	u8                                      descriptor_id;  /* To differentiate various internal objs */\
	union acpi_operand_object               object;
	struct acpi_namespace_node              node;
	union acpi_parse_object                 op;
};


#endif /* _ACOBJECT_H */
