Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- patch fglrx 9-2 aka 8.582 to work with linux 2.6.29
- **** new version ****
- contains files from acpica.org
- USE AT YOUR OWN RISK
- diff -Naurp a/2.6.x/Makefile b/2.6.x/Makefile
- --- a/2.6.x/Makefile 2009-02-28 21:53:58.000000000 +0100
- +++ b/2.6.x/Makefile 2009-02-28 22:24:38.000000000 +0100
- @@ -55,7 +55,10 @@ fglrx-hdrs += firegl_public.h
- kcl_pci.h \
- kcl_str.h \
- kcl_type.h \
- - kcl_wait.h
- + kcl_wait.h \
- + acpica-acconfig.h \
- + acpica-aclocal.h \
- + acpica-acobject.h
- drm-hdrs += drm.h drmP.h drm_os_linux.h drm_proc.h drm_compat.h
- diff -Naurp a/acpica-acconfig.h b/acpica-acconfig.h
- --- a/acpica-acconfig.h 1970-01-01 01:00:00.000000000 +0100
- +++ b/acpica-acconfig.h 2009-02-28 22:24:01.000000000 +0100
- @@ -0,0 +1,217 @@
- +/******************************************************************************
- + *
- + * Name: acconfig.h - Global configuration constants
- + *
- + *****************************************************************************/
- +
- +/*
- + * Copyright (C) 2000 - 2008, 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 _ACCONFIG_H
- +#define _ACCONFIG_H
- +
- +/******************************************************************************
- + *
- + * Configuration options
- + *
- + *****************************************************************************/
- +
- +/*
- + * ACPI_DEBUG_OUTPUT - This switch enables all the debug facilities of the
- + * ACPI subsystem. This includes the DEBUG_PRINT output
- + * statements. When disabled, all DEBUG_PRINT
- + * statements are compiled out.
- + *
- + * ACPI_APPLICATION - Use this switch if the subsystem is going to be run
- + * at the application level.
- + *
- + */
- +
- +/*
- + * OS name, used for the _OS object. The _OS object is essentially obsolete,
- + * but there is a large base of ASL/AML code in existing machines that check
- + * for the string below. The use of this string usually guarantees that
- + * the ASL will execute down the most tested code path. Also, there is some
- + * code that will not execute the _OSI method unless _OS matches the string
- + * below. Therefore, change this string at your own risk.
- + */
- +#define ACPI_OS_NAME "Microsoft Windows NT"
- +
- +/* Maximum objects in the various object caches */
- +
- +#define ACPI_MAX_STATE_CACHE_DEPTH 96 /* State objects */
- +#define ACPI_MAX_PARSE_CACHE_DEPTH 96 /* Parse tree objects */
- +#define ACPI_MAX_EXTPARSE_CACHE_DEPTH 96 /* Parse tree objects */
- +#define ACPI_MAX_OBJECT_CACHE_DEPTH 96 /* Interpreter operand objects */
- +#define ACPI_MAX_NAMESPACE_CACHE_DEPTH 96 /* Namespace objects */
- +
- +/*
- + * Should the subsystem abort the loading of an ACPI table if the
- + * table checksum is incorrect?
- + */
- +#define ACPI_CHECKSUM_ABORT FALSE
- +
- +/******************************************************************************
- + *
- + * Subsystem Constants
- + *
- + *****************************************************************************/
- +
- +/* Version of ACPI supported */
- +
- +#define ACPI_CA_SUPPORT_LEVEL 3
- +
- +/* Maximum count for a semaphore object */
- +
- +#define ACPI_MAX_SEMAPHORE_COUNT 256
- +
- +/* Maximum object reference count (detects object deletion issues) */
- +
- +#define ACPI_MAX_REFERENCE_COUNT 0x1000
- +
- +/* Size of cached memory mapping for system memory operation region */
- +
- +#define ACPI_SYSMEM_REGION_WINDOW_SIZE 4096
- +
- +/* owner_id tracking. 8 entries allows for 255 owner_ids */
- +
- +#define ACPI_NUM_OWNERID_MASKS 8
- +
- +/* Size of the root table array is increased by this increment */
- +
- +#define ACPI_ROOT_TABLE_SIZE_INCREMENT 4
- +
- +/* Maximum number of While() loop iterations before forced abort */
- +
- +#define ACPI_MAX_LOOP_ITERATIONS 0xFFFF
- +
- +/******************************************************************************
- + *
- + * ACPI Specification constants (Do not change unless the specification changes)
- + *
- + *****************************************************************************/
- +
- +/* Number of distinct GPE register blocks and register width */
- +
- +#define ACPI_MAX_GPE_BLOCKS 2
- +#define ACPI_GPE_REGISTER_WIDTH 8
- +
- +/* Method info (in WALK_STATE), containing local variables and argumetns */
- +
- +#define ACPI_METHOD_NUM_LOCALS 8
- +#define ACPI_METHOD_MAX_LOCAL 7
- +
- +#define ACPI_METHOD_NUM_ARGS 7
- +#define ACPI_METHOD_MAX_ARG 6
- +
- +/* Length of _HID, _UID, _CID, and UUID values */
- +
- +#define ACPI_DEVICE_ID_LENGTH 0x09
- +#define ACPI_MAX_CID_LENGTH 48
- +#define ACPI_UUID_LENGTH 16
- +
- +/*
- + * Operand Stack (in WALK_STATE), Must be large enough to contain METHOD_MAX_ARG
- + */
- +#define ACPI_OBJ_NUM_OPERANDS 8
- +#define ACPI_OBJ_MAX_OPERAND 7
- +
- +/* Number of elements in the Result Stack frame, can be an arbitrary value */
- +
- +#define ACPI_RESULTS_FRAME_OBJ_NUM 8
- +
- +/*
- + * Maximal number of elements the Result Stack can contain,
- + * it may be an arbitray value not exceeding the types of
- + * result_size and result_count (now u8).
- + */
- +#define ACPI_RESULTS_OBJ_NUM_MAX 255
- +
- +/* Names within the namespace are 4 bytes long */
- +
- +#define ACPI_NAME_SIZE 4
- +#define ACPI_PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 char for separator */
- +#define ACPI_PATH_SEPARATOR '.'
- +
- +/* Sizes for ACPI table headers */
- +
- +#define ACPI_OEM_ID_SIZE 6
- +#define ACPI_OEM_TABLE_ID_SIZE 8
- +
- +/* Constants used in searching for the RSDP in low memory */
- +
- +#define ACPI_EBDA_PTR_LOCATION 0x0000040E /* Physical Address */
- +#define ACPI_EBDA_PTR_LENGTH 2
- +#define ACPI_EBDA_WINDOW_SIZE 1024
- +#define ACPI_HI_RSDP_WINDOW_BASE 0x000E0000 /* Physical Address */
- +#define ACPI_HI_RSDP_WINDOW_SIZE 0x00020000
- +#define ACPI_RSDP_SCAN_STEP 16
- +
- +/* Operation regions */
- +
- +#define ACPI_NUM_PREDEFINED_REGIONS 8
- +#define ACPI_USER_REGION_BEGIN 0x80
- +
- +/* Maximum space_ids for Operation Regions */
- +
- +#define ACPI_MAX_ADDRESS_SPACE 255
- +
- +/* Array sizes. Used for range checking also */
- +
- +#define ACPI_MAX_MATCH_OPCODE 5
- +
- +/* RSDP checksums */
- +
- +#define ACPI_RSDP_CHECKSUM_LENGTH 20
- +#define ACPI_RSDP_XCHECKSUM_LENGTH 36
- +
- +/* SMBus bidirectional buffer size */
- +
- +#define ACPI_SMBUS_BUFFER_SIZE 34
- +
- +/******************************************************************************
- + *
- + * ACPI AML Debugger
- + *
- + *****************************************************************************/
- +
- +#define ACPI_DEBUGGER_MAX_ARGS 8 /* Must be max method args + 1 */
- +
- +#define ACPI_DEBUGGER_COMMAND_PROMPT '-'
- +#define ACPI_DEBUGGER_EXECUTE_PROMPT '%'
- +
- +#endif /* _ACCONFIG_H */
- diff -Naurp a/acpica-aclocal.h b/acpica-aclocal.h
- --- a/acpica-aclocal.h 1970-01-01 01:00:00.000000000 +0100
- +++ b/acpica-aclocal.h 2009-02-28 21:35:32.000000000 +0100
- @@ -0,0 +1,990 @@
- +/******************************************************************************
- + *
- + * Name: aclocal.h - Internal data types used across the ACPI subsystem
- + *
- + *****************************************************************************/
- +
- +/*
- + * Copyright (C) 2000 - 2008, 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 __ACLOCAL_H__
- +#define __ACLOCAL_H__
- +
- +/* acpisrc:struct_defs -- for acpisrc conversion */
- +
- +#define ACPI_SERIALIZED 0xFF
- +
- +typedef u32 acpi_mutex_handle;
- +#define ACPI_GLOBAL_LOCK (acpi_semaphore) (-1)
- +
- +/* Total number of aml opcodes defined */
- +
- +#define AML_NUM_OPCODES 0x7F
- +
- +/* Forward declarations */
- +
- +struct acpi_walk_state;
- +struct acpi_obj_mutex;
- +union acpi_parse_object;
- +
- +/*****************************************************************************
- + *
- + * Mutex typedefs and structs
- + *
- + ****************************************************************************/
- +
- +/*
- + * Predefined handles for the mutex objects used within the subsystem
- + * All mutex objects are automatically created by acpi_ut_mutex_initialize.
- + *
- + * The acquire/release ordering protocol is implied via this list. Mutexes
- + * with a lower value must be acquired before mutexes with a higher value.
- + *
- + * NOTE: any changes here must be reflected in the acpi_gbl_mutex_names
- + * table below also!
- + */
- +#define ACPI_MTX_INTERPRETER 0 /* AML Interpreter, main lock */
- +#define ACPI_MTX_NAMESPACE 1 /* ACPI Namespace */
- +#define ACPI_MTX_TABLES 2 /* Data for ACPI tables */
- +#define ACPI_MTX_EVENTS 3 /* Data for ACPI events */
- +#define ACPI_MTX_CACHES 4 /* Internal caches, general purposes */
- +#define ACPI_MTX_MEMORY 5 /* Debug memory tracking lists */
- +#define ACPI_MTX_DEBUG_CMD_COMPLETE 6 /* AML debugger */
- +#define ACPI_MTX_DEBUG_CMD_READY 7 /* AML debugger */
- +
- +#define ACPI_MAX_MUTEX 7
- +#define ACPI_NUM_MUTEX ACPI_MAX_MUTEX+1
- +
- +#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
- +#ifdef DEFINE_ACPI_GLOBALS
- +
- +/* Debug names for the mutexes above */
- +
- +static char *acpi_gbl_mutex_names[ACPI_NUM_MUTEX] = {
- + "ACPI_MTX_Interpreter",
- + "ACPI_MTX_Namespace",
- + "ACPI_MTX_Tables",
- + "ACPI_MTX_Events",
- + "ACPI_MTX_Caches",
- + "ACPI_MTX_Memory",
- + "ACPI_MTX_CommandComplete",
- + "ACPI_MTX_CommandReady"
- +};
- +
- +#endif
- +#endif
- +
- +/*
- + * Predefined handles for spinlocks used within the subsystem.
- + * These spinlocks are created by acpi_ut_mutex_initialize
- + */
- +#define ACPI_LOCK_GPES 0
- +#define ACPI_LOCK_HARDWARE 1
- +
- +#define ACPI_MAX_LOCK 1
- +#define ACPI_NUM_LOCK ACPI_MAX_LOCK+1
- +
- +/* This Thread ID means that the mutex is not in use (unlocked) */
- +
- +#define ACPI_MUTEX_NOT_ACQUIRED (acpi_thread_id) 0
- +
- +/* Table for the global mutexes */
- +
- +struct acpi_mutex_info {
- + acpi_mutex mutex;
- + u32 use_count;
- + acpi_thread_id thread_id;
- +};
- +
- +/* Lock flag parameter for various interfaces */
- +
- +#define ACPI_MTX_DO_NOT_LOCK 0
- +#define ACPI_MTX_LOCK 1
- +
- +/* Field access granularities */
- +
- +#define ACPI_FIELD_BYTE_GRANULARITY 1
- +#define ACPI_FIELD_WORD_GRANULARITY 2
- +#define ACPI_FIELD_DWORD_GRANULARITY 4
- +#define ACPI_FIELD_QWORD_GRANULARITY 8
- +
- +#define ACPI_ENTRY_NOT_FOUND NULL
- +
- +/*****************************************************************************
- + *
- + * Namespace typedefs and structs
- + *
- + ****************************************************************************/
- +
- +/* Operational modes of the AML interpreter/scanner */
- +
- +typedef enum {
- + ACPI_IMODE_LOAD_PASS1 = 0x01,
- + ACPI_IMODE_LOAD_PASS2 = 0x02,
- + ACPI_IMODE_EXECUTE = 0x03
- +} acpi_interpreter_mode;
- +
- +/*
- + * The Namespace Node describes a named object that appears in the AML.
- + * descriptor_type is used to differentiate between internal descriptors.
- + *
- + * The node is optimized for both 32-bit and 64-bit platforms:
- + * 20 bytes for the 32-bit case, 32 bytes for the 64-bit case.
- + *
- + * Note: The descriptor_type and Type fields must appear in the identical
- + * position in both the struct acpi_namespace_node and union acpi_operand_object
- + * structures.
- + */
- +struct acpi_namespace_node {
- + union acpi_operand_object *object; /* Interpreter object */
- + u8 descriptor_type; /* Differentiate object descriptor types */
- + u8 type; /* ACPI Type associated with this name */
- + u8 flags; /* Miscellaneous flags */
- + acpi_owner_id owner_id; /* Node creator */
- + union acpi_name_union name; /* ACPI Name, always 4 chars per ACPI spec */
- + struct acpi_namespace_node *child; /* First child */
- + struct acpi_namespace_node *peer; /* Peer. Parent if ANOBJ_END_OF_PEER_LIST set */
- +
- + /*
- + * The following fields are used by the ASL compiler and disassembler only
- + */
- +#ifdef ACPI_LARGE_NAMESPACE_NODE
- + union acpi_parse_object *op;
- + u32 value;
- + u32 length;
- +#endif
- +};
- +
- +/* Namespace Node flags */
- +
- +#define ANOBJ_END_OF_PEER_LIST 0x01 /* End-of-list, Peer field points to parent */
- +#define ANOBJ_TEMPORARY 0x02 /* Node is create by a method and is temporary */
- +#define ANOBJ_METHOD_ARG 0x04 /* Node is a method argument */
- +#define ANOBJ_METHOD_LOCAL 0x08 /* Node is a method local */
- +#define ANOBJ_SUBTREE_HAS_INI 0x10 /* Used to optimize device initialization */
- +#define ANOBJ_EVALUATED 0x20 /* Set on first evaluation of node */
- +
- +#define ANOBJ_IS_EXTERNAL 0x08 /* i_aSL only: This object created via External() */
- +#define ANOBJ_METHOD_NO_RETVAL 0x10 /* i_aSL only: Method has no return value */
- +#define ANOBJ_METHOD_SOME_NO_RETVAL 0x20 /* i_aSL only: Method has at least one return value */
- +#define ANOBJ_IS_BIT_OFFSET 0x40 /* i_aSL only: Reference is a bit offset */
- +#define ANOBJ_IS_REFERENCED 0x80 /* i_aSL only: Object was referenced */
- +
- +/* One internal RSDT for table management */
- +
- +struct acpi_internal_rsdt {
- + struct acpi_table_desc *tables;
- + u32 count;
- + u32 size;
- + u8 flags;
- +};
- +
- +/* Flags for above */
- +
- +#define ACPI_ROOT_ORIGIN_UNKNOWN (0) /* ~ORIGIN_ALLOCATED */
- +#define ACPI_ROOT_ORIGIN_ALLOCATED (1)
- +#define ACPI_ROOT_ALLOW_RESIZE (2)
- +
- +/* Predefined (fixed) table indexes */
- +
- +#define ACPI_TABLE_INDEX_DSDT (0)
- +#define ACPI_TABLE_INDEX_FACS (1)
- +
- +struct acpi_find_context {
- + char *search_for;
- + acpi_handle *list;
- + u32 *count;
- +};
- +
- +struct acpi_ns_search_data {
- + struct acpi_namespace_node *node;
- +};
- +
- +/* Object types used during package copies */
- +
- +#define ACPI_COPY_TYPE_SIMPLE 0
- +#define ACPI_COPY_TYPE_PACKAGE 1
- +
- +/* Info structure used to convert external<->internal namestrings */
- +
- +struct acpi_namestring_info {
- + const char *external_name;
- + const char *next_external_char;
- + char *internal_name;
- + u32 length;
- + u32 num_segments;
- + u32 num_carats;
- + u8 fully_qualified;
- +};
- +
- +/* Field creation info */
- +
- +struct acpi_create_field_info {
- + struct acpi_namespace_node *region_node;
- + struct acpi_namespace_node *field_node;
- + struct acpi_namespace_node *register_node;
- + struct acpi_namespace_node *data_register_node;
- + u32 bank_value;
- + u32 field_bit_position;
- + u32 field_bit_length;
- + u8 field_flags;
- + u8 attribute;
- + u8 field_type;
- +};
- +
- +typedef
- +acpi_status(*ACPI_INTERNAL_METHOD) (struct acpi_walk_state * walk_state);
- +
- +/*
- + * Bitmapped ACPI types. Used internally only
- + */
- +#define ACPI_BTYPE_ANY 0x00000000
- +#define ACPI_BTYPE_INTEGER 0x00000001
- +#define ACPI_BTYPE_STRING 0x00000002
- +#define ACPI_BTYPE_BUFFER 0x00000004
- +#define ACPI_BTYPE_PACKAGE 0x00000008
- +#define ACPI_BTYPE_FIELD_UNIT 0x00000010
- +#define ACPI_BTYPE_DEVICE 0x00000020
- +#define ACPI_BTYPE_EVENT 0x00000040
- +#define ACPI_BTYPE_METHOD 0x00000080
- +#define ACPI_BTYPE_MUTEX 0x00000100
- +#define ACPI_BTYPE_REGION 0x00000200
- +#define ACPI_BTYPE_POWER 0x00000400
- +#define ACPI_BTYPE_PROCESSOR 0x00000800
- +#define ACPI_BTYPE_THERMAL 0x00001000
- +#define ACPI_BTYPE_BUFFER_FIELD 0x00002000
- +#define ACPI_BTYPE_DDB_HANDLE 0x00004000
- +#define ACPI_BTYPE_DEBUG_OBJECT 0x00008000
- +#define ACPI_BTYPE_REFERENCE 0x00010000
- +#define ACPI_BTYPE_RESOURCE 0x00020000
- +
- +#define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER)
- +
- +#define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_PACKAGE)
- +#define ACPI_BTYPE_DATA_REFERENCE (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE)
- +#define ACPI_BTYPE_DEVICE_OBJECTS (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
- +#define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */
- +#define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF
- +
- +/*
- + * Information structure for ACPI predefined names.
- + * Each entry in the table contains the following items:
- + *
- + * Name - The ACPI reserved name
- + * param_count - Number of arguments to the method
- + * expected_return_btypes - Allowed type(s) for the return value
- + */
- +struct acpi_name_info {
- + char name[ACPI_NAME_SIZE];
- + u8 param_count;
- + u8 expected_btypes;
- +};
- +
- +/*
- + * Secondary information structures for ACPI predefined objects that return
- + * package objects. This structure appears as the next entry in the table
- + * after the NAME_INFO structure above.
- + *
- + * The reason for this is to minimize the size of the predefined name table.
- + */
- +
- +/*
- + * Used for ACPI_PTYPE1_FIXED, ACPI_PTYPE1_VAR, ACPI_PTYPE2,
- + * ACPI_PTYPE2_MIN, ACPI_PTYPE2_PKG_COUNT, ACPI_PTYPE2_COUNT
- + */
- +struct acpi_package_info {
- + u8 type;
- + u8 object_type1;
- + u8 count1;
- + u8 object_type2;
- + u8 count2;
- + u8 reserved;
- +};
- +
- +/* Used for ACPI_PTYPE2_FIXED */
- +
- +struct acpi_package_info2 {
- + u8 type;
- + u8 count;
- + u8 object_type[4];
- +};
- +
- +/* Used for ACPI_PTYPE1_OPTION */
- +
- +struct acpi_package_info3 {
- + u8 type;
- + u8 count;
- + u8 object_type[2];
- + u8 tail_object_type;
- + u8 reserved;
- +};
- +
- +union acpi_predefined_info {
- + struct acpi_name_info info;
- + struct acpi_package_info ret_info;
- + struct acpi_package_info2 ret_info2;
- + struct acpi_package_info3 ret_info3;
- +};
- +
- +/*
- + * Bitmapped return value types
- + * Note: the actual data types must be contiguous, a loop in nspredef.c
- + * depends on this.
- + */
- +#define ACPI_RTYPE_ANY 0x00
- +#define ACPI_RTYPE_NONE 0x01
- +#define ACPI_RTYPE_INTEGER 0x02
- +#define ACPI_RTYPE_STRING 0x04
- +#define ACPI_RTYPE_BUFFER 0x08
- +#define ACPI_RTYPE_PACKAGE 0x10
- +#define ACPI_RTYPE_REFERENCE 0x20
- +#define ACPI_RTYPE_ALL 0x3F
- +
- +#define ACPI_NUM_RTYPES 5 /* Number of actual object types */
- +
- +/*****************************************************************************
- + *
- + * Event typedefs and structs
- + *
- + ****************************************************************************/
- +
- +/* Dispatch info for each GPE -- either a method or handler, cannot be both */
- +
- +struct acpi_handler_info {
- + acpi_event_handler address; /* Address of handler, if any */
- + void *context; /* Context to be passed to handler */
- + struct acpi_namespace_node *method_node; /* Method node for this GPE level (saved) */
- +};
- +
- +union acpi_gpe_dispatch_info {
- + struct acpi_namespace_node *method_node; /* Method node for this GPE level */
- + struct acpi_handler_info *handler;
- +};
- +
- +/*
- + * Information about a GPE, one per each GPE in an array.
- + * NOTE: Important to keep this struct as small as possible.
- + */
- +struct acpi_gpe_event_info {
- + union acpi_gpe_dispatch_info dispatch; /* Either Method or Handler */
- + struct acpi_gpe_register_info *register_info; /* Backpointer to register info */
- + u8 flags; /* Misc info about this GPE */
- + u8 gpe_number; /* This GPE */
- +};
- +
- +/* Information about a GPE register pair, one per each status/enable pair in an array */
- +
- +struct acpi_gpe_register_info {
- + struct acpi_generic_address status_address; /* Address of status reg */
- + struct acpi_generic_address enable_address; /* Address of enable reg */
- + u8 enable_for_wake; /* GPEs to keep enabled when sleeping */
- + u8 enable_for_run; /* GPEs to keep enabled when running */
- + u8 base_gpe_number; /* Base GPE number for this register */
- +};
- +
- +/*
- + * Information about a GPE register block, one per each installed block --
- + * GPE0, GPE1, and one per each installed GPE Block Device.
- + */
- +struct acpi_gpe_block_info {
- + struct acpi_namespace_node *node;
- + struct acpi_gpe_block_info *previous;
- + struct acpi_gpe_block_info *next;
- + struct acpi_gpe_xrupt_info *xrupt_block; /* Backpointer to interrupt block */
- + struct acpi_gpe_register_info *register_info; /* One per GPE register pair */
- + struct acpi_gpe_event_info *event_info; /* One for each GPE */
- + struct acpi_generic_address block_address; /* Base address of the block */
- + u32 register_count; /* Number of register pairs in block */
- + u8 block_base_number; /* Base GPE number for this block */
- +};
- +
- +/* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */
- +
- +struct acpi_gpe_xrupt_info {
- + struct acpi_gpe_xrupt_info *previous;
- + struct acpi_gpe_xrupt_info *next;
- + struct acpi_gpe_block_info *gpe_block_list_head; /* List of GPE blocks for this xrupt */
- + u32 interrupt_number; /* System interrupt number */
- +};
- +
- +struct acpi_gpe_walk_info {
- + struct acpi_namespace_node *gpe_device;
- + struct acpi_gpe_block_info *gpe_block;
- +};
- +
- +struct acpi_gpe_device_info {
- + u32 index;
- + u32 next_block_base_index;
- + acpi_status status;
- + struct acpi_namespace_node *gpe_device;
- +};
- +
- +typedef acpi_status(*acpi_gpe_callback) (struct acpi_gpe_xrupt_info *gpe_xrupt_info,
- + struct acpi_gpe_block_info *gpe_block, void *context);
- +
- +/* Information about each particular fixed event */
- +
- +struct acpi_fixed_event_handler {
- + acpi_event_handler handler; /* Address of handler. */
- + void *context; /* Context to be passed to handler */
- +};
- +
- +struct acpi_fixed_event_info {
- + u8 status_register_id;
- + u8 enable_register_id;
- + u16 status_bit_mask;
- + u16 enable_bit_mask;
- +};
- +
- +/* Information used during field processing */
- +
- +struct acpi_field_info {
- + u8 skip_field;
- + u8 field_flag;
- + u32 pkg_length;
- +};
- +
- +/*****************************************************************************
- + *
- + * Generic "state" object for stacks
- + *
- + ****************************************************************************/
- +
- +#define ACPI_CONTROL_NORMAL 0xC0
- +#define ACPI_CONTROL_CONDITIONAL_EXECUTING 0xC1
- +#define ACPI_CONTROL_PREDICATE_EXECUTING 0xC2
- +#define ACPI_CONTROL_PREDICATE_FALSE 0xC3
- +#define ACPI_CONTROL_PREDICATE_TRUE 0xC4
- +
- +#define ACPI_STATE_COMMON \
- + void *next; \
- + u8 descriptor_type; /* To differentiate various internal objs */\
- + u8 flags; \
- + u16 value; \
- + u16 state;
- +
- + /* There are 2 bytes available here until the next natural alignment boundary */
- +
- +struct acpi_common_state {
- +ACPI_STATE_COMMON};
- +
- +/*
- + * Update state - used to traverse complex objects such as packages
- + */
- +struct acpi_update_state {
- + ACPI_STATE_COMMON union acpi_operand_object *object;
- +};
- +
- +/*
- + * Pkg state - used to traverse nested package structures
- + */
- +struct acpi_pkg_state {
- + ACPI_STATE_COMMON u16 index;
- + union acpi_operand_object *source_object;
- + union acpi_operand_object *dest_object;
- + struct acpi_walk_state *walk_state;
- + void *this_target_obj;
- + u32 num_packages;
- +};
- +
- +/*
- + * Control state - one per if/else and while constructs.
- + * Allows nesting of these constructs
- + */
- +struct acpi_control_state {
- + ACPI_STATE_COMMON u16 opcode;
- + union acpi_parse_object *predicate_op;
- + u8 *aml_predicate_start; /* Start of if/while predicate */
- + u8 *package_end; /* End of if/while block */
- + u32 loop_count; /* While() loop counter */
- +};
- +
- +/*
- + * Scope state - current scope during namespace lookups
- + */
- +struct acpi_scope_state {
- + ACPI_STATE_COMMON struct acpi_namespace_node *node;
- +};
- +
- +struct acpi_pscope_state {
- + ACPI_STATE_COMMON u32 arg_count; /* Number of fixed arguments */
- + union acpi_parse_object *op; /* Current op being parsed */
- + u8 *arg_end; /* Current argument end */
- + u8 *pkg_end; /* Current package end */
- + u32 arg_list; /* Next argument to parse */
- +};
- +
- +/*
- + * Thread state - one per thread across multiple walk states. Multiple walk
- + * states are created when there are nested control methods executing.
- + */
- +struct acpi_thread_state {
- + ACPI_STATE_COMMON u8 current_sync_level; /* Mutex Sync (nested acquire) level */
- + struct acpi_walk_state *walk_state_list; /* Head of list of walk_states for this thread */
- + union acpi_operand_object *acquired_mutex_list; /* List of all currently acquired mutexes */
- + acpi_thread_id thread_id; /* Running thread ID */
- +};
- +
- +/*
- + * Result values - used to accumulate the results of nested
- + * AML arguments
- + */
- +struct acpi_result_values {
- + ACPI_STATE_COMMON
- + union acpi_operand_object *obj_desc[ACPI_RESULTS_FRAME_OBJ_NUM];
- +};
- +
- +typedef
- +acpi_status(*acpi_parse_downwards) (struct acpi_walk_state * walk_state,
- + union acpi_parse_object ** out_op);
- +
- +typedef acpi_status(*acpi_parse_upwards) (struct acpi_walk_state * walk_state);
- +
- +/*
- + * Notify info - used to pass info to the deferred notify
- + * handler/dispatcher.
- + */
- +struct acpi_notify_info {
- + ACPI_STATE_COMMON struct acpi_namespace_node *node;
- + union acpi_operand_object *handler_obj;
- +};
- +
- +/* Generic state is union of structs above */
- +
- +union acpi_generic_state {
- + struct acpi_common_state common;
- + struct acpi_control_state control;
- + struct acpi_update_state update;
- + struct acpi_scope_state scope;
- + struct acpi_pscope_state parse_scope;
- + struct acpi_pkg_state pkg;
- + struct acpi_thread_state thread;
- + struct acpi_result_values results;
- + struct acpi_notify_info notify;
- +};
- +
- +/*****************************************************************************
- + *
- + * Interpreter typedefs and structs
- + *
- + ****************************************************************************/
- +
- +typedef acpi_status(*ACPI_EXECUTE_OP) (struct acpi_walk_state * walk_state);
- +
- +/*****************************************************************************
- + *
- + * Parser typedefs and structs
- + *
- + ****************************************************************************/
- +
- +/*
- + * AML opcode, name, and argument layout
- + */
- +struct acpi_opcode_info {
- +#if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT)
- + char *name; /* Opcode name (disassembler/debug only) */
- +#endif
- + u32 parse_args; /* Grammar/Parse time arguments */
- + u32 runtime_args; /* Interpret time arguments */
- + u16 flags; /* Misc flags */
- + u8 object_type; /* Corresponding internal object type */
- + u8 class; /* Opcode class */
- + u8 type; /* Opcode type */
- +};
- +
- +union acpi_parse_value {
- + acpi_integer integer; /* Integer constant (Up to 64 bits) */
- + struct uint64_struct integer64; /* Structure overlay for 2 32-bit Dwords */
- + u32 size; /* bytelist or field size */
- + char *string; /* NULL terminated string */
- + u8 *buffer; /* buffer or string */
- + char *name; /* NULL terminated string */
- + union acpi_parse_object *arg; /* arguments and contained ops */
- +};
- +
- +#ifdef ACPI_DISASSEMBLER
- +#define ACPI_DISASM_ONLY_MEMBERS(a) a;
- +#else
- +#define ACPI_DISASM_ONLY_MEMBERS(a)
- +#endif
- +
- +#define ACPI_PARSE_COMMON \
- + union acpi_parse_object *parent; /* Parent op */\
- + u8 descriptor_type; /* To differentiate various internal objs */\
- + u8 flags; /* Type of Op */\
- + u16 aml_opcode; /* AML opcode */\
- + u32 aml_offset; /* Offset of declaration in AML */\
- + union acpi_parse_object *next; /* Next op */\
- + struct acpi_namespace_node *node; /* For use by interpreter */\
- + union acpi_parse_value value; /* Value or args associated with the opcode */\
- + u8 arg_list_length; /* Number of elements in the arg list */\
- + ACPI_DISASM_ONLY_MEMBERS (\
- + u8 disasm_flags; /* Used during AML disassembly */\
- + u8 disasm_opcode; /* Subtype used for disassembly */\
- + char aml_op_name[16]) /* Op name (debug only) */
- +
- +#define ACPI_DASM_BUFFER 0x00
- +#define ACPI_DASM_RESOURCE 0x01
- +#define ACPI_DASM_STRING 0x02
- +#define ACPI_DASM_UNICODE 0x03
- +#define ACPI_DASM_EISAID 0x04
- +#define ACPI_DASM_MATCHOP 0x05
- +#define ACPI_DASM_LNOT_PREFIX 0x06
- +#define ACPI_DASM_LNOT_SUFFIX 0x07
- +#define ACPI_DASM_IGNORE 0x08
- +
- +/*
- + * Generic operation (for example: If, While, Store)
- + */
- +struct acpi_parse_obj_common {
- +ACPI_PARSE_COMMON};
- +
- +/*
- + * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and op_regions),
- + * and bytelists.
- + */
- +struct acpi_parse_obj_named {
- + ACPI_PARSE_COMMON u8 *path;
- + u8 *data; /* AML body or bytelist data */
- + u32 length; /* AML length */
- + u32 name; /* 4-byte name or zero if no name */
- +};
- +
- +/* This version is used by the i_aSL compiler only */
- +
- +#define ACPI_MAX_PARSEOP_NAME 20
- +
- +struct acpi_parse_obj_asl {
- + ACPI_PARSE_COMMON union acpi_parse_object *child;
- + union acpi_parse_object *parent_method;
- + char *filename;
- + char *external_name;
- + char *namepath;
- + char name_seg[4];
- + u32 extra_value;
- + u32 column;
- + u32 line_number;
- + u32 logical_line_number;
- + u32 logical_byte_offset;
- + u32 end_line;
- + u32 end_logical_line;
- + u32 acpi_btype;
- + u32 aml_length;
- + u32 aml_subtree_length;
- + u32 final_aml_length;
- + u32 final_aml_offset;
- + u32 compile_flags;
- + u16 parse_opcode;
- + u8 aml_opcode_length;
- + u8 aml_pkg_len_bytes;
- + u8 extra;
- + char parse_op_name[ACPI_MAX_PARSEOP_NAME];
- +};
- +
- +union acpi_parse_object {
- + struct acpi_parse_obj_common common;
- + struct acpi_parse_obj_named named;
- + struct acpi_parse_obj_asl asl;
- +};
- +
- +/*
- + * Parse state - one state per parser invocation and each control
- + * method.
- + */
- +struct acpi_parse_state {
- + u8 *aml_start; /* First AML byte */
- + u8 *aml; /* Next AML byte */
- + u8 *aml_end; /* (last + 1) AML byte */
- + u8 *pkg_start; /* Current package begin */
- + u8 *pkg_end; /* Current package end */
- + union acpi_parse_object *start_op; /* Root of parse tree */
- + struct acpi_namespace_node *start_node;
- + union acpi_generic_state *scope; /* Current scope */
- + union acpi_parse_object *start_scope;
- + u32 aml_size;
- +};
- +
- +/* Parse object flags */
- +
- +#define ACPI_PARSEOP_GENERIC 0x01
- +#define ACPI_PARSEOP_NAMED 0x02
- +#define ACPI_PARSEOP_DEFERRED 0x04
- +#define ACPI_PARSEOP_BYTELIST 0x08
- +#define ACPI_PARSEOP_IN_STACK 0x10
- +#define ACPI_PARSEOP_TARGET 0x20
- +#define ACPI_PARSEOP_IN_CACHE 0x80
- +
- +/* Parse object disasm_flags */
- +
- +#define ACPI_PARSEOP_IGNORE 0x01
- +#define ACPI_PARSEOP_PARAMLIST 0x02
- +#define ACPI_PARSEOP_EMPTY_TERMLIST 0x04
- +#define ACPI_PARSEOP_SPECIAL 0x10
- +
- +/*****************************************************************************
- + *
- + * Hardware (ACPI registers) and PNP
- + *
- + ****************************************************************************/
- +
- +struct acpi_bit_register_info {
- + u8 parent_register;
- + u8 bit_position;
- + u16 access_bit_mask;
- +};
- +
- +/*
- + * Some ACPI registers have bits that must be ignored -- meaning that they
- + * must be preserved.
- + */
- +#define ACPI_PM1_STATUS_PRESERVED_BITS 0x0800 /* Bit 11 */
- +#define ACPI_PM1_CONTROL_PRESERVED_BITS 0x0200 /* Bit 9 (whatever) */
- +
- +/*
- + * Register IDs
- + * These are the full ACPI registers
- + */
- +#define ACPI_REGISTER_PM1_STATUS 0x01
- +#define ACPI_REGISTER_PM1_ENABLE 0x02
- +#define ACPI_REGISTER_PM1_CONTROL 0x03
- +#define ACPI_REGISTER_PM1A_CONTROL 0x04
- +#define ACPI_REGISTER_PM1B_CONTROL 0x05
- +#define ACPI_REGISTER_PM2_CONTROL 0x06
- +#define ACPI_REGISTER_PM_TIMER 0x07
- +#define ACPI_REGISTER_PROCESSOR_BLOCK 0x08
- +#define ACPI_REGISTER_SMI_COMMAND_BLOCK 0x09
- +
- +/* Masks used to access the bit_registers */
- +
- +#define ACPI_BITMASK_TIMER_STATUS 0x0001
- +#define ACPI_BITMASK_BUS_MASTER_STATUS 0x0010
- +#define ACPI_BITMASK_GLOBAL_LOCK_STATUS 0x0020
- +#define ACPI_BITMASK_POWER_BUTTON_STATUS 0x0100
- +#define ACPI_BITMASK_SLEEP_BUTTON_STATUS 0x0200
- +#define ACPI_BITMASK_RT_CLOCK_STATUS 0x0400
- +#define ACPI_BITMASK_PCIEXP_WAKE_STATUS 0x4000 /* ACPI 3.0 */
- +#define ACPI_BITMASK_WAKE_STATUS 0x8000
- +
- +#define ACPI_BITMASK_ALL_FIXED_STATUS (\
- + ACPI_BITMASK_TIMER_STATUS | \
- + ACPI_BITMASK_BUS_MASTER_STATUS | \
- + ACPI_BITMASK_GLOBAL_LOCK_STATUS | \
- + ACPI_BITMASK_POWER_BUTTON_STATUS | \
- + ACPI_BITMASK_SLEEP_BUTTON_STATUS | \
- + ACPI_BITMASK_RT_CLOCK_STATUS | \
- + ACPI_BITMASK_WAKE_STATUS)
- +
- +#define ACPI_BITMASK_TIMER_ENABLE 0x0001
- +#define ACPI_BITMASK_GLOBAL_LOCK_ENABLE 0x0020
- +#define ACPI_BITMASK_POWER_BUTTON_ENABLE 0x0100
- +#define ACPI_BITMASK_SLEEP_BUTTON_ENABLE 0x0200
- +#define ACPI_BITMASK_RT_CLOCK_ENABLE 0x0400
- +#define ACPI_BITMASK_PCIEXP_WAKE_DISABLE 0x4000 /* ACPI 3.0 */
- +
- +#define ACPI_BITMASK_SCI_ENABLE 0x0001
- +#define ACPI_BITMASK_BUS_MASTER_RLD 0x0002
- +#define ACPI_BITMASK_GLOBAL_LOCK_RELEASE 0x0004
- +#define ACPI_BITMASK_SLEEP_TYPE_X 0x1C00
- +#define ACPI_BITMASK_SLEEP_ENABLE 0x2000
- +
- +#define ACPI_BITMASK_ARB_DISABLE 0x0001
- +
- +/* Raw bit position of each bit_register */
- +
- +#define ACPI_BITPOSITION_TIMER_STATUS 0x00
- +#define ACPI_BITPOSITION_BUS_MASTER_STATUS 0x04
- +#define ACPI_BITPOSITION_GLOBAL_LOCK_STATUS 0x05
- +#define ACPI_BITPOSITION_POWER_BUTTON_STATUS 0x08
- +#define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS 0x09
- +#define ACPI_BITPOSITION_RT_CLOCK_STATUS 0x0A
- +#define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS 0x0E /* ACPI 3.0 */
- +#define ACPI_BITPOSITION_WAKE_STATUS 0x0F
- +
- +#define ACPI_BITPOSITION_TIMER_ENABLE 0x00
- +#define ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE 0x05
- +#define ACPI_BITPOSITION_POWER_BUTTON_ENABLE 0x08
- +#define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE 0x09
- +#define ACPI_BITPOSITION_RT_CLOCK_ENABLE 0x0A
- +#define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE 0x0E /* ACPI 3.0 */
- +
- +#define ACPI_BITPOSITION_SCI_ENABLE 0x00
- +#define ACPI_BITPOSITION_BUS_MASTER_RLD 0x01
- +#define ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE 0x02
- +#define ACPI_BITPOSITION_SLEEP_TYPE_X 0x0A
- +#define ACPI_BITPOSITION_SLEEP_ENABLE 0x0D
- +
- +#define ACPI_BITPOSITION_ARB_DISABLE 0x00
- +
- +/*****************************************************************************
- + *
- + * Resource descriptors
- + *
- + ****************************************************************************/
- +
- +/* resource_type values */
- +
- +#define ACPI_ADDRESS_TYPE_MEMORY_RANGE 0
- +#define ACPI_ADDRESS_TYPE_IO_RANGE 1
- +#define ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE 2
- +
- +/* Resource descriptor types and masks */
- +
- +#define ACPI_RESOURCE_NAME_LARGE 0x80
- +#define ACPI_RESOURCE_NAME_SMALL 0x00
- +
- +#define ACPI_RESOURCE_NAME_SMALL_MASK 0x78 /* Bits 6:3 contain the type */
- +#define ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK 0x07 /* Bits 2:0 contain the length */
- +#define ACPI_RESOURCE_NAME_LARGE_MASK 0x7F /* Bits 6:0 contain the type */
- +
- +/*
- + * Small resource descriptor "names" as defined by the ACPI specification.
- + * Note: Bits 2:0 are used for the descriptor length
- + */
- +#define ACPI_RESOURCE_NAME_IRQ 0x20
- +#define ACPI_RESOURCE_NAME_DMA 0x28
- +#define ACPI_RESOURCE_NAME_START_DEPENDENT 0x30
- +#define ACPI_RESOURCE_NAME_END_DEPENDENT 0x38
- +#define ACPI_RESOURCE_NAME_IO 0x40
- +#define ACPI_RESOURCE_NAME_FIXED_IO 0x48
- +#define ACPI_RESOURCE_NAME_RESERVED_S1 0x50
- +#define ACPI_RESOURCE_NAME_RESERVED_S2 0x58
- +#define ACPI_RESOURCE_NAME_RESERVED_S3 0x60
- +#define ACPI_RESOURCE_NAME_RESERVED_S4 0x68
- +#define ACPI_RESOURCE_NAME_VENDOR_SMALL 0x70
- +#define ACPI_RESOURCE_NAME_END_TAG 0x78
- +
- +/*
- + * Large resource descriptor "names" as defined by the ACPI specification.
- + * Note: includes the Large Descriptor bit in bit[7]
- + */
- +#define ACPI_RESOURCE_NAME_MEMORY24 0x81
- +#define ACPI_RESOURCE_NAME_GENERIC_REGISTER 0x82
- +#define ACPI_RESOURCE_NAME_RESERVED_L1 0x83
- +#define ACPI_RESOURCE_NAME_VENDOR_LARGE 0x84
- +#define ACPI_RESOURCE_NAME_MEMORY32 0x85
- +#define ACPI_RESOURCE_NAME_FIXED_MEMORY32 0x86
- +#define ACPI_RESOURCE_NAME_ADDRESS32 0x87
- +#define ACPI_RESOURCE_NAME_ADDRESS16 0x88
- +#define ACPI_RESOURCE_NAME_EXTENDED_IRQ 0x89
- +#define ACPI_RESOURCE_NAME_ADDRESS64 0x8A
- +#define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 0x8B
- +#define ACPI_RESOURCE_NAME_LARGE_MAX 0x8B
- +
- +/*****************************************************************************
- + *
- + * Miscellaneous
- + *
- + ****************************************************************************/
- +
- +#define ACPI_ASCII_ZERO 0x30
- +
- +/*****************************************************************************
- + *
- + * Debugger
- + *
- + ****************************************************************************/
- +
- +struct acpi_db_method_info {
- + acpi_handle main_thread_gate;
- + acpi_handle thread_complete_gate;
- + u32 *threads;
- + u32 num_threads;
- + u32 num_created;
- + u32 num_completed;
- +
- + char *name;
- + u32 flags;
- + u32 num_loops;
- + char pathname[128];
- + char **args;
- +
- + /*
- + * Arguments to be passed to method for the command
- + * Threads -
- + * the Number of threads, ID of current thread and
- + * Index of current thread inside all them created.
- + */
- + char init_args;
- + char *arguments[4];
- + char num_threads_str[11];
- + char id_of_thread_str[11];
- + char index_of_thread_str[11];
- +};
- +
- +struct acpi_integrity_info {
- + u32 nodes;
- + u32 objects;
- +};
- +
- +#define ACPI_DB_REDIRECTABLE_OUTPUT 0x01
- +#define ACPI_DB_CONSOLE_OUTPUT 0x02
- +#define ACPI_DB_DUPLICATE_OUTPUT 0x03
- +
- +/*****************************************************************************
- + *
- + * Debug
- + *
- + ****************************************************************************/
- +
- +/* Entry for a memory allocation (debug only) */
- +
- +#define ACPI_MEM_MALLOC 0
- +#define ACPI_MEM_CALLOC 1
- +#define ACPI_MAX_MODULE_NAME 16
- +
- +#define ACPI_COMMON_DEBUG_MEM_HEADER \
- + struct acpi_debug_mem_block *previous; \
- + struct acpi_debug_mem_block *next; \
- + u32 size; \
- + u32 component; \
- + u32 line; \
- + char module[ACPI_MAX_MODULE_NAME]; \
- + u8 alloc_type;
- +
- +struct acpi_debug_mem_header {
- +ACPI_COMMON_DEBUG_MEM_HEADER};
- +
- +struct acpi_debug_mem_block {
- + ACPI_COMMON_DEBUG_MEM_HEADER u64 user_space;
- +};
- +
- +#define ACPI_MEM_LIST_GLOBAL 0
- +#define ACPI_MEM_LIST_NSNODE 1
- +#define ACPI_MEM_LIST_MAX 1
- +#define ACPI_NUM_MEM_LISTS 2
- +
- +#endif /* __ACLOCAL_H__ */
- diff -Naurp a/acpica-acobject.h b/acpica-acobject.h
- --- a/acpica-acobject.h 1970-01-01 01:00:00.000000000 +0100
- +++ b/acpica-acobject.h 2009-02-28 22:24:01.000000000 +0100
- @@ -0,0 +1,446 @@
- +
- +/******************************************************************************
- + *
- + * Name: acobject.h - Definition of union acpi_operand_object (Internal object only)
- + *
- + *****************************************************************************/
- +
- +/*
- + * Copyright (C) 2000 - 2008, 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:struct_defs -- for acpisrc conversion */
- +
- +/*
- + * 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.
- + *
- + * 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.
- + *
- + * descriptor_type is used to differentiate between internal descriptors, and
- + * must be in the same place across all descriptors
- + *
- + * Note: The descriptor_type and Type fields must appear in the identical
- + * position in both the struct acpi_namespace_node and union acpi_operand_object
- + * structures.
- + */
- +#define ACPI_OBJECT_COMMON_HEADER \
- + union acpi_operand_object *next_object; /* Objects linked to parent NS node */\
- + u8 descriptor_type; /* To differentiate various internal objs */\
- + u8 type; /* acpi_object_type */\
- + u16 reference_count; /* For object deletion management */\
- + u8 flags;
- + /*
- + * Note: There are 3 bytes available here before the
- + * next natural alignment boundary (for both 32/64 cases)
- + */
- +
- +/* 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
- +#define AOPOBJ_INVALID 0x40 /* Used if host OS won't allow an op_region address */
- +
- +/******************************************************************************
- + *
- + * Basic data types
- + *
- + *****************************************************************************/
- +
- +struct acpi_object_common {
- +ACPI_OBJECT_COMMON_HEADER};
- +
- +struct acpi_object_integer {
- + ACPI_OBJECT_COMMON_HEADER u8 fill[3]; /* Prevent warning on some compilers */
- + acpi_integer value;
- +};
- +
- +/*
- + * 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) \
- + _type *pointer; \
- + u32 length;
- +
- +struct acpi_object_string { /* Null terminated, ASCII characters only */
- + ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO(char) /* String in AML stream or allocated string */
- +};
- +
- +struct acpi_object_buffer {
- + ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO(u8) /* Buffer in AML stream or allocated buffer */
- + u32 aml_length;
- + u8 *aml_start;
- + struct acpi_namespace_node *node; /* Link back to parent node */
- +};
- +
- +struct acpi_object_package {
- + ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *node; /* Link back to parent node */
- + union acpi_operand_object **elements; /* Array of pointers to acpi_objects */
- + u8 *aml_start;
- + u32 aml_length;
- + u32 count; /* # of elements in package */
- +};
- +
- +/******************************************************************************
- + *
- + * Complex data types
- + *
- + *****************************************************************************/
- +
- +struct acpi_object_event {
- + ACPI_OBJECT_COMMON_HEADER acpi_semaphore os_semaphore; /* Actual OS synchronization object */
- +};
- +
- +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 */
- + acpi_mutex os_mutex; /* Actual OS synchronization object */
- + acpi_thread_id thread_id; /* Current owner of the mutex */
- + struct acpi_thread_state *owner_thread; /* Current owner of the mutex */
- + 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;
- + struct acpi_namespace_node *node; /* Containing namespace node */
- + union acpi_operand_object *handler; /* Handler for region access */
- + union acpi_operand_object *next;
- + acpi_physical_address address;
- + u32 length;
- +};
- +
- +struct acpi_object_method {
- + ACPI_OBJECT_COMMON_HEADER u8 method_flags;
- + u8 param_count;
- + u8 sync_level;
- + union acpi_operand_object *mutex;
- + u8 *aml_start;
- + ACPI_INTERNAL_METHOD implementation;
- + u32 aml_length;
- + u8 thread_count;
- + acpi_owner_id owner_id;
- +};
- +
- +/******************************************************************************
- + *
- + * Objects that can be notified. All share a common notify_info area.
- + *
- + *****************************************************************************/
- +
- +/*
- + * 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 */
- +
- +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
- + /* The next two fields take advantage of the 3-byte space before NOTIFY_INFO */
- + u8 proc_id;
- + u8 length;
- + ACPI_COMMON_NOTIFY_INFO 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.
- + *
- + *****************************************************************************/
- +
- +/*
- + * 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 \
- + u8 field_flags; /* Access, update, and lock bits */\
- + u8 attribute; /* From access_as keyword */\
- + u8 access_byte_width; /* Read/Write size in bytes */\
- + struct acpi_namespace_node *node; /* Link back to parent node */\
- + u32 bit_length; /* Length of field in bits */\
- + u32 base_byte_offset; /* Byte offset within containing object */\
- + u32 value; /* Value to store into the Bank or Index register */\
- + u8 start_field_bit_offset;/* Bit offset within first field datum (0-63) */\
- + u8 access_bit_width; /* Read/Write size in bits (8-64) */
- +
- +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; /* Parent 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 "RegionObj" 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;
- +};
- +
- +struct acpi_object_addr_handler {
- + ACPI_OBJECT_COMMON_HEADER u8 space_id;
- + u8 handler_flags;
- + 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;
- +};
- +
- +/* Flags for address handler (handler_flags) */
- +
- +#define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED 0x01
- +
- +/******************************************************************************
- + *
- + * Special internal objects
- + *
- + *****************************************************************************/
- +
- +/*
- + * The Reference object is used for these opcodes:
- + * Arg[0-6], Local[0-7], index_op, name_op, ref_of_op, load_op, load_table_op, debug_op
- + * The Reference.Class differentiates these types.
- + */
- +struct acpi_object_reference {
- + ACPI_OBJECT_COMMON_HEADER u8 class; /* Reference Class */
- + u8 target_type; /* Used for Index Op */
- + u8 reserved;
- + void *object; /* name_op=>HANDLE to obj, index_op=>union acpi_operand_object */
- + struct acpi_namespace_node *node; /* ref_of or Namepath */
- + union acpi_operand_object **where; /* Target of Index */
- + u32 value; /* Used for Local/Arg/Index/ddb_handle */
- +};
- +
- +/* Values for Reference.Class above */
- +
- +typedef enum {
- + ACPI_REFCLASS_LOCAL = 0, /* Method local */
- + ACPI_REFCLASS_ARG = 1, /* Method argument */
- + ACPI_REFCLASS_REFOF = 2, /* Result of ref_of() TBD: Split to Ref/Node and Ref/operand_obj? */
- + ACPI_REFCLASS_INDEX = 3, /* Result of Index() */
- + ACPI_REFCLASS_TABLE = 4, /* ddb_handle - Load(), load_table() */
- + ACPI_REFCLASS_NAME = 5, /* Reference to a named object */
- + ACPI_REFCLASS_DEBUG = 6, /* Debug object */
- +
- + ACPI_REFCLASS_MAX = 6
- +} ACPI_REFERENCE_CLASSES;
- +
- +/*
- + * 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 struct acpi_namespace_node *method_REG; /* _REG method for this region (if any) */
- + void *region_context; /* Region-specific data */
- + u8 *aml_start;
- + u32 aml_length;
- +};
- +
- +/* 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;
- +
- + /*
- + * 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 descriptor_type field in order to differentiate them.
- + */
- + struct acpi_namespace_node node;
- +};
- +
- +/******************************************************************************
- + *
- + * 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
- +
- +struct acpi_common_descriptor {
- + void *common_pointer;
- + u8 descriptor_type; /* To differentiate various internal objs */
- +};
- +
- +union acpi_descriptor {
- + struct acpi_common_descriptor common;
- + union acpi_operand_object object;
- + struct acpi_namespace_node node;
- + union acpi_parse_object op;
- +};
- +
- +#pragma pack()
- +
- +#endif /* _ACOBJECT_H */
- diff -Naurp a/firegl_public.c b/firegl_public.c
- --- a/firegl_public.c 2009-02-28 22:31:33.000000000 +0100
- +++ b/firegl_public.c 2009-02-28 22:30:23.000000000 +0100
- @@ -1402,7 +1402,7 @@ KCL_TYPE_Pid ATI_API_CALL KCL_GetTgid(vo
- */
- KCL_TYPE_Uid ATI_API_CALL KCL_GetEffectiveUid(void)
- {
- - return current->euid;
- + return current->cred->euid;
- }
- /** /brief Delay execution for the specified number of microseconds
- @@ -1774,14 +1774,15 @@ int ATI_API_CALL KCL_PosixSecurityCapChe
- */
- void ATI_API_CALL KCL_PosixSecurityCapSetIPCLock(unsigned int lock)
- {
- + struct cred* currentCred = (struct cred*)get_current_cred();
- if (lock == 0 )
- {
- - cap_lower(current->cap_effective, CAP_IPC_LOCK);
- + cap_lower(currentCred->cap_effective, CAP_IPC_LOCK);
- }
- else
- {
- - cap_raise(current->cap_effective, CAP_IPC_LOCK);
- - }
- + cap_raise(currentCred->cap_effective, CAP_IPC_LOCK);
- + }
- return;
- }
- diff -Naurp a/firegl_public.h b/firegl_public.h
- --- a/firegl_public.h 2009-03-01 00:21:56.000000000 +0100
- +++ b/firegl_public.h 2009-03-01 00:21:17.000000000 +0100
- @@ -589,13 +589,13 @@ extern unsigned long KCL_SYSINFO_
- #define cpu_has_pge test_bit(X86_FEATURE_PGE, &boot_cpu_data.x86_capability)
- #endif
- -#ifndef pgprot_writecombine
- +/* #ifndef pgprot_writecombine */
- #define pgprot_writecombine(prot) __pgprot((pgprot_val(prot) & ~(_PAGE_PCD)) | _PAGE_PWT)
- -#endif
- +/* #endif */
- -#ifndef pgprot_noncached
- +/* #ifndef pgprot_noncached */
- #define pgprot_noncached(prot) __pgprot(pgprot_val(prot) | _PAGE_PCD | _PAGE_PWT)
- -#endif
- +/* #endif */
- #endif //FIREGL_USWC_SUPPORT
- diff -Naurp a/kcl_acpi.c b/kcl_acpi.c
- --- a/kcl_acpi.c 2009-02-28 21:39:21.000000000 +0100
- +++ b/kcl_acpi.c 2009-02-28 22:25:29.000000000 +0100
- @@ -17,6 +17,9 @@
- #include <linux/version.h>
- #include <linux/autoconf.h>
- #include <linux/acpi.h>
- +#include "acpica-acconfig.h"
- +#include "acpica-aclocal.h"
- +#include "acpica-acobject.h"
- #include "kcl_config.h"
- #include "kcl_type.h"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement