Merge branch 'core/percpu' into stackprotector
Conflicts: arch/x86/include/asm/pda.h arch/x86/include/asm/system.h Also, moved include/asm-x86/stackprotector.h to arch/x86/include/asm. Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
@@ -1,217 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||
|
||||
#define ACPI_CA_VERSION 0x20080926
|
||||
|
||||
/*
|
||||
* 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
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* 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 */
|
||||
@@ -1,231 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acdebug.h - ACPI/AML debugger
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACDEBUG_H__
|
||||
#define __ACDEBUG_H__
|
||||
|
||||
#define ACPI_DEBUG_BUFFER_SIZE 4196
|
||||
|
||||
struct command_info {
|
||||
char *name; /* Command Name */
|
||||
u8 min_args; /* Minimum arguments required */
|
||||
};
|
||||
|
||||
struct argument_info {
|
||||
char *name; /* Argument Name */
|
||||
};
|
||||
|
||||
#define PARAM_LIST(pl) pl
|
||||
#define DBTEST_OUTPUT_LEVEL(lvl) if (acpi_gbl_db_opt_verbose)
|
||||
#define VERBOSE_PRINT(fp) DBTEST_OUTPUT_LEVEL(lvl) {\
|
||||
acpi_os_printf PARAM_LIST(fp);}
|
||||
|
||||
#define EX_NO_SINGLE_STEP 1
|
||||
#define EX_SINGLE_STEP 2
|
||||
|
||||
/*
|
||||
* dbxface - external debugger interfaces
|
||||
*/
|
||||
acpi_status acpi_db_initialize(void);
|
||||
|
||||
void acpi_db_terminate(void);
|
||||
|
||||
acpi_status
|
||||
acpi_db_single_step(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op, u32 op_type);
|
||||
|
||||
/*
|
||||
* dbcmds - debug commands and output routines
|
||||
*/
|
||||
acpi_status acpi_db_disassemble_method(char *name);
|
||||
|
||||
void acpi_db_display_table_info(char *table_arg);
|
||||
|
||||
void acpi_db_unload_acpi_table(char *table_arg, char *instance_arg);
|
||||
|
||||
void
|
||||
acpi_db_set_method_breakpoint(char *location,
|
||||
struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
void acpi_db_set_method_call_breakpoint(union acpi_parse_object *op);
|
||||
|
||||
void acpi_db_get_bus_info(void);
|
||||
|
||||
void acpi_db_disassemble_aml(char *statements, union acpi_parse_object *op);
|
||||
|
||||
void acpi_db_dump_namespace(char *start_arg, char *depth_arg);
|
||||
|
||||
void acpi_db_dump_namespace_by_owner(char *owner_arg, char *depth_arg);
|
||||
|
||||
void acpi_db_send_notify(char *name, u32 value);
|
||||
|
||||
void acpi_db_set_method_data(char *type_arg, char *index_arg, char *value_arg);
|
||||
|
||||
acpi_status
|
||||
acpi_db_display_objects(char *obj_type_arg, char *display_count_arg);
|
||||
|
||||
acpi_status acpi_db_find_name_in_namespace(char *name_arg);
|
||||
|
||||
void acpi_db_set_scope(char *name);
|
||||
|
||||
acpi_status acpi_db_sleep(char *object_arg);
|
||||
|
||||
void acpi_db_find_references(char *object_arg);
|
||||
|
||||
void acpi_db_display_locks(void);
|
||||
|
||||
void acpi_db_display_resources(char *object_arg);
|
||||
|
||||
void acpi_db_display_gpes(void);
|
||||
|
||||
void acpi_db_check_integrity(void);
|
||||
|
||||
void acpi_db_generate_gpe(char *gpe_arg, char *block_arg);
|
||||
|
||||
void acpi_db_check_predefined_names(void);
|
||||
|
||||
void acpi_db_batch_execute(void);
|
||||
|
||||
/*
|
||||
* dbdisply - debug display commands
|
||||
*/
|
||||
void acpi_db_display_method_info(union acpi_parse_object *op);
|
||||
|
||||
void acpi_db_decode_and_display_object(char *target, char *output_type);
|
||||
|
||||
void
|
||||
acpi_db_display_result_object(union acpi_operand_object *obj_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_db_display_all_methods(char *display_count_arg);
|
||||
|
||||
void acpi_db_display_arguments(void);
|
||||
|
||||
void acpi_db_display_locals(void);
|
||||
|
||||
void acpi_db_display_results(void);
|
||||
|
||||
void acpi_db_display_calling_tree(void);
|
||||
|
||||
void acpi_db_display_object_type(char *object_arg);
|
||||
|
||||
void
|
||||
acpi_db_display_argument_object(union acpi_operand_object *obj_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
void acpi_db_check_predefined_names(void);
|
||||
|
||||
void acpi_db_batch_execute(void);
|
||||
|
||||
/*
|
||||
* dbexec - debugger control method execution
|
||||
*/
|
||||
void acpi_db_execute(char *name, char **args, u32 flags);
|
||||
|
||||
void
|
||||
acpi_db_create_execution_threads(char *num_threads_arg,
|
||||
char *num_loops_arg, char *method_name_arg);
|
||||
|
||||
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
|
||||
u32 acpi_db_get_cache_info(struct acpi_memory_list *cache);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* dbfileio - Debugger file I/O commands
|
||||
*/
|
||||
acpi_object_type
|
||||
acpi_db_match_argument(char *user_argument, struct argument_info *arguments);
|
||||
|
||||
void acpi_db_close_debug_file(void);
|
||||
|
||||
void acpi_db_open_debug_file(char *name);
|
||||
|
||||
acpi_status acpi_db_load_acpi_table(char *filename);
|
||||
|
||||
acpi_status
|
||||
acpi_db_get_table_from_file(char *filename, struct acpi_table_header **table);
|
||||
|
||||
acpi_status
|
||||
acpi_db_read_table_from_file(char *filename, struct acpi_table_header **table);
|
||||
|
||||
/*
|
||||
* dbhistry - debugger HISTORY command
|
||||
*/
|
||||
void acpi_db_add_to_history(char *command_line);
|
||||
|
||||
void acpi_db_display_history(void);
|
||||
|
||||
char *acpi_db_get_from_history(char *command_num_arg);
|
||||
|
||||
/*
|
||||
* dbinput - user front-end to the AML debugger
|
||||
*/
|
||||
acpi_status
|
||||
acpi_db_command_dispatch(char *input_buffer,
|
||||
struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
void ACPI_SYSTEM_XFACE acpi_db_execute_thread(void *context);
|
||||
|
||||
/*
|
||||
* dbstats - Generation and display of ACPI table statistics
|
||||
*/
|
||||
void acpi_db_generate_statistics(union acpi_parse_object *root, u8 is_method);
|
||||
|
||||
acpi_status acpi_db_display_statistics(char *type_arg);
|
||||
|
||||
/*
|
||||
* dbutils - AML debugger utilities
|
||||
*/
|
||||
void acpi_db_set_output_destination(u32 where);
|
||||
|
||||
void acpi_db_dump_external_object(union acpi_object *obj_desc, u32 level);
|
||||
|
||||
void acpi_db_prep_namestring(char *name);
|
||||
|
||||
struct acpi_namespace_node *acpi_db_local_ns_lookup(char *name);
|
||||
|
||||
void acpi_db_uint32_to_hex_string(u32 value, char *buffer);
|
||||
|
||||
#endif /* __ACDEBUG_H__ */
|
||||
@@ -1,445 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acdisasm.h - AML disassembler
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACDISASM_H__
|
||||
#define __ACDISASM_H__
|
||||
|
||||
#include "amlresrc.h"
|
||||
|
||||
#define BLOCK_NONE 0
|
||||
#define BLOCK_PAREN 1
|
||||
#define BLOCK_BRACE 2
|
||||
#define BLOCK_COMMA_LIST 4
|
||||
#define ACPI_DEFAULT_RESNAME *(u32 *) "__RD"
|
||||
|
||||
struct acpi_external_list {
|
||||
char *path;
|
||||
char *internal_path;
|
||||
struct acpi_external_list *next;
|
||||
u32 value;
|
||||
u16 length;
|
||||
u8 type;
|
||||
};
|
||||
|
||||
extern struct acpi_external_list *acpi_gbl_external_list;
|
||||
|
||||
typedef const struct acpi_dmtable_info {
|
||||
u8 opcode;
|
||||
u8 offset;
|
||||
char *name;
|
||||
|
||||
} acpi_dmtable_info;
|
||||
|
||||
/*
|
||||
* Values for Opcode above.
|
||||
* Note: 0-7 must not change, used as a flag shift value
|
||||
*/
|
||||
#define ACPI_DMT_FLAG0 0
|
||||
#define ACPI_DMT_FLAG1 1
|
||||
#define ACPI_DMT_FLAG2 2
|
||||
#define ACPI_DMT_FLAG3 3
|
||||
#define ACPI_DMT_FLAG4 4
|
||||
#define ACPI_DMT_FLAG5 5
|
||||
#define ACPI_DMT_FLAG6 6
|
||||
#define ACPI_DMT_FLAG7 7
|
||||
#define ACPI_DMT_FLAGS0 8
|
||||
#define ACPI_DMT_FLAGS2 9
|
||||
#define ACPI_DMT_UINT8 10
|
||||
#define ACPI_DMT_UINT16 11
|
||||
#define ACPI_DMT_UINT24 12
|
||||
#define ACPI_DMT_UINT32 13
|
||||
#define ACPI_DMT_UINT56 14
|
||||
#define ACPI_DMT_UINT64 15
|
||||
#define ACPI_DMT_STRING 16
|
||||
#define ACPI_DMT_NAME4 17
|
||||
#define ACPI_DMT_NAME6 18
|
||||
#define ACPI_DMT_NAME8 19
|
||||
#define ACPI_DMT_CHKSUM 20
|
||||
#define ACPI_DMT_SPACEID 21
|
||||
#define ACPI_DMT_GAS 22
|
||||
#define ACPI_DMT_ASF 23
|
||||
#define ACPI_DMT_DMAR 24
|
||||
#define ACPI_DMT_HEST 25
|
||||
#define ACPI_DMT_HESTNTFY 26
|
||||
#define ACPI_DMT_HESTNTYP 27
|
||||
#define ACPI_DMT_MADT 28
|
||||
#define ACPI_DMT_SRAT 29
|
||||
#define ACPI_DMT_EXIT 30
|
||||
#define ACPI_DMT_SIG 31
|
||||
|
||||
typedef
|
||||
void (*acpi_dmtable_handler) (struct acpi_table_header * table);
|
||||
|
||||
struct acpi_dmtable_data {
|
||||
char *signature;
|
||||
struct acpi_dmtable_info *table_info;
|
||||
acpi_dmtable_handler table_handler;
|
||||
char *name;
|
||||
};
|
||||
|
||||
struct acpi_op_walk_info {
|
||||
u32 level;
|
||||
u32 last_level;
|
||||
u32 count;
|
||||
u32 bit_offset;
|
||||
u32 flags;
|
||||
struct acpi_walk_state *walk_state;
|
||||
};
|
||||
|
||||
typedef
|
||||
acpi_status(*asl_walk_callback) (union acpi_parse_object * op,
|
||||
u32 level, void *context);
|
||||
|
||||
struct acpi_resource_tag {
|
||||
u32 bit_index;
|
||||
char *tag;
|
||||
};
|
||||
|
||||
/* Strings used for decoding flags to ASL keywords */
|
||||
|
||||
extern const char *acpi_gbl_word_decode[];
|
||||
extern const char *acpi_gbl_irq_decode[];
|
||||
extern const char *acpi_gbl_lock_rule[];
|
||||
extern const char *acpi_gbl_access_types[];
|
||||
extern const char *acpi_gbl_update_rules[];
|
||||
extern const char *acpi_gbl_match_ops[];
|
||||
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_asf0[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_asf1[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_asf1a[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_asf2[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_asf2a[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_asf3[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_asf4[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_asf_hdr[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_boot[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_bert[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_cpep[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_cpep0[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_dbgp[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_dmar[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_dmar_hdr[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_dmar_scope[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_dmar0[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_dmar1[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_dmar2[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_ecdt[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_einj[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_einj0[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_erst[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_facs[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_fadt1[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_fadt2[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_gas[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_header[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_hest[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_hest9[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_hest_notify[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_hpet[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_madt[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_madt0[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_madt1[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_madt2[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_madt3[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_madt4[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_madt5[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_madt6[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_madt7[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_madt8[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_madt9[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_madt10[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_madt_hdr[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_mcfg[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_mcfg0[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_rsdp1[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_rsdp2[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_sbst[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_slic[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_slit[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_spcr[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_spmi[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_srat[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_srat_hdr[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_srat0[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_srat1[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_srat2[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_tcpa[];
|
||||
extern struct acpi_dmtable_info acpi_dm_table_info_wdrt[];
|
||||
|
||||
/*
|
||||
* dmtable
|
||||
*/
|
||||
void acpi_dm_dump_data_table(struct acpi_table_header *table);
|
||||
|
||||
acpi_status
|
||||
acpi_dm_dump_table(u32 table_length,
|
||||
u32 table_offset,
|
||||
void *table,
|
||||
u32 sub_table_length, struct acpi_dmtable_info *info);
|
||||
|
||||
void acpi_dm_line_header(u32 offset, u32 byte_length, char *name);
|
||||
|
||||
void acpi_dm_line_header2(u32 offset, u32 byte_length, char *name, u32 value);
|
||||
|
||||
/*
|
||||
* dmtbdump
|
||||
*/
|
||||
void acpi_dm_dump_asf(struct acpi_table_header *table);
|
||||
|
||||
void acpi_dm_dump_cpep(struct acpi_table_header *table);
|
||||
|
||||
void acpi_dm_dump_dmar(struct acpi_table_header *table);
|
||||
|
||||
void acpi_dm_dump_einj(struct acpi_table_header *table);
|
||||
|
||||
void acpi_dm_dump_erst(struct acpi_table_header *table);
|
||||
|
||||
void acpi_dm_dump_fadt(struct acpi_table_header *table);
|
||||
|
||||
void acpi_dm_dump_hest(struct acpi_table_header *table);
|
||||
|
||||
void acpi_dm_dump_mcfg(struct acpi_table_header *table);
|
||||
|
||||
void acpi_dm_dump_madt(struct acpi_table_header *table);
|
||||
|
||||
u32 acpi_dm_dump_rsdp(struct acpi_table_header *table);
|
||||
|
||||
void acpi_dm_dump_rsdt(struct acpi_table_header *table);
|
||||
|
||||
void acpi_dm_dump_slit(struct acpi_table_header *table);
|
||||
|
||||
void acpi_dm_dump_srat(struct acpi_table_header *table);
|
||||
|
||||
void acpi_dm_dump_xsdt(struct acpi_table_header *table);
|
||||
|
||||
/*
|
||||
* dmwalk
|
||||
*/
|
||||
void
|
||||
acpi_dm_disassemble(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *origin, u32 num_opcodes);
|
||||
|
||||
void
|
||||
acpi_dm_walk_parse_tree(union acpi_parse_object *op,
|
||||
asl_walk_callback descending_callback,
|
||||
asl_walk_callback ascending_callback, void *context);
|
||||
|
||||
/*
|
||||
* dmopcode
|
||||
*/
|
||||
void
|
||||
acpi_dm_disassemble_one_op(struct acpi_walk_state *walk_state,
|
||||
struct acpi_op_walk_info *info,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
void acpi_dm_decode_internal_object(union acpi_operand_object *obj_desc);
|
||||
|
||||
u32 acpi_dm_list_type(union acpi_parse_object *op);
|
||||
|
||||
void acpi_dm_method_flags(union acpi_parse_object *op);
|
||||
|
||||
void acpi_dm_field_flags(union acpi_parse_object *op);
|
||||
|
||||
void acpi_dm_address_space(u8 space_id);
|
||||
|
||||
void acpi_dm_region_flags(union acpi_parse_object *op);
|
||||
|
||||
void acpi_dm_match_op(union acpi_parse_object *op);
|
||||
|
||||
u8 acpi_dm_comma_if_list_member(union acpi_parse_object *op);
|
||||
|
||||
void acpi_dm_comma_if_field_member(union acpi_parse_object *op);
|
||||
|
||||
/*
|
||||
* dmnames
|
||||
*/
|
||||
u32 acpi_dm_dump_name(char *name);
|
||||
|
||||
acpi_status
|
||||
acpi_ps_display_object_pathname(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
void acpi_dm_namestring(char *name);
|
||||
|
||||
/*
|
||||
* dmobject
|
||||
*/
|
||||
void
|
||||
acpi_dm_display_internal_object(union acpi_operand_object *obj_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
void acpi_dm_display_arguments(struct acpi_walk_state *walk_state);
|
||||
|
||||
void acpi_dm_display_locals(struct acpi_walk_state *walk_state);
|
||||
|
||||
void
|
||||
acpi_dm_dump_method_info(acpi_status status,
|
||||
struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
/*
|
||||
* dmbuffer
|
||||
*/
|
||||
void acpi_dm_disasm_byte_list(u32 level, u8 * byte_data, u32 byte_count);
|
||||
|
||||
void
|
||||
acpi_dm_byte_list(struct acpi_op_walk_info *info, union acpi_parse_object *op);
|
||||
|
||||
void acpi_dm_is_eisa_id(union acpi_parse_object *op);
|
||||
|
||||
void acpi_dm_eisa_id(u32 encoded_id);
|
||||
|
||||
u8 acpi_dm_is_unicode_buffer(union acpi_parse_object *op);
|
||||
|
||||
u8 acpi_dm_is_string_buffer(union acpi_parse_object *op);
|
||||
|
||||
/*
|
||||
* dmresrc
|
||||
*/
|
||||
void acpi_dm_dump_integer8(u8 value, char *name);
|
||||
|
||||
void acpi_dm_dump_integer16(u16 value, char *name);
|
||||
|
||||
void acpi_dm_dump_integer32(u32 value, char *name);
|
||||
|
||||
void acpi_dm_dump_integer64(u64 value, char *name);
|
||||
|
||||
void
|
||||
acpi_dm_resource_template(struct acpi_op_walk_info *info,
|
||||
union acpi_parse_object *op,
|
||||
u8 * byte_data, u32 byte_count);
|
||||
|
||||
acpi_status acpi_dm_is_resource_template(union acpi_parse_object *op);
|
||||
|
||||
void acpi_dm_indent(u32 level);
|
||||
|
||||
void acpi_dm_bit_list(u16 mask);
|
||||
|
||||
void acpi_dm_decode_attribute(u8 attribute);
|
||||
|
||||
void acpi_dm_descriptor_name(void);
|
||||
|
||||
/*
|
||||
* dmresrcl
|
||||
*/
|
||||
void
|
||||
acpi_dm_word_descriptor(union aml_resource *resource, u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_dword_descriptor(union aml_resource *resource, u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_extended_descriptor(union aml_resource *resource,
|
||||
u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_qword_descriptor(union aml_resource *resource, u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_memory24_descriptor(union aml_resource *resource,
|
||||
u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_memory32_descriptor(union aml_resource *resource,
|
||||
u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_fixed_memory32_descriptor(union aml_resource *resource,
|
||||
u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_generic_register_descriptor(union aml_resource *resource,
|
||||
u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_interrupt_descriptor(union aml_resource *resource,
|
||||
u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_vendor_large_descriptor(union aml_resource *resource,
|
||||
u32 length, u32 level);
|
||||
|
||||
void acpi_dm_vendor_common(char *name, u8 * byte_data, u32 length, u32 level);
|
||||
|
||||
/*
|
||||
* dmresrcs
|
||||
*/
|
||||
void
|
||||
acpi_dm_irq_descriptor(union aml_resource *resource, u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_dma_descriptor(union aml_resource *resource, u32 length, u32 level);
|
||||
|
||||
void acpi_dm_io_descriptor(union aml_resource *resource, u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_fixed_io_descriptor(union aml_resource *resource,
|
||||
u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_start_dependent_descriptor(union aml_resource *resource,
|
||||
u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_end_dependent_descriptor(union aml_resource *resource,
|
||||
u32 length, u32 level);
|
||||
|
||||
void
|
||||
acpi_dm_vendor_small_descriptor(union aml_resource *resource,
|
||||
u32 length, u32 level);
|
||||
|
||||
/*
|
||||
* dmutils
|
||||
*/
|
||||
void acpi_dm_add_to_external_list(char *path, u8 type, u32 value);
|
||||
|
||||
/*
|
||||
* dmrestag
|
||||
*/
|
||||
void acpi_dm_find_resources(union acpi_parse_object *root);
|
||||
|
||||
void
|
||||
acpi_dm_check_resource_reference(union acpi_parse_object *op,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
#endif /* __ACDISASM_H__ */
|
||||
@@ -1,345 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acdispat.h - dispatcher (parser to interpreter interface)
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 _ACDISPAT_H_
|
||||
#define _ACDISPAT_H_
|
||||
|
||||
#define NAMEOF_LOCAL_NTE "__L0"
|
||||
#define NAMEOF_ARG_NTE "__A0"
|
||||
|
||||
/*
|
||||
* dsopcode - support for late evaluation
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ds_get_buffer_field_arguments(union acpi_operand_object *obj_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_get_bank_field_arguments(union acpi_operand_object *obj_desc);
|
||||
|
||||
acpi_status acpi_ds_get_region_arguments(union acpi_operand_object *rgn_desc);
|
||||
|
||||
acpi_status acpi_ds_get_buffer_arguments(union acpi_operand_object *obj_desc);
|
||||
|
||||
acpi_status acpi_ds_get_package_arguments(union acpi_operand_object *obj_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_eval_buffer_field_operands(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_eval_data_object_operands(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op,
|
||||
union acpi_operand_object *obj_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_eval_bank_field_operands(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
acpi_status acpi_ds_initialize_region(acpi_handle obj_handle);
|
||||
|
||||
/*
|
||||
* dsctrl - Parser/Interpreter interface, control stack routines
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_exec_end_control_op(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
/*
|
||||
* dsexec - Parser/Interpreter interface, method execution callbacks
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,
|
||||
union acpi_operand_object *result_obj);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object **out_op);
|
||||
|
||||
acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *state);
|
||||
|
||||
/*
|
||||
* dsfield - Parser/Interpreter interface for AML fields
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ds_create_field(union acpi_parse_object *op,
|
||||
struct acpi_namespace_node *region_node,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_create_bank_field(union acpi_parse_object *op,
|
||||
struct acpi_namespace_node *region_node,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_create_index_field(union acpi_parse_object *op,
|
||||
struct acpi_namespace_node *region_node,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_create_buffer_field(union acpi_parse_object *op,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_init_field_objects(union acpi_parse_object *op,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* dsload - Parser/Interpreter interface, namespace load callbacks
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object **out_op);
|
||||
|
||||
acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object **out_op);
|
||||
|
||||
acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_init_callbacks(struct acpi_walk_state *walk_state, u32 pass_number);
|
||||
|
||||
/*
|
||||
* dsmthdat - method data (locals/args)
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ds_store_object_to_local(u8 type,
|
||||
u32 index,
|
||||
union acpi_operand_object *src_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_method_data_get_entry(u16 opcode,
|
||||
u32 index,
|
||||
struct acpi_walk_state *walk_state,
|
||||
union acpi_operand_object ***node);
|
||||
|
||||
void acpi_ds_method_data_delete_all(struct acpi_walk_state *walk_state);
|
||||
|
||||
u8 acpi_ds_is_method_value(union acpi_operand_object *obj_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_method_data_get_value(u8 type,
|
||||
u32 index,
|
||||
struct acpi_walk_state *walk_state,
|
||||
union acpi_operand_object **dest_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_method_data_init_args(union acpi_operand_object **params,
|
||||
u32 max_param_count,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_method_data_get_node(u8 type,
|
||||
u32 index,
|
||||
struct acpi_walk_state *walk_state,
|
||||
struct acpi_namespace_node **node);
|
||||
|
||||
void acpi_ds_method_data_init(struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* dsmethod - Parser/Interpreter interface - control method parsing
|
||||
*/
|
||||
acpi_status acpi_ds_parse_method(struct acpi_namespace_node *node);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_call_control_method(struct acpi_thread_state *thread,
|
||||
struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_restart_control_method(struct acpi_walk_state *walk_state,
|
||||
union acpi_operand_object *return_desc);
|
||||
|
||||
void
|
||||
acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
|
||||
union acpi_operand_object *obj_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* dsinit
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ds_initialize_objects(u32 table_index,
|
||||
struct acpi_namespace_node *start_node);
|
||||
|
||||
/*
|
||||
* dsobject - Parser/Interpreter interface - object initialization and conversion
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op,
|
||||
u32 buffer_length,
|
||||
union acpi_operand_object **obj_desc_ptr);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op,
|
||||
u32 package_length,
|
||||
union acpi_operand_object **obj_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op,
|
||||
u16 opcode, union acpi_operand_object **obj_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_create_node(struct acpi_walk_state *walk_state,
|
||||
struct acpi_namespace_node *node,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
/*
|
||||
* dsutils - Parser/Interpreter interface utility routines
|
||||
*/
|
||||
void acpi_ds_clear_implicit_return(struct acpi_walk_state *walk_state);
|
||||
|
||||
u8
|
||||
acpi_ds_do_implicit_return(union acpi_operand_object *return_desc,
|
||||
struct acpi_walk_state *walk_state,
|
||||
u8 add_reference);
|
||||
|
||||
u8
|
||||
acpi_ds_is_result_used(union acpi_parse_object *op,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
void
|
||||
acpi_ds_delete_result_if_not_used(union acpi_parse_object *op,
|
||||
union acpi_operand_object *result_obj,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_create_operand(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *arg, u32 args_remaining);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_create_operands(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *first_arg);
|
||||
|
||||
acpi_status acpi_ds_resolve_operands(struct acpi_walk_state *walk_state);
|
||||
|
||||
void acpi_ds_clear_operands(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ds_evaluate_name_path(struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* dswscope - Scope Stack manipulation
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ds_scope_stack_push(struct acpi_namespace_node *node,
|
||||
acpi_object_type type,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ds_scope_stack_pop(struct acpi_walk_state *walk_state);
|
||||
|
||||
void acpi_ds_scope_stack_clear(struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* dswstate - parser WALK_STATE management routines
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ds_obj_stack_push(void *object, struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state *walk_state);
|
||||
|
||||
struct acpi_walk_state *acpi_ds_create_walk_state(acpi_owner_id owner_id, union acpi_parse_object
|
||||
*origin, union acpi_operand_object
|
||||
*mth_desc, struct acpi_thread_state
|
||||
*thread);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op,
|
||||
struct acpi_namespace_node *method_node,
|
||||
u8 * aml_start,
|
||||
u32 aml_length,
|
||||
struct acpi_evaluate_info *info, u8 pass_number);
|
||||
|
||||
void
|
||||
acpi_ds_obj_stack_pop_and_delete(u32 pop_count,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
void acpi_ds_delete_walk_state(struct acpi_walk_state *walk_state);
|
||||
|
||||
struct acpi_walk_state *acpi_ds_pop_walk_state(struct acpi_thread_state
|
||||
*thread);
|
||||
|
||||
void
|
||||
acpi_ds_push_walk_state(struct acpi_walk_state *walk_state,
|
||||
struct acpi_thread_state *thread);
|
||||
|
||||
acpi_status acpi_ds_result_stack_clear(struct acpi_walk_state *walk_state);
|
||||
|
||||
struct acpi_walk_state *acpi_ds_get_current_walk_state(struct acpi_thread_state
|
||||
*thread);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_result_pop(union acpi_operand_object **object,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_result_push(union acpi_operand_object *object,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
#endif /* _ACDISPAT_H_ */
|
||||
@@ -1,216 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acevents.h - Event subcomponent prototypes and defines
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACEVENTS_H__
|
||||
#define __ACEVENTS_H__
|
||||
|
||||
/*
|
||||
* evevent
|
||||
*/
|
||||
acpi_status acpi_ev_initialize_events(void);
|
||||
|
||||
acpi_status acpi_ev_install_xrupt_handlers(void);
|
||||
|
||||
acpi_status acpi_ev_install_fadt_gpes(void);
|
||||
|
||||
u32 acpi_ev_fixed_event_detect(void);
|
||||
|
||||
/*
|
||||
* evmisc
|
||||
*/
|
||||
u8 acpi_ev_is_notify_object(struct acpi_namespace_node *node);
|
||||
|
||||
acpi_status acpi_ev_acquire_global_lock(u16 timeout);
|
||||
|
||||
acpi_status acpi_ev_release_global_lock(void);
|
||||
|
||||
acpi_status acpi_ev_init_global_lock_handler(void);
|
||||
|
||||
u32 acpi_ev_get_gpe_number_index(u32 gpe_number);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_queue_notify_request(struct acpi_namespace_node *node,
|
||||
u32 notify_value);
|
||||
|
||||
/*
|
||||
* evgpe - GPE handling and dispatch
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info,
|
||||
u8 type);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info,
|
||||
u8 write_to_hardware);
|
||||
|
||||
acpi_status acpi_ev_disable_gpe(struct acpi_gpe_event_info *gpe_event_info);
|
||||
|
||||
struct acpi_gpe_event_info *acpi_ev_get_gpe_event_info(acpi_handle gpe_device,
|
||||
u32 gpe_number);
|
||||
|
||||
/*
|
||||
* evgpeblk
|
||||
*/
|
||||
u8 acpi_ev_valid_gpe_event(struct acpi_gpe_event_info *gpe_event_info);
|
||||
|
||||
acpi_status acpi_ev_walk_gpe_list(acpi_gpe_callback gpe_walk_callback);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
|
||||
struct acpi_gpe_block_info *gpe_block);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
|
||||
struct acpi_generic_address *gpe_block_address,
|
||||
u32 register_count,
|
||||
u8 gpe_block_base_number,
|
||||
u32 interrupt_number,
|
||||
struct acpi_gpe_block_info **return_gpe_block);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_initialize_gpe_block(struct acpi_namespace_node *gpe_device,
|
||||
struct acpi_gpe_block_info *gpe_block);
|
||||
|
||||
acpi_status acpi_ev_delete_gpe_block(struct acpi_gpe_block_info *gpe_block);
|
||||
|
||||
u32
|
||||
acpi_ev_gpe_dispatch(struct acpi_gpe_event_info *gpe_event_info,
|
||||
u32 gpe_number);
|
||||
|
||||
u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info *gpe_xrupt_list);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_set_gpe_type(struct acpi_gpe_event_info *gpe_event_info, u8 type);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_check_for_wake_only_gpe(struct acpi_gpe_event_info *gpe_event_info);
|
||||
|
||||
acpi_status acpi_ev_gpe_initialize(void);
|
||||
|
||||
/*
|
||||
* evregion - Address Space handling
|
||||
*/
|
||||
acpi_status acpi_ev_install_region_handlers(void);
|
||||
|
||||
acpi_status acpi_ev_initialize_op_regions(void);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
|
||||
u32 function,
|
||||
acpi_physical_address address,
|
||||
u32 bit_width, acpi_integer * value);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_attach_region(union acpi_operand_object *handler_obj,
|
||||
union acpi_operand_object *region_obj,
|
||||
u8 acpi_ns_is_locked);
|
||||
|
||||
void
|
||||
acpi_ev_detach_region(union acpi_operand_object *region_obj,
|
||||
u8 acpi_ns_is_locked);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_install_space_handler(struct acpi_namespace_node *node,
|
||||
acpi_adr_space_type space_id,
|
||||
acpi_adr_space_handler handler,
|
||||
acpi_adr_space_setup setup, void *context);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
|
||||
acpi_adr_space_type space_id);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function);
|
||||
|
||||
/*
|
||||
* evregini - Region initialization and setup
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ev_system_memory_region_setup(acpi_handle handle,
|
||||
u32 function,
|
||||
void *handler_context,
|
||||
void **region_context);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_io_space_region_setup(acpi_handle handle,
|
||||
u32 function,
|
||||
void *handler_context, void **region_context);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_pci_config_region_setup(acpi_handle handle,
|
||||
u32 function,
|
||||
void *handler_context, void **region_context);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_cmos_region_setup(acpi_handle handle,
|
||||
u32 function,
|
||||
void *handler_context, void **region_context);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_pci_bar_region_setup(acpi_handle handle,
|
||||
u32 function,
|
||||
void *handler_context, void **region_context);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_default_region_setup(acpi_handle handle,
|
||||
u32 function,
|
||||
void *handler_context, void **region_context);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_initialize_region(union acpi_operand_object *region_obj,
|
||||
u8 acpi_ns_locked);
|
||||
|
||||
/*
|
||||
* evsci - SCI (System Control Interrupt) handling/dispatch
|
||||
*/
|
||||
u32 ACPI_SYSTEM_XFACE acpi_ev_gpe_xrupt_handler(void *context);
|
||||
|
||||
u32 acpi_ev_install_sci_handler(void);
|
||||
|
||||
acpi_status acpi_ev_remove_sci_handler(void);
|
||||
|
||||
u32 acpi_ev_initialize_sCI(u32 program_sCI);
|
||||
|
||||
void acpi_ev_terminate(void);
|
||||
|
||||
#endif /* __ACEVENTS_H__ */
|
||||
@@ -153,8 +153,9 @@
|
||||
#define AE_AML_CIRCULAR_REFERENCE (acpi_status) (0x001E | AE_CODE_AML)
|
||||
#define AE_AML_BAD_RESOURCE_LENGTH (acpi_status) (0x001F | AE_CODE_AML)
|
||||
#define AE_AML_ILLEGAL_ADDRESS (acpi_status) (0x0020 | AE_CODE_AML)
|
||||
#define AE_AML_INFINITE_LOOP (acpi_status) (0x0021 | AE_CODE_AML)
|
||||
|
||||
#define AE_CODE_AML_MAX 0x0020
|
||||
#define AE_CODE_AML_MAX 0x0021
|
||||
|
||||
/*
|
||||
* Internal exceptions used for control
|
||||
@@ -175,6 +176,8 @@
|
||||
|
||||
#define AE_CODE_CTRL_MAX 0x000D
|
||||
|
||||
/* Exception strings for acpi_format_exception */
|
||||
|
||||
#ifdef DEFINE_ACPI_GLOBALS
|
||||
|
||||
/*
|
||||
@@ -267,6 +270,7 @@ char const *acpi_gbl_exception_names_aml[] = {
|
||||
"AE_AML_CIRCULAR_REFERENCE",
|
||||
"AE_AML_BAD_RESOURCE_LENGTH",
|
||||
"AE_AML_ILLEGAL_ADDRESS",
|
||||
"AE_AML_INFINITE_LOOP"
|
||||
};
|
||||
|
||||
char const *acpi_gbl_exception_names_ctrl[] = {
|
||||
|
||||
@@ -1,387 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acglobal.h - Declarations for global variables
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACGLOBAL_H__
|
||||
#define __ACGLOBAL_H__
|
||||
|
||||
/*
|
||||
* Ensure that the globals are actually defined and initialized only once.
|
||||
*
|
||||
* The use of these macros allows a single list of globals (here) in order
|
||||
* to simplify maintenance of the code.
|
||||
*/
|
||||
#ifdef DEFINE_ACPI_GLOBALS
|
||||
#define ACPI_EXTERN
|
||||
#define ACPI_INIT_GLOBAL(a,b) a=b
|
||||
#else
|
||||
#define ACPI_EXTERN extern
|
||||
#define ACPI_INIT_GLOBAL(a,b) a
|
||||
#endif
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Runtime configuration (static defaults that can be overriden at runtime)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/*
|
||||
* Enable "slack" in the AML interpreter? Default is FALSE, and the
|
||||
* interpreter strictly follows the ACPI specification. Setting to TRUE
|
||||
* allows the interpreter to ignore certain errors and/or bad AML constructs.
|
||||
*
|
||||
* Currently, these features are enabled by this flag:
|
||||
*
|
||||
* 1) Allow "implicit return" of last value in a control method
|
||||
* 2) Allow access beyond the end of an operation region
|
||||
* 3) Allow access to uninitialized locals/args (auto-init to integer 0)
|
||||
* 4) Allow ANY object type to be a source operand for the Store() operator
|
||||
* 5) Allow unresolved references (invalid target name) in package objects
|
||||
* 6) Enable warning messages for behavior that is not ACPI spec compliant
|
||||
*/
|
||||
ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_enable_interpreter_slack, FALSE);
|
||||
|
||||
/*
|
||||
* Automatically serialize ALL control methods? Default is FALSE, meaning
|
||||
* to use the Serialized/not_serialized method flags on a per method basis.
|
||||
* Only change this if the ASL code is poorly written and cannot handle
|
||||
* reentrancy even though methods are marked "NotSerialized".
|
||||
*/
|
||||
ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_all_methods_serialized, FALSE);
|
||||
|
||||
/*
|
||||
* Create the predefined _OSI method in the namespace? Default is TRUE
|
||||
* because ACPI CA is fully compatible with other ACPI implementations.
|
||||
* Changing this will revert ACPI CA (and machine ASL) to pre-OSI behavior.
|
||||
*/
|
||||
ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_create_osi_method, TRUE);
|
||||
|
||||
/*
|
||||
* Disable wakeup GPEs during runtime? Default is TRUE because WAKE and
|
||||
* RUNTIME GPEs should never be shared, and WAKE GPEs should typically only
|
||||
* be enabled just before going to sleep.
|
||||
*/
|
||||
ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_leave_wake_gpes_disabled, TRUE);
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Debug support
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/* Runtime configuration of debug print levels */
|
||||
|
||||
extern u32 acpi_dbg_level;
|
||||
extern u32 acpi_dbg_layer;
|
||||
|
||||
/* Procedure nesting level for debug output */
|
||||
|
||||
extern u32 acpi_gbl_nesting_level;
|
||||
|
||||
/* Support for dynamic control method tracing mechanism */
|
||||
|
||||
ACPI_EXTERN u32 acpi_gbl_original_dbg_level;
|
||||
ACPI_EXTERN u32 acpi_gbl_original_dbg_layer;
|
||||
ACPI_EXTERN acpi_name acpi_gbl_trace_method_name;
|
||||
ACPI_EXTERN u32 acpi_gbl_trace_dbg_level;
|
||||
ACPI_EXTERN u32 acpi_gbl_trace_dbg_layer;
|
||||
ACPI_EXTERN u32 acpi_gbl_trace_flags;
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* ACPI Table globals
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/*
|
||||
* acpi_gbl_root_table_list is the master list of ACPI tables found in the
|
||||
* RSDT/XSDT.
|
||||
*
|
||||
* acpi_gbl_FADT is a local copy of the FADT, converted to a common format.
|
||||
*/
|
||||
ACPI_EXTERN struct acpi_internal_rsdt acpi_gbl_root_table_list;
|
||||
ACPI_EXTERN struct acpi_table_fadt acpi_gbl_FADT;
|
||||
extern u8 acpi_gbl_permanent_mmap;
|
||||
|
||||
/* These addresses are calculated from FADT address values */
|
||||
|
||||
ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1a_enable;
|
||||
ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1b_enable;
|
||||
|
||||
/*
|
||||
* Handle both ACPI 1.0 and ACPI 2.0 Integer widths. The integer width is
|
||||
* determined by the revision of the DSDT: If the DSDT revision is less than
|
||||
* 2, use only the lower 32 bits of the internal 64-bit Integer.
|
||||
*/
|
||||
ACPI_EXTERN u8 acpi_gbl_integer_bit_width;
|
||||
ACPI_EXTERN u8 acpi_gbl_integer_byte_width;
|
||||
ACPI_EXTERN u8 acpi_gbl_integer_nybble_width;
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Mutual exlusion within ACPICA subsystem
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/*
|
||||
* Predefined mutex objects. This array contains the
|
||||
* actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs.
|
||||
* (The table maps local handles to the real OS handles)
|
||||
*/
|
||||
ACPI_EXTERN struct acpi_mutex_info acpi_gbl_mutex_info[ACPI_NUM_MUTEX];
|
||||
|
||||
/*
|
||||
* Global lock mutex is an actual AML mutex object
|
||||
* Global lock semaphore works in conjunction with the HW global lock
|
||||
*/
|
||||
ACPI_EXTERN union acpi_operand_object *acpi_gbl_global_lock_mutex;
|
||||
ACPI_EXTERN acpi_semaphore acpi_gbl_global_lock_semaphore;
|
||||
ACPI_EXTERN u16 acpi_gbl_global_lock_handle;
|
||||
ACPI_EXTERN u8 acpi_gbl_global_lock_acquired;
|
||||
ACPI_EXTERN u8 acpi_gbl_global_lock_present;
|
||||
|
||||
/*
|
||||
* Spinlocks are used for interfaces that can be possibly called at
|
||||
* interrupt level
|
||||
*/
|
||||
ACPI_EXTERN spinlock_t _acpi_gbl_gpe_lock; /* For GPE data structs and registers */
|
||||
ACPI_EXTERN spinlock_t _acpi_gbl_hardware_lock; /* For ACPI H/W except GPE registers */
|
||||
#define acpi_gbl_gpe_lock &_acpi_gbl_gpe_lock
|
||||
#define acpi_gbl_hardware_lock &_acpi_gbl_hardware_lock
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Miscellaneous globals
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
|
||||
|
||||
/* Lists for tracking memory allocations */
|
||||
|
||||
ACPI_EXTERN struct acpi_memory_list *acpi_gbl_global_list;
|
||||
ACPI_EXTERN struct acpi_memory_list *acpi_gbl_ns_node_list;
|
||||
ACPI_EXTERN u8 acpi_gbl_display_final_mem_stats;
|
||||
#endif
|
||||
|
||||
/* Object caches */
|
||||
|
||||
ACPI_EXTERN acpi_cache_t *acpi_gbl_namespace_cache;
|
||||
ACPI_EXTERN acpi_cache_t *acpi_gbl_state_cache;
|
||||
ACPI_EXTERN acpi_cache_t *acpi_gbl_ps_node_cache;
|
||||
ACPI_EXTERN acpi_cache_t *acpi_gbl_ps_node_ext_cache;
|
||||
ACPI_EXTERN acpi_cache_t *acpi_gbl_operand_cache;
|
||||
|
||||
/* Global handlers */
|
||||
|
||||
ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_device_notify;
|
||||
ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_system_notify;
|
||||
ACPI_EXTERN acpi_exception_handler acpi_gbl_exception_handler;
|
||||
ACPI_EXTERN acpi_init_handler acpi_gbl_init_handler;
|
||||
ACPI_EXTERN acpi_tbl_handler acpi_gbl_table_handler;
|
||||
ACPI_EXTERN void *acpi_gbl_table_handler_context;
|
||||
ACPI_EXTERN struct acpi_walk_state *acpi_gbl_breakpoint_walk;
|
||||
|
||||
/* Owner ID support */
|
||||
|
||||
ACPI_EXTERN u32 acpi_gbl_owner_id_mask[ACPI_NUM_OWNERID_MASKS];
|
||||
ACPI_EXTERN u8 acpi_gbl_last_owner_id_index;
|
||||
ACPI_EXTERN u8 acpi_gbl_next_owner_id_offset;
|
||||
|
||||
/* Misc */
|
||||
|
||||
ACPI_EXTERN u32 acpi_gbl_original_mode;
|
||||
ACPI_EXTERN u32 acpi_gbl_rsdp_original_location;
|
||||
ACPI_EXTERN u32 acpi_gbl_ns_lookup_count;
|
||||
ACPI_EXTERN u32 acpi_gbl_ps_find_count;
|
||||
ACPI_EXTERN u16 acpi_gbl_pm1_enable_register_save;
|
||||
ACPI_EXTERN u8 acpi_gbl_debugger_configuration;
|
||||
ACPI_EXTERN u8 acpi_gbl_step_to_next_call;
|
||||
ACPI_EXTERN u8 acpi_gbl_acpi_hardware_present;
|
||||
ACPI_EXTERN u8 acpi_gbl_events_initialized;
|
||||
ACPI_EXTERN u8 acpi_gbl_system_awake_and_running;
|
||||
|
||||
#ifndef DEFINE_ACPI_GLOBALS
|
||||
|
||||
/* Other miscellaneous */
|
||||
|
||||
extern u8 acpi_gbl_shutdown;
|
||||
extern u32 acpi_gbl_startup_flags;
|
||||
extern const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT];
|
||||
extern const char *acpi_gbl_highest_dstate_names[4];
|
||||
extern const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES];
|
||||
extern const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS];
|
||||
|
||||
#endif
|
||||
|
||||
/* Exception codes */
|
||||
|
||||
extern char const *acpi_gbl_exception_names_env[];
|
||||
extern char const *acpi_gbl_exception_names_pgm[];
|
||||
extern char const *acpi_gbl_exception_names_tbl[];
|
||||
extern char const *acpi_gbl_exception_names_aml[];
|
||||
extern char const *acpi_gbl_exception_names_ctrl[];
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Namespace globals
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
|
||||
#define NUM_PREDEFINED_NAMES 10
|
||||
#else
|
||||
#define NUM_PREDEFINED_NAMES 9
|
||||
#endif
|
||||
|
||||
ACPI_EXTERN struct acpi_namespace_node acpi_gbl_root_node_struct;
|
||||
ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_root_node;
|
||||
ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_fadt_gpe_device;
|
||||
|
||||
extern const u8 acpi_gbl_ns_properties[ACPI_NUM_NS_TYPES];
|
||||
extern const struct acpi_predefined_names
|
||||
acpi_gbl_pre_defined_names[NUM_PREDEFINED_NAMES];
|
||||
|
||||
#ifdef ACPI_DEBUG_OUTPUT
|
||||
ACPI_EXTERN u32 acpi_gbl_current_node_count;
|
||||
ACPI_EXTERN u32 acpi_gbl_current_node_size;
|
||||
ACPI_EXTERN u32 acpi_gbl_max_concurrent_node_count;
|
||||
ACPI_EXTERN acpi_size *acpi_gbl_entry_stack_pointer;
|
||||
ACPI_EXTERN acpi_size *acpi_gbl_lowest_stack_pointer;
|
||||
ACPI_EXTERN u32 acpi_gbl_deepest_nesting;
|
||||
#endif
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Interpreter globals
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
ACPI_EXTERN struct acpi_thread_state *acpi_gbl_current_walk_list;
|
||||
|
||||
/* Control method single step flag */
|
||||
|
||||
ACPI_EXTERN u8 acpi_gbl_cm_single_step;
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Hardware globals
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
extern struct acpi_bit_register_info
|
||||
acpi_gbl_bit_register_info[ACPI_NUM_BITREG];
|
||||
ACPI_EXTERN u8 acpi_gbl_sleep_type_a;
|
||||
ACPI_EXTERN u8 acpi_gbl_sleep_type_b;
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Event and GPE globals
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
extern struct acpi_fixed_event_info
|
||||
acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS];
|
||||
ACPI_EXTERN struct acpi_fixed_event_handler
|
||||
acpi_gbl_fixed_event_handlers[ACPI_NUM_FIXED_EVENTS];
|
||||
ACPI_EXTERN struct acpi_gpe_xrupt_info *acpi_gbl_gpe_xrupt_list_head;
|
||||
ACPI_EXTERN struct acpi_gpe_block_info
|
||||
*acpi_gbl_gpe_fadt_blocks[ACPI_MAX_GPE_BLOCKS];
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Debugger globals
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
ACPI_EXTERN u8 acpi_gbl_db_output_flags;
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
|
||||
ACPI_EXTERN u8 acpi_gbl_db_opt_disasm;
|
||||
ACPI_EXTERN u8 acpi_gbl_db_opt_verbose;
|
||||
#endif
|
||||
|
||||
#ifdef ACPI_DEBUGGER
|
||||
|
||||
extern u8 acpi_gbl_method_executing;
|
||||
extern u8 acpi_gbl_abort_method;
|
||||
extern u8 acpi_gbl_db_terminate_threads;
|
||||
|
||||
ACPI_EXTERN int optind;
|
||||
ACPI_EXTERN char *optarg;
|
||||
|
||||
ACPI_EXTERN u8 acpi_gbl_db_opt_tables;
|
||||
ACPI_EXTERN u8 acpi_gbl_db_opt_stats;
|
||||
ACPI_EXTERN u8 acpi_gbl_db_opt_ini_methods;
|
||||
|
||||
ACPI_EXTERN char *acpi_gbl_db_args[ACPI_DEBUGGER_MAX_ARGS];
|
||||
ACPI_EXTERN char acpi_gbl_db_line_buf[80];
|
||||
ACPI_EXTERN char acpi_gbl_db_parsed_buf[80];
|
||||
ACPI_EXTERN char acpi_gbl_db_scope_buf[40];
|
||||
ACPI_EXTERN char acpi_gbl_db_debug_filename[40];
|
||||
ACPI_EXTERN u8 acpi_gbl_db_output_to_file;
|
||||
ACPI_EXTERN char *acpi_gbl_db_buffer;
|
||||
ACPI_EXTERN char *acpi_gbl_db_filename;
|
||||
ACPI_EXTERN u32 acpi_gbl_db_debug_level;
|
||||
ACPI_EXTERN u32 acpi_gbl_db_console_debug_level;
|
||||
ACPI_EXTERN struct acpi_table_header *acpi_gbl_db_table_ptr;
|
||||
ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_db_scope_node;
|
||||
|
||||
/*
|
||||
* Statistic globals
|
||||
*/
|
||||
ACPI_EXTERN u16 acpi_gbl_obj_type_count[ACPI_TYPE_NS_NODE_MAX + 1];
|
||||
ACPI_EXTERN u16 acpi_gbl_node_type_count[ACPI_TYPE_NS_NODE_MAX + 1];
|
||||
ACPI_EXTERN u16 acpi_gbl_obj_type_count_misc;
|
||||
ACPI_EXTERN u16 acpi_gbl_node_type_count_misc;
|
||||
ACPI_EXTERN u32 acpi_gbl_num_nodes;
|
||||
ACPI_EXTERN u32 acpi_gbl_num_objects;
|
||||
|
||||
ACPI_EXTERN u32 acpi_gbl_size_of_parse_tree;
|
||||
ACPI_EXTERN u32 acpi_gbl_size_of_method_trees;
|
||||
ACPI_EXTERN u32 acpi_gbl_size_of_node_entries;
|
||||
ACPI_EXTERN u32 acpi_gbl_size_of_acpi_objects;
|
||||
|
||||
#endif /* ACPI_DEBUGGER */
|
||||
|
||||
#endif /* __ACGLOBAL_H__ */
|
||||
@@ -1,131 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: achware.h -- hardware specific interfaces
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACHWARE_H__
|
||||
#define __ACHWARE_H__
|
||||
|
||||
/* PM Timer ticks per second (HZ) */
|
||||
|
||||
#define PM_TIMER_FREQUENCY 3579545
|
||||
|
||||
/* Values for the _SST reserved method */
|
||||
|
||||
#define ACPI_SST_INDICATOR_OFF 0
|
||||
#define ACPI_SST_WORKING 1
|
||||
#define ACPI_SST_WAKING 2
|
||||
#define ACPI_SST_SLEEPING 3
|
||||
#define ACPI_SST_SLEEP_CONTEXT 4
|
||||
|
||||
/* Prototypes */
|
||||
|
||||
/*
|
||||
* hwacpi - high level functions
|
||||
*/
|
||||
acpi_status acpi_hw_set_mode(u32 mode);
|
||||
|
||||
u32 acpi_hw_get_mode(void);
|
||||
|
||||
/*
|
||||
* hwregs - ACPI Register I/O
|
||||
*/
|
||||
struct acpi_bit_register_info *acpi_hw_get_bit_register_info(u32 register_id);
|
||||
|
||||
acpi_status
|
||||
acpi_hw_register_read(u32 register_id, u32 * return_value);
|
||||
|
||||
acpi_status acpi_hw_register_write(u32 register_id, u32 value);
|
||||
|
||||
acpi_status
|
||||
acpi_hw_low_level_read(u32 width,
|
||||
u32 * value, struct acpi_generic_address *reg);
|
||||
|
||||
acpi_status
|
||||
acpi_hw_low_level_write(u32 width, u32 value, struct acpi_generic_address *reg);
|
||||
|
||||
acpi_status acpi_hw_clear_acpi_status(void);
|
||||
|
||||
/*
|
||||
* hwgpe - GPE support
|
||||
*/
|
||||
acpi_status acpi_hw_low_disable_gpe(struct acpi_gpe_event_info *gpe_event_info);
|
||||
|
||||
acpi_status
|
||||
acpi_hw_write_gpe_enable_reg(struct acpi_gpe_event_info *gpe_event_info);
|
||||
|
||||
acpi_status
|
||||
acpi_hw_disable_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
|
||||
struct acpi_gpe_block_info *gpe_block);
|
||||
|
||||
acpi_status acpi_hw_clear_gpe(struct acpi_gpe_event_info *gpe_event_info);
|
||||
|
||||
acpi_status
|
||||
acpi_hw_clear_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
|
||||
struct acpi_gpe_block_info *gpe_block);
|
||||
|
||||
acpi_status
|
||||
acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info,
|
||||
acpi_event_status * event_status);
|
||||
|
||||
acpi_status acpi_hw_disable_all_gpes(void);
|
||||
|
||||
acpi_status acpi_hw_enable_all_runtime_gpes(void);
|
||||
|
||||
acpi_status acpi_hw_enable_all_wakeup_gpes(void);
|
||||
|
||||
acpi_status
|
||||
acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
|
||||
struct acpi_gpe_block_info *gpe_block);
|
||||
|
||||
#ifdef ACPI_FUTURE_USAGE
|
||||
/*
|
||||
* hwtimer - ACPI Timer prototypes
|
||||
*/
|
||||
acpi_status acpi_get_timer_resolution(u32 * resolution);
|
||||
|
||||
acpi_status acpi_get_timer(u32 * ticks);
|
||||
|
||||
acpi_status
|
||||
acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed);
|
||||
#endif /* ACPI_FUTURE_USAGE */
|
||||
|
||||
#endif /* __ACHWARE_H__ */
|
||||
@@ -1,529 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acinterp.h - Interpreter subcomponent prototypes and defines
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACINTERP_H__
|
||||
#define __ACINTERP_H__
|
||||
|
||||
#define ACPI_WALK_OPERANDS (&(walk_state->operands [walk_state->num_operands -1]))
|
||||
|
||||
/* Macros for tables used for debug output */
|
||||
|
||||
#define ACPI_EXD_OFFSET(f) (u8) ACPI_OFFSET (union acpi_operand_object,f)
|
||||
#define ACPI_EXD_NSOFFSET(f) (u8) ACPI_OFFSET (struct acpi_namespace_node,f)
|
||||
#define ACPI_EXD_TABLE_SIZE(name) (sizeof(name) / sizeof (struct acpi_exdump_info))
|
||||
|
||||
/*
|
||||
* If possible, pack the following structures to byte alignment, since we
|
||||
* don't care about performance for debug output. Two cases where we cannot
|
||||
* pack the structures:
|
||||
*
|
||||
* 1) Hardware does not support misaligned memory transfers
|
||||
* 2) Compiler does not support pointers within packed structures
|
||||
*/
|
||||
#if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED))
|
||||
#pragma pack(1)
|
||||
#endif
|
||||
|
||||
typedef const struct acpi_exdump_info {
|
||||
u8 opcode;
|
||||
u8 offset;
|
||||
char *name;
|
||||
|
||||
} acpi_exdump_info;
|
||||
|
||||
/* Values for the Opcode field above */
|
||||
|
||||
#define ACPI_EXD_INIT 0
|
||||
#define ACPI_EXD_TYPE 1
|
||||
#define ACPI_EXD_UINT8 2
|
||||
#define ACPI_EXD_UINT16 3
|
||||
#define ACPI_EXD_UINT32 4
|
||||
#define ACPI_EXD_UINT64 5
|
||||
#define ACPI_EXD_LITERAL 6
|
||||
#define ACPI_EXD_POINTER 7
|
||||
#define ACPI_EXD_ADDRESS 8
|
||||
#define ACPI_EXD_STRING 9
|
||||
#define ACPI_EXD_BUFFER 10
|
||||
#define ACPI_EXD_PACKAGE 11
|
||||
#define ACPI_EXD_FIELD 12
|
||||
#define ACPI_EXD_REFERENCE 13
|
||||
|
||||
/* restore default alignment */
|
||||
|
||||
#pragma pack()
|
||||
|
||||
/*
|
||||
* exconvrt - object conversion
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc,
|
||||
union acpi_operand_object **result_desc, u32 flags);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_convert_to_buffer(union acpi_operand_object *obj_desc,
|
||||
union acpi_operand_object **result_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_convert_to_string(union acpi_operand_object *obj_desc,
|
||||
union acpi_operand_object **result_desc, u32 type);
|
||||
|
||||
/* Types for ->String conversion */
|
||||
|
||||
#define ACPI_EXPLICIT_BYTE_COPY 0x00000000
|
||||
#define ACPI_EXPLICIT_CONVERT_HEX 0x00000001
|
||||
#define ACPI_IMPLICIT_CONVERT_HEX 0x00000002
|
||||
#define ACPI_EXPLICIT_CONVERT_DECIMAL 0x00000003
|
||||
|
||||
acpi_status
|
||||
acpi_ex_convert_to_target_type(acpi_object_type destination_type,
|
||||
union acpi_operand_object *source_desc,
|
||||
union acpi_operand_object **result_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* exfield - ACPI AML (p-code) execution - field manipulation
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_common_buffer_setup(union acpi_operand_object *obj_desc,
|
||||
u32 buffer_length, u32 * datum_count);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_write_with_update_rule(union acpi_operand_object *obj_desc,
|
||||
acpi_integer mask,
|
||||
acpi_integer field_value,
|
||||
u32 field_datum_byte_offset);
|
||||
|
||||
void
|
||||
acpi_ex_get_buffer_datum(acpi_integer * datum,
|
||||
void *buffer,
|
||||
u32 buffer_length,
|
||||
u32 byte_granularity, u32 buffer_offset);
|
||||
|
||||
void
|
||||
acpi_ex_set_buffer_datum(acpi_integer merged_datum,
|
||||
void *buffer,
|
||||
u32 buffer_length,
|
||||
u32 byte_granularity, u32 buffer_offset);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_read_data_from_field(struct acpi_walk_state *walk_state,
|
||||
union acpi_operand_object *obj_desc,
|
||||
union acpi_operand_object **ret_buffer_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
|
||||
union acpi_operand_object *obj_desc,
|
||||
union acpi_operand_object **result_desc);
|
||||
|
||||
/*
|
||||
* exfldio - low level field I/O
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
|
||||
void *buffer, u32 buffer_length);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
|
||||
void *buffer, u32 buffer_length);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_access_region(union acpi_operand_object *obj_desc,
|
||||
u32 field_datum_byte_offset,
|
||||
acpi_integer * value, u32 read_write);
|
||||
|
||||
/*
|
||||
* exmisc - misc support routines
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_get_object_reference(union acpi_operand_object *obj_desc,
|
||||
union acpi_operand_object **return_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_concat_template(union acpi_operand_object *obj_desc,
|
||||
union acpi_operand_object *obj_desc2,
|
||||
union acpi_operand_object **actual_return_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_do_concatenate(union acpi_operand_object *obj_desc,
|
||||
union acpi_operand_object *obj_desc2,
|
||||
union acpi_operand_object **actual_return_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_do_logical_numeric_op(u16 opcode,
|
||||
acpi_integer integer0,
|
||||
acpi_integer integer1, u8 * logical_result);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_do_logical_op(u16 opcode,
|
||||
union acpi_operand_object *operand0,
|
||||
union acpi_operand_object *operand1, u8 * logical_result);
|
||||
|
||||
acpi_integer
|
||||
acpi_ex_do_math_op(u16 opcode, acpi_integer operand0, acpi_integer operand1);
|
||||
|
||||
acpi_status acpi_ex_create_mutex(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ex_create_processor(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ex_create_power_resource(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_create_region(u8 * aml_start,
|
||||
u32 aml_length,
|
||||
u8 region_space, struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ex_create_event(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ex_create_alias(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_create_method(u8 * aml_start,
|
||||
u32 aml_length, struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* exconfig - dynamic table load/unload
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_load_op(union acpi_operand_object *obj_desc,
|
||||
union acpi_operand_object *target,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
|
||||
union acpi_operand_object **return_desc);
|
||||
|
||||
acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle);
|
||||
|
||||
/*
|
||||
* exmutex - mutex support
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_acquire_mutex(union acpi_operand_object *time_desc,
|
||||
union acpi_operand_object *obj_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_acquire_mutex_object(u16 timeout,
|
||||
union acpi_operand_object *obj_desc,
|
||||
acpi_thread_id thread_id);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ex_release_mutex_object(union acpi_operand_object *obj_desc);
|
||||
|
||||
void acpi_ex_release_all_mutexes(struct acpi_thread_state *thread);
|
||||
|
||||
void acpi_ex_unlink_mutex(union acpi_operand_object *obj_desc);
|
||||
|
||||
/*
|
||||
* exprep - ACPI AML execution - prep utilities
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_prep_common_field_object(union acpi_operand_object *obj_desc,
|
||||
u8 field_flags,
|
||||
u8 field_attribute,
|
||||
u32 field_bit_position, u32 field_bit_length);
|
||||
|
||||
acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info);
|
||||
|
||||
/*
|
||||
* exsystem - Interface to OS services
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_system_do_notify_op(union acpi_operand_object *value,
|
||||
union acpi_operand_object *obj_desc);
|
||||
|
||||
acpi_status acpi_ex_system_do_suspend(acpi_integer time);
|
||||
|
||||
acpi_status acpi_ex_system_do_stall(u32 time);
|
||||
|
||||
acpi_status acpi_ex_system_signal_event(union acpi_operand_object *obj_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_system_wait_event(union acpi_operand_object *time,
|
||||
union acpi_operand_object *obj_desc);
|
||||
|
||||
acpi_status acpi_ex_system_reset_event(union acpi_operand_object *obj_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_system_wait_semaphore(acpi_semaphore semaphore, u16 timeout);
|
||||
|
||||
acpi_status acpi_ex_system_wait_mutex(acpi_mutex mutex, u16 timeout);
|
||||
|
||||
/*
|
||||
* exoparg1 - ACPI AML execution, 1 operand
|
||||
*/
|
||||
acpi_status acpi_ex_opcode_0A_0T_1R(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ex_opcode_1A_0T_0R(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ex_opcode_1A_1T_0R(struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* exoparg2 - ACPI AML execution, 2 operands
|
||||
*/
|
||||
acpi_status acpi_ex_opcode_2A_0T_0R(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ex_opcode_2A_0T_1R(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ex_opcode_2A_2T_1R(struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* exoparg3 - ACPI AML execution, 3 operands
|
||||
*/
|
||||
acpi_status acpi_ex_opcode_3A_0T_0R(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* exoparg6 - ACPI AML execution, 6 operands
|
||||
*/
|
||||
acpi_status acpi_ex_opcode_6A_0T_1R(struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* exresolv - Object resolution and get value functions
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_resolve_to_value(union acpi_operand_object **stack_ptr,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
|
||||
union acpi_operand_object *operand,
|
||||
acpi_object_type * return_type,
|
||||
union acpi_operand_object **return_desc);
|
||||
|
||||
/*
|
||||
* exresnte - resolve namespace node
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_resolve_node_to_value(struct acpi_namespace_node **stack_ptr,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* exresop - resolve operand to value
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_resolve_operands(u16 opcode,
|
||||
union acpi_operand_object **stack_ptr,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* exdump - Interpreter debug output routines
|
||||
*/
|
||||
void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth);
|
||||
|
||||
void
|
||||
acpi_ex_dump_operands(union acpi_operand_object **operands,
|
||||
const char *opcode_name, u32 num_opcodes);
|
||||
|
||||
#ifdef ACPI_FUTURE_USAGE
|
||||
void
|
||||
acpi_ex_dump_object_descriptor(union acpi_operand_object *object, u32 flags);
|
||||
|
||||
void acpi_ex_dump_namespace_node(struct acpi_namespace_node *node, u32 flags);
|
||||
#endif /* ACPI_FUTURE_USAGE */
|
||||
|
||||
/*
|
||||
* exnames - AML namestring support
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_get_name_string(acpi_object_type data_type,
|
||||
u8 * in_aml_address,
|
||||
char **out_name_string, u32 * out_name_length);
|
||||
|
||||
/*
|
||||
* exstore - Object store support
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_store(union acpi_operand_object *val_desc,
|
||||
union acpi_operand_object *dest_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_store_object_to_node(union acpi_operand_object *source_desc,
|
||||
struct acpi_namespace_node *node,
|
||||
struct acpi_walk_state *walk_state,
|
||||
u8 implicit_conversion);
|
||||
|
||||
#define ACPI_IMPLICIT_CONVERSION TRUE
|
||||
#define ACPI_NO_IMPLICIT_CONVERSION FALSE
|
||||
|
||||
/*
|
||||
* exstoren - resolve/store object
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_resolve_object(union acpi_operand_object **source_desc_ptr,
|
||||
acpi_object_type target_type,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_store_object_to_object(union acpi_operand_object *source_desc,
|
||||
union acpi_operand_object *dest_desc,
|
||||
union acpi_operand_object **new_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* exstorob - store object - buffer/string
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
|
||||
union acpi_operand_object *target_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
|
||||
union acpi_operand_object *target_desc);
|
||||
|
||||
/*
|
||||
* excopy - object copy
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_copy_integer_to_index_field(union acpi_operand_object *source_desc,
|
||||
union acpi_operand_object *target_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_copy_integer_to_bank_field(union acpi_operand_object *source_desc,
|
||||
union acpi_operand_object *target_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_copy_data_to_named_field(union acpi_operand_object *source_desc,
|
||||
struct acpi_namespace_node *node);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_copy_integer_to_buffer_field(union acpi_operand_object *source_desc,
|
||||
union acpi_operand_object *target_desc);
|
||||
|
||||
/*
|
||||
* exutils - interpreter/scanner utilities
|
||||
*/
|
||||
void acpi_ex_enter_interpreter(void);
|
||||
|
||||
void acpi_ex_exit_interpreter(void);
|
||||
|
||||
void acpi_ex_reacquire_interpreter(void);
|
||||
|
||||
void acpi_ex_relinquish_interpreter(void);
|
||||
|
||||
void acpi_ex_truncate_for32bit_table(union acpi_operand_object *obj_desc);
|
||||
|
||||
void acpi_ex_acquire_global_lock(u32 rule);
|
||||
|
||||
void acpi_ex_release_global_lock(u32 rule);
|
||||
|
||||
void acpi_ex_eisa_id_to_string(u32 numeric_id, char *out_string);
|
||||
|
||||
void acpi_ex_unsigned_integer_to_string(acpi_integer value, char *out_string);
|
||||
|
||||
/*
|
||||
* exregion - default op_region handlers
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ex_system_memory_space_handler(u32 function,
|
||||
acpi_physical_address address,
|
||||
u32 bit_width,
|
||||
acpi_integer * value,
|
||||
void *handler_context,
|
||||
void *region_context);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_system_io_space_handler(u32 function,
|
||||
acpi_physical_address address,
|
||||
u32 bit_width,
|
||||
acpi_integer * value,
|
||||
void *handler_context, void *region_context);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_pci_config_space_handler(u32 function,
|
||||
acpi_physical_address address,
|
||||
u32 bit_width,
|
||||
acpi_integer * value,
|
||||
void *handler_context, void *region_context);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_cmos_space_handler(u32 function,
|
||||
acpi_physical_address address,
|
||||
u32 bit_width,
|
||||
acpi_integer * value,
|
||||
void *handler_context, void *region_context);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_pci_bar_space_handler(u32 function,
|
||||
acpi_physical_address address,
|
||||
u32 bit_width,
|
||||
acpi_integer * value,
|
||||
void *handler_context, void *region_context);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_embedded_controller_space_handler(u32 function,
|
||||
acpi_physical_address address,
|
||||
u32 bit_width,
|
||||
acpi_integer * value,
|
||||
void *handler_context,
|
||||
void *region_context);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_sm_bus_space_handler(u32 function,
|
||||
acpi_physical_address address,
|
||||
u32 bit_width,
|
||||
acpi_integer * value,
|
||||
void *handler_context, void *region_context);
|
||||
|
||||
acpi_status
|
||||
acpi_ex_data_table_space_handler(u32 function,
|
||||
acpi_physical_address address,
|
||||
u32 bit_width,
|
||||
acpi_integer * value,
|
||||
void *handler_context, void *region_context);
|
||||
|
||||
#endif /* __INTERP_H__ */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,693 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acmacros.h - C macros for the entire 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 __ACMACROS_H__
|
||||
#define __ACMACROS_H__
|
||||
|
||||
/*
|
||||
* Data manipulation macros
|
||||
*/
|
||||
#define ACPI_LOWORD(l) ((u16)(u32)(l))
|
||||
#define ACPI_HIWORD(l) ((u16)((((u32)(l)) >> 16) & 0xFFFF))
|
||||
#define ACPI_LOBYTE(l) ((u8)(u16)(l))
|
||||
#define ACPI_HIBYTE(l) ((u8)((((u16)(l)) >> 8) & 0xFF))
|
||||
|
||||
#define ACPI_SET_BIT(target,bit) ((target) |= (bit))
|
||||
#define ACPI_CLEAR_BIT(target,bit) ((target) &= ~(bit))
|
||||
#define ACPI_MIN(a,b) (((a)<(b))?(a):(b))
|
||||
#define ACPI_MAX(a,b) (((a)>(b))?(a):(b))
|
||||
|
||||
/* Size calculation */
|
||||
|
||||
#define ACPI_ARRAY_LENGTH(x) (sizeof(x) / sizeof((x)[0]))
|
||||
|
||||
/*
|
||||
* Extract data using a pointer. Any more than a byte and we
|
||||
* get into potential aligment issues -- see the STORE macros below.
|
||||
* Use with care.
|
||||
*/
|
||||
#define ACPI_GET8(ptr) *ACPI_CAST_PTR (u8, ptr)
|
||||
#define ACPI_GET16(ptr) *ACPI_CAST_PTR (u16, ptr)
|
||||
#define ACPI_GET32(ptr) *ACPI_CAST_PTR (u32, ptr)
|
||||
#define ACPI_GET64(ptr) *ACPI_CAST_PTR (u64, ptr)
|
||||
#define ACPI_SET8(ptr) *ACPI_CAST_PTR (u8, ptr)
|
||||
#define ACPI_SET16(ptr) *ACPI_CAST_PTR (u16, ptr)
|
||||
#define ACPI_SET32(ptr) *ACPI_CAST_PTR (u32, ptr)
|
||||
#define ACPI_SET64(ptr) *ACPI_CAST_PTR (u64, ptr)
|
||||
|
||||
/*
|
||||
* Pointer manipulation
|
||||
*/
|
||||
#define ACPI_CAST_PTR(t, p) ((t *) (acpi_uintptr_t) (p))
|
||||
#define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (acpi_uintptr_t) (p))
|
||||
#define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8, (a)) + (acpi_size)(b)))
|
||||
#define ACPI_PTR_DIFF(a, b) (acpi_size) (ACPI_CAST_PTR (u8, (a)) - ACPI_CAST_PTR (u8, (b)))
|
||||
|
||||
/* Pointer/Integer type conversions */
|
||||
|
||||
#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) NULL, (acpi_size) i)
|
||||
#define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) NULL)
|
||||
#define ACPI_OFFSET(d, f) (acpi_size) ACPI_PTR_DIFF (&(((d *)0)->f), (void *) NULL)
|
||||
#define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i)
|
||||
#define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i)
|
||||
|
||||
#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
|
||||
#define ACPI_COMPARE_NAME(a, b) (*ACPI_CAST_PTR (u32, (a)) == *ACPI_CAST_PTR (u32, (b)))
|
||||
#else
|
||||
#define ACPI_COMPARE_NAME(a, b) (!ACPI_STRNCMP (ACPI_CAST_PTR (char, (a)), ACPI_CAST_PTR (char, (b)), ACPI_NAME_SIZE))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Full 64-bit integer must be available on both 32-bit and 64-bit platforms
|
||||
*/
|
||||
struct acpi_integer_overlay {
|
||||
u32 lo_dword;
|
||||
u32 hi_dword;
|
||||
};
|
||||
|
||||
#define ACPI_LODWORD(integer) (ACPI_CAST_PTR (struct acpi_integer_overlay, &integer)->lo_dword)
|
||||
#define ACPI_HIDWORD(integer) (ACPI_CAST_PTR (struct acpi_integer_overlay, &integer)->hi_dword)
|
||||
|
||||
/*
|
||||
* printf() format helpers
|
||||
*/
|
||||
|
||||
/* Split 64-bit integer into two 32-bit values. Use with %8.8_x%8.8_x */
|
||||
|
||||
#define ACPI_FORMAT_UINT64(i) ACPI_HIDWORD(i), ACPI_LODWORD(i)
|
||||
|
||||
#if ACPI_MACHINE_WIDTH == 64
|
||||
#define ACPI_FORMAT_NATIVE_UINT(i) ACPI_FORMAT_UINT64(i)
|
||||
#else
|
||||
#define ACPI_FORMAT_NATIVE_UINT(i) 0, (i)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Macros for moving data around to/from buffers that are possibly unaligned.
|
||||
* If the hardware supports the transfer of unaligned data, just do the store.
|
||||
* Otherwise, we have to move one byte at a time.
|
||||
*/
|
||||
#ifdef ACPI_BIG_ENDIAN
|
||||
/*
|
||||
* Macros for big-endian machines
|
||||
*/
|
||||
|
||||
/* These macros reverse the bytes during the move, converting little-endian to big endian */
|
||||
|
||||
/* Big Endian <== Little Endian */
|
||||
/* Hi...Lo Lo...Hi */
|
||||
/* 16-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_16_TO_16(d, s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[1];\
|
||||
(( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[0];}
|
||||
|
||||
#define ACPI_MOVE_16_TO_32(d, s) {(*(u32 *)(void *)(d))=0;\
|
||||
((u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[1];\
|
||||
((u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[0];}
|
||||
|
||||
#define ACPI_MOVE_16_TO_64(d, s) {(*(u64 *)(void *)(d))=0;\
|
||||
((u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[1];\
|
||||
((u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[0];}
|
||||
|
||||
/* 32-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
|
||||
|
||||
#define ACPI_MOVE_32_TO_32(d, s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[3];\
|
||||
(( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[2];\
|
||||
(( u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[1];\
|
||||
(( u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[0];}
|
||||
|
||||
#define ACPI_MOVE_32_TO_64(d, s) {(*(u64 *)(void *)(d))=0;\
|
||||
((u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[3];\
|
||||
((u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[2];\
|
||||
((u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[1];\
|
||||
((u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[0];}
|
||||
|
||||
/* 64-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
|
||||
|
||||
#define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */
|
||||
|
||||
#define ACPI_MOVE_64_TO_64(d, s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[7];\
|
||||
(( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[6];\
|
||||
(( u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[5];\
|
||||
(( u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[4];\
|
||||
(( u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[3];\
|
||||
(( u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[2];\
|
||||
(( u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[1];\
|
||||
(( u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[0];}
|
||||
#else
|
||||
/*
|
||||
* Macros for little-endian machines
|
||||
*/
|
||||
|
||||
#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
|
||||
|
||||
/* The hardware supports unaligned transfers, just do the little-endian move */
|
||||
|
||||
/* 16-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_16_TO_16(d, s) *(u16 *)(void *)(d) = *(u16 *)(void *)(s)
|
||||
#define ACPI_MOVE_16_TO_32(d, s) *(u32 *)(void *)(d) = *(u16 *)(void *)(s)
|
||||
#define ACPI_MOVE_16_TO_64(d, s) *(u64 *)(void *)(d) = *(u16 *)(void *)(s)
|
||||
|
||||
/* 32-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
|
||||
#define ACPI_MOVE_32_TO_32(d, s) *(u32 *)(void *)(d) = *(u32 *)(void *)(s)
|
||||
#define ACPI_MOVE_32_TO_64(d, s) *(u64 *)(void *)(d) = *(u32 *)(void *)(s)
|
||||
|
||||
/* 64-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
|
||||
#define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */
|
||||
#define ACPI_MOVE_64_TO_64(d, s) *(u64 *)(void *)(d) = *(u64 *)(void *)(s)
|
||||
|
||||
#else
|
||||
/*
|
||||
* The hardware does not support unaligned transfers. We must move the
|
||||
* data one byte at a time. These macros work whether the source or
|
||||
* the destination (or both) is/are unaligned. (Little-endian move)
|
||||
*/
|
||||
|
||||
/* 16-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_16_TO_16(d, s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\
|
||||
(( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];}
|
||||
|
||||
#define ACPI_MOVE_16_TO_32(d, s) {(*(u32 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);}
|
||||
#define ACPI_MOVE_16_TO_64(d, s) {(*(u64 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);}
|
||||
|
||||
/* 32-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
|
||||
|
||||
#define ACPI_MOVE_32_TO_32(d, s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\
|
||||
(( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];\
|
||||
(( u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[2];\
|
||||
(( u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[3];}
|
||||
|
||||
#define ACPI_MOVE_32_TO_64(d, s) {(*(u64 *)(void *)(d)) = 0; ACPI_MOVE_32_TO_32(d, s);}
|
||||
|
||||
/* 64-bit source, 16/32/64 destination */
|
||||
|
||||
#define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
|
||||
#define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */
|
||||
#define ACPI_MOVE_64_TO_64(d, s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\
|
||||
(( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];\
|
||||
(( u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[2];\
|
||||
(( u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[3];\
|
||||
(( u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[4];\
|
||||
(( u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[5];\
|
||||
(( u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[6];\
|
||||
(( u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[7];}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Macros based on machine integer width */
|
||||
|
||||
#if ACPI_MACHINE_WIDTH == 32
|
||||
#define ACPI_MOVE_SIZE_TO_16(d, s) ACPI_MOVE_32_TO_16(d, s)
|
||||
|
||||
#elif ACPI_MACHINE_WIDTH == 64
|
||||
#define ACPI_MOVE_SIZE_TO_16(d, s) ACPI_MOVE_64_TO_16(d, s)
|
||||
|
||||
#else
|
||||
#error unknown ACPI_MACHINE_WIDTH
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Fast power-of-two math macros for non-optimized compilers
|
||||
*/
|
||||
#define _ACPI_DIV(value, power_of2) ((u32) ((value) >> (power_of2)))
|
||||
#define _ACPI_MUL(value, power_of2) ((u32) ((value) << (power_of2)))
|
||||
#define _ACPI_MOD(value, divisor) ((u32) ((value) & ((divisor) -1)))
|
||||
|
||||
#define ACPI_DIV_2(a) _ACPI_DIV(a, 1)
|
||||
#define ACPI_MUL_2(a) _ACPI_MUL(a, 1)
|
||||
#define ACPI_MOD_2(a) _ACPI_MOD(a, 2)
|
||||
|
||||
#define ACPI_DIV_4(a) _ACPI_DIV(a, 2)
|
||||
#define ACPI_MUL_4(a) _ACPI_MUL(a, 2)
|
||||
#define ACPI_MOD_4(a) _ACPI_MOD(a, 4)
|
||||
|
||||
#define ACPI_DIV_8(a) _ACPI_DIV(a, 3)
|
||||
#define ACPI_MUL_8(a) _ACPI_MUL(a, 3)
|
||||
#define ACPI_MOD_8(a) _ACPI_MOD(a, 8)
|
||||
|
||||
#define ACPI_DIV_16(a) _ACPI_DIV(a, 4)
|
||||
#define ACPI_MUL_16(a) _ACPI_MUL(a, 4)
|
||||
#define ACPI_MOD_16(a) _ACPI_MOD(a, 16)
|
||||
|
||||
#define ACPI_DIV_32(a) _ACPI_DIV(a, 5)
|
||||
#define ACPI_MUL_32(a) _ACPI_MUL(a, 5)
|
||||
#define ACPI_MOD_32(a) _ACPI_MOD(a, 32)
|
||||
|
||||
/*
|
||||
* Rounding macros (Power of two boundaries only)
|
||||
*/
|
||||
#define ACPI_ROUND_DOWN(value, boundary) (((acpi_size)(value)) & \
|
||||
(~(((acpi_size) boundary)-1)))
|
||||
|
||||
#define ACPI_ROUND_UP(value, boundary) ((((acpi_size)(value)) + \
|
||||
(((acpi_size) boundary)-1)) & \
|
||||
(~(((acpi_size) boundary)-1)))
|
||||
|
||||
/* Note: sizeof(acpi_size) evaluates to either 4 or 8 (32- vs 64-bit mode) */
|
||||
|
||||
#define ACPI_ROUND_DOWN_TO_32BIT(a) ACPI_ROUND_DOWN(a, 4)
|
||||
#define ACPI_ROUND_DOWN_TO_64BIT(a) ACPI_ROUND_DOWN(a, 8)
|
||||
#define ACPI_ROUND_DOWN_TO_NATIVE_WORD(a) ACPI_ROUND_DOWN(a, sizeof(acpi_size))
|
||||
|
||||
#define ACPI_ROUND_UP_TO_32BIT(a) ACPI_ROUND_UP(a, 4)
|
||||
#define ACPI_ROUND_UP_TO_64BIT(a) ACPI_ROUND_UP(a, 8)
|
||||
#define ACPI_ROUND_UP_TO_NATIVE_WORD(a) ACPI_ROUND_UP(a, sizeof(acpi_size))
|
||||
|
||||
#define ACPI_ROUND_BITS_UP_TO_BYTES(a) ACPI_DIV_8((a) + 7)
|
||||
#define ACPI_ROUND_BITS_DOWN_TO_BYTES(a) ACPI_DIV_8((a))
|
||||
|
||||
#define ACPI_ROUND_UP_TO_1K(a) (((a) + 1023) >> 10)
|
||||
|
||||
/* Generic (non-power-of-two) rounding */
|
||||
|
||||
#define ACPI_ROUND_UP_TO(value, boundary) (((value) + ((boundary)-1)) / (boundary))
|
||||
|
||||
#define ACPI_IS_MISALIGNED(value) (((acpi_size) value) & (sizeof(acpi_size)-1))
|
||||
|
||||
/*
|
||||
* Bitmask creation
|
||||
* Bit positions start at zero.
|
||||
* MASK_BITS_ABOVE creates a mask starting AT the position and above
|
||||
* MASK_BITS_BELOW creates a mask starting one bit BELOW the position
|
||||
*/
|
||||
#define ACPI_MASK_BITS_ABOVE(position) (~((ACPI_INTEGER_MAX) << ((u32) (position))))
|
||||
#define ACPI_MASK_BITS_BELOW(position) ((ACPI_INTEGER_MAX) << ((u32) (position)))
|
||||
|
||||
/* Bitfields within ACPI registers */
|
||||
|
||||
#define ACPI_REGISTER_PREPARE_BITS(val, pos, mask) ((val << pos) & mask)
|
||||
#define ACPI_REGISTER_INSERT_VALUE(reg, pos, mask, val) reg = (reg & (~(mask))) | ACPI_REGISTER_PREPARE_BITS(val, pos, mask)
|
||||
|
||||
#define ACPI_INSERT_BITS(target, mask, source) target = ((target & (~(mask))) | (source & mask))
|
||||
|
||||
/*
|
||||
* An struct acpi_namespace_node can appear in some contexts
|
||||
* where a pointer to an union acpi_operand_object can also
|
||||
* appear. This macro is used to distinguish them.
|
||||
*
|
||||
* The "Descriptor" field is the first field in both structures.
|
||||
*/
|
||||
#define ACPI_GET_DESCRIPTOR_TYPE(d) (((union acpi_descriptor *)(void *)(d))->common.descriptor_type)
|
||||
#define ACPI_SET_DESCRIPTOR_TYPE(d, t) (((union acpi_descriptor *)(void *)(d))->common.descriptor_type = t)
|
||||
|
||||
/* Macro to test the object type */
|
||||
|
||||
#define ACPI_GET_OBJECT_TYPE(d) (((union acpi_operand_object *)(void *)(d))->common.type)
|
||||
|
||||
/*
|
||||
* Macros for the master AML opcode table
|
||||
*/
|
||||
#if defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
|
||||
#define ACPI_OP(name, Pargs, Iargs, obj_type, class, type, flags) \
|
||||
{name, (u32)(Pargs), (u32)(Iargs), (u32)(flags), obj_type, class, type}
|
||||
#else
|
||||
#define ACPI_OP(name, Pargs, Iargs, obj_type, class, type, flags) \
|
||||
{(u32)(Pargs), (u32)(Iargs), (u32)(flags), obj_type, class, type}
|
||||
#endif
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
#define ACPI_DISASM_ONLY_MEMBERS(a) a;
|
||||
#else
|
||||
#define ACPI_DISASM_ONLY_MEMBERS(a)
|
||||
#endif
|
||||
|
||||
#define ARG_TYPE_WIDTH 5
|
||||
#define ARG_1(x) ((u32)(x))
|
||||
#define ARG_2(x) ((u32)(x) << (1 * ARG_TYPE_WIDTH))
|
||||
#define ARG_3(x) ((u32)(x) << (2 * ARG_TYPE_WIDTH))
|
||||
#define ARG_4(x) ((u32)(x) << (3 * ARG_TYPE_WIDTH))
|
||||
#define ARG_5(x) ((u32)(x) << (4 * ARG_TYPE_WIDTH))
|
||||
#define ARG_6(x) ((u32)(x) << (5 * ARG_TYPE_WIDTH))
|
||||
|
||||
#define ARGI_LIST1(a) (ARG_1(a))
|
||||
#define ARGI_LIST2(a, b) (ARG_1(b)|ARG_2(a))
|
||||
#define ARGI_LIST3(a, b, c) (ARG_1(c)|ARG_2(b)|ARG_3(a))
|
||||
#define ARGI_LIST4(a, b, c, d) (ARG_1(d)|ARG_2(c)|ARG_3(b)|ARG_4(a))
|
||||
#define ARGI_LIST5(a, b, c, d, e) (ARG_1(e)|ARG_2(d)|ARG_3(c)|ARG_4(b)|ARG_5(a))
|
||||
#define ARGI_LIST6(a, b, c, d, e, f) (ARG_1(f)|ARG_2(e)|ARG_3(d)|ARG_4(c)|ARG_5(b)|ARG_6(a))
|
||||
|
||||
#define ARGP_LIST1(a) (ARG_1(a))
|
||||
#define ARGP_LIST2(a, b) (ARG_1(a)|ARG_2(b))
|
||||
#define ARGP_LIST3(a, b, c) (ARG_1(a)|ARG_2(b)|ARG_3(c))
|
||||
#define ARGP_LIST4(a, b, c, d) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d))
|
||||
#define ARGP_LIST5(a, b, c, d, e) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e))
|
||||
#define ARGP_LIST6(a, b, c, d, e, f) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)|ARG_6(f))
|
||||
|
||||
#define GET_CURRENT_ARG_TYPE(list) (list & ((u32) 0x1F))
|
||||
#define INCREMENT_ARG_LIST(list) (list >>= ((u32) ARG_TYPE_WIDTH))
|
||||
|
||||
#if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES)
|
||||
/*
|
||||
* Module name is include in both debug and non-debug versions primarily for
|
||||
* error messages. The __FILE__ macro is not very useful for this, because it
|
||||
* often includes the entire pathname to the module
|
||||
*/
|
||||
#define ACPI_MODULE_NAME(name) static const char ACPI_UNUSED_VAR _acpi_module_name[] = name;
|
||||
#else
|
||||
#define ACPI_MODULE_NAME(name)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Ascii error messages can be configured out
|
||||
*/
|
||||
#ifndef ACPI_NO_ERROR_MESSAGES
|
||||
#define AE_INFO _acpi_module_name, __LINE__
|
||||
|
||||
/*
|
||||
* Error reporting. Callers module and line number are inserted by AE_INFO,
|
||||
* the plist contains a set of parens to allow variable-length lists.
|
||||
* These macros are used for both the debug and non-debug versions of the code.
|
||||
*/
|
||||
#define ACPI_INFO(plist) acpi_ut_info plist
|
||||
#define ACPI_WARNING(plist) acpi_ut_warning plist
|
||||
#define ACPI_EXCEPTION(plist) acpi_ut_exception plist
|
||||
#define ACPI_ERROR(plist) acpi_ut_error plist
|
||||
#define ACPI_ERROR_NAMESPACE(s, e) acpi_ns_report_error (AE_INFO, s, e);
|
||||
#define ACPI_ERROR_METHOD(s, n, p, e) acpi_ns_report_method_error (AE_INFO, s, n, p, e);
|
||||
|
||||
#else
|
||||
|
||||
/* No error messages */
|
||||
|
||||
#define ACPI_INFO(plist)
|
||||
#define ACPI_WARNING(plist)
|
||||
#define ACPI_EXCEPTION(plist)
|
||||
#define ACPI_ERROR(plist)
|
||||
#define ACPI_ERROR_NAMESPACE(s, e)
|
||||
#define ACPI_ERROR_METHOD(s, n, p, e)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Debug macros that are conditionally compiled
|
||||
*/
|
||||
#ifdef ACPI_DEBUG_OUTPUT
|
||||
|
||||
/*
|
||||
* Common parameters used for debug output functions:
|
||||
* line number, function name, module(file) name, component ID
|
||||
*/
|
||||
#define ACPI_DEBUG_PARAMETERS __LINE__, ACPI_GET_FUNCTION_NAME, _acpi_module_name, _COMPONENT
|
||||
|
||||
/*
|
||||
* Function entry tracing
|
||||
*/
|
||||
|
||||
/*
|
||||
* If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header,
|
||||
* define it now. This is the case where there the compiler does not support
|
||||
* a __func__ macro or equivalent.
|
||||
*/
|
||||
#ifndef ACPI_GET_FUNCTION_NAME
|
||||
#define ACPI_GET_FUNCTION_NAME _acpi_function_name
|
||||
/*
|
||||
* The Name parameter should be the procedure name as a quoted string.
|
||||
* The function name is also used by the function exit macros below.
|
||||
* Note: (const char) is used to be compatible with the debug interfaces
|
||||
* and macros such as __func__.
|
||||
*/
|
||||
#define ACPI_FUNCTION_NAME(name) static const char _acpi_function_name[] = #name;
|
||||
|
||||
#else
|
||||
/* Compiler supports __func__ (or equivalent) -- Ignore this macro */
|
||||
|
||||
#define ACPI_FUNCTION_NAME(name)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ACPI_DEBUG_FUNC_TRACE
|
||||
|
||||
#define ACPI_FUNCTION_TRACE(a) ACPI_FUNCTION_NAME(a) \
|
||||
acpi_ut_trace(ACPI_DEBUG_PARAMETERS)
|
||||
#define ACPI_FUNCTION_TRACE_PTR(a, b) ACPI_FUNCTION_NAME(a) \
|
||||
acpi_ut_trace_ptr(ACPI_DEBUG_PARAMETERS, (void *)b)
|
||||
#define ACPI_FUNCTION_TRACE_U32(a, b) ACPI_FUNCTION_NAME(a) \
|
||||
acpi_ut_trace_u32(ACPI_DEBUG_PARAMETERS, (u32)b)
|
||||
#define ACPI_FUNCTION_TRACE_STR(a, b) ACPI_FUNCTION_NAME(a) \
|
||||
acpi_ut_trace_str(ACPI_DEBUG_PARAMETERS, (char *)b)
|
||||
|
||||
#define ACPI_FUNCTION_ENTRY() acpi_ut_track_stack_ptr()
|
||||
|
||||
/*
|
||||
* Function exit tracing.
|
||||
* WARNING: These macros include a return statement. This is usually considered
|
||||
* bad form, but having a separate exit macro is very ugly and difficult to maintain.
|
||||
* One of the FUNCTION_TRACE macros above must be used in conjunction with these macros
|
||||
* so that "_AcpiFunctionName" is defined.
|
||||
*
|
||||
* Note: the DO_WHILE0 macro is used to prevent some compilers from complaining
|
||||
* about these constructs.
|
||||
*/
|
||||
#ifdef ACPI_USE_DO_WHILE_0
|
||||
#define ACPI_DO_WHILE0(a) do a while(0)
|
||||
#else
|
||||
#define ACPI_DO_WHILE0(a) a
|
||||
#endif
|
||||
|
||||
#define return_VOID ACPI_DO_WHILE0 ({ \
|
||||
acpi_ut_exit (ACPI_DEBUG_PARAMETERS); \
|
||||
return;})
|
||||
/*
|
||||
* There are two versions of most of the return macros. The default version is
|
||||
* safer, since it avoids side-effects by guaranteeing that the argument will
|
||||
* not be evaluated twice.
|
||||
*
|
||||
* A less-safe version of the macros is provided for optional use if the
|
||||
* compiler uses excessive CPU stack (for example, this may happen in the
|
||||
* debug case if code optimzation is disabled.)
|
||||
*/
|
||||
#ifndef ACPI_SIMPLE_RETURN_MACROS
|
||||
|
||||
#define return_ACPI_STATUS(s) ACPI_DO_WHILE0 ({ \
|
||||
register acpi_status _s = (s); \
|
||||
acpi_ut_status_exit (ACPI_DEBUG_PARAMETERS, _s); \
|
||||
return (_s); })
|
||||
#define return_PTR(s) ACPI_DO_WHILE0 ({ \
|
||||
register void *_s = (void *) (s); \
|
||||
acpi_ut_ptr_exit (ACPI_DEBUG_PARAMETERS, (u8 *) _s); \
|
||||
return (_s); })
|
||||
#define return_VALUE(s) ACPI_DO_WHILE0 ({ \
|
||||
register acpi_integer _s = (s); \
|
||||
acpi_ut_value_exit (ACPI_DEBUG_PARAMETERS, _s); \
|
||||
return (_s); })
|
||||
#define return_UINT8(s) ACPI_DO_WHILE0 ({ \
|
||||
register u8 _s = (u8) (s); \
|
||||
acpi_ut_value_exit (ACPI_DEBUG_PARAMETERS, (acpi_integer) _s); \
|
||||
return (_s); })
|
||||
#define return_UINT32(s) ACPI_DO_WHILE0 ({ \
|
||||
register u32 _s = (u32) (s); \
|
||||
acpi_ut_value_exit (ACPI_DEBUG_PARAMETERS, (acpi_integer) _s); \
|
||||
return (_s); })
|
||||
#else /* Use original less-safe macros */
|
||||
|
||||
#define return_ACPI_STATUS(s) ACPI_DO_WHILE0 ({ \
|
||||
acpi_ut_status_exit (ACPI_DEBUG_PARAMETERS, (s)); \
|
||||
return((s)); })
|
||||
#define return_PTR(s) ACPI_DO_WHILE0 ({ \
|
||||
acpi_ut_ptr_exit (ACPI_DEBUG_PARAMETERS, (u8 *) (s)); \
|
||||
return((s)); })
|
||||
#define return_VALUE(s) ACPI_DO_WHILE0 ({ \
|
||||
acpi_ut_value_exit (ACPI_DEBUG_PARAMETERS, (acpi_integer) (s)); \
|
||||
return((s)); })
|
||||
#define return_UINT8(s) return_VALUE(s)
|
||||
#define return_UINT32(s) return_VALUE(s)
|
||||
|
||||
#endif /* ACPI_SIMPLE_RETURN_MACROS */
|
||||
|
||||
#else /* !CONFIG_ACPI_DEBUG_FUNC_TRACE */
|
||||
|
||||
#define ACPI_FUNCTION_TRACE(a)
|
||||
#define ACPI_FUNCTION_TRACE_PTR(a,b)
|
||||
#define ACPI_FUNCTION_TRACE_U32(a,b)
|
||||
#define ACPI_FUNCTION_TRACE_STR(a,b)
|
||||
#define ACPI_FUNCTION_EXIT
|
||||
#define ACPI_FUNCTION_STATUS_EXIT(s)
|
||||
#define ACPI_FUNCTION_VALUE_EXIT(s)
|
||||
#define ACPI_FUNCTION_TRACE(a)
|
||||
#define ACPI_FUNCTION_ENTRY()
|
||||
|
||||
#define return_VOID return
|
||||
#define return_ACPI_STATUS(s) return(s)
|
||||
#define return_VALUE(s) return(s)
|
||||
#define return_UINT8(s) return(s)
|
||||
#define return_UINT32(s) return(s)
|
||||
#define return_PTR(s) return(s)
|
||||
|
||||
#endif /* CONFIG_ACPI_DEBUG_FUNC_TRACE */
|
||||
|
||||
/* Conditional execution */
|
||||
|
||||
#define ACPI_DEBUG_EXEC(a) a
|
||||
#define ACPI_NORMAL_EXEC(a)
|
||||
|
||||
#define ACPI_DEBUG_DEFINE(a) a;
|
||||
#define ACPI_DEBUG_ONLY_MEMBERS(a) a;
|
||||
#define _VERBOSE_STRUCTURES
|
||||
|
||||
/* Stack and buffer dumping */
|
||||
|
||||
#define ACPI_DUMP_STACK_ENTRY(a) acpi_ex_dump_operand((a), 0)
|
||||
#define ACPI_DUMP_OPERANDS(a, b, c) acpi_ex_dump_operands(a, b, c)
|
||||
|
||||
#define ACPI_DUMP_ENTRY(a, b) acpi_ns_dump_entry (a, b)
|
||||
#define ACPI_DUMP_PATHNAME(a, b, c, d) acpi_ns_dump_pathname(a, b, c, d)
|
||||
#define ACPI_DUMP_RESOURCE_LIST(a) acpi_rs_dump_resource_list(a)
|
||||
#define ACPI_DUMP_BUFFER(a, b) acpi_ut_dump_buffer((u8 *) a, b, DB_BYTE_DISPLAY, _COMPONENT)
|
||||
|
||||
/*
|
||||
* Master debug print macros
|
||||
* Print iff:
|
||||
* 1) Debug print for the current component is enabled
|
||||
* 2) Debug error level or trace level for the print statement is enabled
|
||||
*/
|
||||
#define ACPI_DEBUG_PRINT(plist) acpi_ut_debug_print plist
|
||||
#define ACPI_DEBUG_PRINT_RAW(plist) acpi_ut_debug_print_raw plist
|
||||
|
||||
#else
|
||||
/*
|
||||
* This is the non-debug case -- make everything go away,
|
||||
* leaving no executable debug code!
|
||||
*/
|
||||
#define ACPI_DEBUG_EXEC(a)
|
||||
#define ACPI_NORMAL_EXEC(a) a;
|
||||
|
||||
#define ACPI_DEBUG_DEFINE(a) do { } while(0)
|
||||
#define ACPI_DEBUG_ONLY_MEMBERS(a) do { } while(0)
|
||||
#define ACPI_FUNCTION_NAME(a) do { } while(0)
|
||||
#define ACPI_FUNCTION_TRACE(a) do { } while(0)
|
||||
#define ACPI_FUNCTION_TRACE_PTR(a, b) do { } while(0)
|
||||
#define ACPI_FUNCTION_TRACE_U32(a, b) do { } while(0)
|
||||
#define ACPI_FUNCTION_TRACE_STR(a, b) do { } while(0)
|
||||
#define ACPI_FUNCTION_EXIT do { } while(0)
|
||||
#define ACPI_FUNCTION_STATUS_EXIT(s) do { } while(0)
|
||||
#define ACPI_FUNCTION_VALUE_EXIT(s) do { } while(0)
|
||||
#define ACPI_FUNCTION_ENTRY() do { } while(0)
|
||||
#define ACPI_DUMP_STACK_ENTRY(a) do { } while(0)
|
||||
#define ACPI_DUMP_OPERANDS(a, b, c) do { } while(0)
|
||||
#define ACPI_DUMP_ENTRY(a, b) do { } while(0)
|
||||
#define ACPI_DUMP_TABLES(a, b) do { } while(0)
|
||||
#define ACPI_DUMP_PATHNAME(a, b, c, d) do { } while(0)
|
||||
#define ACPI_DUMP_RESOURCE_LIST(a) do { } while(0)
|
||||
#define ACPI_DUMP_BUFFER(a, b) do { } while(0)
|
||||
#define ACPI_DEBUG_PRINT(pl) do { } while(0)
|
||||
#define ACPI_DEBUG_PRINT_RAW(pl) do { } while(0)
|
||||
|
||||
#define return_VOID return
|
||||
#define return_ACPI_STATUS(s) return(s)
|
||||
#define return_VALUE(s) return(s)
|
||||
#define return_UINT8(s) return(s)
|
||||
#define return_UINT32(s) return(s)
|
||||
#define return_PTR(s) return(s)
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Some code only gets executed when the debugger is built in.
|
||||
* Note that this is entirely independent of whether the
|
||||
* DEBUG_PRINT stuff (set by ACPI_DEBUG_OUTPUT) is on, or not.
|
||||
*/
|
||||
#ifdef ACPI_DEBUGGER
|
||||
#define ACPI_DEBUGGER_EXEC(a) a
|
||||
#else
|
||||
#define ACPI_DEBUGGER_EXEC(a)
|
||||
#endif
|
||||
|
||||
#ifdef ACPI_DEBUG_OUTPUT
|
||||
/*
|
||||
* 1) Set name to blanks
|
||||
* 2) Copy the object name
|
||||
*/
|
||||
#define ACPI_ADD_OBJECT_NAME(a,b) ACPI_MEMSET (a->common.name, ' ', sizeof (a->common.name));\
|
||||
ACPI_STRNCPY (a->common.name, acpi_gbl_ns_type_names[b], sizeof (a->common.name))
|
||||
#else
|
||||
|
||||
#define ACPI_ADD_OBJECT_NAME(a,b)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Memory allocation tracking (DEBUG ONLY)
|
||||
*/
|
||||
#define ACPI_MEM_PARAMETERS _COMPONENT, _acpi_module_name, __LINE__
|
||||
|
||||
#ifndef ACPI_DBG_TRACK_ALLOCATIONS
|
||||
|
||||
/* Memory allocation */
|
||||
|
||||
#ifndef ACPI_ALLOCATE
|
||||
#define ACPI_ALLOCATE(a) acpi_ut_allocate((acpi_size)(a), ACPI_MEM_PARAMETERS)
|
||||
#endif
|
||||
#ifndef ACPI_ALLOCATE_ZEROED
|
||||
#define ACPI_ALLOCATE_ZEROED(a) acpi_ut_allocate_zeroed((acpi_size)(a), ACPI_MEM_PARAMETERS)
|
||||
#endif
|
||||
#ifndef ACPI_FREE
|
||||
#define ACPI_FREE(a) acpio_os_free(a)
|
||||
#endif
|
||||
#define ACPI_MEM_TRACKING(a)
|
||||
|
||||
#else
|
||||
|
||||
/* Memory allocation */
|
||||
|
||||
#define ACPI_ALLOCATE(a) acpi_ut_allocate_and_track((acpi_size)(a), ACPI_MEM_PARAMETERS)
|
||||
#define ACPI_ALLOCATE_ZEROED(a) acpi_ut_allocate_zeroed_and_track((acpi_size)(a), ACPI_MEM_PARAMETERS)
|
||||
#define ACPI_FREE(a) acpi_ut_free_and_track(a, ACPI_MEM_PARAMETERS)
|
||||
#define ACPI_MEM_TRACKING(a) a
|
||||
|
||||
#endif /* ACPI_DBG_TRACK_ALLOCATIONS */
|
||||
|
||||
/* Preemption point */
|
||||
#ifndef ACPI_PREEMPTION_POINT
|
||||
#define ACPI_PREEMPTION_POINT() /* no preemption */
|
||||
#endif
|
||||
|
||||
#endif /* ACMACROS_H */
|
||||
@@ -1,321 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acnamesp.h - Namespace subcomponent prototypes and defines
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACNAMESP_H__
|
||||
#define __ACNAMESP_H__
|
||||
|
||||
/* To search the entire name space, pass this as search_base */
|
||||
|
||||
#define ACPI_NS_ALL ((acpi_handle)0)
|
||||
|
||||
/*
|
||||
* Elements of acpi_ns_properties are bit significant
|
||||
* and should be one-to-one with values of acpi_object_type
|
||||
*/
|
||||
#define ACPI_NS_NORMAL 0
|
||||
#define ACPI_NS_NEWSCOPE 1 /* a definition of this type opens a name scope */
|
||||
#define ACPI_NS_LOCAL 2 /* suppress search of enclosing scopes */
|
||||
|
||||
/* Flags for acpi_ns_lookup, acpi_ns_search_and_enter */
|
||||
|
||||
#define ACPI_NS_NO_UPSEARCH 0
|
||||
#define ACPI_NS_SEARCH_PARENT 0x01
|
||||
#define ACPI_NS_DONT_OPEN_SCOPE 0x02
|
||||
#define ACPI_NS_NO_PEER_SEARCH 0x04
|
||||
#define ACPI_NS_ERROR_IF_FOUND 0x08
|
||||
#define ACPI_NS_PREFIX_IS_SCOPE 0x10
|
||||
#define ACPI_NS_EXTERNAL 0x20
|
||||
#define ACPI_NS_TEMPORARY 0x40
|
||||
|
||||
/* Flags for acpi_ns_walk_namespace */
|
||||
|
||||
#define ACPI_NS_WALK_NO_UNLOCK 0
|
||||
#define ACPI_NS_WALK_UNLOCK 0x01
|
||||
#define ACPI_NS_WALK_TEMP_NODES 0x02
|
||||
|
||||
/*
|
||||
* nsinit - Namespace initialization
|
||||
*/
|
||||
acpi_status acpi_ns_initialize_objects(void);
|
||||
|
||||
acpi_status acpi_ns_initialize_devices(void);
|
||||
|
||||
/*
|
||||
* nsload - Namespace loading
|
||||
*/
|
||||
acpi_status acpi_ns_load_namespace(void);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node);
|
||||
|
||||
/*
|
||||
* nswalk - walk the namespace
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ns_walk_namespace(acpi_object_type type,
|
||||
acpi_handle start_object,
|
||||
u32 max_depth,
|
||||
u32 flags,
|
||||
acpi_walk_callback user_function,
|
||||
void *context, void **return_value);
|
||||
|
||||
struct acpi_namespace_node *acpi_ns_get_next_node(acpi_object_type type, struct acpi_namespace_node
|
||||
*parent, struct acpi_namespace_node
|
||||
*child);
|
||||
|
||||
/*
|
||||
* nsparse - table parsing
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_one_complete_parse(u32 pass_number,
|
||||
u32 table_index,
|
||||
struct acpi_namespace_node *start_node);
|
||||
|
||||
/*
|
||||
* nsaccess - Top-level namespace access
|
||||
*/
|
||||
acpi_status acpi_ns_root_initialize(void);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_lookup(union acpi_generic_state *scope_info,
|
||||
char *name,
|
||||
acpi_object_type type,
|
||||
acpi_interpreter_mode interpreter_mode,
|
||||
u32 flags,
|
||||
struct acpi_walk_state *walk_state,
|
||||
struct acpi_namespace_node **ret_node);
|
||||
|
||||
/*
|
||||
* nsalloc - Named object allocation/deallocation
|
||||
*/
|
||||
struct acpi_namespace_node *acpi_ns_create_node(u32 name);
|
||||
|
||||
void acpi_ns_delete_node(struct acpi_namespace_node *node);
|
||||
|
||||
void
|
||||
acpi_ns_delete_namespace_subtree(struct acpi_namespace_node *parent_handle);
|
||||
|
||||
void acpi_ns_delete_namespace_by_owner(acpi_owner_id owner_id);
|
||||
|
||||
void acpi_ns_detach_object(struct acpi_namespace_node *node);
|
||||
|
||||
void acpi_ns_delete_children(struct acpi_namespace_node *parent);
|
||||
|
||||
int acpi_ns_compare_names(char *name1, char *name2);
|
||||
|
||||
/*
|
||||
* nsdump - Namespace dump/print utilities
|
||||
*/
|
||||
#ifdef ACPI_FUTURE_USAGE
|
||||
void acpi_ns_dump_tables(acpi_handle search_base, u32 max_depth);
|
||||
#endif /* ACPI_FUTURE_USAGE */
|
||||
|
||||
void acpi_ns_dump_entry(acpi_handle handle, u32 debug_level);
|
||||
|
||||
void
|
||||
acpi_ns_dump_pathname(acpi_handle handle, char *msg, u32 level, u32 component);
|
||||
|
||||
void acpi_ns_print_pathname(u32 num_segments, char *pathname);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_dump_one_object(acpi_handle obj_handle,
|
||||
u32 level, void *context, void **return_value);
|
||||
|
||||
#ifdef ACPI_FUTURE_USAGE
|
||||
void
|
||||
acpi_ns_dump_objects(acpi_object_type type,
|
||||
u8 display_type,
|
||||
u32 max_depth,
|
||||
acpi_owner_id owner_id, acpi_handle start_handle);
|
||||
#endif /* ACPI_FUTURE_USAGE */
|
||||
|
||||
/*
|
||||
* nseval - Namespace evaluation functions
|
||||
*/
|
||||
acpi_status acpi_ns_evaluate(struct acpi_evaluate_info *info);
|
||||
|
||||
/*
|
||||
* nspredef - Support for predefined/reserved names
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ns_check_predefined_names(struct acpi_namespace_node *node,
|
||||
union acpi_operand_object *return_object);
|
||||
|
||||
const union acpi_predefined_info *acpi_ns_check_for_predefined_name(struct
|
||||
acpi_namespace_node
|
||||
*node);
|
||||
|
||||
void
|
||||
acpi_ns_check_parameter_count(char *pathname,
|
||||
struct acpi_namespace_node *node,
|
||||
const union acpi_predefined_info *info);
|
||||
|
||||
/*
|
||||
* nsnames - Name and Scope manipulation
|
||||
*/
|
||||
u32 acpi_ns_opens_scope(acpi_object_type type);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_build_external_path(struct acpi_namespace_node *node,
|
||||
acpi_size size, char *name_buffer);
|
||||
|
||||
char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node);
|
||||
|
||||
char *acpi_ns_name_of_current_scope(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_handle_to_pathname(acpi_handle target_handle,
|
||||
struct acpi_buffer *buffer);
|
||||
|
||||
u8
|
||||
acpi_ns_pattern_match(struct acpi_namespace_node *obj_node, char *search_for);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_get_node(struct acpi_namespace_node *prefix_node,
|
||||
const char *external_pathname,
|
||||
u32 flags, struct acpi_namespace_node **out_node);
|
||||
|
||||
acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node);
|
||||
|
||||
/*
|
||||
* nsobject - Object management for namespace nodes
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ns_attach_object(struct acpi_namespace_node *node,
|
||||
union acpi_operand_object *object, acpi_object_type type);
|
||||
|
||||
union acpi_operand_object *acpi_ns_get_attached_object(struct
|
||||
acpi_namespace_node
|
||||
*node);
|
||||
|
||||
union acpi_operand_object *acpi_ns_get_secondary_object(union
|
||||
acpi_operand_object
|
||||
*obj_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_attach_data(struct acpi_namespace_node *node,
|
||||
acpi_object_handler handler, void *data);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_detach_data(struct acpi_namespace_node *node,
|
||||
acpi_object_handler handler);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_get_attached_data(struct acpi_namespace_node *node,
|
||||
acpi_object_handler handler, void **data);
|
||||
|
||||
/*
|
||||
* nssearch - Namespace searching and entry
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ns_search_and_enter(u32 entry_name,
|
||||
struct acpi_walk_state *walk_state,
|
||||
struct acpi_namespace_node *node,
|
||||
acpi_interpreter_mode interpreter_mode,
|
||||
acpi_object_type type,
|
||||
u32 flags, struct acpi_namespace_node **ret_node);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_search_one_scope(u32 entry_name,
|
||||
struct acpi_namespace_node *node,
|
||||
acpi_object_type type,
|
||||
struct acpi_namespace_node **ret_node);
|
||||
|
||||
void
|
||||
acpi_ns_install_node(struct acpi_walk_state *walk_state,
|
||||
struct acpi_namespace_node *parent_node,
|
||||
struct acpi_namespace_node *node, acpi_object_type type);
|
||||
|
||||
/*
|
||||
* nsutils - Utility functions
|
||||
*/
|
||||
u8 acpi_ns_valid_root_prefix(char prefix);
|
||||
|
||||
acpi_object_type acpi_ns_get_type(struct acpi_namespace_node *node);
|
||||
|
||||
u32 acpi_ns_local(acpi_object_type type);
|
||||
|
||||
void
|
||||
acpi_ns_report_error(const char *module_name,
|
||||
u32 line_number,
|
||||
const char *internal_name, acpi_status lookup_status);
|
||||
|
||||
void
|
||||
acpi_ns_report_method_error(const char *module_name,
|
||||
u32 line_number,
|
||||
const char *message,
|
||||
struct acpi_namespace_node *node,
|
||||
const char *path, acpi_status lookup_status);
|
||||
|
||||
void
|
||||
acpi_ns_print_node_pathname(struct acpi_namespace_node *node, const char *msg);
|
||||
|
||||
acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info);
|
||||
|
||||
void acpi_ns_get_internal_name_length(struct acpi_namestring_info *info);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_internalize_name(const char *dotted_name, char **converted_name);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_externalize_name(u32 internal_name_length,
|
||||
const char *internal_name,
|
||||
u32 * converted_name_length, char **converted_name);
|
||||
|
||||
struct acpi_namespace_node *acpi_ns_map_handle_to_node(acpi_handle handle);
|
||||
|
||||
acpi_handle acpi_ns_convert_entry_to_handle(struct acpi_namespace_node *node);
|
||||
|
||||
void acpi_ns_terminate(void);
|
||||
|
||||
struct acpi_namespace_node *acpi_ns_get_parent_node(struct acpi_namespace_node
|
||||
*node);
|
||||
|
||||
struct acpi_namespace_node *acpi_ns_get_next_valid_node(struct
|
||||
acpi_namespace_node
|
||||
*node);
|
||||
|
||||
#endif /* __ACNAMESP_H__ */
|
||||
@@ -1,446 +0,0 @@
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* 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 */
|
||||
@@ -1,323 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acopcode.h - AML opcode information for the AML parser and interpreter
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACOPCODE_H__
|
||||
#define __ACOPCODE_H__
|
||||
|
||||
#define MAX_EXTENDED_OPCODE 0x88
|
||||
#define NUM_EXTENDED_OPCODE (MAX_EXTENDED_OPCODE + 1)
|
||||
#define MAX_INTERNAL_OPCODE
|
||||
#define NUM_INTERNAL_OPCODE (MAX_INTERNAL_OPCODE + 1)
|
||||
|
||||
/* Used for non-assigned opcodes */
|
||||
|
||||
#define _UNK 0x6B
|
||||
|
||||
/*
|
||||
* Reserved ASCII characters. Do not use any of these for
|
||||
* internal opcodes, since they are used to differentiate
|
||||
* name strings from AML opcodes
|
||||
*/
|
||||
#define _ASC 0x6C
|
||||
#define _NAM 0x6C
|
||||
#define _PFX 0x6D
|
||||
|
||||
/*
|
||||
* All AML opcodes and the parse-time arguments for each. Used by the AML
|
||||
* parser Each list is compressed into a 32-bit number and stored in the
|
||||
* master opcode table (in psopcode.c).
|
||||
*/
|
||||
#define ARGP_ACCESSFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING)
|
||||
#define ARGP_ACQUIRE_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_WORDDATA)
|
||||
#define ARGP_ADD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_ALIAS_OP ARGP_LIST2 (ARGP_NAMESTRING, ARGP_NAME)
|
||||
#define ARGP_ARG0 ARG_NONE
|
||||
#define ARGP_ARG1 ARG_NONE
|
||||
#define ARGP_ARG2 ARG_NONE
|
||||
#define ARGP_ARG3 ARG_NONE
|
||||
#define ARGP_ARG4 ARG_NONE
|
||||
#define ARGP_ARG5 ARG_NONE
|
||||
#define ARGP_ARG6 ARG_NONE
|
||||
#define ARGP_BANK_FIELD_OP ARGP_LIST6 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_NAMESTRING,ARGP_TERMARG, ARGP_BYTEDATA, ARGP_FIELDLIST)
|
||||
#define ARGP_BIT_AND_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_BIT_NAND_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_BIT_NOR_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_BIT_NOT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_BIT_OR_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_BIT_XOR_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_BREAK_OP ARG_NONE
|
||||
#define ARGP_BREAK_POINT_OP ARG_NONE
|
||||
#define ARGP_BUFFER_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_BYTELIST)
|
||||
#define ARGP_BYTE_OP ARGP_LIST1 (ARGP_BYTEDATA)
|
||||
#define ARGP_BYTELIST_OP ARGP_LIST1 (ARGP_NAMESTRING)
|
||||
#define ARGP_CONCAT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_CONCAT_RES_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_COND_REF_OF_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_SUPERNAME)
|
||||
#define ARGP_CONTINUE_OP ARG_NONE
|
||||
#define ARGP_COPY_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_SIMPLENAME)
|
||||
#define ARGP_CREATE_BIT_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME)
|
||||
#define ARGP_CREATE_BYTE_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME)
|
||||
#define ARGP_CREATE_DWORD_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME)
|
||||
#define ARGP_CREATE_FIELD_OP ARGP_LIST4 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME)
|
||||
#define ARGP_CREATE_QWORD_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME)
|
||||
#define ARGP_CREATE_WORD_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME)
|
||||
#define ARGP_DATA_REGION_OP ARGP_LIST4 (ARGP_NAME, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG)
|
||||
#define ARGP_DEBUG_OP ARG_NONE
|
||||
#define ARGP_DECREMENT_OP ARGP_LIST1 (ARGP_SUPERNAME)
|
||||
#define ARGP_DEREF_OF_OP ARGP_LIST1 (ARGP_TERMARG)
|
||||
#define ARGP_DEVICE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_OBJLIST)
|
||||
#define ARGP_DIVIDE_OP ARGP_LIST4 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET, ARGP_TARGET)
|
||||
#define ARGP_DWORD_OP ARGP_LIST1 (ARGP_DWORDDATA)
|
||||
#define ARGP_ELSE_OP ARGP_LIST2 (ARGP_PKGLENGTH, ARGP_TERMLIST)
|
||||
#define ARGP_EVENT_OP ARGP_LIST1 (ARGP_NAME)
|
||||
#define ARGP_FATAL_OP ARGP_LIST3 (ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_TERMARG)
|
||||
#define ARGP_FIELD_OP ARGP_LIST4 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_BYTEDATA, ARGP_FIELDLIST)
|
||||
#define ARGP_FIND_SET_LEFT_BIT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_FIND_SET_RIGHT_BIT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_FROM_BCD_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_IF_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_TERMLIST)
|
||||
#define ARGP_INCREMENT_OP ARGP_LIST1 (ARGP_SUPERNAME)
|
||||
#define ARGP_INDEX_FIELD_OP ARGP_LIST5 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_NAMESTRING,ARGP_BYTEDATA, ARGP_FIELDLIST)
|
||||
#define ARGP_INDEX_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_LAND_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG)
|
||||
#define ARGP_LEQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG)
|
||||
#define ARGP_LGREATER_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG)
|
||||
#define ARGP_LGREATEREQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG)
|
||||
#define ARGP_LLESS_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG)
|
||||
#define ARGP_LLESSEQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG)
|
||||
#define ARGP_LNOT_OP ARGP_LIST1 (ARGP_TERMARG)
|
||||
#define ARGP_LNOTEQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG)
|
||||
#define ARGP_LOAD_OP ARGP_LIST2 (ARGP_NAMESTRING, ARGP_SUPERNAME)
|
||||
#define ARGP_LOAD_TABLE_OP ARGP_LIST6 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG)
|
||||
#define ARGP_LOCAL0 ARG_NONE
|
||||
#define ARGP_LOCAL1 ARG_NONE
|
||||
#define ARGP_LOCAL2 ARG_NONE
|
||||
#define ARGP_LOCAL3 ARG_NONE
|
||||
#define ARGP_LOCAL4 ARG_NONE
|
||||
#define ARGP_LOCAL5 ARG_NONE
|
||||
#define ARGP_LOCAL6 ARG_NONE
|
||||
#define ARGP_LOCAL7 ARG_NONE
|
||||
#define ARGP_LOR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG)
|
||||
#define ARGP_MATCH_OP ARGP_LIST6 (ARGP_TERMARG, ARGP_BYTEDATA, ARGP_TERMARG, ARGP_BYTEDATA, ARGP_TERMARG, ARGP_TERMARG)
|
||||
#define ARGP_METHOD_OP ARGP_LIST4 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_BYTEDATA, ARGP_TERMLIST)
|
||||
#define ARGP_METHODCALL_OP ARGP_LIST1 (ARGP_NAMESTRING)
|
||||
#define ARGP_MID_OP ARGP_LIST4 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_MOD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_MULTIPLY_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_MUTEX_OP ARGP_LIST2 (ARGP_NAME, ARGP_BYTEDATA)
|
||||
#define ARGP_NAME_OP ARGP_LIST2 (ARGP_NAME, ARGP_DATAOBJ)
|
||||
#define ARGP_NAMEDFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING)
|
||||
#define ARGP_NAMEPATH_OP ARGP_LIST1 (ARGP_NAMESTRING)
|
||||
#define ARGP_NOOP_OP ARG_NONE
|
||||
#define ARGP_NOTIFY_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_TERMARG)
|
||||
#define ARGP_ONE_OP ARG_NONE
|
||||
#define ARGP_ONES_OP ARG_NONE
|
||||
#define ARGP_PACKAGE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_BYTEDATA, ARGP_DATAOBJLIST)
|
||||
#define ARGP_POWER_RES_OP ARGP_LIST5 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_BYTEDATA, ARGP_WORDDATA, ARGP_OBJLIST)
|
||||
#define ARGP_PROCESSOR_OP ARGP_LIST6 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_BYTEDATA, ARGP_OBJLIST)
|
||||
#define ARGP_QWORD_OP ARGP_LIST1 (ARGP_QWORDDATA)
|
||||
#define ARGP_REF_OF_OP ARGP_LIST1 (ARGP_SUPERNAME)
|
||||
#define ARGP_REGION_OP ARGP_LIST4 (ARGP_NAME, ARGP_BYTEDATA, ARGP_TERMARG, ARGP_TERMARG)
|
||||
#define ARGP_RELEASE_OP ARGP_LIST1 (ARGP_SUPERNAME)
|
||||
#define ARGP_RESERVEDFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING)
|
||||
#define ARGP_RESET_OP ARGP_LIST1 (ARGP_SUPERNAME)
|
||||
#define ARGP_RETURN_OP ARGP_LIST1 (ARGP_TERMARG)
|
||||
#define ARGP_REVISION_OP ARG_NONE
|
||||
#define ARGP_SCOPE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_TERMLIST)
|
||||
#define ARGP_SHIFT_LEFT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_SHIFT_RIGHT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_SIGNAL_OP ARGP_LIST1 (ARGP_SUPERNAME)
|
||||
#define ARGP_SIZE_OF_OP ARGP_LIST1 (ARGP_SUPERNAME)
|
||||
#define ARGP_SLEEP_OP ARGP_LIST1 (ARGP_TERMARG)
|
||||
#define ARGP_STALL_OP ARGP_LIST1 (ARGP_TERMARG)
|
||||
#define ARGP_STATICSTRING_OP ARGP_LIST1 (ARGP_NAMESTRING)
|
||||
#define ARGP_STORE_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_SUPERNAME)
|
||||
#define ARGP_STRING_OP ARGP_LIST1 (ARGP_CHARLIST)
|
||||
#define ARGP_SUBTRACT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_THERMAL_ZONE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_OBJLIST)
|
||||
#define ARGP_TIMER_OP ARG_NONE
|
||||
#define ARGP_TO_BCD_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_TO_BUFFER_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_TO_DEC_STR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_TO_HEX_STR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_TO_INTEGER_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_TO_STRING_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
|
||||
#define ARGP_TYPE_OP ARGP_LIST1 (ARGP_SUPERNAME)
|
||||
#define ARGP_UNLOAD_OP ARGP_LIST1 (ARGP_SUPERNAME)
|
||||
#define ARGP_VAR_PACKAGE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_DATAOBJLIST)
|
||||
#define ARGP_WAIT_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_TERMARG)
|
||||
#define ARGP_WHILE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_TERMLIST)
|
||||
#define ARGP_WORD_OP ARGP_LIST1 (ARGP_WORDDATA)
|
||||
#define ARGP_ZERO_OP ARG_NONE
|
||||
|
||||
/*
|
||||
* All AML opcodes and the runtime arguments for each. Used by the AML
|
||||
* interpreter Each list is compressed into a 32-bit number and stored
|
||||
* in the master opcode table (in psopcode.c).
|
||||
*
|
||||
* (Used by prep_operands procedure and the ASL Compiler)
|
||||
*/
|
||||
#define ARGI_ACCESSFIELD_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_ACQUIRE_OP ARGI_LIST2 (ARGI_MUTEX, ARGI_INTEGER)
|
||||
#define ARGI_ADD_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_ALIAS_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_ARG0 ARG_NONE
|
||||
#define ARGI_ARG1 ARG_NONE
|
||||
#define ARGI_ARG2 ARG_NONE
|
||||
#define ARGI_ARG3 ARG_NONE
|
||||
#define ARGI_ARG4 ARG_NONE
|
||||
#define ARGI_ARG5 ARG_NONE
|
||||
#define ARGI_ARG6 ARG_NONE
|
||||
#define ARGI_BANK_FIELD_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_BIT_AND_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_BIT_NAND_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_BIT_NOR_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_BIT_NOT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_BIT_OR_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_BIT_XOR_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_BREAK_OP ARG_NONE
|
||||
#define ARGI_BREAK_POINT_OP ARG_NONE
|
||||
#define ARGI_BUFFER_OP ARGI_LIST1 (ARGI_INTEGER)
|
||||
#define ARGI_BYTE_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_BYTELIST_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_CONCAT_OP ARGI_LIST3 (ARGI_COMPUTEDATA,ARGI_COMPUTEDATA, ARGI_TARGETREF)
|
||||
#define ARGI_CONCAT_RES_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_BUFFER, ARGI_TARGETREF)
|
||||
#define ARGI_COND_REF_OF_OP ARGI_LIST2 (ARGI_OBJECT_REF, ARGI_TARGETREF)
|
||||
#define ARGI_CONTINUE_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_COPY_OP ARGI_LIST2 (ARGI_ANYTYPE, ARGI_SIMPLE_TARGET)
|
||||
#define ARGI_CREATE_BIT_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE)
|
||||
#define ARGI_CREATE_BYTE_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE)
|
||||
#define ARGI_CREATE_DWORD_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE)
|
||||
#define ARGI_CREATE_FIELD_OP ARGI_LIST4 (ARGI_BUFFER, ARGI_INTEGER, ARGI_INTEGER, ARGI_REFERENCE)
|
||||
#define ARGI_CREATE_QWORD_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE)
|
||||
#define ARGI_CREATE_WORD_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE)
|
||||
#define ARGI_DATA_REGION_OP ARGI_LIST3 (ARGI_STRING, ARGI_STRING, ARGI_STRING)
|
||||
#define ARGI_DEBUG_OP ARG_NONE
|
||||
#define ARGI_DECREMENT_OP ARGI_LIST1 (ARGI_TARGETREF)
|
||||
#define ARGI_DEREF_OF_OP ARGI_LIST1 (ARGI_REF_OR_STRING)
|
||||
#define ARGI_DEVICE_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_DIVIDE_OP ARGI_LIST4 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF, ARGI_TARGETREF)
|
||||
#define ARGI_DWORD_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_ELSE_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_EVENT_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_FATAL_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_INTEGER)
|
||||
#define ARGI_FIELD_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_FIND_SET_LEFT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_FIND_SET_RIGHT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_FROM_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET)
|
||||
#define ARGI_IF_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_INCREMENT_OP ARGI_LIST1 (ARGI_TARGETREF)
|
||||
#define ARGI_INDEX_FIELD_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_INDEX_OP ARGI_LIST3 (ARGI_COMPLEXOBJ, ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_LAND_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER)
|
||||
#define ARGI_LEQUAL_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_COMPUTEDATA)
|
||||
#define ARGI_LGREATER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_COMPUTEDATA)
|
||||
#define ARGI_LGREATEREQUAL_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_LLESS_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_COMPUTEDATA)
|
||||
#define ARGI_LLESSEQUAL_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_LNOT_OP ARGI_LIST1 (ARGI_INTEGER)
|
||||
#define ARGI_LNOTEQUAL_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_LOAD_OP ARGI_LIST2 (ARGI_REGION_OR_BUFFER,ARGI_TARGETREF)
|
||||
#define ARGI_LOAD_TABLE_OP ARGI_LIST6 (ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_ANYTYPE)
|
||||
#define ARGI_LOCAL0 ARG_NONE
|
||||
#define ARGI_LOCAL1 ARG_NONE
|
||||
#define ARGI_LOCAL2 ARG_NONE
|
||||
#define ARGI_LOCAL3 ARG_NONE
|
||||
#define ARGI_LOCAL4 ARG_NONE
|
||||
#define ARGI_LOCAL5 ARG_NONE
|
||||
#define ARGI_LOCAL6 ARG_NONE
|
||||
#define ARGI_LOCAL7 ARG_NONE
|
||||
#define ARGI_LOR_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER)
|
||||
#define ARGI_MATCH_OP ARGI_LIST6 (ARGI_PACKAGE, ARGI_INTEGER, ARGI_COMPUTEDATA, ARGI_INTEGER,ARGI_COMPUTEDATA,ARGI_INTEGER)
|
||||
#define ARGI_METHOD_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_METHODCALL_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_MID_OP ARGI_LIST4 (ARGI_BUFFER_OR_STRING,ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_MOD_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_MULTIPLY_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_MUTEX_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_NAME_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_NAMEDFIELD_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_NAMEPATH_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_NOOP_OP ARG_NONE
|
||||
#define ARGI_NOTIFY_OP ARGI_LIST2 (ARGI_DEVICE_REF, ARGI_INTEGER)
|
||||
#define ARGI_ONE_OP ARG_NONE
|
||||
#define ARGI_ONES_OP ARG_NONE
|
||||
#define ARGI_PACKAGE_OP ARGI_LIST1 (ARGI_INTEGER)
|
||||
#define ARGI_POWER_RES_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_PROCESSOR_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_QWORD_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_REF_OF_OP ARGI_LIST1 (ARGI_OBJECT_REF)
|
||||
#define ARGI_REGION_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER)
|
||||
#define ARGI_RELEASE_OP ARGI_LIST1 (ARGI_MUTEX)
|
||||
#define ARGI_RESERVEDFIELD_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_RESET_OP ARGI_LIST1 (ARGI_EVENT)
|
||||
#define ARGI_RETURN_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_REVISION_OP ARG_NONE
|
||||
#define ARGI_SCOPE_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_SHIFT_LEFT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_SHIFT_RIGHT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_SIGNAL_OP ARGI_LIST1 (ARGI_EVENT)
|
||||
#define ARGI_SIZE_OF_OP ARGI_LIST1 (ARGI_DATAOBJECT)
|
||||
#define ARGI_SLEEP_OP ARGI_LIST1 (ARGI_INTEGER)
|
||||
#define ARGI_STALL_OP ARGI_LIST1 (ARGI_INTEGER)
|
||||
#define ARGI_STATICSTRING_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_STORE_OP ARGI_LIST2 (ARGI_DATAREFOBJ, ARGI_TARGETREF)
|
||||
#define ARGI_STRING_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_SUBTRACT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
|
||||
#define ARGI_THERMAL_ZONE_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_TIMER_OP ARG_NONE
|
||||
#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET)
|
||||
#define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET)
|
||||
#define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET)
|
||||
#define ARGI_TO_HEX_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET)
|
||||
#define ARGI_TO_INTEGER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET)
|
||||
#define ARGI_TO_STRING_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_FIXED_TARGET)
|
||||
#define ARGI_TYPE_OP ARGI_LIST1 (ARGI_ANYTYPE)
|
||||
#define ARGI_UNLOAD_OP ARGI_LIST1 (ARGI_DDBHANDLE)
|
||||
#define ARGI_VAR_PACKAGE_OP ARGI_LIST1 (ARGI_INTEGER)
|
||||
#define ARGI_WAIT_OP ARGI_LIST2 (ARGI_EVENT, ARGI_INTEGER)
|
||||
#define ARGI_WHILE_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_WORD_OP ARGI_INVALID_OPCODE
|
||||
#define ARGI_ZERO_OP ARG_NONE
|
||||
|
||||
#endif /* __ACOPCODE_H__ */
|
||||
+98
-5
@@ -45,9 +45,9 @@
|
||||
#define __ACOUTPUT_H__
|
||||
|
||||
/*
|
||||
* Debug levels and component IDs. These are used to control the
|
||||
* granularity of the output of the DEBUG_PRINT macro -- on a per-
|
||||
* component basis and a per-exception-type basis.
|
||||
* Debug levels and component IDs. These are used to control the
|
||||
* granularity of the output of the ACPI_DEBUG_PRINT macro -- on a
|
||||
* per-component basis and a per-exception-type basis.
|
||||
*/
|
||||
|
||||
/* Component IDs are used in the global "DebugLayer" */
|
||||
@@ -69,8 +69,10 @@
|
||||
|
||||
#define ACPI_COMPILER 0x00001000
|
||||
#define ACPI_TOOLS 0x00002000
|
||||
#define ACPI_EXAMPLE 0x00004000
|
||||
#define ACPI_DRIVER 0x00008000
|
||||
|
||||
#define ACPI_ALL_COMPONENTS 0x00003FFF
|
||||
#define ACPI_ALL_COMPONENTS 0x0000FFFF
|
||||
#define ACPI_COMPONENT_DEFAULT (ACPI_ALL_COMPONENTS)
|
||||
|
||||
/* Component IDs reserved for ACPI drivers */
|
||||
@@ -78,7 +80,7 @@
|
||||
#define ACPI_ALL_DRIVERS 0xFFFF0000
|
||||
|
||||
/*
|
||||
* Raw debug output levels, do not use these in the DEBUG_PRINT macros
|
||||
* Raw debug output levels, do not use these in the ACPI_DEBUG_PRINT macros
|
||||
*/
|
||||
#define ACPI_LV_INIT 0x00000001
|
||||
#define ACPI_LV_DEBUG_OBJECT 0x00000002
|
||||
@@ -176,4 +178,95 @@
|
||||
#define ACPI_NORMAL_DEFAULT (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT)
|
||||
#define ACPI_DEBUG_ALL (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL)
|
||||
|
||||
#if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES)
|
||||
/*
|
||||
* Module name is included in both debug and non-debug versions primarily for
|
||||
* error messages. The __FILE__ macro is not very useful for this, because it
|
||||
* often includes the entire pathname to the module
|
||||
*/
|
||||
#define ACPI_MODULE_NAME(name) static const char ACPI_UNUSED_VAR _acpi_module_name[] = name;
|
||||
#else
|
||||
#define ACPI_MODULE_NAME(name)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Ascii error messages can be configured out
|
||||
*/
|
||||
#ifndef ACPI_NO_ERROR_MESSAGES
|
||||
#define AE_INFO _acpi_module_name, __LINE__
|
||||
|
||||
/*
|
||||
* Error reporting. Callers module and line number are inserted by AE_INFO,
|
||||
* the plist contains a set of parens to allow variable-length lists.
|
||||
* These macros are used for both the debug and non-debug versions of the code.
|
||||
*/
|
||||
#define ACPI_INFO(plist) acpi_info plist
|
||||
#define ACPI_WARNING(plist) acpi_warning plist
|
||||
#define ACPI_EXCEPTION(plist) acpi_exception plist
|
||||
#define ACPI_ERROR(plist) acpi_error plist
|
||||
|
||||
#else
|
||||
|
||||
/* No error messages */
|
||||
|
||||
#define ACPI_INFO(plist)
|
||||
#define ACPI_WARNING(plist)
|
||||
#define ACPI_EXCEPTION(plist)
|
||||
#define ACPI_ERROR(plist)
|
||||
|
||||
#endif /* ACPI_NO_ERROR_MESSAGES */
|
||||
|
||||
/*
|
||||
* Debug macros that are conditionally compiled
|
||||
*/
|
||||
#ifdef ACPI_DEBUG_OUTPUT
|
||||
|
||||
/*
|
||||
* If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header,
|
||||
* define it now. This is the case where there the compiler does not support
|
||||
* a __FUNCTION__ macro or equivalent.
|
||||
*/
|
||||
#ifndef ACPI_GET_FUNCTION_NAME
|
||||
#define ACPI_GET_FUNCTION_NAME _acpi_function_name
|
||||
|
||||
/*
|
||||
* The Name parameter should be the procedure name as a quoted string.
|
||||
* The function name is also used by the function exit macros below.
|
||||
* Note: (const char) is used to be compatible with the debug interfaces
|
||||
* and macros such as __FUNCTION__.
|
||||
*/
|
||||
#define ACPI_FUNCTION_NAME(name) static const char _acpi_function_name[] = #name;
|
||||
|
||||
#else
|
||||
/* Compiler supports __FUNCTION__ (or equivalent) -- Ignore this macro */
|
||||
|
||||
#define ACPI_FUNCTION_NAME(name)
|
||||
#endif /* ACPI_GET_FUNCTION_NAME */
|
||||
|
||||
/*
|
||||
* Common parameters used for debug output functions:
|
||||
* line number, function name, module(file) name, component ID
|
||||
*/
|
||||
#define ACPI_DEBUG_PARAMETERS __LINE__, ACPI_GET_FUNCTION_NAME, _acpi_module_name, _COMPONENT
|
||||
|
||||
/*
|
||||
* Master debug print macros
|
||||
* Print message if and only if:
|
||||
* 1) Debug print for the current component is enabled
|
||||
* 2) Debug error level or trace level for the print statement is enabled
|
||||
*/
|
||||
#define ACPI_DEBUG_PRINT(plist) acpi_debug_print plist
|
||||
#define ACPI_DEBUG_PRINT_RAW(plist) acpi_debug_print_raw plist
|
||||
|
||||
#else
|
||||
/*
|
||||
* This is the non-debug case -- make everything go away,
|
||||
* leaving no executable debug code!
|
||||
*/
|
||||
#define ACPI_FUNCTION_NAME(a)
|
||||
#define ACPI_DEBUG_PRINT(pl)
|
||||
#define ACPI_DEBUG_PRINT_RAW(pl)
|
||||
|
||||
#endif /* ACPI_DEBUG_OUTPUT */
|
||||
|
||||
#endif /* __ACOUTPUT_H__ */
|
||||
|
||||
@@ -1,234 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: acparser.h - AML Parser subcomponent prototypes and defines
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACPARSER_H__
|
||||
#define __ACPARSER_H__
|
||||
|
||||
#define OP_HAS_RETURN_VALUE 1
|
||||
|
||||
/* Variable number of arguments. This field must be 32 bits */
|
||||
|
||||
#define ACPI_VAR_ARGS ACPI_UINT32_MAX
|
||||
|
||||
#define ACPI_PARSE_DELETE_TREE 0x0001
|
||||
#define ACPI_PARSE_NO_TREE_DELETE 0x0000
|
||||
#define ACPI_PARSE_TREE_MASK 0x0001
|
||||
|
||||
#define ACPI_PARSE_LOAD_PASS1 0x0010
|
||||
#define ACPI_PARSE_LOAD_PASS2 0x0020
|
||||
#define ACPI_PARSE_EXECUTE 0x0030
|
||||
#define ACPI_PARSE_MODE_MASK 0x0030
|
||||
|
||||
#define ACPI_PARSE_DEFERRED_OP 0x0100
|
||||
#define ACPI_PARSE_DISASSEMBLE 0x0200
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Parser interfaces
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* psxface - Parser external interfaces
|
||||
*/
|
||||
acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info);
|
||||
|
||||
/*
|
||||
* psargs - Parse AML opcode arguments
|
||||
*/
|
||||
u8 *acpi_ps_get_next_package_end(struct acpi_parse_state *parser_state);
|
||||
|
||||
char *acpi_ps_get_next_namestring(struct acpi_parse_state *parser_state);
|
||||
|
||||
void
|
||||
acpi_ps_get_next_simple_arg(struct acpi_parse_state *parser_state,
|
||||
u32 arg_type, union acpi_parse_object *arg);
|
||||
|
||||
acpi_status
|
||||
acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
|
||||
struct acpi_parse_state *parser_state,
|
||||
union acpi_parse_object *arg, u8 method_call);
|
||||
|
||||
acpi_status
|
||||
acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
|
||||
struct acpi_parse_state *parser_state,
|
||||
u32 arg_type, union acpi_parse_object **return_arg);
|
||||
|
||||
/*
|
||||
* psfind
|
||||
*/
|
||||
union acpi_parse_object *acpi_ps_find_name(union acpi_parse_object *scope,
|
||||
u32 name, u32 opcode);
|
||||
|
||||
union acpi_parse_object *acpi_ps_get_parent(union acpi_parse_object *op);
|
||||
|
||||
/*
|
||||
* psopcode - AML Opcode information
|
||||
*/
|
||||
const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode);
|
||||
|
||||
char *acpi_ps_get_opcode_name(u16 opcode);
|
||||
|
||||
u8 acpi_ps_get_argument_count(u32 op_type);
|
||||
|
||||
/*
|
||||
* psparse - top level parsing routines
|
||||
*/
|
||||
acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state);
|
||||
|
||||
u32 acpi_ps_get_opcode_size(u32 opcode);
|
||||
|
||||
u16 acpi_ps_peek_opcode(struct acpi_parse_state *state);
|
||||
|
||||
acpi_status
|
||||
acpi_ps_complete_this_op(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op);
|
||||
|
||||
acpi_status
|
||||
acpi_ps_next_parse_state(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op,
|
||||
acpi_status callback_status);
|
||||
|
||||
/*
|
||||
* psloop - main parse loop
|
||||
*/
|
||||
acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* psscope - Scope stack management routines
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ps_init_scope(struct acpi_parse_state *parser_state,
|
||||
union acpi_parse_object *root);
|
||||
|
||||
union acpi_parse_object *acpi_ps_get_parent_scope(struct acpi_parse_state
|
||||
*state);
|
||||
|
||||
u8 acpi_ps_has_completed_scope(struct acpi_parse_state *parser_state);
|
||||
|
||||
void
|
||||
acpi_ps_pop_scope(struct acpi_parse_state *parser_state,
|
||||
union acpi_parse_object **op,
|
||||
u32 * arg_list, u32 * arg_count);
|
||||
|
||||
acpi_status
|
||||
acpi_ps_push_scope(struct acpi_parse_state *parser_state,
|
||||
union acpi_parse_object *op,
|
||||
u32 remaining_args, u32 arg_count);
|
||||
|
||||
void acpi_ps_cleanup_scope(struct acpi_parse_state *state);
|
||||
|
||||
/*
|
||||
* pstree - parse tree manipulation routines
|
||||
*/
|
||||
void
|
||||
acpi_ps_append_arg(union acpi_parse_object *op, union acpi_parse_object *arg);
|
||||
|
||||
union acpi_parse_object *acpi_ps_find(union acpi_parse_object *scope,
|
||||
char *path, u16 opcode, u32 create);
|
||||
|
||||
union acpi_parse_object *acpi_ps_get_arg(union acpi_parse_object *op, u32 argn);
|
||||
|
||||
#ifdef ACPI_FUTURE_USAGE
|
||||
union acpi_parse_object *acpi_ps_get_depth_next(union acpi_parse_object *origin,
|
||||
union acpi_parse_object *op);
|
||||
#endif /* ACPI_FUTURE_USAGE */
|
||||
|
||||
/*
|
||||
* pswalk - parse tree walk routines
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ps_walk_parsed_aml(union acpi_parse_object *start_op,
|
||||
union acpi_parse_object *end_op,
|
||||
union acpi_operand_object *mth_desc,
|
||||
struct acpi_namespace_node *start_node,
|
||||
union acpi_operand_object **params,
|
||||
union acpi_operand_object **caller_return_desc,
|
||||
acpi_owner_id owner_id,
|
||||
acpi_parse_downwards descending_callback,
|
||||
acpi_parse_upwards ascending_callback);
|
||||
|
||||
acpi_status
|
||||
acpi_ps_get_next_walk_op(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op,
|
||||
acpi_parse_upwards ascending_callback);
|
||||
|
||||
acpi_status acpi_ps_delete_completed_op(struct acpi_walk_state *walk_state);
|
||||
|
||||
void acpi_ps_delete_parse_tree(union acpi_parse_object *root);
|
||||
|
||||
/*
|
||||
* psutils - parser utilities
|
||||
*/
|
||||
union acpi_parse_object *acpi_ps_create_scope_op(void);
|
||||
|
||||
void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode);
|
||||
|
||||
union acpi_parse_object *acpi_ps_alloc_op(u16 opcode);
|
||||
|
||||
void acpi_ps_free_op(union acpi_parse_object *op);
|
||||
|
||||
u8 acpi_ps_is_leading_char(u32 c);
|
||||
|
||||
u8 acpi_ps_is_prefix_char(u32 c);
|
||||
|
||||
#ifdef ACPI_FUTURE_USAGE
|
||||
u32 acpi_ps_get_name(union acpi_parse_object *op);
|
||||
#endif /* ACPI_FUTURE_USAGE */
|
||||
|
||||
void acpi_ps_set_name(union acpi_parse_object *op, u32 name);
|
||||
|
||||
/*
|
||||
* psdump - display parser tree
|
||||
*/
|
||||
u32
|
||||
acpi_ps_sprint_path(char *buffer_start,
|
||||
u32 buffer_size, union acpi_parse_object *op);
|
||||
|
||||
u32
|
||||
acpi_ps_sprint_op(char *buffer_start,
|
||||
u32 buffer_size, union acpi_parse_object *op);
|
||||
|
||||
void acpi_ps_show(union acpi_parse_object *op);
|
||||
|
||||
#endif /* __ACPARSER_H__ */
|
||||
+14
-17
@@ -1,6 +1,6 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acpi.h - Master include file, Publics and external data.
|
||||
* Name: acpi.h - Master public include file used to interface to ACPICA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -45,25 +45,22 @@
|
||||
#define __ACPI_H__
|
||||
|
||||
/*
|
||||
* Common includes for all ACPI driver files
|
||||
* We put them here because we don't want to duplicate them
|
||||
* in the rest of the source code again and again.
|
||||
* Public include files for use by code that will interface to ACPICA.
|
||||
*
|
||||
* Information includes the ACPICA data types, names, exceptions, and
|
||||
* external interface prototypes. Also included are the definitions for
|
||||
* all ACPI tables (FADT, MADT, etc.)
|
||||
*
|
||||
* Note: The order of these include files is important.
|
||||
*/
|
||||
#include "acnames.h" /* Global ACPI names and strings */
|
||||
#include "acconfig.h" /* Configuration constants */
|
||||
#include "platform/acenv.h" /* Target environment specific items */
|
||||
#include "actypes.h" /* Fundamental common data types */
|
||||
#include "acexcep.h" /* ACPI exception codes */
|
||||
#include "acmacros.h" /* C macros */
|
||||
#include "platform/acenv.h" /* Environment-specific items */
|
||||
#include "acnames.h" /* Common ACPI names and strings */
|
||||
#include "actypes.h" /* ACPICA data types and structures */
|
||||
#include "acexcep.h" /* ACPICA exceptions */
|
||||
#include "actbl.h" /* ACPI table definitions */
|
||||
#include "aclocal.h" /* Internal data types */
|
||||
#include "acoutput.h" /* Error output and Debug macros */
|
||||
#include "acpiosxf.h" /* Interfaces to the ACPI-to-OS layer */
|
||||
#include "acrestyp.h" /* Resource Descriptor structs */
|
||||
#include "acpiosxf.h" /* OSL interfaces (ACPICA-to-OS) */
|
||||
#include "acpixf.h" /* ACPI core subsystem external interfaces */
|
||||
#include "acobject.h" /* ACPI internal object */
|
||||
#include "acstruct.h" /* Common structures */
|
||||
#include "acglobal.h" /* All global variables */
|
||||
#include "achware.h" /* Hardware defines and interfaces */
|
||||
#include "acutils.h" /* Utility interfaces */
|
||||
|
||||
#endif /* __ACPI_H__ */
|
||||
|
||||
@@ -121,8 +121,11 @@ acpi_os_wait_semaphore(acpi_semaphore handle, u32 units, u16 timeout);
|
||||
acpi_status acpi_os_signal_semaphore(acpi_semaphore handle, u32 units);
|
||||
|
||||
/*
|
||||
* Mutex primitives
|
||||
* Mutex primitives. May be configured to use semaphores instead via
|
||||
* ACPI_MUTEX_TYPE (see platform/acenv.h)
|
||||
*/
|
||||
#if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE)
|
||||
|
||||
acpi_status acpi_os_create_mutex(acpi_mutex * out_handle);
|
||||
|
||||
void acpi_os_delete_mutex(acpi_mutex handle);
|
||||
@@ -130,13 +133,7 @@ void acpi_os_delete_mutex(acpi_mutex handle);
|
||||
acpi_status acpi_os_acquire_mutex(acpi_mutex handle, u16 timeout);
|
||||
|
||||
void acpi_os_release_mutex(acpi_mutex handle);
|
||||
|
||||
/* Temporary macros for Mutex* interfaces, map to existing semaphore xfaces */
|
||||
|
||||
#define acpi_os_create_mutex(out_handle) acpi_os_create_semaphore (1, 1, out_handle)
|
||||
#define acpi_os_delete_mutex(handle) (void) acpi_os_delete_semaphore (handle)
|
||||
#define acpi_os_acquire_mutex(handle,time) acpi_os_wait_semaphore (handle, 1, time)
|
||||
#define acpi_os_release_mutex(handle) (void) acpi_os_signal_semaphore (handle, 1)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Memory allocation and mapping
|
||||
|
||||
+86
-14
@@ -45,9 +45,32 @@
|
||||
#ifndef __ACXFACE_H__
|
||||
#define __ACXFACE_H__
|
||||
|
||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||
|
||||
#define ACPI_CA_VERSION 0x20081204
|
||||
|
||||
#include "actypes.h"
|
||||
#include "actbl.h"
|
||||
|
||||
extern u8 acpi_gbl_permanent_mmap;
|
||||
|
||||
/*
|
||||
* Globals that are publically available, allowing for
|
||||
* run time configuration
|
||||
*/
|
||||
extern u32 acpi_dbg_level;
|
||||
extern u32 acpi_dbg_layer;
|
||||
extern u8 acpi_gbl_enable_interpreter_slack;
|
||||
extern u8 acpi_gbl_all_methods_serialized;
|
||||
extern u8 acpi_gbl_create_osi_method;
|
||||
extern u8 acpi_gbl_leave_wake_gpes_disabled;
|
||||
extern acpi_name acpi_gbl_trace_method_name;
|
||||
extern u32 acpi_gbl_trace_flags;
|
||||
|
||||
extern u32 acpi_current_gpe_count;
|
||||
extern struct acpi_table_fadt acpi_gbl_FADT;
|
||||
|
||||
extern u32 acpi_rsdt_forced;
|
||||
/*
|
||||
* Global interfaces
|
||||
*/
|
||||
@@ -79,11 +102,6 @@ const char *acpi_format_exception(acpi_status exception);
|
||||
|
||||
acpi_status acpi_purge_cached_objects(void);
|
||||
|
||||
#ifdef ACPI_FUTURE_USAGE
|
||||
acpi_status
|
||||
acpi_install_initialization_handler(acpi_init_handler handler, u32 function);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* ACPI Memory management
|
||||
*/
|
||||
@@ -193,8 +211,11 @@ acpi_status acpi_get_id(acpi_handle object, acpi_owner_id * out_type);
|
||||
acpi_status acpi_get_parent(acpi_handle object, acpi_handle * out_handle);
|
||||
|
||||
/*
|
||||
* Event handler interfaces
|
||||
* Handler interfaces
|
||||
*/
|
||||
acpi_status
|
||||
acpi_install_initialization_handler(acpi_init_handler handler, u32 function);
|
||||
|
||||
acpi_status
|
||||
acpi_install_fixed_event_handler(u32 acpi_event,
|
||||
acpi_event_handler handler, void *context);
|
||||
@@ -227,6 +248,10 @@ acpi_install_gpe_handler(acpi_handle gpe_device,
|
||||
u32 gpe_number,
|
||||
u32 type, acpi_event_handler address, void *context);
|
||||
|
||||
acpi_status
|
||||
acpi_remove_gpe_handler(acpi_handle gpe_device,
|
||||
u32 gpe_number, acpi_event_handler address);
|
||||
|
||||
#ifdef ACPI_FUTURE_USAGE
|
||||
acpi_status acpi_install_exception_handler(acpi_exception_handler handler);
|
||||
#endif
|
||||
@@ -238,10 +263,6 @@ acpi_status acpi_acquire_global_lock(u16 timeout, u32 * handle);
|
||||
|
||||
acpi_status acpi_release_global_lock(u32 handle);
|
||||
|
||||
acpi_status
|
||||
acpi_remove_gpe_handler(acpi_handle gpe_device,
|
||||
u32 gpe_number, acpi_event_handler address);
|
||||
|
||||
acpi_status acpi_enable_event(u32 event, u32 flags);
|
||||
|
||||
acpi_status acpi_disable_event(u32 event, u32 flags);
|
||||
@@ -250,6 +271,9 @@ acpi_status acpi_clear_event(u32 event);
|
||||
|
||||
acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status);
|
||||
|
||||
/*
|
||||
* GPE Interfaces
|
||||
*/
|
||||
acpi_status acpi_set_gpe_type(acpi_handle gpe_device, u32 gpe_number, u8 type);
|
||||
|
||||
acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number);
|
||||
@@ -263,6 +287,12 @@ acpi_get_gpe_status(acpi_handle gpe_device,
|
||||
u32 gpe_number,
|
||||
u32 flags, acpi_event_status * event_status);
|
||||
|
||||
acpi_status acpi_disable_all_gpes(void);
|
||||
|
||||
acpi_status acpi_enable_all_runtime_gpes(void);
|
||||
|
||||
acpi_status acpi_get_gpe_device(u32 gpe_index, acpi_handle *gpe_device);
|
||||
|
||||
acpi_status
|
||||
acpi_install_gpe_block(acpi_handle gpe_device,
|
||||
struct acpi_generic_address *gpe_block_address,
|
||||
@@ -313,6 +343,8 @@ acpi_resource_to_address64(struct acpi_resource *resource,
|
||||
/*
|
||||
* Hardware (ACPI device) interfaces
|
||||
*/
|
||||
acpi_status acpi_reset(void);
|
||||
|
||||
acpi_status acpi_get_register(u32 register_id, u32 * return_value);
|
||||
|
||||
acpi_status acpi_get_register_unlocked(u32 register_id, u32 *return_value);
|
||||
@@ -320,12 +352,14 @@ acpi_status acpi_get_register_unlocked(u32 register_id, u32 *return_value);
|
||||
acpi_status acpi_set_register(u32 register_id, u32 value);
|
||||
|
||||
acpi_status
|
||||
acpi_set_firmware_waking_vector(acpi_physical_address physical_address);
|
||||
acpi_set_firmware_waking_vector(u32 physical_address);
|
||||
|
||||
#ifdef ACPI_FUTURE_USAGE
|
||||
acpi_status
|
||||
acpi_get_firmware_waking_vector(acpi_physical_address * physical_address);
|
||||
#endif
|
||||
acpi_set_firmware_waking_vector64(u64 physical_address);
|
||||
|
||||
acpi_status acpi_read(u32 *value, struct acpi_generic_address *reg);
|
||||
|
||||
acpi_status acpi_write(u32 value, struct acpi_generic_address *reg);
|
||||
|
||||
acpi_status
|
||||
acpi_get_sleep_type_data(u8 sleep_state, u8 * slp_typ_a, u8 * slp_typ_b);
|
||||
@@ -340,4 +374,42 @@ acpi_status acpi_leave_sleep_state_prep(u8 sleep_state);
|
||||
|
||||
acpi_status acpi_leave_sleep_state(u8 sleep_state);
|
||||
|
||||
/*
|
||||
* Debug output
|
||||
*/
|
||||
void ACPI_INTERNAL_VAR_XFACE
|
||||
acpi_error(const char *module_name,
|
||||
u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3);
|
||||
|
||||
void ACPI_INTERNAL_VAR_XFACE
|
||||
acpi_exception(const char *module_name,
|
||||
u32 line_number,
|
||||
acpi_status status, const char *format, ...) ACPI_PRINTF_LIKE(4);
|
||||
|
||||
void ACPI_INTERNAL_VAR_XFACE
|
||||
acpi_warning(const char *module_name,
|
||||
u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3);
|
||||
|
||||
void ACPI_INTERNAL_VAR_XFACE
|
||||
acpi_info(const char *module_name,
|
||||
u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3);
|
||||
|
||||
#ifdef ACPI_DEBUG_OUTPUT
|
||||
|
||||
void ACPI_INTERNAL_VAR_XFACE
|
||||
acpi_debug_print(u32 requested_debug_level,
|
||||
u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name,
|
||||
u32 component_id, const char *format, ...) ACPI_PRINTF_LIKE(6);
|
||||
|
||||
void ACPI_INTERNAL_VAR_XFACE
|
||||
acpi_debug_print_raw(u32 requested_debug_level,
|
||||
u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name,
|
||||
u32 component_id,
|
||||
const char *format, ...) ACPI_PRINTF_LIKE(6);
|
||||
#endif
|
||||
|
||||
#endif /* __ACXFACE_H__ */
|
||||
|
||||
@@ -1,371 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acpredef - Information table for ACPI predefined methods and objects
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACPREDEF_H__
|
||||
#define __ACPREDEF_H__
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Return Package types
|
||||
*
|
||||
* 1) PTYPE1 packages do not contain sub-packages.
|
||||
*
|
||||
* ACPI_PTYPE1_FIXED: Fixed length, 1 or 2 object types:
|
||||
* object type
|
||||
* count
|
||||
* object type
|
||||
* count
|
||||
*
|
||||
* ACPI_PTYPE1_VAR: Variable length:
|
||||
* object type (Int/Buf/Ref)
|
||||
*
|
||||
* ACPI_PTYPE1_OPTION: Package has some required and some optional elements:
|
||||
* Used for _PRW
|
||||
*
|
||||
*
|
||||
* 2) PTYPE2 packages contain a variable number of sub-packages. Each of the
|
||||
* different types describe the contents of each of the sub-packages.
|
||||
*
|
||||
* ACPI_PTYPE2: Each subpackage contains 1 or 2 object types:
|
||||
* object type
|
||||
* count
|
||||
* object type
|
||||
* count
|
||||
*
|
||||
* ACPI_PTYPE2_COUNT: Each subpackage has a count as first element:
|
||||
* object type
|
||||
*
|
||||
* ACPI_PTYPE2_PKG_COUNT: Count of subpackages at start, 1 or 2 object types:
|
||||
* object type
|
||||
* count
|
||||
* object type
|
||||
* count
|
||||
*
|
||||
* ACPI_PTYPE2_FIXED: Each subpackage is of fixed length:
|
||||
* Used for _PRT
|
||||
*
|
||||
* ACPI_PTYPE2_MIN: Each subpackage has a variable but minimum length
|
||||
* Used for _HPX
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
enum acpi_return_package_types {
|
||||
ACPI_PTYPE1_FIXED = 1,
|
||||
ACPI_PTYPE1_VAR = 2,
|
||||
ACPI_PTYPE1_OPTION = 3,
|
||||
ACPI_PTYPE2 = 4,
|
||||
ACPI_PTYPE2_COUNT = 5,
|
||||
ACPI_PTYPE2_PKG_COUNT = 6,
|
||||
ACPI_PTYPE2_FIXED = 7,
|
||||
ACPI_PTYPE2_MIN = 8
|
||||
};
|
||||
|
||||
/*
|
||||
* Predefined method/object information table.
|
||||
*
|
||||
* These are the names that can actually be evaluated via acpi_evaluate_object.
|
||||
* Not present in this table are the following:
|
||||
*
|
||||
* 1) Predefined/Reserved names that are never evaluated via acpi_evaluate_object:
|
||||
* _Lxx and _Exx GPE methods
|
||||
* _Qxx EC methods
|
||||
* _T_x compiler temporary variables
|
||||
*
|
||||
* 2) Predefined names that never actually exist within the AML code:
|
||||
* Predefined resource descriptor field names
|
||||
*
|
||||
* 3) Predefined names that are implemented within ACPICA:
|
||||
* _OSI
|
||||
*
|
||||
* 4) Some predefined names that are not documented within the ACPI spec.
|
||||
* _WDG, _WED
|
||||
*
|
||||
* The main entries in the table each contain the following items:
|
||||
*
|
||||
* Name - The ACPI reserved name
|
||||
* param_count - Number of arguments to the method
|
||||
* expected_btypes - Allowed type(s) for the return value.
|
||||
* 0 means that no return value is expected.
|
||||
*
|
||||
* For methods that return packages, the next entry in the table contains
|
||||
* information about the expected structure of the package. This information
|
||||
* is saved here (rather than in a separate table) in order to minimize the
|
||||
* overall size of the stored data.
|
||||
*/
|
||||
static const union acpi_predefined_info predefined_names[] = {
|
||||
{.info = {"_AC0", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_AC1", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_AC2", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_AC3", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_AC4", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_AC5", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_AC6", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_AC7", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_AC8", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_AC9", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_ADR", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_AL0", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_AL1", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_AL2", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_AL3", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_AL4", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_AL5", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_AL6", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_AL7", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_AL8", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_AL9", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_ALC", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_ALI", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_ALP", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_ALR", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 2, 0, 0, 0}}, /* variable (Pkgs) each 2 (Ints) */
|
||||
{.info = {"_ALT", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_BBN", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_BCL", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0, 0, 0, 0}}, /* variable (Ints) */
|
||||
{.info = {"_BCM", 1, 0}},
|
||||
{.info = {"_BDN", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_BFS", 1, 0}},
|
||||
{.info = {"_BIF", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER,
|
||||
9,
|
||||
ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER, 4, 0}}, /* fixed (9 Int),(4 Str) */
|
||||
{.info = {"_BLT", 3, 0}},
|
||||
{.info = {"_BMC", 1, 0}},
|
||||
{.info = {"_BMD", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 5, 0, 0, 0}}, /* fixed (5 Int) */
|
||||
{.info = {"_BQC", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_BST", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4, 0, 0, 0}}, /* fixed (4 Int) */
|
||||
{.info = {"_BTM", 1, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_BTP", 1, 0}},
|
||||
{.info = {"_CBA", 0, ACPI_RTYPE_INTEGER}}, /* see PCI firmware spec 3.0 */
|
||||
{.info = {"_CID", 0,
|
||||
ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_PACKAGE}},
|
||||
{.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING, 0, 0, 0, 0}}, /* variable (Ints/Strs) */
|
||||
{.info = {"_CRS", 0, ACPI_RTYPE_BUFFER}},
|
||||
{.info = {"_CRT", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_CSD", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE2_COUNT, ACPI_RTYPE_INTEGER, 0, 0, 0, 0}}, /* variable (1 Int(n), n-1 Int) */
|
||||
{.info = {"_CST", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE2_PKG_COUNT,
|
||||
ACPI_RTYPE_BUFFER, 1,
|
||||
ACPI_RTYPE_INTEGER, 3, 0}}, /* variable (1 Int(n), n Pkg (1 Buf/3 Int) */
|
||||
{.info = {"_DCK", 1, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_DCS", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_DDC", 1, ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER}},
|
||||
{.info = {"_DDN", 0, ACPI_RTYPE_STRING}},
|
||||
{.info = {"_DGS", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_DIS", 0, 0}},
|
||||
{.info = {"_DMA", 0, ACPI_RTYPE_BUFFER}},
|
||||
{.info = {"_DOD", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0, 0, 0, 0}}, /* variable (Ints) */
|
||||
{.info = {"_DOS", 1, 0}},
|
||||
{.info = {"_DSM", 4, ACPI_RTYPE_ALL}}, /* Must return a type, but it can be of any type */
|
||||
{.info = {"_DSS", 1, 0}},
|
||||
{.info = {"_DSW", 3, 0}},
|
||||
{.info = {"_EC_", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_EDL", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_EJ0", 1, 0}},
|
||||
{.info = {"_EJ1", 1, 0}},
|
||||
{.info = {"_EJ2", 1, 0}},
|
||||
{.info = {"_EJ3", 1, 0}},
|
||||
{.info = {"_EJ4", 1, 0}},
|
||||
{.info = {"_EJD", 0, ACPI_RTYPE_STRING}},
|
||||
{.info = {"_FDE", 0, ACPI_RTYPE_BUFFER}},
|
||||
{.info = {"_FDI", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 16, 0, 0, 0}}, /* fixed (16 Int) */
|
||||
{.info = {"_FDM", 1, 0}},
|
||||
{.info = {"_FIX", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0, 0, 0, 0}}, /* variable (Ints) */
|
||||
{.info = {"_GLK", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_GPD", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_GPE", 0, ACPI_RTYPE_INTEGER}}, /* _GPE method, not _GPE scope */
|
||||
{.info = {"_GSB", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_GTF", 0, ACPI_RTYPE_BUFFER}},
|
||||
{.info = {"_GTM", 0, ACPI_RTYPE_BUFFER}},
|
||||
{.info = {"_GTS", 1, 0}},
|
||||
{.info = {"_HID", 0, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING}},
|
||||
{.info = {"_HOT", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_HPP", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4, 0, 0, 0}}, /* fixed (4 Int) */
|
||||
|
||||
/*
|
||||
* For _HPX, a single package is returned, containing a variable number of sub-packages.
|
||||
* Each sub-package contains a PCI record setting. There are several different type of
|
||||
* record settings, of different lengths, but all elements of all settings are Integers.
|
||||
*/
|
||||
{.info = {"_HPX", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE2_MIN, ACPI_RTYPE_INTEGER, 5, 0, 0, 0}}, /* variable (Pkgs) each (var Ints) */
|
||||
{.info = {"_IFT", 0, ACPI_RTYPE_INTEGER}}, /* see IPMI spec */
|
||||
{.info = {"_INI", 0, 0}},
|
||||
{.info = {"_IRC", 0, 0}},
|
||||
{.info = {"_LCK", 1, 0}},
|
||||
{.info = {"_LID", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_MAT", 0, ACPI_RTYPE_BUFFER}},
|
||||
{.info = {"_MLS", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE2, ACPI_RTYPE_STRING, 2, 0, 0, 0}}, /* variable (Pkgs) each (2 Str) */
|
||||
{.info = {"_MSG", 1, 0}},
|
||||
{.info = {"_OFF", 0, 0}},
|
||||
{.info = {"_ON_", 0, 0}},
|
||||
{.info = {"_OS_", 0, ACPI_RTYPE_STRING}},
|
||||
{.info = {"_OSC", 4, ACPI_RTYPE_BUFFER}},
|
||||
{.info = {"_OST", 3, 0}},
|
||||
{.info = {"_PCL", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_PCT", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_BUFFER, 2, 0, 0, 0}}, /* fixed (2 Buf) */
|
||||
{.info = {"_PDC", 1, 0}},
|
||||
{.info = {"_PIC", 1, 0}},
|
||||
{.info = {"_PLD", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_BUFFER, 0, 0, 0, 0}}, /* variable (Bufs) */
|
||||
{.info = {"_PPC", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_PPE", 0, ACPI_RTYPE_INTEGER}}, /* see dig64 spec */
|
||||
{.info = {"_PR0", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_PR1", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_PR2", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_PRS", 0, ACPI_RTYPE_BUFFER}},
|
||||
|
||||
/*
|
||||
* For _PRT, many BIOSs reverse the 2nd and 3rd Package elements. This bug is so prevalent that there
|
||||
* is code in the ACPICA Resource Manager to detect this and switch them back. For now, do not allow
|
||||
* and issue a warning. To allow this and eliminate the warning, add the ACPI_RTYPE_REFERENCE
|
||||
* type to the 2nd element (index 1) in the statement below.
|
||||
*/
|
||||
{.info = {"_PRT", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE2_FIXED, 4,
|
||||
ACPI_RTYPE_INTEGER,
|
||||
ACPI_RTYPE_INTEGER,
|
||||
ACPI_RTYPE_INTEGER | ACPI_RTYPE_REFERENCE, ACPI_RTYPE_INTEGER}}, /* variable (Pkgs) each (4): Int,Int,Int/Ref,Int */
|
||||
|
||||
{.info = {"_PRW", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_OPTION, 2,
|
||||
ACPI_RTYPE_INTEGER |
|
||||
ACPI_RTYPE_PACKAGE,
|
||||
ACPI_RTYPE_INTEGER, ACPI_RTYPE_REFERENCE, 0}}, /* variable (Pkgs) each: Pkg/Int,Int,[variable Refs] (Pkg is Ref/Int) */
|
||||
|
||||
{.info = {"_PS0", 0, 0}},
|
||||
{.info = {"_PS1", 0, 0}},
|
||||
{.info = {"_PS2", 0, 0}},
|
||||
{.info = {"_PS3", 0, 0}},
|
||||
{.info = {"_PSC", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_PSD", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE2_COUNT, ACPI_RTYPE_INTEGER, 0, 0, 0, 0}}, /* variable (Pkgs) each (5 Int) with count */
|
||||
{.info = {"_PSL", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_PSR", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_PSS", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 6, 0, 0, 0}}, /* variable (Pkgs) each (6 Int) */
|
||||
{.info = {"_PSV", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_PSW", 1, 0}},
|
||||
{.info = {"_PTC", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_BUFFER, 2, 0, 0, 0}}, /* fixed (2 Buf) */
|
||||
{.info = {"_PTS", 1, 0}},
|
||||
{.info = {"_PXM", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_REG", 2, 0}},
|
||||
{.info = {"_REV", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_RMV", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_ROM", 2, ACPI_RTYPE_BUFFER}},
|
||||
{.info = {"_RTV", 0, ACPI_RTYPE_INTEGER}},
|
||||
|
||||
/*
|
||||
* For _S0_ through _S5_, the ACPI spec defines a return Package containing 1 Integer,
|
||||
* but most DSDTs have it wrong - 2,3, or 4 integers. Allow this by making the objects "variable length",
|
||||
* but all elements must be Integers.
|
||||
*/
|
||||
{.info = {"_S0_", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1, 0, 0, 0}}, /* fixed (1 Int) */
|
||||
{.info = {"_S1_", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1, 0, 0, 0}}, /* fixed (1 Int) */
|
||||
{.info = {"_S2_", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1, 0, 0, 0}}, /* fixed (1 Int) */
|
||||
{.info = {"_S3_", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1, 0, 0, 0}}, /* fixed (1 Int) */
|
||||
{.info = {"_S4_", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1, 0, 0, 0}}, /* fixed (1 Int) */
|
||||
{.info = {"_S5_", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1, 0, 0, 0}}, /* fixed (1 Int) */
|
||||
|
||||
{.info = {"_S1D", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_S2D", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_S3D", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_S4D", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_S0W", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_S1W", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_S2W", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_S3W", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_S4W", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_SBS", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_SCP", 0x13, 0}}, /* Acpi 1.0 allowed 1 arg. Acpi 3.0 expanded to 3 args. Allow both. */
|
||||
/* Note: the 3-arg definition may be removed for ACPI 4.0 */
|
||||
{.info = {"_SDD", 1, 0}},
|
||||
{.info = {"_SEG", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_SLI", 0, ACPI_RTYPE_BUFFER}},
|
||||
{.info = {"_SPD", 1, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_SRS", 1, 0}},
|
||||
{.info = {"_SRV", 0, ACPI_RTYPE_INTEGER}}, /* see IPMI spec */
|
||||
{.info = {"_SST", 1, 0}},
|
||||
{.info = {"_STA", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_STM", 3, 0}},
|
||||
{.info = {"_STR", 0, ACPI_RTYPE_BUFFER}},
|
||||
{.info = {"_SUN", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_SWS", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_TC1", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_TC2", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_TMP", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_TPC", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_TPT", 1, 0}},
|
||||
{.info = {"_TRT", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE2, ACPI_RTYPE_REFERENCE, 2,
|
||||
ACPI_RTYPE_INTEGER, 6, 0}}, /* variable (Pkgs) each 2_ref/6_int */
|
||||
{.info = {"_TSD", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE2_COUNT, ACPI_RTYPE_INTEGER, 5, 0, 0, 0}}, /* variable (Pkgs) each 5_int with count */
|
||||
{.info = {"_TSP", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_TSS", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 5, 0, 0, 0}}, /* variable (Pkgs) each 5_int */
|
||||
{.info = {"_TST", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_TTS", 1, 0}},
|
||||
{.info = {"_TZD", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0}}, /* variable (Refs) */
|
||||
{.info = {"_TZM", 0, ACPI_RTYPE_REFERENCE}},
|
||||
{.info = {"_TZP", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_UID", 0, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING}},
|
||||
{.info = {"_UPC", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4, 0, 0, 0}}, /* fixed (4 Int) */
|
||||
{.info = {"_UPD", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_UPP", 0, ACPI_RTYPE_INTEGER}},
|
||||
{.info = {"_VPO", 0, ACPI_RTYPE_INTEGER}},
|
||||
|
||||
/* Acpi 1.0 defined _WAK with no return value. Later, it was changed to return a package */
|
||||
|
||||
{.info = {"_WAK", 1, ACPI_RTYPE_NONE | ACPI_RTYPE_INTEGER | ACPI_RTYPE_PACKAGE}},
|
||||
{.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2, 0, 0, 0}}, /* fixed (2 Int), but is optional */
|
||||
{.ret_info = {0, 0, 0, 0, 0, 0}} /* Table terminator */
|
||||
};
|
||||
|
||||
#if 0
|
||||
/* Not implemented */
|
||||
|
||||
{
|
||||
"_WDG", 0, ACPI_RTYPE_BUFFER}, /* MS Extension */
|
||||
|
||||
{
|
||||
"_WED", 1, ACPI_RTYPE_PACKAGE}, /* MS Extension */
|
||||
|
||||
/* This is an internally implemented control method, no need to check */
|
||||
{
|
||||
"_OSI", 1, ACPI_RTYPE_INTEGER},
|
||||
|
||||
/* TBD: */
|
||||
_PRT - currently ignore reversed entries.attempt to fix here ?
|
||||
think about code that attempts to fix package elements like _BIF, etc.
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,336 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acresrc.h - Resource Manager function prototypes
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACRESRC_H__
|
||||
#define __ACRESRC_H__
|
||||
|
||||
/* Need the AML resource descriptor structs */
|
||||
|
||||
#include "amlresrc.h"
|
||||
|
||||
/*
|
||||
* If possible, pack the following structures to byte alignment, since we
|
||||
* don't care about performance for debug output. Two cases where we cannot
|
||||
* pack the structures:
|
||||
*
|
||||
* 1) Hardware does not support misaligned memory transfers
|
||||
* 2) Compiler does not support pointers within packed structures
|
||||
*/
|
||||
#if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED))
|
||||
#pragma pack(1)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Individual entry for the resource conversion tables
|
||||
*/
|
||||
typedef const struct acpi_rsconvert_info {
|
||||
u8 opcode;
|
||||
u8 resource_offset;
|
||||
u8 aml_offset;
|
||||
u8 value;
|
||||
|
||||
} acpi_rsconvert_info;
|
||||
|
||||
/* Resource conversion opcodes */
|
||||
|
||||
#define ACPI_RSC_INITGET 0
|
||||
#define ACPI_RSC_INITSET 1
|
||||
#define ACPI_RSC_FLAGINIT 2
|
||||
#define ACPI_RSC_1BITFLAG 3
|
||||
#define ACPI_RSC_2BITFLAG 4
|
||||
#define ACPI_RSC_COUNT 5
|
||||
#define ACPI_RSC_COUNT16 6
|
||||
#define ACPI_RSC_LENGTH 7
|
||||
#define ACPI_RSC_MOVE8 8
|
||||
#define ACPI_RSC_MOVE16 9
|
||||
#define ACPI_RSC_MOVE32 10
|
||||
#define ACPI_RSC_MOVE64 11
|
||||
#define ACPI_RSC_SET8 12
|
||||
#define ACPI_RSC_DATA8 13
|
||||
#define ACPI_RSC_ADDRESS 14
|
||||
#define ACPI_RSC_SOURCE 15
|
||||
#define ACPI_RSC_SOURCEX 16
|
||||
#define ACPI_RSC_BITMASK 17
|
||||
#define ACPI_RSC_BITMASK16 18
|
||||
#define ACPI_RSC_EXIT_NE 19
|
||||
#define ACPI_RSC_EXIT_LE 20
|
||||
#define ACPI_RSC_EXIT_EQ 21
|
||||
|
||||
/* Resource Conversion sub-opcodes */
|
||||
|
||||
#define ACPI_RSC_COMPARE_AML_LENGTH 0
|
||||
#define ACPI_RSC_COMPARE_VALUE 1
|
||||
|
||||
#define ACPI_RSC_TABLE_SIZE(d) (sizeof (d) / sizeof (struct acpi_rsconvert_info))
|
||||
|
||||
#define ACPI_RS_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_resource,f)
|
||||
#define AML_OFFSET(f) (u8) ACPI_OFFSET (union aml_resource,f)
|
||||
|
||||
typedef const struct acpi_rsdump_info {
|
||||
u8 opcode;
|
||||
u8 offset;
|
||||
char *name;
|
||||
const char **pointer;
|
||||
|
||||
} acpi_rsdump_info;
|
||||
|
||||
/* Values for the Opcode field above */
|
||||
|
||||
#define ACPI_RSD_TITLE 0
|
||||
#define ACPI_RSD_LITERAL 1
|
||||
#define ACPI_RSD_STRING 2
|
||||
#define ACPI_RSD_UINT8 3
|
||||
#define ACPI_RSD_UINT16 4
|
||||
#define ACPI_RSD_UINT32 5
|
||||
#define ACPI_RSD_UINT64 6
|
||||
#define ACPI_RSD_1BITFLAG 7
|
||||
#define ACPI_RSD_2BITFLAG 8
|
||||
#define ACPI_RSD_SHORTLIST 9
|
||||
#define ACPI_RSD_LONGLIST 10
|
||||
#define ACPI_RSD_DWORDLIST 11
|
||||
#define ACPI_RSD_ADDRESS 12
|
||||
#define ACPI_RSD_SOURCE 13
|
||||
|
||||
/* restore default alignment */
|
||||
|
||||
#pragma pack()
|
||||
|
||||
/* Resource tables indexed by internal resource type */
|
||||
|
||||
extern const u8 acpi_gbl_aml_resource_sizes[];
|
||||
extern struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[];
|
||||
|
||||
/* Resource tables indexed by raw AML resource descriptor type */
|
||||
|
||||
extern const u8 acpi_gbl_resource_struct_sizes[];
|
||||
extern struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[];
|
||||
|
||||
struct acpi_vendor_walk_info {
|
||||
struct acpi_vendor_uuid *uuid;
|
||||
struct acpi_buffer *buffer;
|
||||
acpi_status status;
|
||||
};
|
||||
|
||||
/*
|
||||
* rscreate
|
||||
*/
|
||||
acpi_status
|
||||
acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
|
||||
struct acpi_buffer *output_buffer);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer,
|
||||
struct acpi_buffer *output_buffer);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
|
||||
struct acpi_buffer *output_buffer);
|
||||
|
||||
/*
|
||||
* rsutils
|
||||
*/
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_prt_method_data(struct acpi_namespace_node *node,
|
||||
struct acpi_buffer *ret_buffer);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_crs_method_data(struct acpi_namespace_node *node,
|
||||
struct acpi_buffer *ret_buffer);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,
|
||||
struct acpi_buffer *ret_buffer);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_method_data(acpi_handle handle,
|
||||
char *path, struct acpi_buffer *ret_buffer);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,
|
||||
struct acpi_buffer *ret_buffer);
|
||||
|
||||
/*
|
||||
* rscalc
|
||||
*/
|
||||
acpi_status
|
||||
acpi_rs_get_list_length(u8 * aml_buffer,
|
||||
u32 aml_buffer_length, acpi_size * size_needed);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_aml_length(struct acpi_resource *linked_list_buffer,
|
||||
acpi_size * size_needed);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
|
||||
acpi_size * buffer_size_needed);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_convert_aml_to_resources(u8 * aml,
|
||||
u32 length,
|
||||
u32 offset, u8 resource_index, void **context);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
|
||||
acpi_size aml_size_needed, u8 * output_buffer);
|
||||
|
||||
/*
|
||||
* rsaddr
|
||||
*/
|
||||
void
|
||||
acpi_rs_set_address_common(union aml_resource *aml,
|
||||
struct acpi_resource *resource);
|
||||
|
||||
u8
|
||||
acpi_rs_get_address_common(struct acpi_resource *resource,
|
||||
union aml_resource *aml);
|
||||
|
||||
/*
|
||||
* rsmisc
|
||||
*/
|
||||
acpi_status
|
||||
acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
|
||||
union aml_resource *aml,
|
||||
struct acpi_rsconvert_info *info);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_convert_resource_to_aml(struct acpi_resource *resource,
|
||||
union aml_resource *aml,
|
||||
struct acpi_rsconvert_info *info);
|
||||
|
||||
/*
|
||||
* rsutils
|
||||
*/
|
||||
void
|
||||
acpi_rs_move_data(void *destination,
|
||||
void *source, u16 item_count, u8 move_type);
|
||||
|
||||
u8 acpi_rs_decode_bitmask(u16 mask, u8 * list);
|
||||
|
||||
u16 acpi_rs_encode_bitmask(u8 * list, u8 count);
|
||||
|
||||
acpi_rs_length
|
||||
acpi_rs_get_resource_source(acpi_rs_length resource_length,
|
||||
acpi_rs_length minimum_length,
|
||||
struct acpi_resource_source *resource_source,
|
||||
union aml_resource *aml, char *string_ptr);
|
||||
|
||||
acpi_rsdesc_size
|
||||
acpi_rs_set_resource_source(union aml_resource *aml,
|
||||
acpi_rs_length minimum_length,
|
||||
struct acpi_resource_source *resource_source);
|
||||
|
||||
void
|
||||
acpi_rs_set_resource_header(u8 descriptor_type,
|
||||
acpi_rsdesc_size total_length,
|
||||
union aml_resource *aml);
|
||||
|
||||
void
|
||||
acpi_rs_set_resource_length(acpi_rsdesc_size total_length,
|
||||
union aml_resource *aml);
|
||||
|
||||
/*
|
||||
* rsdump
|
||||
*/
|
||||
void acpi_rs_dump_resource_list(struct acpi_resource *resource);
|
||||
|
||||
void acpi_rs_dump_irq_list(u8 * route_table);
|
||||
|
||||
/*
|
||||
* Resource conversion tables
|
||||
*/
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_dma[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_end_dpf[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_io[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_fixed_io[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_end_tag[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_memory24[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_generic_reg[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_memory32[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_fixed_memory32[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_address32[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_address16[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_ext_irq[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_address64[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_convert_ext_address64[];
|
||||
|
||||
/* These resources require separate get/set tables */
|
||||
|
||||
extern struct acpi_rsconvert_info acpi_rs_get_irq[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_get_start_dpf[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_get_vendor_small[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_get_vendor_large[];
|
||||
|
||||
extern struct acpi_rsconvert_info acpi_rs_set_irq[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_set_start_dpf[];
|
||||
extern struct acpi_rsconvert_info acpi_rs_set_vendor[];
|
||||
|
||||
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
|
||||
/*
|
||||
* rsinfo
|
||||
*/
|
||||
extern struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[];
|
||||
|
||||
/*
|
||||
* rsdump
|
||||
*/
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_irq[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_dma[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_start_dpf[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_end_dpf[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_io[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_fixed_io[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_vendor[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_end_tag[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_memory24[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_memory32[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_fixed_memory32[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_address16[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_address32[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_address64[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_ext_address64[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_ext_irq[];
|
||||
extern struct acpi_rsdump_info acpi_rs_dump_generic_reg[];
|
||||
#endif
|
||||
|
||||
#endif /* __ACRESRC_H__ */
|
||||
@@ -0,0 +1,405 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acrestyp.h - Defines, types, and structures for resource descriptors
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACRESTYP_H__
|
||||
#define __ACRESTYP_H__
|
||||
|
||||
/*
|
||||
* Definitions for Resource Attributes
|
||||
*/
|
||||
typedef u16 acpi_rs_length; /* Resource Length field is fixed at 16 bits */
|
||||
typedef u32 acpi_rsdesc_size; /* Max Resource Descriptor size is (Length+3) = (64_k-1)+3 */
|
||||
|
||||
/*
|
||||
* Memory Attributes
|
||||
*/
|
||||
#define ACPI_READ_ONLY_MEMORY (u8) 0x00
|
||||
#define ACPI_READ_WRITE_MEMORY (u8) 0x01
|
||||
|
||||
#define ACPI_NON_CACHEABLE_MEMORY (u8) 0x00
|
||||
#define ACPI_CACHABLE_MEMORY (u8) 0x01
|
||||
#define ACPI_WRITE_COMBINING_MEMORY (u8) 0x02
|
||||
#define ACPI_PREFETCHABLE_MEMORY (u8) 0x03
|
||||
|
||||
/*
|
||||
* IO Attributes
|
||||
* The ISA IO ranges are: n000-n0_fFh, n400-n4_fFh, n800-n8_fFh, n_c00-n_cFFh.
|
||||
* The non-ISA IO ranges are: n100-n3_fFh, n500-n7_fFh, n900-n_bFFh, n_cd0-n_fFFh.
|
||||
*/
|
||||
#define ACPI_NON_ISA_ONLY_RANGES (u8) 0x01
|
||||
#define ACPI_ISA_ONLY_RANGES (u8) 0x02
|
||||
#define ACPI_ENTIRE_RANGE (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES)
|
||||
|
||||
/* Type of translation - 1=Sparse, 0=Dense */
|
||||
|
||||
#define ACPI_SPARSE_TRANSLATION (u8) 0x01
|
||||
|
||||
/*
|
||||
* IO Port Descriptor Decode
|
||||
*/
|
||||
#define ACPI_DECODE_10 (u8) 0x00 /* 10-bit IO address decode */
|
||||
#define ACPI_DECODE_16 (u8) 0x01 /* 16-bit IO address decode */
|
||||
|
||||
/*
|
||||
* IRQ Attributes
|
||||
*/
|
||||
#define ACPI_LEVEL_SENSITIVE (u8) 0x00
|
||||
#define ACPI_EDGE_SENSITIVE (u8) 0x01
|
||||
|
||||
#define ACPI_ACTIVE_HIGH (u8) 0x00
|
||||
#define ACPI_ACTIVE_LOW (u8) 0x01
|
||||
|
||||
#define ACPI_EXCLUSIVE (u8) 0x00
|
||||
#define ACPI_SHARED (u8) 0x01
|
||||
|
||||
/*
|
||||
* DMA Attributes
|
||||
*/
|
||||
#define ACPI_COMPATIBILITY (u8) 0x00
|
||||
#define ACPI_TYPE_A (u8) 0x01
|
||||
#define ACPI_TYPE_B (u8) 0x02
|
||||
#define ACPI_TYPE_F (u8) 0x03
|
||||
|
||||
#define ACPI_NOT_BUS_MASTER (u8) 0x00
|
||||
#define ACPI_BUS_MASTER (u8) 0x01
|
||||
|
||||
#define ACPI_TRANSFER_8 (u8) 0x00
|
||||
#define ACPI_TRANSFER_8_16 (u8) 0x01
|
||||
#define ACPI_TRANSFER_16 (u8) 0x02
|
||||
|
||||
/*
|
||||
* Start Dependent Functions Priority definitions
|
||||
*/
|
||||
#define ACPI_GOOD_CONFIGURATION (u8) 0x00
|
||||
#define ACPI_ACCEPTABLE_CONFIGURATION (u8) 0x01
|
||||
#define ACPI_SUB_OPTIMAL_CONFIGURATION (u8) 0x02
|
||||
|
||||
/*
|
||||
* 16, 32 and 64-bit Address Descriptor resource types
|
||||
*/
|
||||
#define ACPI_MEMORY_RANGE (u8) 0x00
|
||||
#define ACPI_IO_RANGE (u8) 0x01
|
||||
#define ACPI_BUS_NUMBER_RANGE (u8) 0x02
|
||||
|
||||
#define ACPI_ADDRESS_NOT_FIXED (u8) 0x00
|
||||
#define ACPI_ADDRESS_FIXED (u8) 0x01
|
||||
|
||||
#define ACPI_POS_DECODE (u8) 0x00
|
||||
#define ACPI_SUB_DECODE (u8) 0x01
|
||||
|
||||
#define ACPI_PRODUCER (u8) 0x00
|
||||
#define ACPI_CONSUMER (u8) 0x01
|
||||
|
||||
/*
|
||||
* If possible, pack the following structures to byte alignment
|
||||
*/
|
||||
#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
|
||||
#pragma pack(1)
|
||||
#endif
|
||||
|
||||
/* UUID data structures for use in vendor-defined resource descriptors */
|
||||
|
||||
struct acpi_uuid {
|
||||
u8 data[ACPI_UUID_LENGTH];
|
||||
};
|
||||
|
||||
struct acpi_vendor_uuid {
|
||||
u8 subtype;
|
||||
u8 data[ACPI_UUID_LENGTH];
|
||||
};
|
||||
|
||||
/*
|
||||
* Structures used to describe device resources
|
||||
*/
|
||||
struct acpi_resource_irq {
|
||||
u8 descriptor_length;
|
||||
u8 triggering;
|
||||
u8 polarity;
|
||||
u8 sharable;
|
||||
u8 interrupt_count;
|
||||
u8 interrupts[1];
|
||||
};
|
||||
|
||||
struct acpi_resource_dma {
|
||||
u8 type;
|
||||
u8 bus_master;
|
||||
u8 transfer;
|
||||
u8 channel_count;
|
||||
u8 channels[1];
|
||||
};
|
||||
|
||||
struct acpi_resource_start_dependent {
|
||||
u8 descriptor_length;
|
||||
u8 compatibility_priority;
|
||||
u8 performance_robustness;
|
||||
};
|
||||
|
||||
/*
|
||||
* The END_DEPENDENT_FUNCTIONS_RESOURCE struct is not
|
||||
* needed because it has no fields
|
||||
*/
|
||||
|
||||
struct acpi_resource_io {
|
||||
u8 io_decode;
|
||||
u8 alignment;
|
||||
u8 address_length;
|
||||
u16 minimum;
|
||||
u16 maximum;
|
||||
};
|
||||
|
||||
struct acpi_resource_fixed_io {
|
||||
u16 address;
|
||||
u8 address_length;
|
||||
};
|
||||
|
||||
struct acpi_resource_vendor {
|
||||
u16 byte_length;
|
||||
u8 byte_data[1];
|
||||
};
|
||||
|
||||
/* Vendor resource with UUID info (introduced in ACPI 3.0) */
|
||||
|
||||
struct acpi_resource_vendor_typed {
|
||||
u16 byte_length;
|
||||
u8 uuid_subtype;
|
||||
u8 uuid[ACPI_UUID_LENGTH];
|
||||
u8 byte_data[1];
|
||||
};
|
||||
|
||||
struct acpi_resource_end_tag {
|
||||
u8 checksum;
|
||||
};
|
||||
|
||||
struct acpi_resource_memory24 {
|
||||
u8 write_protect;
|
||||
u16 minimum;
|
||||
u16 maximum;
|
||||
u16 alignment;
|
||||
u16 address_length;
|
||||
};
|
||||
|
||||
struct acpi_resource_memory32 {
|
||||
u8 write_protect;
|
||||
u32 minimum;
|
||||
u32 maximum;
|
||||
u32 alignment;
|
||||
u32 address_length;
|
||||
};
|
||||
|
||||
struct acpi_resource_fixed_memory32 {
|
||||
u8 write_protect;
|
||||
u32 address;
|
||||
u32 address_length;
|
||||
};
|
||||
|
||||
struct acpi_memory_attribute {
|
||||
u8 write_protect;
|
||||
u8 caching;
|
||||
u8 range_type;
|
||||
u8 translation;
|
||||
};
|
||||
|
||||
struct acpi_io_attribute {
|
||||
u8 range_type;
|
||||
u8 translation;
|
||||
u8 translation_type;
|
||||
u8 reserved1;
|
||||
};
|
||||
|
||||
union acpi_resource_attribute {
|
||||
struct acpi_memory_attribute mem;
|
||||
struct acpi_io_attribute io;
|
||||
|
||||
/* Used for the *word_space macros */
|
||||
|
||||
u8 type_specific;
|
||||
};
|
||||
|
||||
struct acpi_resource_source {
|
||||
u8 index;
|
||||
u16 string_length;
|
||||
char *string_ptr;
|
||||
};
|
||||
|
||||
/* Fields common to all address descriptors, 16/32/64 bit */
|
||||
|
||||
#define ACPI_RESOURCE_ADDRESS_COMMON \
|
||||
u8 resource_type; \
|
||||
u8 producer_consumer; \
|
||||
u8 decode; \
|
||||
u8 min_address_fixed; \
|
||||
u8 max_address_fixed; \
|
||||
union acpi_resource_attribute info;
|
||||
|
||||
struct acpi_resource_address {
|
||||
ACPI_RESOURCE_ADDRESS_COMMON};
|
||||
|
||||
struct acpi_resource_address16 {
|
||||
ACPI_RESOURCE_ADDRESS_COMMON u16 granularity;
|
||||
u16 minimum;
|
||||
u16 maximum;
|
||||
u16 translation_offset;
|
||||
u16 address_length;
|
||||
struct acpi_resource_source resource_source;
|
||||
};
|
||||
|
||||
struct acpi_resource_address32 {
|
||||
ACPI_RESOURCE_ADDRESS_COMMON u32 granularity;
|
||||
u32 minimum;
|
||||
u32 maximum;
|
||||
u32 translation_offset;
|
||||
u32 address_length;
|
||||
struct acpi_resource_source resource_source;
|
||||
};
|
||||
|
||||
struct acpi_resource_address64 {
|
||||
ACPI_RESOURCE_ADDRESS_COMMON u64 granularity;
|
||||
u64 minimum;
|
||||
u64 maximum;
|
||||
u64 translation_offset;
|
||||
u64 address_length;
|
||||
struct acpi_resource_source resource_source;
|
||||
};
|
||||
|
||||
struct acpi_resource_extended_address64 {
|
||||
ACPI_RESOURCE_ADDRESS_COMMON u8 revision_iD;
|
||||
u64 granularity;
|
||||
u64 minimum;
|
||||
u64 maximum;
|
||||
u64 translation_offset;
|
||||
u64 address_length;
|
||||
u64 type_specific;
|
||||
};
|
||||
|
||||
struct acpi_resource_extended_irq {
|
||||
u8 producer_consumer;
|
||||
u8 triggering;
|
||||
u8 polarity;
|
||||
u8 sharable;
|
||||
u8 interrupt_count;
|
||||
struct acpi_resource_source resource_source;
|
||||
u32 interrupts[1];
|
||||
};
|
||||
|
||||
struct acpi_resource_generic_register {
|
||||
u8 space_id;
|
||||
u8 bit_width;
|
||||
u8 bit_offset;
|
||||
u8 access_size;
|
||||
u64 address;
|
||||
};
|
||||
|
||||
/* ACPI_RESOURCE_TYPEs */
|
||||
|
||||
#define ACPI_RESOURCE_TYPE_IRQ 0
|
||||
#define ACPI_RESOURCE_TYPE_DMA 1
|
||||
#define ACPI_RESOURCE_TYPE_START_DEPENDENT 2
|
||||
#define ACPI_RESOURCE_TYPE_END_DEPENDENT 3
|
||||
#define ACPI_RESOURCE_TYPE_IO 4
|
||||
#define ACPI_RESOURCE_TYPE_FIXED_IO 5
|
||||
#define ACPI_RESOURCE_TYPE_VENDOR 6
|
||||
#define ACPI_RESOURCE_TYPE_END_TAG 7
|
||||
#define ACPI_RESOURCE_TYPE_MEMORY24 8
|
||||
#define ACPI_RESOURCE_TYPE_MEMORY32 9
|
||||
#define ACPI_RESOURCE_TYPE_FIXED_MEMORY32 10
|
||||
#define ACPI_RESOURCE_TYPE_ADDRESS16 11
|
||||
#define ACPI_RESOURCE_TYPE_ADDRESS32 12
|
||||
#define ACPI_RESOURCE_TYPE_ADDRESS64 13
|
||||
#define ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 14 /* ACPI 3.0 */
|
||||
#define ACPI_RESOURCE_TYPE_EXTENDED_IRQ 15
|
||||
#define ACPI_RESOURCE_TYPE_GENERIC_REGISTER 16
|
||||
#define ACPI_RESOURCE_TYPE_MAX 16
|
||||
|
||||
/* Master union for resource descriptors */
|
||||
|
||||
union acpi_resource_data {
|
||||
struct acpi_resource_irq irq;
|
||||
struct acpi_resource_dma dma;
|
||||
struct acpi_resource_start_dependent start_dpf;
|
||||
struct acpi_resource_io io;
|
||||
struct acpi_resource_fixed_io fixed_io;
|
||||
struct acpi_resource_vendor vendor;
|
||||
struct acpi_resource_vendor_typed vendor_typed;
|
||||
struct acpi_resource_end_tag end_tag;
|
||||
struct acpi_resource_memory24 memory24;
|
||||
struct acpi_resource_memory32 memory32;
|
||||
struct acpi_resource_fixed_memory32 fixed_memory32;
|
||||
struct acpi_resource_address16 address16;
|
||||
struct acpi_resource_address32 address32;
|
||||
struct acpi_resource_address64 address64;
|
||||
struct acpi_resource_extended_address64 ext_address64;
|
||||
struct acpi_resource_extended_irq extended_irq;
|
||||
struct acpi_resource_generic_register generic_reg;
|
||||
|
||||
/* Common fields */
|
||||
|
||||
struct acpi_resource_address address; /* Common 16/32/64 address fields */
|
||||
};
|
||||
|
||||
/* Common resource header */
|
||||
|
||||
struct acpi_resource {
|
||||
u32 type;
|
||||
u32 length;
|
||||
union acpi_resource_data data;
|
||||
};
|
||||
|
||||
/* restore default alignment */
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#define ACPI_RS_SIZE_NO_DATA 8 /* Id + Length fields */
|
||||
#define ACPI_RS_SIZE_MIN (u32) ACPI_ROUND_UP_TO_NATIVE_WORD (12)
|
||||
#define ACPI_RS_SIZE(type) (u32) (ACPI_RS_SIZE_NO_DATA + sizeof (type))
|
||||
|
||||
#define ACPI_NEXT_RESOURCE(res) (struct acpi_resource *)((u8 *) res + res->length)
|
||||
|
||||
struct acpi_pci_routing_table {
|
||||
u32 length;
|
||||
u32 pin;
|
||||
acpi_integer address; /* here for 64-bit alignment */
|
||||
u32 source_index;
|
||||
char source[4]; /* pad to 64 bits so sizeof() works in all cases */
|
||||
};
|
||||
|
||||
#endif /* __ACRESTYP_H__ */
|
||||
@@ -1,228 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acstruct.h - Internal structs
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACSTRUCT_H__
|
||||
#define __ACSTRUCT_H__
|
||||
|
||||
/* acpisrc:struct_defs -- for acpisrc conversion */
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Tree walking typedefs and structs
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/*
|
||||
* Walk state - current state of a parse tree walk. Used for both a leisurely
|
||||
* stroll through the tree (for whatever reason), and for control method
|
||||
* execution.
|
||||
*/
|
||||
#define ACPI_NEXT_OP_DOWNWARD 1
|
||||
#define ACPI_NEXT_OP_UPWARD 2
|
||||
|
||||
/*
|
||||
* Groups of definitions for walk_type used for different implementations of
|
||||
* walkers (never simultaneously) - flags for interpreter:
|
||||
*/
|
||||
#define ACPI_WALK_NON_METHOD 0
|
||||
#define ACPI_WALK_METHOD 0x01
|
||||
#define ACPI_WALK_METHOD_RESTART 0x02
|
||||
|
||||
/* Flags for i_aSL compiler only */
|
||||
|
||||
#define ACPI_WALK_CONST_REQUIRED 0x10
|
||||
#define ACPI_WALK_CONST_OPTIONAL 0x20
|
||||
|
||||
struct acpi_walk_state {
|
||||
struct acpi_walk_state *next; /* Next walk_state in list */
|
||||
u8 descriptor_type; /* To differentiate various internal objs */
|
||||
u8 walk_type;
|
||||
u16 opcode; /* Current AML opcode */
|
||||
u8 next_op_info; /* Info about next_op */
|
||||
u8 num_operands; /* Stack pointer for Operands[] array */
|
||||
u8 operand_index; /* Index into operand stack, to be used by acpi_ds_obj_stack_push */
|
||||
acpi_owner_id owner_id; /* Owner of objects created during the walk */
|
||||
u8 last_predicate; /* Result of last predicate */
|
||||
u8 current_result;
|
||||
u8 return_used;
|
||||
u8 scope_depth;
|
||||
u8 pass_number; /* Parse pass during table load */
|
||||
u8 result_size; /* Total elements for the result stack */
|
||||
u8 result_count; /* Current number of occupied elements of result stack */
|
||||
u32 aml_offset;
|
||||
u32 arg_types;
|
||||
u32 method_breakpoint; /* For single stepping */
|
||||
u32 user_breakpoint; /* User AML breakpoint */
|
||||
u32 parse_flags;
|
||||
|
||||
struct acpi_parse_state parser_state; /* Current state of parser */
|
||||
u32 prev_arg_types;
|
||||
u32 arg_count; /* push for fixed or var args */
|
||||
|
||||
struct acpi_namespace_node arguments[ACPI_METHOD_NUM_ARGS]; /* Control method arguments */
|
||||
struct acpi_namespace_node local_variables[ACPI_METHOD_NUM_LOCALS]; /* Control method locals */
|
||||
union acpi_operand_object *operands[ACPI_OBJ_NUM_OPERANDS + 1]; /* Operands passed to the interpreter (+1 for NULL terminator) */
|
||||
union acpi_operand_object **params;
|
||||
|
||||
u8 *aml_last_while;
|
||||
union acpi_operand_object **caller_return_desc;
|
||||
union acpi_generic_state *control_state; /* List of control states (nested IFs) */
|
||||
struct acpi_namespace_node *deferred_node; /* Used when executing deferred opcodes */
|
||||
union acpi_operand_object *implicit_return_obj;
|
||||
struct acpi_namespace_node *method_call_node; /* Called method Node */
|
||||
union acpi_parse_object *method_call_op; /* method_call Op if running a method */
|
||||
union acpi_operand_object *method_desc; /* Method descriptor if running a method */
|
||||
struct acpi_namespace_node *method_node; /* Method node if running a method. */
|
||||
union acpi_parse_object *op; /* Current parser op */
|
||||
const struct acpi_opcode_info *op_info; /* Info on current opcode */
|
||||
union acpi_parse_object *origin; /* Start of walk [Obsolete] */
|
||||
union acpi_operand_object *result_obj;
|
||||
union acpi_generic_state *results; /* Stack of accumulated results */
|
||||
union acpi_operand_object *return_desc; /* Return object, if any */
|
||||
union acpi_generic_state *scope_info; /* Stack of nested scopes */
|
||||
union acpi_parse_object *prev_op; /* Last op that was processed */
|
||||
union acpi_parse_object *next_op; /* next op to be processed */
|
||||
struct acpi_thread_state *thread;
|
||||
acpi_parse_downwards descending_callback;
|
||||
acpi_parse_upwards ascending_callback;
|
||||
};
|
||||
|
||||
/* Info used by acpi_ps_init_objects */
|
||||
|
||||
struct acpi_init_walk_info {
|
||||
u16 method_count;
|
||||
u16 device_count;
|
||||
u16 op_region_count;
|
||||
u16 field_count;
|
||||
u16 buffer_count;
|
||||
u16 package_count;
|
||||
u16 op_region_init;
|
||||
u16 field_init;
|
||||
u16 buffer_init;
|
||||
u16 package_init;
|
||||
u16 object_count;
|
||||
acpi_owner_id owner_id;
|
||||
u32 table_index;
|
||||
};
|
||||
|
||||
struct acpi_get_devices_info {
|
||||
acpi_walk_callback user_function;
|
||||
void *context;
|
||||
const char *hid;
|
||||
};
|
||||
|
||||
union acpi_aml_operands {
|
||||
union acpi_operand_object *operands[7];
|
||||
|
||||
struct {
|
||||
struct acpi_object_integer *type;
|
||||
struct acpi_object_integer *code;
|
||||
struct acpi_object_integer *argument;
|
||||
|
||||
} fatal;
|
||||
|
||||
struct {
|
||||
union acpi_operand_object *source;
|
||||
struct acpi_object_integer *index;
|
||||
union acpi_operand_object *target;
|
||||
|
||||
} index;
|
||||
|
||||
struct {
|
||||
union acpi_operand_object *source;
|
||||
struct acpi_object_integer *index;
|
||||
struct acpi_object_integer *length;
|
||||
union acpi_operand_object *target;
|
||||
|
||||
} mid;
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure used to pass object evaluation parameters.
|
||||
* Purpose is to reduce CPU stack use.
|
||||
*/
|
||||
struct acpi_evaluate_info {
|
||||
struct acpi_namespace_node *prefix_node;
|
||||
char *pathname;
|
||||
union acpi_operand_object *obj_desc;
|
||||
union acpi_operand_object **parameters;
|
||||
struct acpi_namespace_node *resolved_node;
|
||||
union acpi_operand_object *return_object;
|
||||
u8 param_count;
|
||||
u8 pass_number;
|
||||
u8 return_object_type;
|
||||
u8 flags;
|
||||
};
|
||||
|
||||
/* Values for Flags above */
|
||||
|
||||
#define ACPI_IGNORE_RETURN_VALUE 1
|
||||
|
||||
/* Info used by acpi_ns_initialize_devices */
|
||||
|
||||
struct acpi_device_walk_info {
|
||||
u16 device_count;
|
||||
u16 num_STA;
|
||||
u16 num_INI;
|
||||
struct acpi_table_desc *table_desc;
|
||||
struct acpi_evaluate_info *evaluate_info;
|
||||
};
|
||||
|
||||
/* TBD: [Restructure] Merge with struct above */
|
||||
|
||||
struct acpi_walk_info {
|
||||
u32 debug_level;
|
||||
u32 count;
|
||||
acpi_owner_id owner_id;
|
||||
u8 display_type;
|
||||
};
|
||||
|
||||
/* Display Types */
|
||||
|
||||
#define ACPI_DISPLAY_SUMMARY (u8) 0
|
||||
#define ACPI_DISPLAY_OBJECTS (u8) 1
|
||||
#define ACPI_DISPLAY_MASK (u8) 1
|
||||
|
||||
#define ACPI_DISPLAY_SHORT (u8) 2
|
||||
|
||||
#endif
|
||||
@@ -1,115 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: actables.h - ACPI table management
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __ACTABLES_H__
|
||||
#define __ACTABLES_H__
|
||||
|
||||
acpi_status acpi_allocate_root_table(u32 initial_table_count);
|
||||
|
||||
/*
|
||||
* tbfadt - FADT parse/convert/validate
|
||||
*/
|
||||
void acpi_tb_parse_fadt(u32 table_index, u8 flags);
|
||||
|
||||
void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length);
|
||||
|
||||
/*
|
||||
* tbfind - find ACPI table
|
||||
*/
|
||||
acpi_status
|
||||
acpi_tb_find_table(char *signature,
|
||||
char *oem_id, char *oem_table_id, u32 *table_index);
|
||||
|
||||
/*
|
||||
* tbinstal - Table removal and deletion
|
||||
*/
|
||||
acpi_status acpi_tb_resize_root_table_list(void);
|
||||
|
||||
acpi_status acpi_tb_verify_table(struct acpi_table_desc *table_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_tb_add_table(struct acpi_table_desc *table_desc, u32 *table_index);
|
||||
|
||||
acpi_status
|
||||
acpi_tb_store_table(acpi_physical_address address,
|
||||
struct acpi_table_header *table,
|
||||
u32 length, u8 flags, u32 *table_index);
|
||||
|
||||
void acpi_tb_delete_table(struct acpi_table_desc *table_desc);
|
||||
|
||||
void acpi_tb_terminate(void);
|
||||
|
||||
void acpi_tb_delete_namespace_by_owner(u32 table_index);
|
||||
|
||||
acpi_status acpi_tb_allocate_owner_id(u32 table_index);
|
||||
|
||||
acpi_status acpi_tb_release_owner_id(u32 table_index);
|
||||
|
||||
acpi_status acpi_tb_get_owner_id(u32 table_index, acpi_owner_id *owner_id);
|
||||
|
||||
u8 acpi_tb_is_table_loaded(u32 table_index);
|
||||
|
||||
void acpi_tb_set_table_loaded_flag(u32 table_index, u8 is_loaded);
|
||||
|
||||
/*
|
||||
* tbutils - table manager utilities
|
||||
*/
|
||||
u8 acpi_tb_tables_loaded(void);
|
||||
|
||||
void
|
||||
acpi_tb_print_table_header(acpi_physical_address address,
|
||||
struct acpi_table_header *header);
|
||||
|
||||
u8 acpi_tb_checksum(u8 *buffer, u32 length);
|
||||
|
||||
acpi_status
|
||||
acpi_tb_verify_checksum(struct acpi_table_header *table, u32 length);
|
||||
|
||||
void
|
||||
acpi_tb_install_table(acpi_physical_address address,
|
||||
u8 flags, char *signature, u32 table_index);
|
||||
|
||||
acpi_status
|
||||
acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags);
|
||||
|
||||
#endif /* __ACTABLES_H__ */
|
||||
@@ -288,6 +288,31 @@ enum acpi_prefered_pm_profiles {
|
||||
|
||||
#define ACPI_FADT_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_table_fadt, f)
|
||||
|
||||
union acpi_name_union {
|
||||
u32 integer;
|
||||
char ascii[4];
|
||||
};
|
||||
|
||||
/*
|
||||
* Internal ACPI Table Descriptor. One per ACPI table
|
||||
*/
|
||||
struct acpi_table_desc {
|
||||
acpi_physical_address address;
|
||||
struct acpi_table_header *pointer;
|
||||
u32 length; /* Length fixed at 32 bits */
|
||||
union acpi_name_union signature;
|
||||
acpi_owner_id owner_id;
|
||||
u8 flags;
|
||||
};
|
||||
|
||||
/* Flags for above */
|
||||
|
||||
#define ACPI_TABLE_ORIGIN_UNKNOWN (0)
|
||||
#define ACPI_TABLE_ORIGIN_MAPPED (1)
|
||||
#define ACPI_TABLE_ORIGIN_ALLOCATED (2)
|
||||
#define ACPI_TABLE_ORIGIN_MASK (3)
|
||||
#define ACPI_TABLE_IS_LOADED (4)
|
||||
|
||||
/*
|
||||
* Get the remaining ACPI tables
|
||||
*/
|
||||
|
||||
@@ -627,7 +627,7 @@ struct acpi_hest_aer_common {
|
||||
u32 uncorrectable_error_mask;
|
||||
u32 uncorrectable_error_severity;
|
||||
u32 correctable_error_mask;
|
||||
u32 advanced_error_cababilities;
|
||||
u32 advanced_error_capabilities;
|
||||
};
|
||||
|
||||
/* Hardware Error Notification */
|
||||
|
||||
+188
-365
@@ -204,11 +204,10 @@ typedef u32 acpi_physical_address;
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* OS-dependent and compiler-dependent types
|
||||
* OS-dependent types
|
||||
*
|
||||
* If the defaults below are not appropriate for the host system, they can
|
||||
* be defined in the compiler-specific or OS-specific header, and this will
|
||||
* take precedence.
|
||||
* be defined in the OS-specific header, and this will take precedence.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@@ -218,12 +217,6 @@ typedef u32 acpi_physical_address;
|
||||
#define acpi_thread_id acpi_size
|
||||
#endif
|
||||
|
||||
/* Object returned from acpi_os_create_lock */
|
||||
|
||||
#ifndef acpi_spinlock
|
||||
#define acpi_spinlock void *
|
||||
#endif
|
||||
|
||||
/* Flags for acpi_os_acquire_lock/acpi_os_release_lock */
|
||||
|
||||
#ifndef acpi_cpu_flags
|
||||
@@ -233,8 +226,50 @@ typedef u32 acpi_physical_address;
|
||||
/* Object returned from acpi_os_create_cache */
|
||||
|
||||
#ifndef acpi_cache_t
|
||||
#ifdef ACPI_USE_LOCAL_CACHE
|
||||
#define acpi_cache_t struct acpi_memory_list
|
||||
#else
|
||||
#define acpi_cache_t void *
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Synchronization objects - Mutexes, Semaphores, and spin_locks
|
||||
*/
|
||||
#if (ACPI_MUTEX_TYPE == ACPI_BINARY_SEMAPHORE)
|
||||
/*
|
||||
* These macros are used if the host OS does not support a mutex object.
|
||||
* Map the OSL Mutex interfaces to binary semaphores.
|
||||
*/
|
||||
#define acpi_mutex acpi_semaphore
|
||||
#define acpi_os_create_mutex(out_handle) acpi_os_create_semaphore (1, 1, out_handle)
|
||||
#define acpi_os_delete_mutex(handle) (void) acpi_os_delete_semaphore (handle)
|
||||
#define acpi_os_acquire_mutex(handle,time) acpi_os_wait_semaphore (handle, 1, time)
|
||||
#define acpi_os_release_mutex(handle) (void) acpi_os_signal_semaphore (handle, 1)
|
||||
#endif
|
||||
|
||||
/* Configurable types for synchronization objects */
|
||||
|
||||
#ifndef acpi_spinlock
|
||||
#define acpi_spinlock void *
|
||||
#endif
|
||||
|
||||
#ifndef acpi_semaphore
|
||||
#define acpi_semaphore void *
|
||||
#endif
|
||||
|
||||
#ifndef acpi_mutex
|
||||
#define acpi_mutex void *
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Compiler-dependent types
|
||||
*
|
||||
* If the defaults below are not appropriate for the host compiler, they can
|
||||
* be defined in the compiler-specific header, and this will take precedence.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/* Use C99 uintptr_t for pointer casting if available, "void *" otherwise */
|
||||
|
||||
@@ -268,6 +303,43 @@ typedef u32 acpi_physical_address;
|
||||
#define ACPI_EXPORT_SYMBOL(symbol)
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* ACPI Specification constants (Do not change unless the specification changes)
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/* Number of distinct FADT-based GPE register blocks (GPE0 and GPE1) */
|
||||
|
||||
#define ACPI_MAX_GPE_BLOCKS 2
|
||||
|
||||
/* Default ACPI register widths */
|
||||
|
||||
#define ACPI_GPE_REGISTER_WIDTH 8
|
||||
#define ACPI_PM1_REGISTER_WIDTH 16
|
||||
#define ACPI_PM2_REGISTER_WIDTH 8
|
||||
#define ACPI_PM_TIMER_WIDTH 32
|
||||
|
||||
/* 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
|
||||
|
||||
/* ACPI/PNP hardware IDs */
|
||||
|
||||
#define PCI_ROOT_HID_STRING "PNP0A03"
|
||||
#define PCI_EXPRESS_ROOT_HID_STRING "PNP0A08"
|
||||
|
||||
/* PM Timer ticks per second (HZ) */
|
||||
|
||||
#define PM_TIMER_FREQUENCY 3579545
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Independent types
|
||||
@@ -291,13 +363,18 @@ typedef u32 acpi_physical_address;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Mescellaneous types
|
||||
* Miscellaneous types
|
||||
*/
|
||||
typedef u32 acpi_status; /* All ACPI Exceptions */
|
||||
typedef u32 acpi_name; /* 4-byte ACPI name */
|
||||
typedef char *acpi_string; /* Null terminated ASCII string */
|
||||
typedef void *acpi_handle; /* Actually a ptr to a NS Node */
|
||||
|
||||
/* Owner IDs are used to track namespace nodes for selective deletion */
|
||||
|
||||
typedef u8 acpi_owner_id;
|
||||
#define ACPI_OWNER_ID_MAX 0xFF
|
||||
|
||||
struct uint64_struct {
|
||||
u32 lo;
|
||||
u32 hi;
|
||||
@@ -313,13 +390,8 @@ struct uint32_struct {
|
||||
u32 hi;
|
||||
};
|
||||
|
||||
/* Synchronization objects */
|
||||
|
||||
#define acpi_mutex void *
|
||||
#define acpi_semaphore void *
|
||||
|
||||
/*
|
||||
* Acpi integer width. In ACPI version 1, integers are 32 bits. In ACPI
|
||||
* Acpi integer width. In ACPI version 1, integers are 32 bits. In ACPI
|
||||
* version 2, integers are 64 bits. Note that this pertains to the ACPI integer
|
||||
* type only, not other integers used in the implementation of the ACPI CA
|
||||
* subsystem.
|
||||
@@ -338,10 +410,75 @@ typedef unsigned long long acpi_integer;
|
||||
#define ACPI_MAX16_DECIMAL_DIGITS 5
|
||||
#define ACPI_MAX8_DECIMAL_DIGITS 3
|
||||
|
||||
/* PM Timer ticks per second (HZ) */
|
||||
|
||||
#define PM_TIMER_FREQUENCY 3579545
|
||||
|
||||
/*
|
||||
* Constants with special meanings
|
||||
*/
|
||||
#define ACPI_ROOT_OBJECT ACPI_ADD_PTR (acpi_handle, NULL, ACPI_MAX_PTR)
|
||||
#define ACPI_WAIT_FOREVER 0xFFFF /* u16, as per ACPI spec */
|
||||
#define ACPI_DO_NOT_WAIT 0
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Commonly used macros
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/* Data manipulation */
|
||||
|
||||
#define ACPI_LOWORD(l) ((u16)(u32)(l))
|
||||
#define ACPI_HIWORD(l) ((u16)((((u32)(l)) >> 16) & 0xFFFF))
|
||||
#define ACPI_LOBYTE(l) ((u8)(u16)(l))
|
||||
#define ACPI_HIBYTE(l) ((u8)((((u16)(l)) >> 8) & 0xFF))
|
||||
|
||||
/* Full 64-bit integer must be available on both 32-bit and 64-bit platforms */
|
||||
|
||||
struct acpi_integer_overlay {
|
||||
u32 lo_dword;
|
||||
u32 hi_dword;
|
||||
};
|
||||
|
||||
#define ACPI_LODWORD(integer) (ACPI_CAST_PTR (struct acpi_integer_overlay, &integer)->lo_dword)
|
||||
#define ACPI_HIDWORD(integer) (ACPI_CAST_PTR (struct acpi_integer_overlay, &integer)->hi_dword)
|
||||
|
||||
#define ACPI_SET_BIT(target,bit) ((target) |= (bit))
|
||||
#define ACPI_CLEAR_BIT(target,bit) ((target) &= ~(bit))
|
||||
#define ACPI_MIN(a,b) (((a)<(b))?(a):(b))
|
||||
#define ACPI_MAX(a,b) (((a)>(b))?(a):(b))
|
||||
|
||||
/* Size calculation */
|
||||
|
||||
#define ACPI_ARRAY_LENGTH(x) (sizeof(x) / sizeof((x)[0]))
|
||||
|
||||
/* Pointer manipulation */
|
||||
|
||||
#define ACPI_CAST_PTR(t, p) ((t *) (acpi_uintptr_t) (p))
|
||||
#define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (acpi_uintptr_t) (p))
|
||||
#define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8, (a)) + (acpi_size)(b)))
|
||||
#define ACPI_PTR_DIFF(a, b) (acpi_size) (ACPI_CAST_PTR (u8, (a)) - ACPI_CAST_PTR (u8, (b)))
|
||||
|
||||
/* Pointer/Integer type conversions */
|
||||
|
||||
#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) NULL,(acpi_size) i)
|
||||
#define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) NULL)
|
||||
#define ACPI_OFFSET(d, f) (acpi_size) ACPI_PTR_DIFF (&(((d *)0)->f), (void *) NULL)
|
||||
#define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i)
|
||||
#define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i)
|
||||
|
||||
#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
|
||||
#define ACPI_COMPARE_NAME(a,b) (*ACPI_CAST_PTR (u32, (a)) == *ACPI_CAST_PTR (u32, (b)))
|
||||
#else
|
||||
#define ACPI_COMPARE_NAME(a,b) (!ACPI_STRNCMP (ACPI_CAST_PTR (char, (a)), ACPI_CAST_PTR (char, (b)), ACPI_NAME_SIZE))
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Miscellaneous constants
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* Initialization sequence
|
||||
@@ -414,7 +551,7 @@ typedef unsigned long long acpi_integer;
|
||||
#define ACPI_NOTIFY_MAX 0x0B
|
||||
|
||||
/*
|
||||
* Types associated with ACPI names and objects. The first group of
|
||||
* Types associated with ACPI names and objects. The first group of
|
||||
* values (up to ACPI_TYPE_EXTERNAL_MAX) correspond to the definition
|
||||
* of the ACPI object_type() operator (See the ACPI Spec). Therefore,
|
||||
* only add to the first group if the spec changes.
|
||||
@@ -467,7 +604,7 @@ typedef u32 acpi_object_type;
|
||||
|
||||
/*
|
||||
* These are special object types that never appear in
|
||||
* a Namespace node, only in an union acpi_operand_object
|
||||
* a Namespace node, only in a union acpi_operand_object
|
||||
*/
|
||||
#define ACPI_TYPE_LOCAL_EXTRA 0x1C
|
||||
#define ACPI_TYPE_LOCAL_DATA 0x1D
|
||||
@@ -731,6 +868,15 @@ struct acpi_buffer {
|
||||
#define ACPI_SINGLE_NAME 1
|
||||
#define ACPI_NAME_TYPE_MAX 1
|
||||
|
||||
/*
|
||||
* Predefined Namespace items
|
||||
*/
|
||||
struct acpi_predefined_names {
|
||||
char *name;
|
||||
u8 type;
|
||||
char *val;
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure and flags for acpi_get_system_info
|
||||
*/
|
||||
@@ -787,7 +933,7 @@ acpi_status(*acpi_exception_handler) (acpi_status aml_status,
|
||||
u16 opcode,
|
||||
u32 aml_offset, void *context);
|
||||
|
||||
/* Table Event handler (Load, load_table etc) and types */
|
||||
/* Table Event handler (Load, load_table, etc.) and types */
|
||||
|
||||
typedef
|
||||
acpi_status(*acpi_tbl_handler) (u32 event, void *table, void *context);
|
||||
@@ -823,6 +969,12 @@ acpi_status(*acpi_walk_callback) (acpi_handle obj_handle,
|
||||
#define ACPI_INTERRUPT_NOT_HANDLED 0x00
|
||||
#define ACPI_INTERRUPT_HANDLED 0x01
|
||||
|
||||
/* 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
|
||||
|
||||
/* Common string version of device HIDs and UIDs */
|
||||
|
||||
struct acpica_device_id {
|
||||
@@ -900,357 +1052,28 @@ struct acpi_mem_space_context {
|
||||
};
|
||||
|
||||
/*
|
||||
* Definitions for Resource Attributes
|
||||
* struct acpi_memory_list is used only if the ACPICA local cache is enabled
|
||||
*/
|
||||
typedef u16 acpi_rs_length; /* Resource Length field is fixed at 16 bits */
|
||||
typedef u32 acpi_rsdesc_size; /* Max Resource Descriptor size is (Length+3) = (64_k-1)+3 */
|
||||
struct acpi_memory_list {
|
||||
char *list_name;
|
||||
void *list_head;
|
||||
u16 object_size;
|
||||
u16 max_depth;
|
||||
u16 current_depth;
|
||||
u16 link_offset;
|
||||
|
||||
/*
|
||||
* Memory Attributes
|
||||
*/
|
||||
#define ACPI_READ_ONLY_MEMORY (u8) 0x00
|
||||
#define ACPI_READ_WRITE_MEMORY (u8) 0x01
|
||||
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
|
||||
|
||||
#define ACPI_NON_CACHEABLE_MEMORY (u8) 0x00
|
||||
#define ACPI_CACHABLE_MEMORY (u8) 0x01
|
||||
#define ACPI_WRITE_COMBINING_MEMORY (u8) 0x02
|
||||
#define ACPI_PREFETCHABLE_MEMORY (u8) 0x03
|
||||
/* Statistics for debug memory tracking only */
|
||||
|
||||
/*
|
||||
* IO Attributes
|
||||
* The ISA IO ranges are: n000-n0_fFh, n400-n4_fFh, n800-n8_fFh, n_c00-n_cFFh.
|
||||
* The non-ISA IO ranges are: n100-n3_fFh, n500-n7_fFh, n900-n_bFFh, n_cd0-n_fFFh.
|
||||
*/
|
||||
#define ACPI_NON_ISA_ONLY_RANGES (u8) 0x01
|
||||
#define ACPI_ISA_ONLY_RANGES (u8) 0x02
|
||||
#define ACPI_ENTIRE_RANGE (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES)
|
||||
|
||||
/* Type of translation - 1=Sparse, 0=Dense */
|
||||
|
||||
#define ACPI_SPARSE_TRANSLATION (u8) 0x01
|
||||
|
||||
/*
|
||||
* IO Port Descriptor Decode
|
||||
*/
|
||||
#define ACPI_DECODE_10 (u8) 0x00 /* 10-bit IO address decode */
|
||||
#define ACPI_DECODE_16 (u8) 0x01 /* 16-bit IO address decode */
|
||||
|
||||
/*
|
||||
* IRQ Attributes
|
||||
*/
|
||||
#define ACPI_LEVEL_SENSITIVE (u8) 0x00
|
||||
#define ACPI_EDGE_SENSITIVE (u8) 0x01
|
||||
|
||||
#define ACPI_ACTIVE_HIGH (u8) 0x00
|
||||
#define ACPI_ACTIVE_LOW (u8) 0x01
|
||||
|
||||
#define ACPI_EXCLUSIVE (u8) 0x00
|
||||
#define ACPI_SHARED (u8) 0x01
|
||||
|
||||
/*
|
||||
* DMA Attributes
|
||||
*/
|
||||
#define ACPI_COMPATIBILITY (u8) 0x00
|
||||
#define ACPI_TYPE_A (u8) 0x01
|
||||
#define ACPI_TYPE_B (u8) 0x02
|
||||
#define ACPI_TYPE_F (u8) 0x03
|
||||
|
||||
#define ACPI_NOT_BUS_MASTER (u8) 0x00
|
||||
#define ACPI_BUS_MASTER (u8) 0x01
|
||||
|
||||
#define ACPI_TRANSFER_8 (u8) 0x00
|
||||
#define ACPI_TRANSFER_8_16 (u8) 0x01
|
||||
#define ACPI_TRANSFER_16 (u8) 0x02
|
||||
|
||||
/*
|
||||
* Start Dependent Functions Priority definitions
|
||||
*/
|
||||
#define ACPI_GOOD_CONFIGURATION (u8) 0x00
|
||||
#define ACPI_ACCEPTABLE_CONFIGURATION (u8) 0x01
|
||||
#define ACPI_SUB_OPTIMAL_CONFIGURATION (u8) 0x02
|
||||
|
||||
/*
|
||||
* 16, 32 and 64-bit Address Descriptor resource types
|
||||
*/
|
||||
#define ACPI_MEMORY_RANGE (u8) 0x00
|
||||
#define ACPI_IO_RANGE (u8) 0x01
|
||||
#define ACPI_BUS_NUMBER_RANGE (u8) 0x02
|
||||
|
||||
#define ACPI_ADDRESS_NOT_FIXED (u8) 0x00
|
||||
#define ACPI_ADDRESS_FIXED (u8) 0x01
|
||||
|
||||
#define ACPI_POS_DECODE (u8) 0x00
|
||||
#define ACPI_SUB_DECODE (u8) 0x01
|
||||
|
||||
#define ACPI_PRODUCER (u8) 0x00
|
||||
#define ACPI_CONSUMER (u8) 0x01
|
||||
|
||||
/*
|
||||
* If possible, pack the following structures to byte alignment
|
||||
*/
|
||||
#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
|
||||
#pragma pack(1)
|
||||
u32 total_allocated;
|
||||
u32 total_freed;
|
||||
u32 max_occupied;
|
||||
u32 total_size;
|
||||
u32 current_total_size;
|
||||
u32 requests;
|
||||
u32 hits;
|
||||
#endif
|
||||
|
||||
/* UUID data structures for use in vendor-defined resource descriptors */
|
||||
|
||||
struct acpi_uuid {
|
||||
u8 data[ACPI_UUID_LENGTH];
|
||||
};
|
||||
|
||||
struct acpi_vendor_uuid {
|
||||
u8 subtype;
|
||||
u8 data[ACPI_UUID_LENGTH];
|
||||
};
|
||||
|
||||
/*
|
||||
* Structures used to describe device resources
|
||||
*/
|
||||
struct acpi_resource_irq {
|
||||
u8 descriptor_length;
|
||||
u8 triggering;
|
||||
u8 polarity;
|
||||
u8 sharable;
|
||||
u8 interrupt_count;
|
||||
u8 interrupts[1];
|
||||
};
|
||||
|
||||
struct acpi_resource_dma {
|
||||
u8 type;
|
||||
u8 bus_master;
|
||||
u8 transfer;
|
||||
u8 channel_count;
|
||||
u8 channels[1];
|
||||
};
|
||||
|
||||
struct acpi_resource_start_dependent {
|
||||
u8 descriptor_length;
|
||||
u8 compatibility_priority;
|
||||
u8 performance_robustness;
|
||||
};
|
||||
|
||||
/*
|
||||
* END_DEPENDENT_FUNCTIONS_RESOURCE struct is not
|
||||
* needed because it has no fields
|
||||
*/
|
||||
|
||||
struct acpi_resource_io {
|
||||
u8 io_decode;
|
||||
u8 alignment;
|
||||
u8 address_length;
|
||||
u16 minimum;
|
||||
u16 maximum;
|
||||
};
|
||||
|
||||
struct acpi_resource_fixed_io {
|
||||
u16 address;
|
||||
u8 address_length;
|
||||
};
|
||||
|
||||
struct acpi_resource_vendor {
|
||||
u16 byte_length;
|
||||
u8 byte_data[1];
|
||||
};
|
||||
|
||||
/* Vendor resource with UUID info (introduced in ACPI 3.0) */
|
||||
|
||||
struct acpi_resource_vendor_typed {
|
||||
u16 byte_length;
|
||||
u8 uuid_subtype;
|
||||
u8 uuid[ACPI_UUID_LENGTH];
|
||||
u8 byte_data[1];
|
||||
};
|
||||
|
||||
struct acpi_resource_end_tag {
|
||||
u8 checksum;
|
||||
};
|
||||
|
||||
struct acpi_resource_memory24 {
|
||||
u8 write_protect;
|
||||
u16 minimum;
|
||||
u16 maximum;
|
||||
u16 alignment;
|
||||
u16 address_length;
|
||||
};
|
||||
|
||||
struct acpi_resource_memory32 {
|
||||
u8 write_protect;
|
||||
u32 minimum;
|
||||
u32 maximum;
|
||||
u32 alignment;
|
||||
u32 address_length;
|
||||
};
|
||||
|
||||
struct acpi_resource_fixed_memory32 {
|
||||
u8 write_protect;
|
||||
u32 address;
|
||||
u32 address_length;
|
||||
};
|
||||
|
||||
struct acpi_memory_attribute {
|
||||
u8 write_protect;
|
||||
u8 caching;
|
||||
u8 range_type;
|
||||
u8 translation;
|
||||
};
|
||||
|
||||
struct acpi_io_attribute {
|
||||
u8 range_type;
|
||||
u8 translation;
|
||||
u8 translation_type;
|
||||
u8 reserved1;
|
||||
};
|
||||
|
||||
union acpi_resource_attribute {
|
||||
struct acpi_memory_attribute mem;
|
||||
struct acpi_io_attribute io;
|
||||
|
||||
/* Used for the *word_space macros */
|
||||
|
||||
u8 type_specific;
|
||||
};
|
||||
|
||||
struct acpi_resource_source {
|
||||
u8 index;
|
||||
u16 string_length;
|
||||
char *string_ptr;
|
||||
};
|
||||
|
||||
/* Fields common to all address descriptors, 16/32/64 bit */
|
||||
|
||||
#define ACPI_RESOURCE_ADDRESS_COMMON \
|
||||
u8 resource_type; \
|
||||
u8 producer_consumer; \
|
||||
u8 decode; \
|
||||
u8 min_address_fixed; \
|
||||
u8 max_address_fixed; \
|
||||
union acpi_resource_attribute info;
|
||||
|
||||
struct acpi_resource_address {
|
||||
ACPI_RESOURCE_ADDRESS_COMMON};
|
||||
|
||||
struct acpi_resource_address16 {
|
||||
ACPI_RESOURCE_ADDRESS_COMMON u16 granularity;
|
||||
u16 minimum;
|
||||
u16 maximum;
|
||||
u16 translation_offset;
|
||||
u16 address_length;
|
||||
struct acpi_resource_source resource_source;
|
||||
};
|
||||
|
||||
struct acpi_resource_address32 {
|
||||
ACPI_RESOURCE_ADDRESS_COMMON u32 granularity;
|
||||
u32 minimum;
|
||||
u32 maximum;
|
||||
u32 translation_offset;
|
||||
u32 address_length;
|
||||
struct acpi_resource_source resource_source;
|
||||
};
|
||||
|
||||
struct acpi_resource_address64 {
|
||||
ACPI_RESOURCE_ADDRESS_COMMON u64 granularity;
|
||||
u64 minimum;
|
||||
u64 maximum;
|
||||
u64 translation_offset;
|
||||
u64 address_length;
|
||||
struct acpi_resource_source resource_source;
|
||||
};
|
||||
|
||||
struct acpi_resource_extended_address64 {
|
||||
ACPI_RESOURCE_ADDRESS_COMMON u8 revision_iD;
|
||||
u64 granularity;
|
||||
u64 minimum;
|
||||
u64 maximum;
|
||||
u64 translation_offset;
|
||||
u64 address_length;
|
||||
u64 type_specific;
|
||||
};
|
||||
|
||||
struct acpi_resource_extended_irq {
|
||||
u8 producer_consumer;
|
||||
u8 triggering;
|
||||
u8 polarity;
|
||||
u8 sharable;
|
||||
u8 interrupt_count;
|
||||
struct acpi_resource_source resource_source;
|
||||
u32 interrupts[1];
|
||||
};
|
||||
|
||||
struct acpi_resource_generic_register {
|
||||
u8 space_id;
|
||||
u8 bit_width;
|
||||
u8 bit_offset;
|
||||
u8 access_size;
|
||||
u64 address;
|
||||
};
|
||||
|
||||
/* ACPI_RESOURCE_TYPEs */
|
||||
|
||||
#define ACPI_RESOURCE_TYPE_IRQ 0
|
||||
#define ACPI_RESOURCE_TYPE_DMA 1
|
||||
#define ACPI_RESOURCE_TYPE_START_DEPENDENT 2
|
||||
#define ACPI_RESOURCE_TYPE_END_DEPENDENT 3
|
||||
#define ACPI_RESOURCE_TYPE_IO 4
|
||||
#define ACPI_RESOURCE_TYPE_FIXED_IO 5
|
||||
#define ACPI_RESOURCE_TYPE_VENDOR 6
|
||||
#define ACPI_RESOURCE_TYPE_END_TAG 7
|
||||
#define ACPI_RESOURCE_TYPE_MEMORY24 8
|
||||
#define ACPI_RESOURCE_TYPE_MEMORY32 9
|
||||
#define ACPI_RESOURCE_TYPE_FIXED_MEMORY32 10
|
||||
#define ACPI_RESOURCE_TYPE_ADDRESS16 11
|
||||
#define ACPI_RESOURCE_TYPE_ADDRESS32 12
|
||||
#define ACPI_RESOURCE_TYPE_ADDRESS64 13
|
||||
#define ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 14 /* ACPI 3.0 */
|
||||
#define ACPI_RESOURCE_TYPE_EXTENDED_IRQ 15
|
||||
#define ACPI_RESOURCE_TYPE_GENERIC_REGISTER 16
|
||||
#define ACPI_RESOURCE_TYPE_MAX 16
|
||||
|
||||
union acpi_resource_data {
|
||||
struct acpi_resource_irq irq;
|
||||
struct acpi_resource_dma dma;
|
||||
struct acpi_resource_start_dependent start_dpf;
|
||||
struct acpi_resource_io io;
|
||||
struct acpi_resource_fixed_io fixed_io;
|
||||
struct acpi_resource_vendor vendor;
|
||||
struct acpi_resource_vendor_typed vendor_typed;
|
||||
struct acpi_resource_end_tag end_tag;
|
||||
struct acpi_resource_memory24 memory24;
|
||||
struct acpi_resource_memory32 memory32;
|
||||
struct acpi_resource_fixed_memory32 fixed_memory32;
|
||||
struct acpi_resource_address16 address16;
|
||||
struct acpi_resource_address32 address32;
|
||||
struct acpi_resource_address64 address64;
|
||||
struct acpi_resource_extended_address64 ext_address64;
|
||||
struct acpi_resource_extended_irq extended_irq;
|
||||
struct acpi_resource_generic_register generic_reg;
|
||||
|
||||
/* Common fields */
|
||||
|
||||
struct acpi_resource_address address; /* Common 16/32/64 address fields */
|
||||
};
|
||||
|
||||
struct acpi_resource {
|
||||
u32 type;
|
||||
u32 length;
|
||||
union acpi_resource_data data;
|
||||
};
|
||||
|
||||
/* restore default alignment */
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#define ACPI_RS_SIZE_NO_DATA 8 /* Id + Length fields */
|
||||
#define ACPI_RS_SIZE_MIN (u32) ACPI_ROUND_UP_TO_NATIVE_WORD (12)
|
||||
#define ACPI_RS_SIZE(type) (u32) (ACPI_RS_SIZE_NO_DATA + sizeof (type))
|
||||
|
||||
#define ACPI_NEXT_RESOURCE(res) (struct acpi_resource *)((u8 *) res + res->length)
|
||||
|
||||
struct acpi_pci_routing_table {
|
||||
u32 length;
|
||||
u32 pin;
|
||||
acpi_integer address; /* here for 64-bit alignment */
|
||||
u32 source_index;
|
||||
char source[4]; /* pad to 64 bits so sizeof() works in all cases */
|
||||
};
|
||||
|
||||
#endif /* __ACTYPES_H__ */
|
||||
|
||||
@@ -1,585 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acutils.h -- prototypes for the common (subsystem-wide) procedures
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 _ACUTILS_H
|
||||
#define _ACUTILS_H
|
||||
|
||||
extern const u8 acpi_gbl_resource_aml_sizes[];
|
||||
|
||||
/* Strings used by the disassembler and debugger resource dump routines */
|
||||
|
||||
#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER)
|
||||
|
||||
extern const char *acpi_gbl_bm_decode[];
|
||||
extern const char *acpi_gbl_config_decode[];
|
||||
extern const char *acpi_gbl_consume_decode[];
|
||||
extern const char *acpi_gbl_dec_decode[];
|
||||
extern const char *acpi_gbl_he_decode[];
|
||||
extern const char *acpi_gbl_io_decode[];
|
||||
extern const char *acpi_gbl_ll_decode[];
|
||||
extern const char *acpi_gbl_max_decode[];
|
||||
extern const char *acpi_gbl_mem_decode[];
|
||||
extern const char *acpi_gbl_min_decode[];
|
||||
extern const char *acpi_gbl_mtp_decode[];
|
||||
extern const char *acpi_gbl_rng_decode[];
|
||||
extern const char *acpi_gbl_rw_decode[];
|
||||
extern const char *acpi_gbl_shr_decode[];
|
||||
extern const char *acpi_gbl_siz_decode[];
|
||||
extern const char *acpi_gbl_trs_decode[];
|
||||
extern const char *acpi_gbl_ttp_decode[];
|
||||
extern const char *acpi_gbl_typ_decode[];
|
||||
#endif
|
||||
|
||||
/* Types for Resource descriptor entries */
|
||||
|
||||
#define ACPI_INVALID_RESOURCE 0
|
||||
#define ACPI_FIXED_LENGTH 1
|
||||
#define ACPI_VARIABLE_LENGTH 2
|
||||
#define ACPI_SMALL_VARIABLE_LENGTH 3
|
||||
|
||||
typedef
|
||||
acpi_status(*acpi_walk_aml_callback) (u8 * aml,
|
||||
u32 length,
|
||||
u32 offset,
|
||||
u8 resource_index, void **context);
|
||||
|
||||
typedef
|
||||
acpi_status(*acpi_pkg_callback) (u8 object_type,
|
||||
union acpi_operand_object * source_object,
|
||||
union acpi_generic_state * state,
|
||||
void *context);
|
||||
|
||||
struct acpi_pkg_info {
|
||||
u8 *free_space;
|
||||
acpi_size length;
|
||||
u32 object_space;
|
||||
u32 num_packages;
|
||||
};
|
||||
|
||||
#define REF_INCREMENT (u16) 0
|
||||
#define REF_DECREMENT (u16) 1
|
||||
#define REF_FORCE_DELETE (u16) 2
|
||||
|
||||
/* acpi_ut_dump_buffer */
|
||||
|
||||
#define DB_BYTE_DISPLAY 1
|
||||
#define DB_WORD_DISPLAY 2
|
||||
#define DB_DWORD_DISPLAY 4
|
||||
#define DB_QWORD_DISPLAY 8
|
||||
|
||||
/*
|
||||
* utglobal - Global data structures and procedures
|
||||
*/
|
||||
acpi_status acpi_ut_init_globals(void);
|
||||
|
||||
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
|
||||
|
||||
char *acpi_ut_get_mutex_name(u32 mutex_id);
|
||||
|
||||
const char *acpi_ut_get_notify_name(u32 notify_value);
|
||||
|
||||
#endif
|
||||
|
||||
char *acpi_ut_get_type_name(acpi_object_type type);
|
||||
|
||||
char *acpi_ut_get_node_name(void *object);
|
||||
|
||||
char *acpi_ut_get_descriptor_name(void *object);
|
||||
|
||||
const char *acpi_ut_get_reference_name(union acpi_operand_object *object);
|
||||
|
||||
char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc);
|
||||
|
||||
char *acpi_ut_get_region_name(u8 space_id);
|
||||
|
||||
char *acpi_ut_get_event_name(u32 event_id);
|
||||
|
||||
char acpi_ut_hex_to_ascii_char(acpi_integer integer, u32 position);
|
||||
|
||||
u8 acpi_ut_valid_object_type(acpi_object_type type);
|
||||
|
||||
/*
|
||||
* utinit - miscellaneous initialization and shutdown
|
||||
*/
|
||||
acpi_status acpi_ut_hardware_initialize(void);
|
||||
|
||||
void acpi_ut_subsystem_shutdown(void);
|
||||
|
||||
/*
|
||||
* utclib - Local implementations of C library functions
|
||||
*/
|
||||
#ifndef ACPI_USE_SYSTEM_CLIBRARY
|
||||
|
||||
acpi_size acpi_ut_strlen(const char *string);
|
||||
|
||||
char *acpi_ut_strcpy(char *dst_string, const char *src_string);
|
||||
|
||||
char *acpi_ut_strncpy(char *dst_string,
|
||||
const char *src_string, acpi_size count);
|
||||
|
||||
int acpi_ut_memcmp(const char *buffer1, const char *buffer2, acpi_size count);
|
||||
|
||||
int acpi_ut_strncmp(const char *string1, const char *string2, acpi_size count);
|
||||
|
||||
int acpi_ut_strcmp(const char *string1, const char *string2);
|
||||
|
||||
char *acpi_ut_strcat(char *dst_string, const char *src_string);
|
||||
|
||||
char *acpi_ut_strncat(char *dst_string,
|
||||
const char *src_string, acpi_size count);
|
||||
|
||||
u32 acpi_ut_strtoul(const char *string, char **terminator, u32 base);
|
||||
|
||||
char *acpi_ut_strstr(char *string1, char *string2);
|
||||
|
||||
void *acpi_ut_memcpy(void *dest, const void *src, acpi_size count);
|
||||
|
||||
void *acpi_ut_memset(void *dest, u8 value, acpi_size count);
|
||||
|
||||
int acpi_ut_to_upper(int c);
|
||||
|
||||
int acpi_ut_to_lower(int c);
|
||||
|
||||
extern const u8 _acpi_ctype[];
|
||||
|
||||
#define _ACPI_XA 0x00 /* extra alphabetic - not supported */
|
||||
#define _ACPI_XS 0x40 /* extra space */
|
||||
#define _ACPI_BB 0x00 /* BEL, BS, etc. - not supported */
|
||||
#define _ACPI_CN 0x20 /* CR, FF, HT, NL, VT */
|
||||
#define _ACPI_DI 0x04 /* '0'-'9' */
|
||||
#define _ACPI_LO 0x02 /* 'a'-'z' */
|
||||
#define _ACPI_PU 0x10 /* punctuation */
|
||||
#define _ACPI_SP 0x08 /* space */
|
||||
#define _ACPI_UP 0x01 /* 'A'-'Z' */
|
||||
#define _ACPI_XD 0x80 /* '0'-'9', 'A'-'F', 'a'-'f' */
|
||||
|
||||
#define ACPI_IS_DIGIT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_DI))
|
||||
#define ACPI_IS_SPACE(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_SP))
|
||||
#define ACPI_IS_XDIGIT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_XD))
|
||||
#define ACPI_IS_UPPER(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_UP))
|
||||
#define ACPI_IS_LOWER(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO))
|
||||
#define ACPI_IS_PRINT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP | _ACPI_DI | _ACPI_SP | _ACPI_PU))
|
||||
#define ACPI_IS_ALPHA(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP))
|
||||
|
||||
#endif /* ACPI_USE_SYSTEM_CLIBRARY */
|
||||
|
||||
/*
|
||||
* utcopy - Object construction and conversion interfaces
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ut_build_simple_object(union acpi_operand_object *obj,
|
||||
union acpi_object *user_obj,
|
||||
u8 * data_space, u32 * buffer_space_used);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_build_package_object(union acpi_operand_object *obj,
|
||||
u8 * buffer, u32 * space_used);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_copy_iobject_to_eobject(union acpi_operand_object *obj,
|
||||
struct acpi_buffer *ret_buffer);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_copy_eobject_to_iobject(union acpi_object *obj,
|
||||
union acpi_operand_object **internal_obj);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_copy_isimple_to_isimple(union acpi_operand_object *source_obj,
|
||||
union acpi_operand_object *dest_obj);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_copy_iobject_to_iobject(union acpi_operand_object *source_desc,
|
||||
union acpi_operand_object **dest_desc,
|
||||
struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* utcreate - Object creation
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action);
|
||||
|
||||
/*
|
||||
* utdebug - Debug interfaces
|
||||
*/
|
||||
void acpi_ut_init_stack_ptr_trace(void);
|
||||
|
||||
void acpi_ut_track_stack_ptr(void);
|
||||
|
||||
void
|
||||
acpi_ut_trace(u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name, u32 component_id);
|
||||
|
||||
void
|
||||
acpi_ut_trace_ptr(u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name, u32 component_id, void *pointer);
|
||||
|
||||
void
|
||||
acpi_ut_trace_u32(u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name, u32 component_id, u32 integer);
|
||||
|
||||
void
|
||||
acpi_ut_trace_str(u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name, u32 component_id, char *string);
|
||||
|
||||
void
|
||||
acpi_ut_exit(u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name, u32 component_id);
|
||||
|
||||
void
|
||||
acpi_ut_status_exit(u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name,
|
||||
u32 component_id, acpi_status status);
|
||||
|
||||
void
|
||||
acpi_ut_value_exit(u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name,
|
||||
u32 component_id, acpi_integer value);
|
||||
|
||||
void
|
||||
acpi_ut_ptr_exit(u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name, u32 component_id, u8 *ptr);
|
||||
|
||||
void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id);
|
||||
|
||||
void acpi_ut_dump_buffer2(u8 * buffer, u32 count, u32 display);
|
||||
|
||||
void acpi_ut_report_error(char *module_name, u32 line_number);
|
||||
|
||||
void acpi_ut_report_info(char *module_name, u32 line_number);
|
||||
|
||||
void acpi_ut_report_warning(char *module_name, u32 line_number);
|
||||
|
||||
/* Error and message reporting interfaces */
|
||||
|
||||
void ACPI_INTERNAL_VAR_XFACE
|
||||
acpi_ut_debug_print(u32 requested_debug_level,
|
||||
u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name,
|
||||
u32 component_id,
|
||||
const char *format, ...) ACPI_PRINTF_LIKE(6);
|
||||
|
||||
void ACPI_INTERNAL_VAR_XFACE
|
||||
acpi_ut_debug_print_raw(u32 requested_debug_level,
|
||||
u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name,
|
||||
u32 component_id,
|
||||
const char *format, ...) ACPI_PRINTF_LIKE(6);
|
||||
|
||||
void ACPI_INTERNAL_VAR_XFACE
|
||||
acpi_ut_error(const char *module_name,
|
||||
u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3);
|
||||
|
||||
void ACPI_INTERNAL_VAR_XFACE
|
||||
acpi_ut_exception(const char *module_name,
|
||||
u32 line_number,
|
||||
acpi_status status,
|
||||
const char *format, ...) ACPI_PRINTF_LIKE(4);
|
||||
|
||||
void ACPI_INTERNAL_VAR_XFACE
|
||||
acpi_ut_warning(const char *module_name,
|
||||
u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3);
|
||||
|
||||
void ACPI_INTERNAL_VAR_XFACE
|
||||
acpi_ut_info(const char *module_name,
|
||||
u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3);
|
||||
|
||||
/*
|
||||
* utdelete - Object deletion and reference counts
|
||||
*/
|
||||
void acpi_ut_add_reference(union acpi_operand_object *object);
|
||||
|
||||
void acpi_ut_remove_reference(union acpi_operand_object *object);
|
||||
|
||||
void acpi_ut_delete_internal_package_object(union acpi_operand_object *object);
|
||||
|
||||
void acpi_ut_delete_internal_simple_object(union acpi_operand_object *object);
|
||||
|
||||
void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list);
|
||||
|
||||
/*
|
||||
* uteval - object evaluation
|
||||
*/
|
||||
acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
|
||||
char *path,
|
||||
u32 expected_return_btypes,
|
||||
union acpi_operand_object **return_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_evaluate_numeric_object(char *object_name,
|
||||
struct acpi_namespace_node *device_node,
|
||||
acpi_integer * address);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_execute_HID(struct acpi_namespace_node *device_node,
|
||||
struct acpica_device_id *hid);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_execute_CID(struct acpi_namespace_node *device_node,
|
||||
struct acpi_compatible_id_list **return_cid_list);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_execute_STA(struct acpi_namespace_node *device_node,
|
||||
u32 * status_flags);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_execute_UID(struct acpi_namespace_node *device_node,
|
||||
struct acpica_device_id *uid);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_execute_sxds(struct acpi_namespace_node *device_node, u8 * highest);
|
||||
|
||||
/*
|
||||
* utobject - internal object create/delete/cache routines
|
||||
*/
|
||||
union acpi_operand_object *acpi_ut_create_internal_object_dbg(const char
|
||||
*module_name,
|
||||
u32 line_number,
|
||||
u32 component_id,
|
||||
acpi_object_type
|
||||
type);
|
||||
|
||||
void *acpi_ut_allocate_object_desc_dbg(const char *module_name,
|
||||
u32 line_number, u32 component_id);
|
||||
|
||||
#define acpi_ut_create_internal_object(t) acpi_ut_create_internal_object_dbg (_acpi_module_name,__LINE__,_COMPONENT,t)
|
||||
#define acpi_ut_allocate_object_desc() acpi_ut_allocate_object_desc_dbg (_acpi_module_name,__LINE__,_COMPONENT)
|
||||
|
||||
void acpi_ut_delete_object_desc(union acpi_operand_object *object);
|
||||
|
||||
u8 acpi_ut_valid_internal_object(void *object);
|
||||
|
||||
union acpi_operand_object *acpi_ut_create_package_object(u32 count);
|
||||
|
||||
union acpi_operand_object *acpi_ut_create_buffer_object(acpi_size buffer_size);
|
||||
|
||||
union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_get_object_size(union acpi_operand_object *obj, acpi_size * obj_length);
|
||||
|
||||
/*
|
||||
* utstate - Generic state creation/cache routines
|
||||
*/
|
||||
void
|
||||
acpi_ut_push_generic_state(union acpi_generic_state **list_head,
|
||||
union acpi_generic_state *state);
|
||||
|
||||
union acpi_generic_state *acpi_ut_pop_generic_state(union acpi_generic_state
|
||||
**list_head);
|
||||
|
||||
union acpi_generic_state *acpi_ut_create_generic_state(void);
|
||||
|
||||
struct acpi_thread_state *acpi_ut_create_thread_state(void);
|
||||
|
||||
union acpi_generic_state *acpi_ut_create_update_state(union acpi_operand_object
|
||||
*object, u16 action);
|
||||
|
||||
union acpi_generic_state *acpi_ut_create_pkg_state(void *internal_object,
|
||||
void *external_object,
|
||||
u16 index);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_create_update_state_and_push(union acpi_operand_object *object,
|
||||
u16 action,
|
||||
union acpi_generic_state **state_list);
|
||||
|
||||
#ifdef ACPI_FUTURE_USAGE
|
||||
acpi_status
|
||||
acpi_ut_create_pkg_state_and_push(void *internal_object,
|
||||
void *external_object,
|
||||
u16 index,
|
||||
union acpi_generic_state **state_list);
|
||||
#endif /* ACPI_FUTURE_USAGE */
|
||||
|
||||
union acpi_generic_state *acpi_ut_create_control_state(void);
|
||||
|
||||
void acpi_ut_delete_generic_state(union acpi_generic_state *state);
|
||||
|
||||
/*
|
||||
* utmath
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ut_divide(acpi_integer in_dividend,
|
||||
acpi_integer in_divisor,
|
||||
acpi_integer * out_quotient, acpi_integer * out_remainder);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_short_divide(acpi_integer in_dividend,
|
||||
u32 divisor,
|
||||
acpi_integer * out_quotient, u32 * out_remainder);
|
||||
|
||||
/*
|
||||
* utmisc
|
||||
*/
|
||||
const char *acpi_ut_validate_exception(acpi_status status);
|
||||
|
||||
u8 acpi_ut_is_aml_table(struct acpi_table_header *table);
|
||||
|
||||
acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id);
|
||||
|
||||
void acpi_ut_release_owner_id(acpi_owner_id * owner_id);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_walk_package_tree(union acpi_operand_object *source_object,
|
||||
void *target_object,
|
||||
acpi_pkg_callback walk_callback, void *context);
|
||||
|
||||
void acpi_ut_strupr(char *src_string);
|
||||
|
||||
void acpi_ut_print_string(char *string, u8 max_length);
|
||||
|
||||
u8 acpi_ut_valid_acpi_name(u32 name);
|
||||
|
||||
acpi_name acpi_ut_repair_name(char *name);
|
||||
|
||||
u8 acpi_ut_valid_acpi_char(char character, u32 position);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_strtoul64(char *string, u32 base, acpi_integer * ret_integer);
|
||||
|
||||
/* Values for Base above (16=Hex, 10=Decimal) */
|
||||
|
||||
#define ACPI_ANY_BASE 0
|
||||
|
||||
u32 acpi_ut_dword_byte_swap(u32 value);
|
||||
|
||||
void acpi_ut_set_integer_width(u8 revision);
|
||||
|
||||
#ifdef ACPI_DEBUG_OUTPUT
|
||||
void
|
||||
acpi_ut_display_init_pathname(u8 type,
|
||||
struct acpi_namespace_node *obj_handle,
|
||||
char *path);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* utresrc
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ut_walk_aml_resources(u8 * aml,
|
||||
acpi_size aml_length,
|
||||
acpi_walk_aml_callback user_function,
|
||||
void **context);
|
||||
|
||||
acpi_status acpi_ut_validate_resource(void *aml, u8 * return_index);
|
||||
|
||||
u32 acpi_ut_get_descriptor_length(void *aml);
|
||||
|
||||
u16 acpi_ut_get_resource_length(void *aml);
|
||||
|
||||
u8 acpi_ut_get_resource_header_length(void *aml);
|
||||
|
||||
u8 acpi_ut_get_resource_type(void *aml);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_get_resource_end_tag(union acpi_operand_object *obj_desc,
|
||||
u8 ** end_tag);
|
||||
|
||||
/*
|
||||
* utmutex - mutex support
|
||||
*/
|
||||
acpi_status acpi_ut_mutex_initialize(void);
|
||||
|
||||
void acpi_ut_mutex_terminate(void);
|
||||
|
||||
acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id);
|
||||
|
||||
acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id);
|
||||
|
||||
/*
|
||||
* utalloc - memory allocation and object caching
|
||||
*/
|
||||
acpi_status acpi_ut_create_caches(void);
|
||||
|
||||
acpi_status acpi_ut_delete_caches(void);
|
||||
|
||||
acpi_status acpi_ut_validate_buffer(struct acpi_buffer *buffer);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_initialize_buffer(struct acpi_buffer *buffer,
|
||||
acpi_size required_length);
|
||||
|
||||
void *acpi_ut_allocate(acpi_size size,
|
||||
u32 component, const char *module, u32 line);
|
||||
|
||||
void *acpi_ut_allocate_zeroed(acpi_size size,
|
||||
u32 component, const char *module, u32 line);
|
||||
|
||||
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
|
||||
void *acpi_ut_allocate_and_track(acpi_size size,
|
||||
u32 component, const char *module, u32 line);
|
||||
|
||||
void *acpi_ut_allocate_zeroed_and_track(acpi_size size,
|
||||
u32 component,
|
||||
const char *module, u32 line);
|
||||
|
||||
void
|
||||
acpi_ut_free_and_track(void *address,
|
||||
u32 component, const char *module, u32 line);
|
||||
|
||||
#ifdef ACPI_FUTURE_USAGE
|
||||
void acpi_ut_dump_allocation_info(void);
|
||||
#endif /* ACPI_FUTURE_USAGE */
|
||||
|
||||
void acpi_ut_dump_allocations(u32 component, const char *module);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_create_list(char *list_name,
|
||||
u16 object_size, struct acpi_memory_list **return_cache);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _ACUTILS_H */
|
||||
@@ -1,494 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: amlcode.h - Definitions for AML, as included in "definition blocks"
|
||||
* Declarations and definitions contained herein are derived
|
||||
* directly from the ACPI specification.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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 __AMLCODE_H__
|
||||
#define __AMLCODE_H__
|
||||
|
||||
/* primary opcodes */
|
||||
|
||||
#define AML_NULL_CHAR (u16) 0x00
|
||||
|
||||
#define AML_ZERO_OP (u16) 0x00
|
||||
#define AML_ONE_OP (u16) 0x01
|
||||
#define AML_UNASSIGNED (u16) 0x02
|
||||
#define AML_ALIAS_OP (u16) 0x06
|
||||
#define AML_NAME_OP (u16) 0x08
|
||||
#define AML_BYTE_OP (u16) 0x0a
|
||||
#define AML_WORD_OP (u16) 0x0b
|
||||
#define AML_DWORD_OP (u16) 0x0c
|
||||
#define AML_STRING_OP (u16) 0x0d
|
||||
#define AML_QWORD_OP (u16) 0x0e /* ACPI 2.0 */
|
||||
#define AML_SCOPE_OP (u16) 0x10
|
||||
#define AML_BUFFER_OP (u16) 0x11
|
||||
#define AML_PACKAGE_OP (u16) 0x12
|
||||
#define AML_VAR_PACKAGE_OP (u16) 0x13 /* ACPI 2.0 */
|
||||
#define AML_METHOD_OP (u16) 0x14
|
||||
#define AML_DUAL_NAME_PREFIX (u16) 0x2e
|
||||
#define AML_MULTI_NAME_PREFIX_OP (u16) 0x2f
|
||||
#define AML_NAME_CHAR_SUBSEQ (u16) 0x30
|
||||
#define AML_NAME_CHAR_FIRST (u16) 0x41
|
||||
#define AML_EXTENDED_OP_PREFIX (u16) 0x5b
|
||||
#define AML_ROOT_PREFIX (u16) 0x5c
|
||||
#define AML_PARENT_PREFIX (u16) 0x5e
|
||||
#define AML_LOCAL_OP (u16) 0x60
|
||||
#define AML_LOCAL0 (u16) 0x60
|
||||
#define AML_LOCAL1 (u16) 0x61
|
||||
#define AML_LOCAL2 (u16) 0x62
|
||||
#define AML_LOCAL3 (u16) 0x63
|
||||
#define AML_LOCAL4 (u16) 0x64
|
||||
#define AML_LOCAL5 (u16) 0x65
|
||||
#define AML_LOCAL6 (u16) 0x66
|
||||
#define AML_LOCAL7 (u16) 0x67
|
||||
#define AML_ARG_OP (u16) 0x68
|
||||
#define AML_ARG0 (u16) 0x68
|
||||
#define AML_ARG1 (u16) 0x69
|
||||
#define AML_ARG2 (u16) 0x6a
|
||||
#define AML_ARG3 (u16) 0x6b
|
||||
#define AML_ARG4 (u16) 0x6c
|
||||
#define AML_ARG5 (u16) 0x6d
|
||||
#define AML_ARG6 (u16) 0x6e
|
||||
#define AML_STORE_OP (u16) 0x70
|
||||
#define AML_REF_OF_OP (u16) 0x71
|
||||
#define AML_ADD_OP (u16) 0x72
|
||||
#define AML_CONCAT_OP (u16) 0x73
|
||||
#define AML_SUBTRACT_OP (u16) 0x74
|
||||
#define AML_INCREMENT_OP (u16) 0x75
|
||||
#define AML_DECREMENT_OP (u16) 0x76
|
||||
#define AML_MULTIPLY_OP (u16) 0x77
|
||||
#define AML_DIVIDE_OP (u16) 0x78
|
||||
#define AML_SHIFT_LEFT_OP (u16) 0x79
|
||||
#define AML_SHIFT_RIGHT_OP (u16) 0x7a
|
||||
#define AML_BIT_AND_OP (u16) 0x7b
|
||||
#define AML_BIT_NAND_OP (u16) 0x7c
|
||||
#define AML_BIT_OR_OP (u16) 0x7d
|
||||
#define AML_BIT_NOR_OP (u16) 0x7e
|
||||
#define AML_BIT_XOR_OP (u16) 0x7f
|
||||
#define AML_BIT_NOT_OP (u16) 0x80
|
||||
#define AML_FIND_SET_LEFT_BIT_OP (u16) 0x81
|
||||
#define AML_FIND_SET_RIGHT_BIT_OP (u16) 0x82
|
||||
#define AML_DEREF_OF_OP (u16) 0x83
|
||||
#define AML_CONCAT_RES_OP (u16) 0x84 /* ACPI 2.0 */
|
||||
#define AML_MOD_OP (u16) 0x85 /* ACPI 2.0 */
|
||||
#define AML_NOTIFY_OP (u16) 0x86
|
||||
#define AML_SIZE_OF_OP (u16) 0x87
|
||||
#define AML_INDEX_OP (u16) 0x88
|
||||
#define AML_MATCH_OP (u16) 0x89
|
||||
#define AML_CREATE_DWORD_FIELD_OP (u16) 0x8a
|
||||
#define AML_CREATE_WORD_FIELD_OP (u16) 0x8b
|
||||
#define AML_CREATE_BYTE_FIELD_OP (u16) 0x8c
|
||||
#define AML_CREATE_BIT_FIELD_OP (u16) 0x8d
|
||||
#define AML_TYPE_OP (u16) 0x8e
|
||||
#define AML_CREATE_QWORD_FIELD_OP (u16) 0x8f /* ACPI 2.0 */
|
||||
#define AML_LAND_OP (u16) 0x90
|
||||
#define AML_LOR_OP (u16) 0x91
|
||||
#define AML_LNOT_OP (u16) 0x92
|
||||
#define AML_LEQUAL_OP (u16) 0x93
|
||||
#define AML_LGREATER_OP (u16) 0x94
|
||||
#define AML_LLESS_OP (u16) 0x95
|
||||
#define AML_TO_BUFFER_OP (u16) 0x96 /* ACPI 2.0 */
|
||||
#define AML_TO_DECSTRING_OP (u16) 0x97 /* ACPI 2.0 */
|
||||
#define AML_TO_HEXSTRING_OP (u16) 0x98 /* ACPI 2.0 */
|
||||
#define AML_TO_INTEGER_OP (u16) 0x99 /* ACPI 2.0 */
|
||||
#define AML_TO_STRING_OP (u16) 0x9c /* ACPI 2.0 */
|
||||
#define AML_COPY_OP (u16) 0x9d /* ACPI 2.0 */
|
||||
#define AML_MID_OP (u16) 0x9e /* ACPI 2.0 */
|
||||
#define AML_CONTINUE_OP (u16) 0x9f /* ACPI 2.0 */
|
||||
#define AML_IF_OP (u16) 0xa0
|
||||
#define AML_ELSE_OP (u16) 0xa1
|
||||
#define AML_WHILE_OP (u16) 0xa2
|
||||
#define AML_NOOP_OP (u16) 0xa3
|
||||
#define AML_RETURN_OP (u16) 0xa4
|
||||
#define AML_BREAK_OP (u16) 0xa5
|
||||
#define AML_BREAK_POINT_OP (u16) 0xcc
|
||||
#define AML_ONES_OP (u16) 0xff
|
||||
|
||||
/* prefixed opcodes */
|
||||
|
||||
#define AML_EXTENDED_OPCODE (u16) 0x5b00 /* prefix for 2-byte opcodes */
|
||||
|
||||
#define AML_MUTEX_OP (u16) 0x5b01
|
||||
#define AML_EVENT_OP (u16) 0x5b02
|
||||
#define AML_SHIFT_RIGHT_BIT_OP (u16) 0x5b10
|
||||
#define AML_SHIFT_LEFT_BIT_OP (u16) 0x5b11
|
||||
#define AML_COND_REF_OF_OP (u16) 0x5b12
|
||||
#define AML_CREATE_FIELD_OP (u16) 0x5b13
|
||||
#define AML_LOAD_TABLE_OP (u16) 0x5b1f /* ACPI 2.0 */
|
||||
#define AML_LOAD_OP (u16) 0x5b20
|
||||
#define AML_STALL_OP (u16) 0x5b21
|
||||
#define AML_SLEEP_OP (u16) 0x5b22
|
||||
#define AML_ACQUIRE_OP (u16) 0x5b23
|
||||
#define AML_SIGNAL_OP (u16) 0x5b24
|
||||
#define AML_WAIT_OP (u16) 0x5b25
|
||||
#define AML_RESET_OP (u16) 0x5b26
|
||||
#define AML_RELEASE_OP (u16) 0x5b27
|
||||
#define AML_FROM_BCD_OP (u16) 0x5b28
|
||||
#define AML_TO_BCD_OP (u16) 0x5b29
|
||||
#define AML_UNLOAD_OP (u16) 0x5b2a
|
||||
#define AML_REVISION_OP (u16) 0x5b30
|
||||
#define AML_DEBUG_OP (u16) 0x5b31
|
||||
#define AML_FATAL_OP (u16) 0x5b32
|
||||
#define AML_TIMER_OP (u16) 0x5b33 /* ACPI 3.0 */
|
||||
#define AML_REGION_OP (u16) 0x5b80
|
||||
#define AML_FIELD_OP (u16) 0x5b81
|
||||
#define AML_DEVICE_OP (u16) 0x5b82
|
||||
#define AML_PROCESSOR_OP (u16) 0x5b83
|
||||
#define AML_POWER_RES_OP (u16) 0x5b84
|
||||
#define AML_THERMAL_ZONE_OP (u16) 0x5b85
|
||||
#define AML_INDEX_FIELD_OP (u16) 0x5b86
|
||||
#define AML_BANK_FIELD_OP (u16) 0x5b87
|
||||
#define AML_DATA_REGION_OP (u16) 0x5b88 /* ACPI 2.0 */
|
||||
|
||||
/*
|
||||
* Combination opcodes (actually two one-byte opcodes)
|
||||
* Used by the disassembler and i_aSL compiler
|
||||
*/
|
||||
#define AML_LGREATEREQUAL_OP (u16) 0x9295
|
||||
#define AML_LLESSEQUAL_OP (u16) 0x9294
|
||||
#define AML_LNOTEQUAL_OP (u16) 0x9293
|
||||
|
||||
/*
|
||||
* Internal opcodes
|
||||
* Use only "Unknown" AML opcodes, don't attempt to use
|
||||
* any valid ACPI ASCII values (A-Z, 0-9, '-')
|
||||
*/
|
||||
#define AML_INT_NAMEPATH_OP (u16) 0x002d
|
||||
#define AML_INT_NAMEDFIELD_OP (u16) 0x0030
|
||||
#define AML_INT_RESERVEDFIELD_OP (u16) 0x0031
|
||||
#define AML_INT_ACCESSFIELD_OP (u16) 0x0032
|
||||
#define AML_INT_BYTELIST_OP (u16) 0x0033
|
||||
#define AML_INT_STATICSTRING_OP (u16) 0x0034
|
||||
#define AML_INT_METHODCALL_OP (u16) 0x0035
|
||||
#define AML_INT_RETURN_VALUE_OP (u16) 0x0036
|
||||
#define AML_INT_EVAL_SUBTREE_OP (u16) 0x0037
|
||||
|
||||
#define ARG_NONE 0x0
|
||||
|
||||
/*
|
||||
* Argument types for the AML Parser
|
||||
* Each field in the arg_types u32 is 5 bits, allowing for a maximum of 6 arguments.
|
||||
* There can be up to 31 unique argument types
|
||||
* Zero is reserved as end-of-list indicator
|
||||
*/
|
||||
#define ARGP_BYTEDATA 0x01
|
||||
#define ARGP_BYTELIST 0x02
|
||||
#define ARGP_CHARLIST 0x03
|
||||
#define ARGP_DATAOBJ 0x04
|
||||
#define ARGP_DATAOBJLIST 0x05
|
||||
#define ARGP_DWORDDATA 0x06
|
||||
#define ARGP_FIELDLIST 0x07
|
||||
#define ARGP_NAME 0x08
|
||||
#define ARGP_NAMESTRING 0x09
|
||||
#define ARGP_OBJLIST 0x0A
|
||||
#define ARGP_PKGLENGTH 0x0B
|
||||
#define ARGP_SUPERNAME 0x0C
|
||||
#define ARGP_TARGET 0x0D
|
||||
#define ARGP_TERMARG 0x0E
|
||||
#define ARGP_TERMLIST 0x0F
|
||||
#define ARGP_WORDDATA 0x10
|
||||
#define ARGP_QWORDDATA 0x11
|
||||
#define ARGP_SIMPLENAME 0x12
|
||||
|
||||
/*
|
||||
* Resolved argument types for the AML Interpreter
|
||||
* Each field in the arg_types u32 is 5 bits, allowing for a maximum of 6 arguments.
|
||||
* There can be up to 31 unique argument types (0 is end-of-arg-list indicator)
|
||||
*
|
||||
* Note1: These values are completely independent from the ACPI_TYPEs
|
||||
* i.e., ARGI_INTEGER != ACPI_TYPE_INTEGER
|
||||
*
|
||||
* Note2: If and when 5 bits becomes insufficient, it would probably be best
|
||||
* to convert to a 6-byte array of argument types, allowing 8 bits per argument.
|
||||
*/
|
||||
|
||||
/* Single, simple types */
|
||||
|
||||
#define ARGI_ANYTYPE 0x01 /* Don't care */
|
||||
#define ARGI_PACKAGE 0x02
|
||||
#define ARGI_EVENT 0x03
|
||||
#define ARGI_MUTEX 0x04
|
||||
#define ARGI_DDBHANDLE 0x05
|
||||
|
||||
/* Interchangeable types (via implicit conversion) */
|
||||
|
||||
#define ARGI_INTEGER 0x06
|
||||
#define ARGI_STRING 0x07
|
||||
#define ARGI_BUFFER 0x08
|
||||
#define ARGI_BUFFER_OR_STRING 0x09 /* Used by MID op only */
|
||||
#define ARGI_COMPUTEDATA 0x0A /* Buffer, String, or Integer */
|
||||
|
||||
/* Reference objects */
|
||||
|
||||
#define ARGI_INTEGER_REF 0x0B
|
||||
#define ARGI_OBJECT_REF 0x0C
|
||||
#define ARGI_DEVICE_REF 0x0D
|
||||
#define ARGI_REFERENCE 0x0E
|
||||
#define ARGI_TARGETREF 0x0F /* Target, subject to implicit conversion */
|
||||
#define ARGI_FIXED_TARGET 0x10 /* Target, no implicit conversion */
|
||||
#define ARGI_SIMPLE_TARGET 0x11 /* Name, Local, Arg -- no implicit conversion */
|
||||
|
||||
/* Multiple/complex types */
|
||||
|
||||
#define ARGI_DATAOBJECT 0x12 /* Buffer, String, package or reference to a Node - Used only by size_of operator */
|
||||
#define ARGI_COMPLEXOBJ 0x13 /* Buffer, String, or package (Used by INDEX op only) */
|
||||
#define ARGI_REF_OR_STRING 0x14 /* Reference or String (Used by DEREFOF op only) */
|
||||
#define ARGI_REGION_OR_BUFFER 0x15 /* Used by LOAD op only */
|
||||
#define ARGI_DATAREFOBJ 0x16
|
||||
|
||||
/* Note: types above can expand to 0x1F maximum */
|
||||
|
||||
#define ARGI_INVALID_OPCODE 0xFFFFFFFF
|
||||
|
||||
/*
|
||||
* hash offsets
|
||||
*/
|
||||
#define AML_EXTOP_HASH_OFFSET 22
|
||||
#define AML_LNOT_HASH_OFFSET 19
|
||||
|
||||
/*
|
||||
* opcode groups and types
|
||||
*/
|
||||
#define OPGRP_NAMED 0x01
|
||||
#define OPGRP_FIELD 0x02
|
||||
#define OPGRP_BYTELIST 0x04
|
||||
|
||||
/*
|
||||
* Opcode information
|
||||
*/
|
||||
|
||||
/* Opcode flags */
|
||||
|
||||
#define AML_LOGICAL 0x0001
|
||||
#define AML_LOGICAL_NUMERIC 0x0002
|
||||
#define AML_MATH 0x0004
|
||||
#define AML_CREATE 0x0008
|
||||
#define AML_FIELD 0x0010
|
||||
#define AML_DEFER 0x0020
|
||||
#define AML_NAMED 0x0040
|
||||
#define AML_NSNODE 0x0080
|
||||
#define AML_NSOPCODE 0x0100
|
||||
#define AML_NSOBJECT 0x0200
|
||||
#define AML_HAS_RETVAL 0x0400
|
||||
#define AML_HAS_TARGET 0x0800
|
||||
#define AML_HAS_ARGS 0x1000
|
||||
#define AML_CONSTANT 0x2000
|
||||
#define AML_NO_OPERAND_RESOLVE 0x4000
|
||||
|
||||
/* Convenient flag groupings */
|
||||
|
||||
#define AML_FLAGS_EXEC_0A_0T_1R AML_HAS_RETVAL
|
||||
#define AML_FLAGS_EXEC_1A_0T_0R AML_HAS_ARGS /* Monadic1 */
|
||||
#define AML_FLAGS_EXEC_1A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL /* Monadic2 */
|
||||
#define AML_FLAGS_EXEC_1A_1T_0R AML_HAS_ARGS | AML_HAS_TARGET
|
||||
#define AML_FLAGS_EXEC_1A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* monadic2_r */
|
||||
#define AML_FLAGS_EXEC_2A_0T_0R AML_HAS_ARGS /* Dyadic1 */
|
||||
#define AML_FLAGS_EXEC_2A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL /* Dyadic2 */
|
||||
#define AML_FLAGS_EXEC_2A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* dyadic2_r */
|
||||
#define AML_FLAGS_EXEC_2A_2T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL
|
||||
#define AML_FLAGS_EXEC_3A_0T_0R AML_HAS_ARGS
|
||||
#define AML_FLAGS_EXEC_3A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL
|
||||
#define AML_FLAGS_EXEC_6A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL
|
||||
|
||||
/*
|
||||
* The opcode Type is used in a dispatch table, do not change
|
||||
* without updating the table.
|
||||
*/
|
||||
#define AML_TYPE_EXEC_0A_0T_1R 0x00
|
||||
#define AML_TYPE_EXEC_1A_0T_0R 0x01 /* Monadic1 */
|
||||
#define AML_TYPE_EXEC_1A_0T_1R 0x02 /* Monadic2 */
|
||||
#define AML_TYPE_EXEC_1A_1T_0R 0x03
|
||||
#define AML_TYPE_EXEC_1A_1T_1R 0x04 /* monadic2_r */
|
||||
#define AML_TYPE_EXEC_2A_0T_0R 0x05 /* Dyadic1 */
|
||||
#define AML_TYPE_EXEC_2A_0T_1R 0x06 /* Dyadic2 */
|
||||
#define AML_TYPE_EXEC_2A_1T_1R 0x07 /* dyadic2_r */
|
||||
#define AML_TYPE_EXEC_2A_2T_1R 0x08
|
||||
#define AML_TYPE_EXEC_3A_0T_0R 0x09
|
||||
#define AML_TYPE_EXEC_3A_1T_1R 0x0A
|
||||
#define AML_TYPE_EXEC_6A_0T_1R 0x0B
|
||||
/* End of types used in dispatch table */
|
||||
|
||||
#define AML_TYPE_LITERAL 0x0B
|
||||
#define AML_TYPE_CONSTANT 0x0C
|
||||
#define AML_TYPE_METHOD_ARGUMENT 0x0D
|
||||
#define AML_TYPE_LOCAL_VARIABLE 0x0E
|
||||
#define AML_TYPE_DATA_TERM 0x0F
|
||||
|
||||
/* Generic for an op that returns a value */
|
||||
|
||||
#define AML_TYPE_METHOD_CALL 0x10
|
||||
|
||||
/* Misc */
|
||||
|
||||
#define AML_TYPE_CREATE_FIELD 0x11
|
||||
#define AML_TYPE_CREATE_OBJECT 0x12
|
||||
#define AML_TYPE_CONTROL 0x13
|
||||
#define AML_TYPE_NAMED_NO_OBJ 0x14
|
||||
#define AML_TYPE_NAMED_FIELD 0x15
|
||||
#define AML_TYPE_NAMED_SIMPLE 0x16
|
||||
#define AML_TYPE_NAMED_COMPLEX 0x17
|
||||
#define AML_TYPE_RETURN 0x18
|
||||
|
||||
#define AML_TYPE_UNDEFINED 0x19
|
||||
#define AML_TYPE_BOGUS 0x1A
|
||||
|
||||
/* AML Package Length encodings */
|
||||
|
||||
#define ACPI_AML_PACKAGE_TYPE1 0x40
|
||||
#define ACPI_AML_PACKAGE_TYPE2 0x4000
|
||||
#define ACPI_AML_PACKAGE_TYPE3 0x400000
|
||||
#define ACPI_AML_PACKAGE_TYPE4 0x40000000
|
||||
|
||||
/*
|
||||
* Opcode classes
|
||||
*/
|
||||
#define AML_CLASS_EXECUTE 0x00
|
||||
#define AML_CLASS_CREATE 0x01
|
||||
#define AML_CLASS_ARGUMENT 0x02
|
||||
#define AML_CLASS_NAMED_OBJECT 0x03
|
||||
#define AML_CLASS_CONTROL 0x04
|
||||
#define AML_CLASS_ASCII 0x05
|
||||
#define AML_CLASS_PREFIX 0x06
|
||||
#define AML_CLASS_INTERNAL 0x07
|
||||
#define AML_CLASS_RETURN_VALUE 0x08
|
||||
#define AML_CLASS_METHOD_CALL 0x09
|
||||
#define AML_CLASS_UNKNOWN 0x0A
|
||||
|
||||
/* Predefined Operation Region space_iDs */
|
||||
|
||||
typedef enum {
|
||||
REGION_MEMORY = 0,
|
||||
REGION_IO,
|
||||
REGION_PCI_CONFIG,
|
||||
REGION_EC,
|
||||
REGION_SMBUS,
|
||||
REGION_CMOS,
|
||||
REGION_PCI_BAR,
|
||||
REGION_DATA_TABLE, /* Internal use only */
|
||||
REGION_FIXED_HW = 0x7F
|
||||
} AML_REGION_TYPES;
|
||||
|
||||
/* Comparison operation codes for match_op operator */
|
||||
|
||||
typedef enum {
|
||||
MATCH_MTR = 0,
|
||||
MATCH_MEQ = 1,
|
||||
MATCH_MLE = 2,
|
||||
MATCH_MLT = 3,
|
||||
MATCH_MGE = 4,
|
||||
MATCH_MGT = 5
|
||||
} AML_MATCH_OPERATOR;
|
||||
|
||||
#define MAX_MATCH_OPERATOR 5
|
||||
|
||||
/*
|
||||
* field_flags
|
||||
*
|
||||
* This byte is extracted from the AML and includes three separate
|
||||
* pieces of information about the field:
|
||||
* 1) The field access type
|
||||
* 2) The field update rule
|
||||
* 3) The lock rule for the field
|
||||
*
|
||||
* Bits 00 - 03 : access_type (any_acc, byte_acc, etc.)
|
||||
* 04 : lock_rule (1 == Lock)
|
||||
* 05 - 06 : update_rule
|
||||
*/
|
||||
#define AML_FIELD_ACCESS_TYPE_MASK 0x0F
|
||||
#define AML_FIELD_LOCK_RULE_MASK 0x10
|
||||
#define AML_FIELD_UPDATE_RULE_MASK 0x60
|
||||
|
||||
/* 1) Field Access Types */
|
||||
|
||||
typedef enum {
|
||||
AML_FIELD_ACCESS_ANY = 0x00,
|
||||
AML_FIELD_ACCESS_BYTE = 0x01,
|
||||
AML_FIELD_ACCESS_WORD = 0x02,
|
||||
AML_FIELD_ACCESS_DWORD = 0x03,
|
||||
AML_FIELD_ACCESS_QWORD = 0x04, /* ACPI 2.0 */
|
||||
AML_FIELD_ACCESS_BUFFER = 0x05 /* ACPI 2.0 */
|
||||
} AML_ACCESS_TYPE;
|
||||
|
||||
/* 2) Field Lock Rules */
|
||||
|
||||
typedef enum {
|
||||
AML_FIELD_LOCK_NEVER = 0x00,
|
||||
AML_FIELD_LOCK_ALWAYS = 0x10
|
||||
} AML_LOCK_RULE;
|
||||
|
||||
/* 3) Field Update Rules */
|
||||
|
||||
typedef enum {
|
||||
AML_FIELD_UPDATE_PRESERVE = 0x00,
|
||||
AML_FIELD_UPDATE_WRITE_AS_ONES = 0x20,
|
||||
AML_FIELD_UPDATE_WRITE_AS_ZEROS = 0x40
|
||||
} AML_UPDATE_RULE;
|
||||
|
||||
/*
|
||||
* Field Access Attributes.
|
||||
* This byte is extracted from the AML via the
|
||||
* access_as keyword
|
||||
*/
|
||||
typedef enum {
|
||||
AML_FIELD_ATTRIB_SMB_QUICK = 0x02,
|
||||
AML_FIELD_ATTRIB_SMB_SEND_RCV = 0x04,
|
||||
AML_FIELD_ATTRIB_SMB_BYTE = 0x06,
|
||||
AML_FIELD_ATTRIB_SMB_WORD = 0x08,
|
||||
AML_FIELD_ATTRIB_SMB_BLOCK = 0x0A,
|
||||
AML_FIELD_ATTRIB_SMB_WORD_CALL = 0x0C,
|
||||
AML_FIELD_ATTRIB_SMB_BLOCK_CALL = 0x0D
|
||||
} AML_ACCESS_ATTRIBUTE;
|
||||
|
||||
/* Bit fields in method_flags byte */
|
||||
|
||||
#define AML_METHOD_ARG_COUNT 0x07
|
||||
#define AML_METHOD_SERIALIZED 0x08
|
||||
#define AML_METHOD_SYNCH_LEVEL 0xF0
|
||||
|
||||
/* METHOD_FLAGS_ARG_COUNT is not used internally, define additional flags */
|
||||
|
||||
#define AML_METHOD_INTERNAL_ONLY 0x01
|
||||
#define AML_METHOD_RESERVED1 0x02
|
||||
#define AML_METHOD_RESERVED2 0x04
|
||||
|
||||
#endif /* __AMLCODE_H__ */
|
||||
@@ -1,311 +0,0 @@
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: amlresrc.h - AML resource descriptors
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/* acpisrc:struct_defs -- for acpisrc conversion */
|
||||
|
||||
#ifndef __AMLRESRC_H
|
||||
#define __AMLRESRC_H
|
||||
|
||||
/*
|
||||
* Resource descriptor tags, as defined in the ACPI specification.
|
||||
* Used to symbolically reference fields within a descriptor.
|
||||
*/
|
||||
#define ACPI_RESTAG_ADDRESS "_ADR"
|
||||
#define ACPI_RESTAG_ALIGNMENT "_ALN"
|
||||
#define ACPI_RESTAG_ADDRESSSPACE "_ASI"
|
||||
#define ACPI_RESTAG_ACCESSSIZE "_ASZ"
|
||||
#define ACPI_RESTAG_TYPESPECIFICATTRIBUTES "_ATT"
|
||||
#define ACPI_RESTAG_BASEADDRESS "_BAS"
|
||||
#define ACPI_RESTAG_BUSMASTER "_BM_" /* Master(1), Slave(0) */
|
||||
#define ACPI_RESTAG_DECODE "_DEC"
|
||||
#define ACPI_RESTAG_DMA "_DMA"
|
||||
#define ACPI_RESTAG_DMATYPE "_TYP" /* Compatible(0), A(1), B(2), F(3) */
|
||||
#define ACPI_RESTAG_GRANULARITY "_GRA"
|
||||
#define ACPI_RESTAG_INTERRUPT "_INT"
|
||||
#define ACPI_RESTAG_INTERRUPTLEVEL "_LL_" /* active_lo(1), active_hi(0) */
|
||||
#define ACPI_RESTAG_INTERRUPTSHARE "_SHR" /* Shareable(1), no_share(0) */
|
||||
#define ACPI_RESTAG_INTERRUPTTYPE "_HE_" /* Edge(1), Level(0) */
|
||||
#define ACPI_RESTAG_LENGTH "_LEN"
|
||||
#define ACPI_RESTAG_MEMATTRIBUTES "_MTP" /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
|
||||
#define ACPI_RESTAG_MEMTYPE "_MEM" /* non_cache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
|
||||
#define ACPI_RESTAG_MAXADDR "_MAX"
|
||||
#define ACPI_RESTAG_MINADDR "_MIN"
|
||||
#define ACPI_RESTAG_MAXTYPE "_MAF"
|
||||
#define ACPI_RESTAG_MINTYPE "_MIF"
|
||||
#define ACPI_RESTAG_REGISTERBITOFFSET "_RBO"
|
||||
#define ACPI_RESTAG_REGISTERBITWIDTH "_RBW"
|
||||
#define ACPI_RESTAG_RANGETYPE "_RNG"
|
||||
#define ACPI_RESTAG_READWRITETYPE "_RW_" /* read_only(0), Writeable (1) */
|
||||
#define ACPI_RESTAG_TRANSLATION "_TRA"
|
||||
#define ACPI_RESTAG_TRANSTYPE "_TRS" /* Sparse(1), Dense(0) */
|
||||
#define ACPI_RESTAG_TYPE "_TTP" /* Translation(1), Static (0) */
|
||||
#define ACPI_RESTAG_XFERTYPE "_SIZ" /* 8(0), 8_and16(1), 16(2) */
|
||||
|
||||
/* Default sizes for "small" resource descriptors */
|
||||
|
||||
#define ASL_RDESC_IRQ_SIZE 0x02
|
||||
#define ASL_RDESC_DMA_SIZE 0x02
|
||||
#define ASL_RDESC_ST_DEPEND_SIZE 0x00
|
||||
#define ASL_RDESC_END_DEPEND_SIZE 0x00
|
||||
#define ASL_RDESC_IO_SIZE 0x07
|
||||
#define ASL_RDESC_FIXED_IO_SIZE 0x03
|
||||
#define ASL_RDESC_END_TAG_SIZE 0x01
|
||||
|
||||
struct asl_resource_node {
|
||||
u32 buffer_length;
|
||||
void *buffer;
|
||||
struct asl_resource_node *next;
|
||||
};
|
||||
|
||||
/* Macros used to generate AML resource length fields */
|
||||
|
||||
#define ACPI_AML_SIZE_LARGE(r) (sizeof (r) - sizeof (struct aml_resource_large_header))
|
||||
#define ACPI_AML_SIZE_SMALL(r) (sizeof (r) - sizeof (struct aml_resource_small_header))
|
||||
|
||||
/*
|
||||
* Resource descriptors defined in the ACPI specification.
|
||||
*
|
||||
* Packing/alignment must be BYTE because these descriptors
|
||||
* are used to overlay the raw AML byte stream.
|
||||
*/
|
||||
#pragma pack(1)
|
||||
|
||||
/*
|
||||
* SMALL descriptors
|
||||
*/
|
||||
#define AML_RESOURCE_SMALL_HEADER_COMMON \
|
||||
u8 descriptor_type;
|
||||
|
||||
struct aml_resource_small_header {
|
||||
AML_RESOURCE_SMALL_HEADER_COMMON};
|
||||
|
||||
struct aml_resource_irq {
|
||||
AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
|
||||
u8 flags;
|
||||
};
|
||||
|
||||
struct aml_resource_irq_noflags {
|
||||
AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
|
||||
};
|
||||
|
||||
struct aml_resource_dma {
|
||||
AML_RESOURCE_SMALL_HEADER_COMMON u8 dma_channel_mask;
|
||||
u8 flags;
|
||||
};
|
||||
|
||||
struct aml_resource_start_dependent {
|
||||
AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
|
||||
};
|
||||
|
||||
struct aml_resource_start_dependent_noprio {
|
||||
AML_RESOURCE_SMALL_HEADER_COMMON};
|
||||
|
||||
struct aml_resource_end_dependent {
|
||||
AML_RESOURCE_SMALL_HEADER_COMMON};
|
||||
|
||||
struct aml_resource_io {
|
||||
AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
|
||||
u16 minimum;
|
||||
u16 maximum;
|
||||
u8 alignment;
|
||||
u8 address_length;
|
||||
};
|
||||
|
||||
struct aml_resource_fixed_io {
|
||||
AML_RESOURCE_SMALL_HEADER_COMMON u16 address;
|
||||
u8 address_length;
|
||||
};
|
||||
|
||||
struct aml_resource_vendor_small {
|
||||
AML_RESOURCE_SMALL_HEADER_COMMON};
|
||||
|
||||
struct aml_resource_end_tag {
|
||||
AML_RESOURCE_SMALL_HEADER_COMMON u8 checksum;
|
||||
};
|
||||
|
||||
/*
|
||||
* LARGE descriptors
|
||||
*/
|
||||
#define AML_RESOURCE_LARGE_HEADER_COMMON \
|
||||
u8 descriptor_type;\
|
||||
u16 resource_length;
|
||||
|
||||
struct aml_resource_large_header {
|
||||
AML_RESOURCE_LARGE_HEADER_COMMON};
|
||||
|
||||
struct aml_resource_memory24 {
|
||||
AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
|
||||
u16 minimum;
|
||||
u16 maximum;
|
||||
u16 alignment;
|
||||
u16 address_length;
|
||||
};
|
||||
|
||||
struct aml_resource_vendor_large {
|
||||
AML_RESOURCE_LARGE_HEADER_COMMON};
|
||||
|
||||
struct aml_resource_memory32 {
|
||||
AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
|
||||
u32 minimum;
|
||||
u32 maximum;
|
||||
u32 alignment;
|
||||
u32 address_length;
|
||||
};
|
||||
|
||||
struct aml_resource_fixed_memory32 {
|
||||
AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
|
||||
u32 address;
|
||||
u32 address_length;
|
||||
};
|
||||
|
||||
#define AML_RESOURCE_ADDRESS_COMMON \
|
||||
u8 resource_type; \
|
||||
u8 flags; \
|
||||
u8 specific_flags;
|
||||
|
||||
struct aml_resource_address {
|
||||
AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON};
|
||||
|
||||
struct aml_resource_extended_address64 {
|
||||
AML_RESOURCE_LARGE_HEADER_COMMON
|
||||
AML_RESOURCE_ADDRESS_COMMON u8 revision_iD;
|
||||
u8 reserved;
|
||||
u64 granularity;
|
||||
u64 minimum;
|
||||
u64 maximum;
|
||||
u64 translation_offset;
|
||||
u64 address_length;
|
||||
u64 type_specific;
|
||||
};
|
||||
|
||||
#define AML_RESOURCE_EXTENDED_ADDRESS_REVISION 1 /* ACPI 3.0 */
|
||||
|
||||
struct aml_resource_address64 {
|
||||
AML_RESOURCE_LARGE_HEADER_COMMON
|
||||
AML_RESOURCE_ADDRESS_COMMON u64 granularity;
|
||||
u64 minimum;
|
||||
u64 maximum;
|
||||
u64 translation_offset;
|
||||
u64 address_length;
|
||||
};
|
||||
|
||||
struct aml_resource_address32 {
|
||||
AML_RESOURCE_LARGE_HEADER_COMMON
|
||||
AML_RESOURCE_ADDRESS_COMMON u32 granularity;
|
||||
u32 minimum;
|
||||
u32 maximum;
|
||||
u32 translation_offset;
|
||||
u32 address_length;
|
||||
};
|
||||
|
||||
struct aml_resource_address16 {
|
||||
AML_RESOURCE_LARGE_HEADER_COMMON
|
||||
AML_RESOURCE_ADDRESS_COMMON u16 granularity;
|
||||
u16 minimum;
|
||||
u16 maximum;
|
||||
u16 translation_offset;
|
||||
u16 address_length;
|
||||
};
|
||||
|
||||
struct aml_resource_extended_irq {
|
||||
AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
|
||||
u8 interrupt_count;
|
||||
u32 interrupts[1];
|
||||
/* res_source_index, res_source optional fields follow */
|
||||
};
|
||||
|
||||
struct aml_resource_generic_register {
|
||||
AML_RESOURCE_LARGE_HEADER_COMMON u8 address_space_id;
|
||||
u8 bit_width;
|
||||
u8 bit_offset;
|
||||
u8 access_size; /* ACPI 3.0, was previously Reserved */
|
||||
u64 address;
|
||||
};
|
||||
|
||||
/* restore default alignment */
|
||||
|
||||
#pragma pack()
|
||||
|
||||
/* Union of all resource descriptors, so we can allocate the worst case */
|
||||
|
||||
union aml_resource {
|
||||
/* Descriptor headers */
|
||||
|
||||
u8 descriptor_type;
|
||||
struct aml_resource_small_header small_header;
|
||||
struct aml_resource_large_header large_header;
|
||||
|
||||
/* Small resource descriptors */
|
||||
|
||||
struct aml_resource_irq irq;
|
||||
struct aml_resource_dma dma;
|
||||
struct aml_resource_start_dependent start_dpf;
|
||||
struct aml_resource_end_dependent end_dpf;
|
||||
struct aml_resource_io io;
|
||||
struct aml_resource_fixed_io fixed_io;
|
||||
struct aml_resource_vendor_small vendor_small;
|
||||
struct aml_resource_end_tag end_tag;
|
||||
|
||||
/* Large resource descriptors */
|
||||
|
||||
struct aml_resource_memory24 memory24;
|
||||
struct aml_resource_generic_register generic_reg;
|
||||
struct aml_resource_vendor_large vendor_large;
|
||||
struct aml_resource_memory32 memory32;
|
||||
struct aml_resource_fixed_memory32 fixed_memory32;
|
||||
struct aml_resource_address16 address16;
|
||||
struct aml_resource_address32 address32;
|
||||
struct aml_resource_address64 address64;
|
||||
struct aml_resource_extended_address64 ext_address64;
|
||||
struct aml_resource_extended_irq extended_irq;
|
||||
|
||||
/* Utility overlays */
|
||||
|
||||
struct aml_resource_address address;
|
||||
u32 dword_item;
|
||||
u16 word_item;
|
||||
u8 byte_item;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -44,14 +44,26 @@
|
||||
#ifndef __ACENV_H__
|
||||
#define __ACENV_H__
|
||||
|
||||
/*
|
||||
/* Types for ACPI_MUTEX_TYPE */
|
||||
|
||||
#define ACPI_BINARY_SEMAPHORE 0
|
||||
#define ACPI_OSL_MUTEX 1
|
||||
|
||||
/* Types for DEBUGGER_THREADING */
|
||||
|
||||
#define DEBUGGER_SINGLE_THREADED 0
|
||||
#define DEBUGGER_MULTI_THREADED 1
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Configuration for ACPI tools and utilities
|
||||
*/
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef ACPI_LIBRARY
|
||||
/*
|
||||
* Note: The non-debug version of the acpi_library does not contain any
|
||||
* debug support, for minimimal size. The debug version uses ACPI_FULL_DEBUG
|
||||
* debug support, for minimal size. The debug version uses ACPI_FULL_DEBUG
|
||||
*/
|
||||
#define ACPI_USE_LOCAL_CACHE
|
||||
#endif
|
||||
@@ -75,17 +87,6 @@
|
||||
#define ACPI_DBG_TRACK_ALLOCATIONS
|
||||
#endif
|
||||
|
||||
#ifdef ACPI_DASM_APP
|
||||
#ifndef MSDOS
|
||||
#define ACPI_DEBUG_OUTPUT
|
||||
#endif
|
||||
#define ACPI_APPLICATION
|
||||
#define ACPI_DISASSEMBLER
|
||||
#define ACPI_NO_METHOD_EXECUTION
|
||||
#define ACPI_LARGE_NAMESPACE_NODE
|
||||
#define ACPI_DATA_TABLE_DISASSEMBLY
|
||||
#endif
|
||||
|
||||
#ifdef ACPI_APPLICATION
|
||||
#define ACPI_USE_SYSTEM_CLIBRARY
|
||||
#define ACPI_USE_LOCAL_CACHE
|
||||
@@ -179,6 +180,19 @@
|
||||
|
||||
/*! [End] no source code translation !*/
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Miscellaneous configuration
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* Are mutexes supported by the host? default is no, use binary semaphores.
|
||||
*/
|
||||
#ifndef ACPI_MUTEX_TYPE
|
||||
#define ACPI_MUTEX_TYPE ACPI_BINARY_SEMAPHORE
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Debugger threading model
|
||||
* Use single threaded if the entire subsystem is contained in an application
|
||||
@@ -187,9 +201,6 @@
|
||||
* By default the model is single threaded if ACPI_APPLICATION is set,
|
||||
* multi-threaded if ACPI_APPLICATION is not set.
|
||||
*/
|
||||
#define DEBUGGER_SINGLE_THREADED 0
|
||||
#define DEBUGGER_MULTI_THREADED 1
|
||||
|
||||
#ifndef DEBUGGER_THREADING
|
||||
#ifdef ACPI_APPLICATION
|
||||
#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
|
||||
#define ACPI_USE_SYSTEM_CLIBRARY
|
||||
#define ACPI_USE_DO_WHILE_0
|
||||
#define ACPI_MUTEX_TYPE ACPI_BINARY_SEMAPHORE
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
@@ -70,9 +71,6 @@
|
||||
#define ACPI_EXPORT_SYMBOL(symbol) EXPORT_SYMBOL(symbol);
|
||||
#define strtoul simple_strtoul
|
||||
|
||||
/* Full namespace pathname length limit - arbitrary */
|
||||
#define ACPI_PATHNAME_MAX 256
|
||||
|
||||
#else /* !__KERNEL__ */
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
@@ -127,7 +127,7 @@ struct acpi_processor_performance {
|
||||
unsigned int state_count;
|
||||
struct acpi_processor_px *states;
|
||||
struct acpi_psd_package domain_info;
|
||||
cpumask_t shared_cpu_map;
|
||||
cpumask_var_t shared_cpu_map;
|
||||
unsigned int shared_type;
|
||||
};
|
||||
|
||||
@@ -172,7 +172,7 @@ struct acpi_processor_throttling {
|
||||
unsigned int state_count;
|
||||
struct acpi_processor_tx_tss *states_tss;
|
||||
struct acpi_tsd_package domain_info;
|
||||
cpumask_t shared_cpu_map;
|
||||
cpumask_var_t shared_cpu_map;
|
||||
int (*acpi_processor_get_throttling) (struct acpi_processor * pr);
|
||||
int (*acpi_processor_set_throttling) (struct acpi_processor * pr,
|
||||
int state);
|
||||
|
||||
@@ -3,3 +3,4 @@ include include/asm-generic/Kbuild.asm
|
||||
header-y += registers.h
|
||||
|
||||
unifdef-y += termios.h
|
||||
unifdef-y += swab.h
|
||||
|
||||
@@ -35,10 +35,6 @@
|
||||
#define smp_mb__before_atomic_inc() barrier()
|
||||
#define smp_mb__after_atomic_inc() barrier()
|
||||
|
||||
typedef struct {
|
||||
int counter;
|
||||
} atomic_t;
|
||||
|
||||
#define ATOMIC_INIT(i) { (i) }
|
||||
#define atomic_read(v) ((v)->counter)
|
||||
#define atomic_set(v, i) (((v)->counter) = (i))
|
||||
|
||||
@@ -339,6 +339,19 @@ int __ffs(unsigned long x)
|
||||
return 31 - bit;
|
||||
}
|
||||
|
||||
/**
|
||||
* __fls - find last (most-significant) set bit in a long word
|
||||
* @word: the word to search
|
||||
*
|
||||
* Undefined if no set bit exists, so code should check against 0 first.
|
||||
*/
|
||||
static inline unsigned long __fls(unsigned long word)
|
||||
{
|
||||
unsigned long bit;
|
||||
asm("scan %1,gr0,%0" : "=r"(bit) : "r"(word));
|
||||
return bit;
|
||||
}
|
||||
|
||||
/*
|
||||
* special slimline version of fls() for calculating ilog2_u32()
|
||||
* - note: no protection against n == 0
|
||||
|
||||
@@ -1,13 +1,7 @@
|
||||
#ifndef _ASM_BYTEORDER_H
|
||||
#define _ASM_BYTEORDER_H
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
||||
# define __BYTEORDER_HAS_U64__
|
||||
# define __SWAB_64_THRU_32__
|
||||
#endif
|
||||
|
||||
#include <asm/swab.h>
|
||||
#include <linux/byteorder/big_endian.h>
|
||||
|
||||
#endif /* _ASM_BYTEORDER_H */
|
||||
|
||||
@@ -22,7 +22,6 @@ typedef struct {
|
||||
unsigned long dtlb_ptd_mapping; /* [DAMR5] PTD mapping for dtlb cached PGE */
|
||||
|
||||
#else
|
||||
struct vm_list_struct *vmlist;
|
||||
unsigned long end_brk;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
#ifndef _ASM_SWAB_H
|
||||
#define _ASM_SWAB_H
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
||||
# define __SWAB_64_THRU_32__
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_SWAB_H */
|
||||
@@ -9,7 +9,7 @@
|
||||
*
|
||||
* Undefined if no bit exists, so code should check against 0 first.
|
||||
*/
|
||||
static inline unsigned long __ffs(unsigned long word)
|
||||
static __always_inline unsigned long __ffs(unsigned long word)
|
||||
{
|
||||
int num = 0;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*
|
||||
* Undefined if no set bit exists, so code should check against 0 first.
|
||||
*/
|
||||
static inline unsigned long __fls(unsigned long word)
|
||||
static __always_inline unsigned long __fls(unsigned long word)
|
||||
{
|
||||
int num = BITS_PER_LONG - 1;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32.
|
||||
*/
|
||||
|
||||
static inline int fls(int x)
|
||||
static __always_inline int fls(int x)
|
||||
{
|
||||
int r = 32;
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* at position 64.
|
||||
*/
|
||||
#if BITS_PER_LONG == 32
|
||||
static inline int fls64(__u64 x)
|
||||
static __always_inline int fls64(__u64 x)
|
||||
{
|
||||
__u32 h = x >> 32;
|
||||
if (h)
|
||||
@@ -23,7 +23,7 @@ static inline int fls64(__u64 x)
|
||||
return fls(x);
|
||||
}
|
||||
#elif BITS_PER_LONG == 64
|
||||
static inline int fls64(__u64 x)
|
||||
static __always_inline int fls64(__u64 x)
|
||||
{
|
||||
if (x == 0)
|
||||
return 0;
|
||||
|
||||
@@ -28,6 +28,17 @@ struct bug_entry {
|
||||
#define BUGFLAG_WARNING (1<<0)
|
||||
#endif /* CONFIG_GENERIC_BUG */
|
||||
|
||||
/*
|
||||
* Don't use BUG() or BUG_ON() unless there's really no way out; one
|
||||
* example might be detecting data structure corruption in the middle
|
||||
* of an operation that can't be backed out of. If the (sub)system
|
||||
* can somehow continue operating, perhaps with reduced functionality,
|
||||
* it's probably not BUG-worthy.
|
||||
*
|
||||
* If you're tempted to BUG(), think again: is completely giving up
|
||||
* really the *only* solution? There are usually better options, where
|
||||
* users don't need to reboot ASAP and can mostly shut down cleanly.
|
||||
*/
|
||||
#ifndef HAVE_ARCH_BUG
|
||||
#define BUG() do { \
|
||||
printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
|
||||
@@ -39,6 +50,12 @@ struct bug_entry {
|
||||
#define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while(0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* WARN(), WARN_ON(), WARN_ON_ONCE, and so on can be used to report
|
||||
* significant issues that need prompt attention if they should ever
|
||||
* appear at runtime. Use the versions with printk format strings
|
||||
* to provide better diagnostics.
|
||||
*/
|
||||
#ifndef __WARN
|
||||
#ifndef __ASSEMBLY__
|
||||
extern void warn_slowpath(const char *file, const int line,
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
#define _ASM_GENERIC_LOCAL_H
|
||||
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/hardirq.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/types.h>
|
||||
|
||||
|
||||
@@ -69,15 +69,8 @@
|
||||
})
|
||||
#endif /* CONFIG_FLATMEM/DISCONTIGMEM/SPARSEMEM */
|
||||
|
||||
#ifdef CONFIG_OUT_OF_LINE_PFN_TO_PAGE
|
||||
struct page;
|
||||
/* this is useful when inlined pfn_to_page is too big */
|
||||
extern struct page *pfn_to_page(unsigned long pfn);
|
||||
extern unsigned long page_to_pfn(struct page *page);
|
||||
#else
|
||||
#define page_to_pfn __page_to_pfn
|
||||
#define pfn_to_page __pfn_to_page
|
||||
#endif /* CONFIG_OUT_OF_LINE_PFN_TO_PAGE */
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
|
||||
@@ -80,4 +80,56 @@ extern void setup_per_cpu_areas(void);
|
||||
#define DECLARE_PER_CPU(type, name) extern PER_CPU_ATTRIBUTES \
|
||||
__typeof__(type) per_cpu_var(name)
|
||||
|
||||
/*
|
||||
* Optional methods for optimized non-lvalue per-cpu variable access.
|
||||
*
|
||||
* @var can be a percpu variable or a field of it and its size should
|
||||
* equal char, int or long. percpu_read() evaluates to a lvalue and
|
||||
* all others to void.
|
||||
*
|
||||
* These operations are guaranteed to be atomic w.r.t. preemption.
|
||||
* The generic versions use plain get/put_cpu_var(). Archs are
|
||||
* encouraged to implement single-instruction alternatives which don't
|
||||
* require preemption protection.
|
||||
*/
|
||||
#ifndef percpu_read
|
||||
# define percpu_read(var) \
|
||||
({ \
|
||||
typeof(per_cpu_var(var)) __tmp_var__; \
|
||||
__tmp_var__ = get_cpu_var(var); \
|
||||
put_cpu_var(var); \
|
||||
__tmp_var__; \
|
||||
})
|
||||
#endif
|
||||
|
||||
#define __percpu_generic_to_op(var, val, op) \
|
||||
do { \
|
||||
get_cpu_var(var) op val; \
|
||||
put_cpu_var(var); \
|
||||
} while (0)
|
||||
|
||||
#ifndef percpu_write
|
||||
# define percpu_write(var, val) __percpu_generic_to_op(var, (val), =)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_add
|
||||
# define percpu_add(var, val) __percpu_generic_to_op(var, (val), +=)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_sub
|
||||
# define percpu_sub(var, val) __percpu_generic_to_op(var, (val), -=)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_and
|
||||
# define percpu_and(var, val) __percpu_generic_to_op(var, (val), &=)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_or
|
||||
# define percpu_or(var, val) __percpu_generic_to_op(var, (val), |=)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_xor
|
||||
# define percpu_xor(var, val) __percpu_generic_to_op(var, (val), ^=)
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_GENERIC_PERCPU_H_ */
|
||||
|
||||
@@ -301,7 +301,7 @@ static inline void ptep_modify_prot_commit(struct mm_struct *mm,
|
||||
* track_pfn_vma_new is called when a _new_ pfn mapping is being established
|
||||
* for physical range indicated by pfn and size.
|
||||
*/
|
||||
static inline int track_pfn_vma_new(struct vm_area_struct *vma, pgprot_t prot,
|
||||
static inline int track_pfn_vma_new(struct vm_area_struct *vma, pgprot_t *prot,
|
||||
unsigned long pfn, unsigned long size)
|
||||
{
|
||||
return 0;
|
||||
@@ -332,7 +332,7 @@ static inline void untrack_pfn_vma(struct vm_area_struct *vma,
|
||||
{
|
||||
}
|
||||
#else
|
||||
extern int track_pfn_vma_new(struct vm_area_struct *vma, pgprot_t prot,
|
||||
extern int track_pfn_vma_new(struct vm_area_struct *vma, pgprot_t *prot,
|
||||
unsigned long pfn, unsigned long size);
|
||||
extern int track_pfn_vma_copy(struct vm_area_struct *vma);
|
||||
extern void untrack_pfn_vma(struct vm_area_struct *vma, unsigned long pfn,
|
||||
|
||||
@@ -9,7 +9,7 @@ extern char __bss_start[], __bss_stop[];
|
||||
extern char __init_begin[], __init_end[];
|
||||
extern char _sinittext[], _einittext[];
|
||||
extern char _end[];
|
||||
extern char __per_cpu_start[], __per_cpu_end[];
|
||||
extern char __per_cpu_load[], __per_cpu_start[], __per_cpu_end[];
|
||||
extern char __kprobes_text_start[], __kprobes_text_end[];
|
||||
extern char __initdata_begin[], __initdata_end[];
|
||||
extern char __start_rodata[], __end_rodata[];
|
||||
|
||||
@@ -40,6 +40,9 @@
|
||||
#ifndef node_to_cpumask
|
||||
#define node_to_cpumask(node) ((void)node, cpu_online_map)
|
||||
#endif
|
||||
#ifndef cpumask_of_node
|
||||
#define cpumask_of_node(node) ((void)node, cpu_online_mask)
|
||||
#endif
|
||||
#ifndef node_to_first_cpu
|
||||
#define node_to_first_cpu(node) ((void)(node),0)
|
||||
#endif
|
||||
@@ -54,9 +57,18 @@
|
||||
)
|
||||
#endif
|
||||
|
||||
#ifndef cpumask_of_pcibus
|
||||
#define cpumask_of_pcibus(bus) (pcibus_to_node(bus) == -1 ? \
|
||||
cpu_all_mask : \
|
||||
cpumask_of_node(pcibus_to_node(bus)))
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_NUMA */
|
||||
|
||||
/* returns pointer to cpumask for specified node */
|
||||
/*
|
||||
* returns pointer to cpumask for specified node
|
||||
* Deprecated: use "const struct cpumask *mask = cpumask_of_node(node)"
|
||||
*/
|
||||
#ifndef node_to_cpumask_ptr
|
||||
|
||||
#define node_to_cpumask_ptr(v, node) \
|
||||
|
||||
@@ -430,12 +430,75 @@
|
||||
*(.initcall7.init) \
|
||||
*(.initcall7s.init)
|
||||
|
||||
#define PERCPU(align) \
|
||||
. = ALIGN(align); \
|
||||
VMLINUX_SYMBOL(__per_cpu_start) = .; \
|
||||
.data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { \
|
||||
#define PERCPU_PROLOG(vaddr) \
|
||||
VMLINUX_SYMBOL(__per_cpu_load) = .; \
|
||||
.data.percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load) \
|
||||
- LOAD_OFFSET) { \
|
||||
VMLINUX_SYMBOL(__per_cpu_start) = .;
|
||||
|
||||
#define PERCPU_EPILOG(phdr) \
|
||||
VMLINUX_SYMBOL(__per_cpu_end) = .; \
|
||||
} phdr \
|
||||
. = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data.percpu);
|
||||
|
||||
/**
|
||||
* PERCPU_VADDR_PREALLOC - define output section for percpu area with prealloc
|
||||
* @vaddr: explicit base address (optional)
|
||||
* @phdr: destination PHDR (optional)
|
||||
* @prealloc: the size of prealloc area
|
||||
*
|
||||
* Macro which expands to output section for percpu area. If @vaddr
|
||||
* is not blank, it specifies explicit base address and all percpu
|
||||
* symbols will be offset from the given address. If blank, @vaddr
|
||||
* always equals @laddr + LOAD_OFFSET.
|
||||
*
|
||||
* @phdr defines the output PHDR to use if not blank. Be warned that
|
||||
* output PHDR is sticky. If @phdr is specified, the next output
|
||||
* section in the linker script will go there too. @phdr should have
|
||||
* a leading colon.
|
||||
*
|
||||
* If @prealloc is non-zero, the specified number of bytes will be
|
||||
* reserved at the start of percpu area. As the prealloc area is
|
||||
* likely to break alignment, this macro puts areas in increasing
|
||||
* alignment order.
|
||||
*
|
||||
* This macro defines three symbols, __per_cpu_load, __per_cpu_start
|
||||
* and __per_cpu_end. The first one is the vaddr of loaded percpu
|
||||
* init data. __per_cpu_start equals @vaddr and __per_cpu_end is the
|
||||
* end offset.
|
||||
*/
|
||||
#define PERCPU_VADDR_PREALLOC(vaddr, segment, prealloc) \
|
||||
PERCPU_PROLOG(vaddr) \
|
||||
. += prealloc; \
|
||||
*(.data.percpu) \
|
||||
*(.data.percpu.shared_aligned) \
|
||||
*(.data.percpu.page_aligned) \
|
||||
PERCPU_EPILOG(segment)
|
||||
|
||||
/**
|
||||
* PERCPU_VADDR - define output section for percpu area
|
||||
* @vaddr: explicit base address (optional)
|
||||
* @phdr: destination PHDR (optional)
|
||||
*
|
||||
* Macro which expands to output section for percpu area. Mostly
|
||||
* identical to PERCPU_VADDR_PREALLOC(@vaddr, @phdr, 0) other than
|
||||
* using slighly different layout.
|
||||
*/
|
||||
#define PERCPU_VADDR(vaddr, phdr) \
|
||||
PERCPU_PROLOG(vaddr) \
|
||||
*(.data.percpu.page_aligned) \
|
||||
*(.data.percpu) \
|
||||
*(.data.percpu.shared_aligned) \
|
||||
} \
|
||||
VMLINUX_SYMBOL(__per_cpu_end) = .;
|
||||
PERCPU_EPILOG(phdr)
|
||||
|
||||
/**
|
||||
* PERCPU - define output section for percpu area, simple version
|
||||
* @align: required alignment
|
||||
*
|
||||
* Align to @align and outputs output section for percpu area. This
|
||||
* macro doesn't maniuplate @vaddr or @phdr and __per_cpu_load and
|
||||
* __per_cpu_start will be identical.
|
||||
*/
|
||||
#define PERCPU(align) \
|
||||
. = ALIGN(align); \
|
||||
PERCPU_VADDR( , )
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
include include/asm-generic/Kbuild.asm
|
||||
unifdef-y += swab.h
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
* Copyright (C) 2004 Hirokazu Takata <takata at linux-m32r.org>
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <asm/assembler.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
@@ -17,13 +18,6 @@
|
||||
* resource counting etc..
|
||||
*/
|
||||
|
||||
/*
|
||||
* Make sure gcc doesn't try to be clever and move things around
|
||||
* on us. We need to use _exactly_ the address the user gave us,
|
||||
* not some alias that contains the same information.
|
||||
*/
|
||||
typedef struct { volatile int counter; } atomic_t;
|
||||
|
||||
#define ATOMIC_INIT(i) { (i) }
|
||||
|
||||
/**
|
||||
|
||||
@@ -251,6 +251,7 @@ static __inline__ int test_and_change_bit(int nr, volatile void * addr)
|
||||
#include <asm-generic/bitops/ffz.h>
|
||||
#include <asm-generic/bitops/__ffs.h>
|
||||
#include <asm-generic/bitops/fls.h>
|
||||
#include <asm-generic/bitops/__fls.h>
|
||||
#include <asm-generic/bitops/fls64.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
#ifndef _ASM_M32R_BYTEORDER_H
|
||||
#define _ASM_M32R_BYTEORDER_H
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
||||
# define __BYTEORDER_HAS_U64__
|
||||
# define __SWAB_64_THRU_32__
|
||||
#endif
|
||||
#include <asm/swab.h>
|
||||
|
||||
#if defined(__LITTLE_ENDIAN__)
|
||||
# include <linux/byteorder/little_endian.h>
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#if !defined(CONFIG_MMU)
|
||||
|
||||
typedef struct {
|
||||
struct vm_list_struct *vmlist;
|
||||
unsigned long end_brk;
|
||||
} mm_context_t;
|
||||
|
||||
|
||||
@@ -63,8 +63,6 @@ extern volatile int cpu_2_physid[NR_CPUS];
|
||||
#define raw_smp_processor_id() (current_thread_info()->cpu)
|
||||
|
||||
extern cpumask_t cpu_callout_map;
|
||||
extern cpumask_t cpu_possible_map;
|
||||
extern cpumask_t cpu_present_map;
|
||||
|
||||
static __inline__ int hard_smp_processor_id(void)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
#ifndef _ASM_M32R_SWAB_H
|
||||
#define _ASM_M32R_SWAB_H
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
||||
# define __SWAB_64_THRU_32__
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_M32R_SWAB_H */
|
||||
@@ -1,2 +1,3 @@
|
||||
include include/asm-generic/Kbuild.asm
|
||||
header-y += cachectl.h
|
||||
unifdef-y += swab.h
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef __ARCH_M68K_ATOMIC__
|
||||
#define __ARCH_M68K_ATOMIC__
|
||||
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
/*
|
||||
@@ -13,7 +13,6 @@
|
||||
* We do not have SMP m68k systems, so we don't have to deal with that.
|
||||
*/
|
||||
|
||||
typedef struct { int counter; } atomic_t;
|
||||
#define ATOMIC_INIT(i) { (i) }
|
||||
|
||||
#define atomic_read(v) ((v)->counter)
|
||||
|
||||
@@ -315,6 +315,11 @@ static inline int fls(int x)
|
||||
return 32 - cnt;
|
||||
}
|
||||
|
||||
static inline int __fls(int x)
|
||||
{
|
||||
return fls(x) - 1;
|
||||
}
|
||||
|
||||
#include <asm-generic/bitops/fls64.h>
|
||||
#include <asm-generic/bitops/sched.h>
|
||||
#include <asm-generic/bitops/hweight.h>
|
||||
|
||||
@@ -1,19 +1,7 @@
|
||||
#ifndef _M68K_BYTEORDER_H
|
||||
#define _M68K_BYTEORDER_H
|
||||
|
||||
#include <asm/types.h>
|
||||
#include <linux/compiler.h>
|
||||
|
||||
#define __BIG_ENDIAN
|
||||
#define __SWAB_64_THRU_32__
|
||||
|
||||
static inline __attribute_const__ __u32 __arch_swab32(__u32 val)
|
||||
{
|
||||
__asm__("rolw #8,%0; swap %0; rolw #8,%0" : "=d" (val) : "0" (val));
|
||||
return val;
|
||||
}
|
||||
#define __arch_swab32 __arch_swab32
|
||||
|
||||
#include <linux/byteorder.h>
|
||||
#include <asm/swab.h>
|
||||
#include <linux/byteorder/big_endian.h>
|
||||
|
||||
#endif /* _M68K_BYTEORDER_H */
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
#ifndef _M68K_SWAB_H
|
||||
#define _M68K_SWAB_H
|
||||
|
||||
#include <asm/types.h>
|
||||
#include <linux/compiler.h>
|
||||
|
||||
#define __SWAB_64_THRU_32__
|
||||
|
||||
static inline __attribute_const__ __u32 __arch_swab32(__u32 val)
|
||||
{
|
||||
__asm__("rolw #8,%0; swap %0; rolw #8,%0" : "=d" (val) : "0" (val));
|
||||
return val;
|
||||
}
|
||||
#define __arch_swab32 __arch_swab32
|
||||
|
||||
#endif /* _M68K_SWAB_H */
|
||||
@@ -5,6 +5,7 @@
|
||||
* This file contains the system call numbers.
|
||||
*/
|
||||
|
||||
#define __NR_restart_syscall 0
|
||||
#define __NR_exit 1
|
||||
#define __NR_fork 2
|
||||
#define __NR_read 3
|
||||
@@ -359,9 +360,6 @@
|
||||
#define __ARCH_WANT_SYS_SIGPROCMASK
|
||||
#define __ARCH_WANT_SYS_RT_SIGACTION
|
||||
|
||||
/* whitelist for checksyscalls */
|
||||
#define __IGNORE_restart_syscall
|
||||
|
||||
/*
|
||||
* "Conditional" syscalls
|
||||
*
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
include include/asm-generic/Kbuild.asm
|
||||
unifdef-y += swab.h
|
||||
|
||||
@@ -20,15 +20,6 @@
|
||||
* resource counting etc..
|
||||
*/
|
||||
|
||||
/*
|
||||
* Make sure gcc doesn't try to be clever and move things around
|
||||
* on us. We need to use _exactly_ the address the user gave us,
|
||||
* not some alias that contains the same information.
|
||||
*/
|
||||
typedef struct {
|
||||
int counter;
|
||||
} atomic_t;
|
||||
|
||||
#define ATOMIC_INIT(i) { (i) }
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
@@ -195,6 +195,17 @@ int fls(int x)
|
||||
return (x != 0) ? __ilog2_u32(x) + 1 : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* __fls - find last (most-significant) set bit in a long word
|
||||
* @word: the word to search
|
||||
*
|
||||
* Undefined if no set bit exists, so code should check against 0 first.
|
||||
*/
|
||||
static inline unsigned long __fls(unsigned long word)
|
||||
{
|
||||
return __ilog2_u32(word);
|
||||
}
|
||||
|
||||
/**
|
||||
* ffs - find first bit set
|
||||
* @x: the word to search
|
||||
|
||||
@@ -1,46 +1,7 @@
|
||||
/* MN10300 Byte-order primitive construction
|
||||
*
|
||||
* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
|
||||
* Written by David Howells (dhowells@redhat.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public Licence
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the Licence, or (at your option) any later version.
|
||||
*/
|
||||
#ifndef _ASM_BYTEORDER_H
|
||||
#define _ASM_BYTEORDER_H
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
#ifdef __GNUC__
|
||||
|
||||
static inline __attribute__((const))
|
||||
__u32 ___arch__swab32(__u32 x)
|
||||
{
|
||||
__u32 ret;
|
||||
asm("swap %1,%0" : "=r" (ret) : "r" (x));
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline __attribute__((const))
|
||||
__u16 ___arch__swab16(__u16 x)
|
||||
{
|
||||
__u16 ret;
|
||||
asm("swaph %1,%0" : "=r" (ret) : "r" (x));
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define __arch__swab32(x) ___arch__swab32(x)
|
||||
#define __arch__swab16(x) ___arch__swab16(x)
|
||||
|
||||
#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
||||
# define __BYTEORDER_HAS_U64__
|
||||
# define __SWAB_64_THRU_32__
|
||||
#endif
|
||||
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
#include <asm/swab.h>
|
||||
#include <linux/byteorder/little_endian.h>
|
||||
|
||||
#endif /* _ASM_BYTEORDER_H */
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/* MN10300 Byte-order primitive construction
|
||||
*
|
||||
* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
|
||||
* Written by David Howells (dhowells@redhat.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public Licence
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the Licence, or (at your option) any later version.
|
||||
*/
|
||||
#ifndef _ASM_SWAB_H
|
||||
#define _ASM_SWAB_H
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
#ifdef __GNUC__
|
||||
|
||||
static inline __attribute__((const))
|
||||
__u32 __arch_swab32(__u32 x)
|
||||
{
|
||||
__u32 ret;
|
||||
asm("swap %1,%0" : "=r" (ret) : "r" (x));
|
||||
return ret;
|
||||
}
|
||||
#define __arch_swab32 __arch_swab32
|
||||
|
||||
static inline __attribute__((const))
|
||||
__u16 __arch_swab16(__u16 x)
|
||||
{
|
||||
__u16 ret;
|
||||
asm("swaph %1,%0" : "=r" (ret) : "r" (x));
|
||||
return ret;
|
||||
}
|
||||
#define __arch_swab32 __arch_swab32
|
||||
|
||||
#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
||||
# define __SWAB_64_THRU_32__
|
||||
#endif
|
||||
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
#endif /* _ASM_SWAB_H */
|
||||
@@ -1,38 +0,0 @@
|
||||
#ifndef _ASM_STACKPROTECTOR_H
|
||||
#define _ASM_STACKPROTECTOR_H 1
|
||||
|
||||
#include <asm/tsc.h>
|
||||
|
||||
/*
|
||||
* Initialize the stackprotector canary value.
|
||||
*
|
||||
* NOTE: this must only be called from functions that never return,
|
||||
* and it must always be inlined.
|
||||
*/
|
||||
static __always_inline void boot_init_stack_canary(void)
|
||||
{
|
||||
u64 canary;
|
||||
u64 tsc;
|
||||
|
||||
/*
|
||||
* If we're the non-boot CPU, nothing set the PDA stack
|
||||
* canary up for us - and if we are the boot CPU we have
|
||||
* a 0 stack canary. This is a good place for updating
|
||||
* it, as we wont ever return from this function (so the
|
||||
* invalid canaries already on the stack wont ever
|
||||
* trigger).
|
||||
*
|
||||
* We both use the random pool and the current TSC as a source
|
||||
* of randomness. The TSC only matters for very early init,
|
||||
* there it already has some randomness on most systems. Later
|
||||
* on during the bootup the random pool has true entropy too.
|
||||
*/
|
||||
get_random_bytes(&canary, sizeof(canary));
|
||||
tsc = __native_read_tsc();
|
||||
canary += tsc + (tsc << 32UL);
|
||||
|
||||
current->stack_canary = canary;
|
||||
write_pda(stack_canary, canary);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -1 +0,0 @@
|
||||
include include/asm-generic/Kbuild.asm
|
||||
@@ -1,153 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/asmmacro.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_ASMMACRO_H
|
||||
#define _XTENSA_ASMMACRO_H
|
||||
|
||||
#include <asm/variant/core.h>
|
||||
|
||||
/*
|
||||
* Some little helpers for loops. Use zero-overhead-loops
|
||||
* where applicable and if supported by the processor.
|
||||
*
|
||||
* __loopi ar, at, size, inc
|
||||
* ar register initialized with the start address
|
||||
* at scratch register used by macro
|
||||
* size size immediate value
|
||||
* inc increment
|
||||
*
|
||||
* __loops ar, as, at, inc_log2[, mask_log2][, cond][, ncond]
|
||||
* ar register initialized with the start address
|
||||
* as register initialized with the size
|
||||
* at scratch register use by macro
|
||||
* inc_log2 increment [in log2]
|
||||
* mask_log2 mask [in log2]
|
||||
* cond true condition (used in loop'cond')
|
||||
* ncond false condition (used in b'ncond')
|
||||
*
|
||||
* __loop as
|
||||
* restart loop. 'as' register must not have been modified!
|
||||
*
|
||||
* __endla ar, at, incr
|
||||
* ar start address (modified)
|
||||
* as scratch register used by macro
|
||||
* inc increment
|
||||
*/
|
||||
|
||||
/*
|
||||
* loop for given size as immediate
|
||||
*/
|
||||
|
||||
.macro __loopi ar, at, size, incr
|
||||
|
||||
#if XCHAL_HAVE_LOOPS
|
||||
movi \at, ((\size + \incr - 1) / (\incr))
|
||||
loop \at, 99f
|
||||
#else
|
||||
addi \at, \ar, \size
|
||||
98:
|
||||
#endif
|
||||
|
||||
.endm
|
||||
|
||||
/*
|
||||
* loop for given size in register
|
||||
*/
|
||||
|
||||
.macro __loops ar, as, at, incr_log2, mask_log2, cond, ncond
|
||||
|
||||
#if XCHAL_HAVE_LOOPS
|
||||
.ifgt \incr_log2 - 1
|
||||
addi \at, \as, (1 << \incr_log2) - 1
|
||||
.ifnc \mask_log2,
|
||||
extui \at, \at, \incr_log2, \mask_log2
|
||||
.else
|
||||
srli \at, \at, \incr_log2
|
||||
.endif
|
||||
.endif
|
||||
loop\cond \at, 99f
|
||||
#else
|
||||
.ifnc \mask_log2,
|
||||
extui \at, \as, \incr_log2, \mask_log2
|
||||
.else
|
||||
.ifnc \ncond,
|
||||
srli \at, \as, \incr_log2
|
||||
.endif
|
||||
.endif
|
||||
.ifnc \ncond,
|
||||
b\ncond \at, 99f
|
||||
|
||||
.endif
|
||||
.ifnc \mask_log2,
|
||||
slli \at, \at, \incr_log2
|
||||
add \at, \ar, \at
|
||||
.else
|
||||
add \at, \ar, \as
|
||||
.endif
|
||||
#endif
|
||||
98:
|
||||
|
||||
.endm
|
||||
|
||||
/*
|
||||
* loop from ar to ax
|
||||
*/
|
||||
|
||||
.macro __loopt ar, as, at, incr_log2
|
||||
|
||||
#if XCHAL_HAVE_LOOPS
|
||||
sub \at, \as, \ar
|
||||
.ifgt \incr_log2 - 1
|
||||
addi \at, \at, (1 << \incr_log2) - 1
|
||||
srli \at, \at, \incr_log2
|
||||
.endif
|
||||
loop \at, 99f
|
||||
#else
|
||||
98:
|
||||
#endif
|
||||
|
||||
.endm
|
||||
|
||||
/*
|
||||
* restart loop. registers must be unchanged
|
||||
*/
|
||||
|
||||
.macro __loop as
|
||||
|
||||
#if XCHAL_HAVE_LOOPS
|
||||
loop \as, 99f
|
||||
#else
|
||||
98:
|
||||
#endif
|
||||
|
||||
.endm
|
||||
|
||||
/*
|
||||
* end of loop with no increment of the address.
|
||||
*/
|
||||
|
||||
.macro __endl ar, as
|
||||
#if !XCHAL_HAVE_LOOPS
|
||||
bltu \ar, \as, 98b
|
||||
#endif
|
||||
99:
|
||||
.endm
|
||||
|
||||
/*
|
||||
* end of loop with increment of the address.
|
||||
*/
|
||||
|
||||
.macro __endla ar, as, incr
|
||||
addi \ar, \ar, \incr
|
||||
__endl \ar \as
|
||||
.endm
|
||||
|
||||
|
||||
#endif /* _XTENSA_ASMMACRO_H */
|
||||
@@ -1,300 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/atomic.h
|
||||
*
|
||||
* Atomic operations that C can't guarantee us. Useful for resource counting..
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2001 - 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_ATOMIC_H
|
||||
#define _XTENSA_ATOMIC_H
|
||||
|
||||
#include <linux/stringify.h>
|
||||
|
||||
typedef struct { volatile int counter; } atomic_t;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <asm/processor.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#define ATOMIC_INIT(i) { (i) }
|
||||
|
||||
/*
|
||||
* This Xtensa implementation assumes that the right mechanism
|
||||
* for exclusion is for locking interrupts to level 1.
|
||||
*
|
||||
* Locking interrupts looks like this:
|
||||
*
|
||||
* rsil a15, 1
|
||||
* <code>
|
||||
* wsr a15, PS
|
||||
* rsync
|
||||
*
|
||||
* Note that a15 is used here because the register allocation
|
||||
* done by the compiler is not guaranteed and a window overflow
|
||||
* may not occur between the rsil and wsr instructions. By using
|
||||
* a15 in the rsil, the machine is guaranteed to be in a state
|
||||
* where no register reference will cause an overflow.
|
||||
*/
|
||||
|
||||
/**
|
||||
* atomic_read - read atomic variable
|
||||
* @v: pointer of type atomic_t
|
||||
*
|
||||
* Atomically reads the value of @v.
|
||||
*/
|
||||
#define atomic_read(v) ((v)->counter)
|
||||
|
||||
/**
|
||||
* atomic_set - set atomic variable
|
||||
* @v: pointer of type atomic_t
|
||||
* @i: required value
|
||||
*
|
||||
* Atomically sets the value of @v to @i.
|
||||
*/
|
||||
#define atomic_set(v,i) ((v)->counter = (i))
|
||||
|
||||
/**
|
||||
* atomic_add - add integer to atomic variable
|
||||
* @i: integer value to add
|
||||
* @v: pointer of type atomic_t
|
||||
*
|
||||
* Atomically adds @i to @v.
|
||||
*/
|
||||
static inline void atomic_add(int i, atomic_t * v)
|
||||
{
|
||||
unsigned int vval;
|
||||
|
||||
__asm__ __volatile__(
|
||||
"rsil a15, "__stringify(LOCKLEVEL)"\n\t"
|
||||
"l32i %0, %2, 0 \n\t"
|
||||
"add %0, %0, %1 \n\t"
|
||||
"s32i %0, %2, 0 \n\t"
|
||||
"wsr a15, "__stringify(PS)" \n\t"
|
||||
"rsync \n"
|
||||
: "=&a" (vval)
|
||||
: "a" (i), "a" (v)
|
||||
: "a15", "memory"
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* atomic_sub - subtract the atomic variable
|
||||
* @i: integer value to subtract
|
||||
* @v: pointer of type atomic_t
|
||||
*
|
||||
* Atomically subtracts @i from @v.
|
||||
*/
|
||||
static inline void atomic_sub(int i, atomic_t *v)
|
||||
{
|
||||
unsigned int vval;
|
||||
|
||||
__asm__ __volatile__(
|
||||
"rsil a15, "__stringify(LOCKLEVEL)"\n\t"
|
||||
"l32i %0, %2, 0 \n\t"
|
||||
"sub %0, %0, %1 \n\t"
|
||||
"s32i %0, %2, 0 \n\t"
|
||||
"wsr a15, "__stringify(PS)" \n\t"
|
||||
"rsync \n"
|
||||
: "=&a" (vval)
|
||||
: "a" (i), "a" (v)
|
||||
: "a15", "memory"
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
* We use atomic_{add|sub}_return to define other functions.
|
||||
*/
|
||||
|
||||
static inline int atomic_add_return(int i, atomic_t * v)
|
||||
{
|
||||
unsigned int vval;
|
||||
|
||||
__asm__ __volatile__(
|
||||
"rsil a15,"__stringify(LOCKLEVEL)"\n\t"
|
||||
"l32i %0, %2, 0 \n\t"
|
||||
"add %0, %0, %1 \n\t"
|
||||
"s32i %0, %2, 0 \n\t"
|
||||
"wsr a15, "__stringify(PS)" \n\t"
|
||||
"rsync \n"
|
||||
: "=&a" (vval)
|
||||
: "a" (i), "a" (v)
|
||||
: "a15", "memory"
|
||||
);
|
||||
|
||||
return vval;
|
||||
}
|
||||
|
||||
static inline int atomic_sub_return(int i, atomic_t * v)
|
||||
{
|
||||
unsigned int vval;
|
||||
|
||||
__asm__ __volatile__(
|
||||
"rsil a15,"__stringify(LOCKLEVEL)"\n\t"
|
||||
"l32i %0, %2, 0 \n\t"
|
||||
"sub %0, %0, %1 \n\t"
|
||||
"s32i %0, %2, 0 \n\t"
|
||||
"wsr a15, "__stringify(PS)" \n\t"
|
||||
"rsync \n"
|
||||
: "=&a" (vval)
|
||||
: "a" (i), "a" (v)
|
||||
: "a15", "memory"
|
||||
);
|
||||
|
||||
return vval;
|
||||
}
|
||||
|
||||
/**
|
||||
* atomic_sub_and_test - subtract value from variable and test result
|
||||
* @i: integer value to subtract
|
||||
* @v: pointer of type atomic_t
|
||||
*
|
||||
* Atomically subtracts @i from @v and returns
|
||||
* true if the result is zero, or false for all
|
||||
* other cases.
|
||||
*/
|
||||
#define atomic_sub_and_test(i,v) (atomic_sub_return((i),(v)) == 0)
|
||||
|
||||
/**
|
||||
* atomic_inc - increment atomic variable
|
||||
* @v: pointer of type atomic_t
|
||||
*
|
||||
* Atomically increments @v by 1.
|
||||
*/
|
||||
#define atomic_inc(v) atomic_add(1,(v))
|
||||
|
||||
/**
|
||||
* atomic_inc - increment atomic variable
|
||||
* @v: pointer of type atomic_t
|
||||
*
|
||||
* Atomically increments @v by 1.
|
||||
*/
|
||||
#define atomic_inc_return(v) atomic_add_return(1,(v))
|
||||
|
||||
/**
|
||||
* atomic_dec - decrement atomic variable
|
||||
* @v: pointer of type atomic_t
|
||||
*
|
||||
* Atomically decrements @v by 1.
|
||||
*/
|
||||
#define atomic_dec(v) atomic_sub(1,(v))
|
||||
|
||||
/**
|
||||
* atomic_dec_return - decrement atomic variable
|
||||
* @v: pointer of type atomic_t
|
||||
*
|
||||
* Atomically decrements @v by 1.
|
||||
*/
|
||||
#define atomic_dec_return(v) atomic_sub_return(1,(v))
|
||||
|
||||
/**
|
||||
* atomic_dec_and_test - decrement and test
|
||||
* @v: pointer of type atomic_t
|
||||
*
|
||||
* Atomically decrements @v by 1 and
|
||||
* returns true if the result is 0, or false for all other
|
||||
* cases.
|
||||
*/
|
||||
#define atomic_dec_and_test(v) (atomic_sub_return(1,(v)) == 0)
|
||||
|
||||
/**
|
||||
* atomic_inc_and_test - increment and test
|
||||
* @v: pointer of type atomic_t
|
||||
*
|
||||
* Atomically increments @v by 1
|
||||
* and returns true if the result is zero, or false for all
|
||||
* other cases.
|
||||
*/
|
||||
#define atomic_inc_and_test(v) (atomic_add_return(1,(v)) == 0)
|
||||
|
||||
/**
|
||||
* atomic_add_negative - add and test if negative
|
||||
* @v: pointer of type atomic_t
|
||||
* @i: integer value to add
|
||||
*
|
||||
* Atomically adds @i to @v and returns true
|
||||
* if the result is negative, or false when
|
||||
* result is greater than or equal to zero.
|
||||
*/
|
||||
#define atomic_add_negative(i,v) (atomic_add_return((i),(v)) < 0)
|
||||
|
||||
#define atomic_cmpxchg(v, o, n) ((int)cmpxchg(&((v)->counter), (o), (n)))
|
||||
#define atomic_xchg(v, new) (xchg(&((v)->counter), new))
|
||||
|
||||
/**
|
||||
* atomic_add_unless - add unless the number is a given value
|
||||
* @v: pointer of type atomic_t
|
||||
* @a: the amount to add to v...
|
||||
* @u: ...unless v is equal to u.
|
||||
*
|
||||
* Atomically adds @a to @v, so long as it was not @u.
|
||||
* Returns non-zero if @v was not @u, and zero otherwise.
|
||||
*/
|
||||
static __inline__ int atomic_add_unless(atomic_t *v, int a, int u)
|
||||
{
|
||||
int c, old;
|
||||
c = atomic_read(v);
|
||||
for (;;) {
|
||||
if (unlikely(c == (u)))
|
||||
break;
|
||||
old = atomic_cmpxchg((v), c, c + (a));
|
||||
if (likely(old == c))
|
||||
break;
|
||||
c = old;
|
||||
}
|
||||
return c != (u);
|
||||
}
|
||||
|
||||
#define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)
|
||||
|
||||
static inline void atomic_clear_mask(unsigned int mask, atomic_t *v)
|
||||
{
|
||||
unsigned int all_f = -1;
|
||||
unsigned int vval;
|
||||
|
||||
__asm__ __volatile__(
|
||||
"rsil a15,"__stringify(LOCKLEVEL)"\n\t"
|
||||
"l32i %0, %2, 0 \n\t"
|
||||
"xor %1, %4, %3 \n\t"
|
||||
"and %0, %0, %4 \n\t"
|
||||
"s32i %0, %2, 0 \n\t"
|
||||
"wsr a15, "__stringify(PS)" \n\t"
|
||||
"rsync \n"
|
||||
: "=&a" (vval), "=a" (mask)
|
||||
: "a" (v), "a" (all_f), "1" (mask)
|
||||
: "a15", "memory"
|
||||
);
|
||||
}
|
||||
|
||||
static inline void atomic_set_mask(unsigned int mask, atomic_t *v)
|
||||
{
|
||||
unsigned int vval;
|
||||
|
||||
__asm__ __volatile__(
|
||||
"rsil a15,"__stringify(LOCKLEVEL)"\n\t"
|
||||
"l32i %0, %2, 0 \n\t"
|
||||
"or %0, %0, %1 \n\t"
|
||||
"s32i %0, %2, 0 \n\t"
|
||||
"wsr a15, "__stringify(PS)" \n\t"
|
||||
"rsync \n"
|
||||
: "=&a" (vval)
|
||||
: "a" (mask), "a" (v)
|
||||
: "a15", "memory"
|
||||
);
|
||||
}
|
||||
|
||||
/* Atomic operations are already serializing */
|
||||
#define smp_mb__before_atomic_dec() barrier()
|
||||
#define smp_mb__after_atomic_dec() barrier()
|
||||
#define smp_mb__before_atomic_inc() barrier()
|
||||
#define smp_mb__after_atomic_inc() barrier()
|
||||
|
||||
#include <asm-generic/atomic.h>
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _XTENSA_ATOMIC_H */
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
#ifndef __XTENSA_AUXVEC_H
|
||||
#define __XTENSA_AUXVEC_H
|
||||
|
||||
#endif
|
||||
@@ -1,121 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/bitops.h
|
||||
*
|
||||
* Atomic operations that C can't guarantee us.Useful for resource counting etc.
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2001 - 2007 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_BITOPS_H
|
||||
#define _XTENSA_BITOPS_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#ifndef _LINUX_BITOPS_H
|
||||
#error only <linux/bitops.h> can be included directly
|
||||
#endif
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
# error SMP not supported on this architecture
|
||||
#endif
|
||||
|
||||
#define smp_mb__before_clear_bit() barrier()
|
||||
#define smp_mb__after_clear_bit() barrier()
|
||||
|
||||
#include <asm-generic/bitops/atomic.h>
|
||||
#include <asm-generic/bitops/non-atomic.h>
|
||||
|
||||
#if XCHAL_HAVE_NSA
|
||||
|
||||
static inline unsigned long __cntlz (unsigned long x)
|
||||
{
|
||||
int lz;
|
||||
asm ("nsau %0, %1" : "=r" (lz) : "r" (x));
|
||||
return lz;
|
||||
}
|
||||
|
||||
/*
|
||||
* ffz: Find first zero in word. Undefined if no zero exists.
|
||||
* bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1).
|
||||
*/
|
||||
|
||||
static inline int ffz(unsigned long x)
|
||||
{
|
||||
return 31 - __cntlz(~x & -~x);
|
||||
}
|
||||
|
||||
/*
|
||||
* __ffs: Find first bit set in word. Return 0 for bit 0
|
||||
*/
|
||||
|
||||
static inline int __ffs(unsigned long x)
|
||||
{
|
||||
return 31 - __cntlz(x & -x);
|
||||
}
|
||||
|
||||
/*
|
||||
* ffs: Find first bit set in word. This is defined the same way as
|
||||
* the libc and compiler builtin ffs routines, therefore
|
||||
* differs in spirit from the above ffz (man ffs).
|
||||
*/
|
||||
|
||||
static inline int ffs(unsigned long x)
|
||||
{
|
||||
return 32 - __cntlz(x & -x);
|
||||
}
|
||||
|
||||
/*
|
||||
* fls: Find last (most-significant) bit set in word.
|
||||
* Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32.
|
||||
*/
|
||||
|
||||
static inline int fls (unsigned int x)
|
||||
{
|
||||
return 32 - __cntlz(x);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/* Use the generic implementation if we don't have the nsa/nsau instructions. */
|
||||
|
||||
# include <asm-generic/bitops/ffs.h>
|
||||
# include <asm-generic/bitops/__ffs.h>
|
||||
# include <asm-generic/bitops/ffz.h>
|
||||
# include <asm-generic/bitops/fls.h>
|
||||
|
||||
#endif
|
||||
|
||||
#include <asm-generic/bitops/fls64.h>
|
||||
#include <asm-generic/bitops/find.h>
|
||||
#include <asm-generic/bitops/ext2-non-atomic.h>
|
||||
|
||||
#ifdef __XTENSA_EL__
|
||||
# define ext2_set_bit_atomic(lock,nr,addr) \
|
||||
test_and_set_bit((nr), (unsigned long*)(addr))
|
||||
# define ext2_clear_bit_atomic(lock,nr,addr) \
|
||||
test_and_clear_bit((nr), (unsigned long*)(addr))
|
||||
#elif defined(__XTENSA_EB__)
|
||||
# define ext2_set_bit_atomic(lock,nr,addr) \
|
||||
test_and_set_bit((nr) ^ 0x18, (unsigned long*)(addr))
|
||||
# define ext2_clear_bit_atomic(lock,nr,addr) \
|
||||
test_and_clear_bit((nr) ^ 0x18, (unsigned long*)(addr))
|
||||
#else
|
||||
# error processor byte order undefined!
|
||||
#endif
|
||||
|
||||
#include <asm-generic/bitops/hweight.h>
|
||||
#include <asm-generic/bitops/lock.h>
|
||||
#include <asm-generic/bitops/sched.h>
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _XTENSA_BITOPS_H */
|
||||
@@ -1,61 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/bootparam.h
|
||||
*
|
||||
* Definition of the Linux/Xtensa boot parameter structure
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2001 - 2005 Tensilica Inc.
|
||||
*
|
||||
* (Concept borrowed from the 68K port)
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_BOOTPARAM_H
|
||||
#define _XTENSA_BOOTPARAM_H
|
||||
|
||||
#define BP_VERSION 0x0001
|
||||
|
||||
#define BP_TAG_COMMAND_LINE 0x1001 /* command line (0-terminated string)*/
|
||||
#define BP_TAG_INITRD 0x1002 /* ramdisk addr and size (bp_meminfo) */
|
||||
#define BP_TAG_MEMORY 0x1003 /* memory addr and size (bp_meminfo) */
|
||||
#define BP_TAG_SERIAL_BAUSRATE 0x1004 /* baud rate of current console. */
|
||||
#define BP_TAG_SERIAL_PORT 0x1005 /* serial device of current console */
|
||||
|
||||
#define BP_TAG_FIRST 0x7B0B /* first tag with a version number */
|
||||
#define BP_TAG_LAST 0x7E0B /* last tag */
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
/* All records are aligned to 4 bytes */
|
||||
|
||||
typedef struct bp_tag {
|
||||
unsigned short id; /* tag id */
|
||||
unsigned short size; /* size of this record excluding the structure*/
|
||||
unsigned long data[0]; /* data */
|
||||
} bp_tag_t;
|
||||
|
||||
typedef struct meminfo {
|
||||
unsigned long type;
|
||||
unsigned long start;
|
||||
unsigned long end;
|
||||
} meminfo_t;
|
||||
|
||||
#define SYSMEM_BANKS_MAX 5
|
||||
|
||||
#define MEMORY_TYPE_CONVENTIONAL 0x1000
|
||||
#define MEMORY_TYPE_NONE 0x2000
|
||||
|
||||
typedef struct sysmem_info {
|
||||
int nr_banks;
|
||||
meminfo_t bank[SYSMEM_BANKS_MAX];
|
||||
} sysmem_info_t;
|
||||
|
||||
extern sysmem_info_t sysmem;
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/bug.h
|
||||
*
|
||||
* Macros to cause a 'bug' message.
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2001 - 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_BUG_H
|
||||
#define _XTENSA_BUG_H
|
||||
|
||||
#include <asm-generic/bug.h>
|
||||
|
||||
#endif /* _XTENSA_BUG_H */
|
||||
@@ -1,18 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/bugs.h
|
||||
*
|
||||
* This is included by init/main.c to check for architecture-dependent bugs.
|
||||
*
|
||||
* Xtensa processors don't have any bugs. :)
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General
|
||||
* Public License. See the file "COPYING" in the main directory of
|
||||
* this archive for more details.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_BUGS_H
|
||||
#define _XTENSA_BUGS_H
|
||||
|
||||
static void check_bugs(void) { }
|
||||
|
||||
#endif /* _XTENSA_BUGS_H */
|
||||
@@ -1,82 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/byteorder.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2001 - 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_BYTEORDER_H
|
||||
#define _XTENSA_BYTEORDER_H
|
||||
|
||||
#include <asm/types.h>
|
||||
#include <linux/compiler.h>
|
||||
|
||||
static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x)
|
||||
{
|
||||
__u32 res;
|
||||
/* instruction sequence from Xtensa ISA release 2/2000 */
|
||||
__asm__("ssai 8 \n\t"
|
||||
"srli %0, %1, 16 \n\t"
|
||||
"src %0, %0, %1 \n\t"
|
||||
"src %0, %0, %0 \n\t"
|
||||
"src %0, %1, %0 \n"
|
||||
: "=&a" (res)
|
||||
: "a" (x)
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x)
|
||||
{
|
||||
/* Given that 'short' values are signed (i.e., can be negative),
|
||||
* we cannot assume that the upper 16-bits of the register are
|
||||
* zero. We are careful to mask values after shifting.
|
||||
*/
|
||||
|
||||
/* There exists an anomaly between xt-gcc and xt-xcc. xt-gcc
|
||||
* inserts an extui instruction after putting this function inline
|
||||
* to ensure that it uses only the least-significant 16 bits of
|
||||
* the result. xt-xcc doesn't use an extui, but assumes the
|
||||
* __asm__ macro follows convention that the upper 16 bits of an
|
||||
* 'unsigned short' result are still zero. This macro doesn't
|
||||
* follow convention; indeed, it leaves garbage in the upport 16
|
||||
* bits of the register.
|
||||
|
||||
* Declaring the temporary variables 'res' and 'tmp' to be 32-bit
|
||||
* types while the return type of the function is a 16-bit type
|
||||
* forces both compilers to insert exactly one extui instruction
|
||||
* (or equivalent) to mask off the upper 16 bits. */
|
||||
|
||||
__u32 res;
|
||||
__u32 tmp;
|
||||
|
||||
__asm__("extui %1, %2, 8, 8\n\t"
|
||||
"slli %0, %2, 8 \n\t"
|
||||
"or %0, %0, %1 \n"
|
||||
: "=&a" (res), "=&a" (tmp)
|
||||
: "a" (x)
|
||||
);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
#define __arch__swab32(x) ___arch__swab32(x)
|
||||
#define __arch__swab16(x) ___arch__swab16(x)
|
||||
|
||||
#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
||||
# define __BYTEORDER_HAS_U64__
|
||||
# define __SWAB_64_THRU_32__
|
||||
#endif
|
||||
|
||||
#ifdef __XTENSA_EL__
|
||||
# include <linux/byteorder/little_endian.h>
|
||||
#elif defined(__XTENSA_EB__)
|
||||
# include <linux/byteorder/big_endian.h>
|
||||
#else
|
||||
# error processor byte order undefined!
|
||||
#endif
|
||||
|
||||
#endif /* _XTENSA_BYTEORDER_H */
|
||||
@@ -1,33 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/cache.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* (C) 2001 - 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_CACHE_H
|
||||
#define _XTENSA_CACHE_H
|
||||
|
||||
#include <asm/variant/core.h>
|
||||
|
||||
#define L1_CACHE_SHIFT XCHAL_DCACHE_LINEWIDTH
|
||||
#define L1_CACHE_BYTES XCHAL_DCACHE_LINESIZE
|
||||
#define SMP_CACHE_BYTES L1_CACHE_BYTES
|
||||
|
||||
#define DCACHE_WAY_SIZE (XCHAL_DCACHE_SIZE/XCHAL_DCACHE_WAYS)
|
||||
#define ICACHE_WAY_SIZE (XCHAL_ICACHE_SIZE/XCHAL_ICACHE_WAYS)
|
||||
#define DCACHE_WAY_SHIFT (XCHAL_DCACHE_SETWIDTH + XCHAL_DCACHE_LINEWIDTH)
|
||||
#define ICACHE_WAY_SHIFT (XCHAL_ICACHE_SETWIDTH + XCHAL_ICACHE_LINEWIDTH)
|
||||
|
||||
/* Maximum cache size per way. */
|
||||
#if DCACHE_WAY_SIZE >= ICACHE_WAY_SIZE
|
||||
# define CACHE_WAY_SIZE DCACHE_WAY_SIZE
|
||||
#else
|
||||
# define CACHE_WAY_SIZE ICACHE_WAY_SIZE
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* _XTENSA_CACHE_H */
|
||||
@@ -1,177 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/cacheasm.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2006 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#include <asm/cache.h>
|
||||
#include <asm/asmmacro.h>
|
||||
#include <linux/stringify.h>
|
||||
|
||||
/*
|
||||
* Define cache functions as macros here so that they can be used
|
||||
* by the kernel and boot loader. We should consider moving them to a
|
||||
* library that can be linked by both.
|
||||
*
|
||||
* Locking
|
||||
*
|
||||
* ___unlock_dcache_all
|
||||
* ___unlock_icache_all
|
||||
*
|
||||
* Flush and invaldating
|
||||
*
|
||||
* ___flush_invalidate_dcache_{all|range|page}
|
||||
* ___flush_dcache_{all|range|page}
|
||||
* ___invalidate_dcache_{all|range|page}
|
||||
* ___invalidate_icache_{all|range|page}
|
||||
*
|
||||
*/
|
||||
|
||||
.macro __loop_cache_all ar at insn size line_width
|
||||
|
||||
movi \ar, 0
|
||||
|
||||
__loopi \ar, \at, \size, (4 << (\line_width))
|
||||
\insn \ar, 0 << (\line_width)
|
||||
\insn \ar, 1 << (\line_width)
|
||||
\insn \ar, 2 << (\line_width)
|
||||
\insn \ar, 3 << (\line_width)
|
||||
__endla \ar, \at, 4 << (\line_width)
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro __loop_cache_range ar as at insn line_width
|
||||
|
||||
extui \at, \ar, 0, \line_width
|
||||
add \as, \as, \at
|
||||
|
||||
__loops \ar, \as, \at, \line_width
|
||||
\insn \ar, 0
|
||||
__endla \ar, \at, (1 << (\line_width))
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro __loop_cache_page ar at insn line_width
|
||||
|
||||
__loopi \ar, \at, PAGE_SIZE, 4 << (\line_width)
|
||||
\insn \ar, 0 << (\line_width)
|
||||
\insn \ar, 1 << (\line_width)
|
||||
\insn \ar, 2 << (\line_width)
|
||||
\insn \ar, 3 << (\line_width)
|
||||
__endla \ar, \at, 4 << (\line_width)
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
#if XCHAL_DCACHE_LINE_LOCKABLE
|
||||
|
||||
.macro ___unlock_dcache_all ar at
|
||||
|
||||
__loop_cache_all \ar \at diu XCHAL_DCACHE_SIZE XCHAL_DCACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
|
||||
#endif
|
||||
|
||||
#if XCHAL_ICACHE_LINE_LOCKABLE
|
||||
|
||||
.macro ___unlock_icache_all ar at
|
||||
|
||||
__loop_cache_all \ar \at iiu XCHAL_ICACHE_SIZE XCHAL_ICACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
#endif
|
||||
|
||||
.macro ___flush_invalidate_dcache_all ar at
|
||||
|
||||
__loop_cache_all \ar \at diwbi XCHAL_DCACHE_SIZE XCHAL_DCACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro ___flush_dcache_all ar at
|
||||
|
||||
__loop_cache_all \ar \at diwb XCHAL_DCACHE_SIZE XCHAL_DCACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro ___invalidate_dcache_all ar at
|
||||
|
||||
__loop_cache_all \ar \at dii __stringify(DCACHE_WAY_SIZE) \
|
||||
XCHAL_DCACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro ___invalidate_icache_all ar at
|
||||
|
||||
__loop_cache_all \ar \at iii __stringify(ICACHE_WAY_SIZE) \
|
||||
XCHAL_ICACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
.macro ___flush_invalidate_dcache_range ar as at
|
||||
|
||||
__loop_cache_range \ar \as \at dhwbi XCHAL_DCACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro ___flush_dcache_range ar as at
|
||||
|
||||
__loop_cache_range \ar \as \at dhwb XCHAL_DCACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro ___invalidate_dcache_range ar as at
|
||||
|
||||
__loop_cache_range \ar \as \at dhi XCHAL_DCACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro ___invalidate_icache_range ar as at
|
||||
|
||||
__loop_cache_range \ar \as \at ihi XCHAL_ICACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
.macro ___flush_invalidate_dcache_page ar as
|
||||
|
||||
__loop_cache_page \ar \as dhwbi XCHAL_DCACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro ___flush_dcache_page ar as
|
||||
|
||||
__loop_cache_page \ar \as dhwb XCHAL_DCACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro ___invalidate_dcache_page ar as
|
||||
|
||||
__loop_cache_page \ar \as dhi XCHAL_DCACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro ___invalidate_icache_page ar as
|
||||
|
||||
__loop_cache_page \ar \as ihi XCHAL_ICACHE_LINEWIDTH
|
||||
|
||||
.endm
|
||||
|
||||
@@ -1,155 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/cacheflush.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* (C) 2001 - 2007 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_CACHEFLUSH_H
|
||||
#define _XTENSA_CACHEFLUSH_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/mm.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
/*
|
||||
* Lo-level routines for cache flushing.
|
||||
*
|
||||
* invalidate data or instruction cache:
|
||||
*
|
||||
* __invalidate_icache_all()
|
||||
* __invalidate_icache_page(adr)
|
||||
* __invalidate_dcache_page(adr)
|
||||
* __invalidate_icache_range(from,size)
|
||||
* __invalidate_dcache_range(from,size)
|
||||
*
|
||||
* flush data cache:
|
||||
*
|
||||
* __flush_dcache_page(adr)
|
||||
*
|
||||
* flush and invalidate data cache:
|
||||
*
|
||||
* __flush_invalidate_dcache_all()
|
||||
* __flush_invalidate_dcache_page(adr)
|
||||
* __flush_invalidate_dcache_range(from,size)
|
||||
*
|
||||
* specials for cache aliasing:
|
||||
*
|
||||
* __flush_invalidate_dcache_page_alias(vaddr,paddr)
|
||||
* __invalidate_icache_page_alias(vaddr,paddr)
|
||||
*/
|
||||
|
||||
extern void __invalidate_dcache_all(void);
|
||||
extern void __invalidate_icache_all(void);
|
||||
extern void __invalidate_dcache_page(unsigned long);
|
||||
extern void __invalidate_icache_page(unsigned long);
|
||||
extern void __invalidate_icache_range(unsigned long, unsigned long);
|
||||
extern void __invalidate_dcache_range(unsigned long, unsigned long);
|
||||
|
||||
|
||||
#if XCHAL_DCACHE_IS_WRITEBACK
|
||||
extern void __flush_invalidate_dcache_all(void);
|
||||
extern void __flush_dcache_page(unsigned long);
|
||||
extern void __flush_dcache_range(unsigned long, unsigned long);
|
||||
extern void __flush_invalidate_dcache_page(unsigned long);
|
||||
extern void __flush_invalidate_dcache_range(unsigned long, unsigned long);
|
||||
#else
|
||||
# define __flush_dcache_range(p,s) do { } while(0)
|
||||
# define __flush_dcache_page(p) do { } while(0)
|
||||
# define __flush_invalidate_dcache_page(p) __invalidate_dcache_page(p)
|
||||
# define __flush_invalidate_dcache_range(p,s) __invalidate_dcache_range(p,s)
|
||||
#endif
|
||||
|
||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE)
|
||||
extern void __flush_invalidate_dcache_page_alias(unsigned long, unsigned long);
|
||||
#endif
|
||||
#if (ICACHE_WAY_SIZE > PAGE_SIZE)
|
||||
extern void __invalidate_icache_page_alias(unsigned long, unsigned long);
|
||||
#else
|
||||
# define __invalidate_icache_page_alias(v,p) do { } while(0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We have physically tagged caches - nothing to do here -
|
||||
* unless we have cache aliasing.
|
||||
*
|
||||
* Pages can get remapped. Because this might change the 'color' of that page,
|
||||
* we have to flush the cache before the PTE is changed.
|
||||
* (see also Documentation/cachetlb.txt)
|
||||
*/
|
||||
|
||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE)
|
||||
|
||||
#define flush_cache_all() \
|
||||
do { \
|
||||
__flush_invalidate_dcache_all(); \
|
||||
__invalidate_icache_all(); \
|
||||
} while (0)
|
||||
|
||||
#define flush_cache_mm(mm) flush_cache_all()
|
||||
#define flush_cache_dup_mm(mm) flush_cache_mm(mm)
|
||||
|
||||
#define flush_cache_vmap(start,end) flush_cache_all()
|
||||
#define flush_cache_vunmap(start,end) flush_cache_all()
|
||||
|
||||
extern void flush_dcache_page(struct page*);
|
||||
extern void flush_cache_range(struct vm_area_struct*, ulong, ulong);
|
||||
extern void flush_cache_page(struct vm_area_struct*, unsigned long, unsigned long);
|
||||
|
||||
#else
|
||||
|
||||
#define flush_cache_all() do { } while (0)
|
||||
#define flush_cache_mm(mm) do { } while (0)
|
||||
#define flush_cache_dup_mm(mm) do { } while (0)
|
||||
|
||||
#define flush_cache_vmap(start,end) do { } while (0)
|
||||
#define flush_cache_vunmap(start,end) do { } while (0)
|
||||
|
||||
#define flush_dcache_page(page) do { } while (0)
|
||||
|
||||
#define flush_cache_page(vma,addr,pfn) do { } while (0)
|
||||
#define flush_cache_range(vma,start,end) do { } while (0)
|
||||
|
||||
#endif
|
||||
|
||||
/* Ensure consistency between data and instruction cache. */
|
||||
#define flush_icache_range(start,end) \
|
||||
do { \
|
||||
__flush_dcache_range(start, (end) - (start)); \
|
||||
__invalidate_icache_range(start,(end) - (start)); \
|
||||
} while (0)
|
||||
|
||||
/* This is not required, see Documentation/cachetlb.txt */
|
||||
#define flush_icache_page(vma,page) do { } while (0)
|
||||
|
||||
#define flush_dcache_mmap_lock(mapping) do { } while (0)
|
||||
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
|
||||
|
||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE)
|
||||
|
||||
extern void copy_to_user_page(struct vm_area_struct*, struct page*,
|
||||
unsigned long, void*, const void*, unsigned long);
|
||||
extern void copy_from_user_page(struct vm_area_struct*, struct page*,
|
||||
unsigned long, void*, const void*, unsigned long);
|
||||
|
||||
#else
|
||||
|
||||
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
|
||||
do { \
|
||||
memcpy(dst, src, len); \
|
||||
__flush_dcache_range((unsigned long) dst, len); \
|
||||
__invalidate_icache_range((unsigned long) dst, len); \
|
||||
} while (0)
|
||||
|
||||
#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
|
||||
memcpy(dst, src, len)
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _XTENSA_CACHEFLUSH_H */
|
||||
@@ -1,250 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/checksum.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2001 - 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_CHECKSUM_H
|
||||
#define _XTENSA_CHECKSUM_H
|
||||
|
||||
#include <linux/in6.h>
|
||||
#include <asm/variant/core.h>
|
||||
|
||||
/*
|
||||
* computes the checksum of a memory block at buff, length len,
|
||||
* and adds in "sum" (32-bit)
|
||||
*
|
||||
* returns a 32-bit number suitable for feeding into itself
|
||||
* or csum_tcpudp_magic
|
||||
*
|
||||
* this function must be called with even lengths, except
|
||||
* for the last fragment, which may be odd
|
||||
*
|
||||
* it's best to have buff aligned on a 32-bit boundary
|
||||
*/
|
||||
asmlinkage __wsum csum_partial(const void *buff, int len, __wsum sum);
|
||||
|
||||
/*
|
||||
* the same as csum_partial, but copies from src while it
|
||||
* checksums, and handles user-space pointer exceptions correctly, when needed.
|
||||
*
|
||||
* here even more important to align src and dst on a 32-bit (or even
|
||||
* better 64-bit) boundary
|
||||
*/
|
||||
|
||||
asmlinkage __wsum csum_partial_copy_generic(const void *src, void *dst, int len, __wsum sum,
|
||||
int *src_err_ptr, int *dst_err_ptr);
|
||||
|
||||
/*
|
||||
* Note: when you get a NULL pointer exception here this means someone
|
||||
* passed in an incorrect kernel address to one of these functions.
|
||||
*
|
||||
* If you use these functions directly please don't forget the access_ok().
|
||||
*/
|
||||
static inline
|
||||
__wsum csum_partial_copy_nocheck(const void *src, void *dst,
|
||||
int len, __wsum sum)
|
||||
{
|
||||
return csum_partial_copy_generic(src, dst, len, sum, NULL, NULL);
|
||||
}
|
||||
|
||||
static inline
|
||||
__wsum csum_partial_copy_from_user(const void __user *src, void *dst,
|
||||
int len, __wsum sum, int *err_ptr)
|
||||
{
|
||||
return csum_partial_copy_generic((__force const void *)src, dst,
|
||||
len, sum, err_ptr, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Fold a partial checksum
|
||||
*/
|
||||
|
||||
static __inline__ __sum16 csum_fold(__wsum sum)
|
||||
{
|
||||
unsigned int __dummy;
|
||||
__asm__("extui %1, %0, 16, 16\n\t"
|
||||
"extui %0 ,%0, 0, 16\n\t"
|
||||
"add %0, %0, %1\n\t"
|
||||
"slli %1, %0, 16\n\t"
|
||||
"add %0, %0, %1\n\t"
|
||||
"extui %0, %0, 16, 16\n\t"
|
||||
"neg %0, %0\n\t"
|
||||
"addi %0, %0, -1\n\t"
|
||||
"extui %0, %0, 0, 16\n\t"
|
||||
: "=r" (sum), "=&r" (__dummy)
|
||||
: "0" (sum));
|
||||
return (__force __sum16)sum;
|
||||
}
|
||||
|
||||
/*
|
||||
* This is a version of ip_compute_csum() optimized for IP headers,
|
||||
* which always checksum on 4 octet boundaries.
|
||||
*/
|
||||
static __inline__ __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
|
||||
{
|
||||
unsigned int sum, tmp, endaddr;
|
||||
|
||||
__asm__ __volatile__(
|
||||
"sub %0, %0, %0\n\t"
|
||||
#if XCHAL_HAVE_LOOPS
|
||||
"loopgtz %2, 2f\n\t"
|
||||
#else
|
||||
"beqz %2, 2f\n\t"
|
||||
"slli %4, %2, 2\n\t"
|
||||
"add %4, %4, %1\n\t"
|
||||
"0:\t"
|
||||
#endif
|
||||
"l32i %3, %1, 0\n\t"
|
||||
"add %0, %0, %3\n\t"
|
||||
"bgeu %0, %3, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
"addi %1, %1, 4\n\t"
|
||||
#if !XCHAL_HAVE_LOOPS
|
||||
"blt %1, %4, 0b\n\t"
|
||||
#endif
|
||||
"2:\t"
|
||||
/* Since the input registers which are loaded with iph and ihl
|
||||
are modified, we must also specify them as outputs, or gcc
|
||||
will assume they contain their original values. */
|
||||
: "=r" (sum), "=r" (iph), "=r" (ihl), "=&r" (tmp), "=&r" (endaddr)
|
||||
: "1" (iph), "2" (ihl));
|
||||
|
||||
return csum_fold(sum);
|
||||
}
|
||||
|
||||
static __inline__ __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
|
||||
unsigned short len,
|
||||
unsigned short proto,
|
||||
__wsum sum)
|
||||
{
|
||||
|
||||
#ifdef __XTENSA_EL__
|
||||
unsigned long len_proto = (len + proto) << 8;
|
||||
#elif defined(__XTENSA_EB__)
|
||||
unsigned long len_proto = len + proto;
|
||||
#else
|
||||
# error processor byte order undefined!
|
||||
#endif
|
||||
__asm__("add %0, %0, %1\n\t"
|
||||
"bgeu %0, %1, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
"add %0, %0, %2\n\t"
|
||||
"bgeu %0, %2, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
"add %0, %0, %3\n\t"
|
||||
"bgeu %0, %3, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
: "=r" (sum), "=r" (len_proto)
|
||||
: "r" (daddr), "r" (saddr), "1" (len_proto), "0" (sum));
|
||||
return sum;
|
||||
}
|
||||
|
||||
/*
|
||||
* computes the checksum of the TCP/UDP pseudo-header
|
||||
* returns a 16-bit checksum, already complemented
|
||||
*/
|
||||
static __inline__ __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
|
||||
unsigned short len,
|
||||
unsigned short proto,
|
||||
__wsum sum)
|
||||
{
|
||||
return csum_fold(csum_tcpudp_nofold(saddr,daddr,len,proto,sum));
|
||||
}
|
||||
|
||||
/*
|
||||
* this routine is used for miscellaneous IP-like checksums, mainly
|
||||
* in icmp.c
|
||||
*/
|
||||
|
||||
static __inline__ __sum16 ip_compute_csum(const void *buff, int len)
|
||||
{
|
||||
return csum_fold (csum_partial(buff, len, 0));
|
||||
}
|
||||
|
||||
#define _HAVE_ARCH_IPV6_CSUM
|
||||
static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
|
||||
const struct in6_addr *daddr,
|
||||
__u32 len, unsigned short proto,
|
||||
__wsum sum)
|
||||
{
|
||||
unsigned int __dummy;
|
||||
__asm__("l32i %1, %2, 0\n\t"
|
||||
"add %0, %0, %1\n\t"
|
||||
"bgeu %0, %1, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
"l32i %1, %2, 4\n\t"
|
||||
"add %0, %0, %1\n\t"
|
||||
"bgeu %0, %1, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
"l32i %1, %2, 8\n\t"
|
||||
"add %0, %0, %1\n\t"
|
||||
"bgeu %0, %1, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
"l32i %1, %2, 12\n\t"
|
||||
"add %0, %0, %1\n\t"
|
||||
"bgeu %0, %1, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
"l32i %1, %3, 0\n\t"
|
||||
"add %0, %0, %1\n\t"
|
||||
"bgeu %0, %1, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
"l32i %1, %3, 4\n\t"
|
||||
"add %0, %0, %1\n\t"
|
||||
"bgeu %0, %1, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
"l32i %1, %3, 8\n\t"
|
||||
"add %0, %0, %1\n\t"
|
||||
"bgeu %0, %1, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
"l32i %1, %3, 12\n\t"
|
||||
"add %0, %0, %1\n\t"
|
||||
"bgeu %0, %1, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
"add %0, %0, %4\n\t"
|
||||
"bgeu %0, %4, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
"add %0, %0, %5\n\t"
|
||||
"bgeu %0, %5, 1f\n\t"
|
||||
"addi %0, %0, 1\n\t"
|
||||
"1:\t"
|
||||
: "=r" (sum), "=&r" (__dummy)
|
||||
: "r" (saddr), "r" (daddr),
|
||||
"r" (htonl(len)), "r" (htonl(proto)), "0" (sum));
|
||||
|
||||
return csum_fold(sum);
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy and checksum to user
|
||||
*/
|
||||
#define HAVE_CSUM_COPY_USER
|
||||
static __inline__ __wsum csum_and_copy_to_user(const void *src, void __user *dst,
|
||||
int len, __wsum sum, int *err_ptr)
|
||||
{
|
||||
if (access_ok(VERIFY_WRITE, dst, len))
|
||||
return csum_partial_copy_generic(src, dst, len, sum, NULL, err_ptr);
|
||||
|
||||
if (len)
|
||||
*err_ptr = -EFAULT;
|
||||
|
||||
return (__force __wsum)-1; /* invalid checksum */
|
||||
}
|
||||
#endif
|
||||
@@ -1,177 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/coprocessor.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2003 - 2007 Tensilica Inc.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _XTENSA_COPROCESSOR_H
|
||||
#define _XTENSA_COPROCESSOR_H
|
||||
|
||||
#include <linux/stringify.h>
|
||||
#include <asm/variant/tie.h>
|
||||
#include <asm/types.h>
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
# include <asm/variant/tie-asm.h>
|
||||
|
||||
.macro xchal_sa_start a b
|
||||
.set .Lxchal_pofs_, 0
|
||||
.set .Lxchal_ofs_, 0
|
||||
.endm
|
||||
|
||||
.macro xchal_sa_align ptr minofs maxofs ofsalign totalign
|
||||
.set .Lxchal_ofs_, .Lxchal_ofs_ + .Lxchal_pofs_ + \totalign - 1
|
||||
.set .Lxchal_ofs_, (.Lxchal_ofs_ & -\totalign) - .Lxchal_pofs_
|
||||
.endm
|
||||
|
||||
#define _SELECT ( XTHAL_SAS_TIE | XTHAL_SAS_OPT \
|
||||
| XTHAL_SAS_CC \
|
||||
| XTHAL_SAS_CALR | XTHAL_SAS_CALE )
|
||||
|
||||
.macro save_xtregs_opt ptr clb at1 at2 at3 at4 offset
|
||||
.if XTREGS_OPT_SIZE > 0
|
||||
addi \clb, \ptr, \offset
|
||||
xchal_ncp_store \clb \at1 \at2 \at3 \at4 select=_SELECT
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro load_xtregs_opt ptr clb at1 at2 at3 at4 offset
|
||||
.if XTREGS_OPT_SIZE > 0
|
||||
addi \clb, \ptr, \offset
|
||||
xchal_ncp_load \clb \at1 \at2 \at3 \at4 select=_SELECT
|
||||
.endif
|
||||
.endm
|
||||
#undef _SELECT
|
||||
|
||||
#define _SELECT ( XTHAL_SAS_TIE | XTHAL_SAS_OPT \
|
||||
| XTHAL_SAS_NOCC \
|
||||
| XTHAL_SAS_CALR | XTHAL_SAS_CALE | XTHAL_SAS_GLOB )
|
||||
|
||||
.macro save_xtregs_user ptr clb at1 at2 at3 at4 offset
|
||||
.if XTREGS_USER_SIZE > 0
|
||||
addi \clb, \ptr, \offset
|
||||
xchal_ncp_store \clb \at1 \at2 \at3 \at4 select=_SELECT
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro load_xtregs_user ptr clb at1 at2 at3 at4 offset
|
||||
.if XTREGS_USER_SIZE > 0
|
||||
addi \clb, \ptr, \offset
|
||||
xchal_ncp_load \clb \at1 \at2 \at3 \at4 select=_SELECT
|
||||
.endif
|
||||
.endm
|
||||
#undef _SELECT
|
||||
|
||||
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
/*
|
||||
* XTENSA_HAVE_COPROCESSOR(x) returns 1 if coprocessor x is configured.
|
||||
*
|
||||
* XTENSA_HAVE_IO_PORT(x) returns 1 if io-port x is configured.
|
||||
*
|
||||
*/
|
||||
|
||||
#define XTENSA_HAVE_COPROCESSOR(x) \
|
||||
((XCHAL_CP_MASK ^ XCHAL_CP_PORT_MASK) & (1 << (x)))
|
||||
#define XTENSA_HAVE_COPROCESSORS \
|
||||
(XCHAL_CP_MASK ^ XCHAL_CP_PORT_MASK)
|
||||
#define XTENSA_HAVE_IO_PORT(x) \
|
||||
(XCHAL_CP_PORT_MASK & (1 << (x)))
|
||||
#define XTENSA_HAVE_IO_PORTS \
|
||||
XCHAL_CP_PORT_MASK
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
|
||||
#if XCHAL_HAVE_CP
|
||||
|
||||
#define RSR_CPENABLE(x) do { \
|
||||
__asm__ __volatile__("rsr %0," __stringify(CPENABLE) : "=a" (x)); \
|
||||
} while(0);
|
||||
#define WSR_CPENABLE(x) do { \
|
||||
__asm__ __volatile__("wsr %0," __stringify(CPENABLE) "; rsync" \
|
||||
:: "a" (x)); \
|
||||
} while(0);
|
||||
|
||||
#endif /* XCHAL_HAVE_CP */
|
||||
|
||||
|
||||
/*
|
||||
* Additional registers.
|
||||
* We define three types of additional registers:
|
||||
* ext: extra registers that are used by the compiler
|
||||
* cpn: optional registers that can be used by a user application
|
||||
* cpX: coprocessor registers that can only be used if the corresponding
|
||||
* CPENABLE bit is set.
|
||||
*/
|
||||
|
||||
#define XCHAL_SA_REG(list,cc,abi,type,y,name,z,align,size,...) \
|
||||
__REG ## list (cc, abi, type, name, size, align)
|
||||
|
||||
#define __REG0(cc,abi,t,name,s,a) __REG0_ ## cc (abi,name)
|
||||
#define __REG1(cc,abi,t,name,s,a) __REG1_ ## cc (name)
|
||||
#define __REG2(cc,abi,type,...) __REG2_ ## type (__VA_ARGS__)
|
||||
|
||||
#define __REG0_0(abi,name)
|
||||
#define __REG0_1(abi,name) __REG0_1 ## abi (name)
|
||||
#define __REG0_10(name) __u32 name;
|
||||
#define __REG0_11(name) __u32 name;
|
||||
#define __REG0_12(name)
|
||||
|
||||
#define __REG1_0(name) __u32 name;
|
||||
#define __REG1_1(name)
|
||||
|
||||
#define __REG2_0(n,s,a) __u32 name;
|
||||
#define __REG2_1(n,s,a) unsigned char n[s] __attribute__ ((aligned(a)));
|
||||
#define __REG2_2(n,s,a) unsigned char n[s] __attribute__ ((aligned(a)));
|
||||
|
||||
typedef struct { XCHAL_NCP_SA_LIST(0) } xtregs_opt_t
|
||||
__attribute__ ((aligned (XCHAL_NCP_SA_ALIGN)));
|
||||
typedef struct { XCHAL_NCP_SA_LIST(1) } xtregs_user_t
|
||||
__attribute__ ((aligned (XCHAL_NCP_SA_ALIGN)));
|
||||
|
||||
#if XTENSA_HAVE_COPROCESSORS
|
||||
|
||||
typedef struct { XCHAL_CP0_SA_LIST(2) } xtregs_cp0_t
|
||||
__attribute__ ((aligned (XCHAL_CP0_SA_ALIGN)));
|
||||
typedef struct { XCHAL_CP1_SA_LIST(2) } xtregs_cp1_t
|
||||
__attribute__ ((aligned (XCHAL_CP1_SA_ALIGN)));
|
||||
typedef struct { XCHAL_CP2_SA_LIST(2) } xtregs_cp2_t
|
||||
__attribute__ ((aligned (XCHAL_CP2_SA_ALIGN)));
|
||||
typedef struct { XCHAL_CP3_SA_LIST(2) } xtregs_cp3_t
|
||||
__attribute__ ((aligned (XCHAL_CP3_SA_ALIGN)));
|
||||
typedef struct { XCHAL_CP4_SA_LIST(2) } xtregs_cp4_t
|
||||
__attribute__ ((aligned (XCHAL_CP4_SA_ALIGN)));
|
||||
typedef struct { XCHAL_CP5_SA_LIST(2) } xtregs_cp5_t
|
||||
__attribute__ ((aligned (XCHAL_CP5_SA_ALIGN)));
|
||||
typedef struct { XCHAL_CP6_SA_LIST(2) } xtregs_cp6_t
|
||||
__attribute__ ((aligned (XCHAL_CP6_SA_ALIGN)));
|
||||
typedef struct { XCHAL_CP7_SA_LIST(2) } xtregs_cp7_t
|
||||
__attribute__ ((aligned (XCHAL_CP7_SA_ALIGN)));
|
||||
|
||||
extern struct thread_info* coprocessor_owner[XCHAL_CP_MAX];
|
||||
extern void coprocessor_save(void*, int);
|
||||
extern void coprocessor_load(void*, int);
|
||||
extern void coprocessor_flush(struct thread_info*, int);
|
||||
extern void coprocessor_restore(struct thread_info*, int);
|
||||
|
||||
extern void coprocessor_release_all(struct thread_info*);
|
||||
extern void coprocessor_flush_all(struct thread_info*);
|
||||
|
||||
static inline void coprocessor_clear_cpenable(void)
|
||||
{
|
||||
unsigned long i = 0;
|
||||
WSR_CPENABLE(i);
|
||||
}
|
||||
|
||||
#endif /* XTENSA_HAVE_COPROCESSORS */
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* _XTENSA_COPROCESSOR_H */
|
||||
@@ -1,16 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/cpumask.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2001 - 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_CPUMASK_H
|
||||
#define _XTENSA_CPUMASK_H
|
||||
|
||||
#include <asm-generic/cpumask.h>
|
||||
|
||||
#endif /* _XTENSA_CPUMASK_H */
|
||||
@@ -1,6 +0,0 @@
|
||||
#ifndef _XTENSA_CPUTIME_H
|
||||
#define _XTENSA_CPUTIME_H
|
||||
|
||||
#include <asm-generic/cputime.h>
|
||||
|
||||
#endif /* _XTENSA_CPUTIME_H */
|
||||
@@ -1,38 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/current.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2001 - 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_CURRENT_H
|
||||
#define _XTENSA_CURRENT_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#include <linux/thread_info.h>
|
||||
|
||||
struct task_struct;
|
||||
|
||||
static inline struct task_struct *get_current(void)
|
||||
{
|
||||
return current_thread_info()->task;
|
||||
}
|
||||
|
||||
#define current get_current()
|
||||
|
||||
#else
|
||||
|
||||
#define CURRENT_SHIFT 13
|
||||
|
||||
#define GET_CURRENT(reg,sp) \
|
||||
GET_THREAD_INFO(reg,sp); \
|
||||
l32i reg, reg, TI_TASK \
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* XTENSA_CURRENT_H */
|
||||
@@ -1,49 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/delay.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2001 - 2005 Tensilica Inc.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_DELAY_H
|
||||
#define _XTENSA_DELAY_H
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <asm/param.h>
|
||||
|
||||
extern unsigned long loops_per_jiffy;
|
||||
|
||||
static inline void __delay(unsigned long loops)
|
||||
{
|
||||
/* 2 cycles per loop. */
|
||||
__asm__ __volatile__ ("1: addi %0, %0, -2; bgeui %0, 2, 1b"
|
||||
: "=r" (loops) : "0" (loops));
|
||||
}
|
||||
|
||||
static __inline__ u32 xtensa_get_ccount(void)
|
||||
{
|
||||
u32 ccount;
|
||||
asm volatile ("rsr %0, 234; # CCOUNT\n" : "=r" (ccount));
|
||||
return ccount;
|
||||
}
|
||||
|
||||
/* For SMP/NUMA systems, change boot_cpu_data to something like
|
||||
* local_cpu_data->... where local_cpu_data points to the current
|
||||
* cpu. */
|
||||
|
||||
static __inline__ void udelay (unsigned long usecs)
|
||||
{
|
||||
unsigned long start = xtensa_get_ccount();
|
||||
unsigned long cycles = usecs * (loops_per_jiffy / (1000000UL / HZ));
|
||||
|
||||
/* Note: all variables are unsigned (can wrap around)! */
|
||||
while (((unsigned long)xtensa_get_ccount()) - start < cycles)
|
||||
;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
/*
|
||||
* Arch specific extensions to struct device
|
||||
*
|
||||
* This file is released under the GPLv2
|
||||
*/
|
||||
#include <asm-generic/device.h>
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/div64.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2001 - 2007 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_DIV64_H
|
||||
#define _XTENSA_DIV64_H
|
||||
|
||||
#include <asm-generic/div64.h>
|
||||
|
||||
#endif /* _XTENSA_DIV64_H */
|
||||
@@ -1,179 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/dma-mapping.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2003 - 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_DMA_MAPPING_H
|
||||
#define _XTENSA_DMA_MAPPING_H
|
||||
|
||||
#include <asm/cache.h>
|
||||
#include <asm/io.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/scatterlist.h>
|
||||
|
||||
/*
|
||||
* DMA-consistent mapping functions.
|
||||
*/
|
||||
|
||||
extern void *consistent_alloc(int, size_t, dma_addr_t, unsigned long);
|
||||
extern void consistent_free(void*, size_t, dma_addr_t);
|
||||
extern void consistent_sync(void*, size_t, int);
|
||||
|
||||
#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
|
||||
#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
|
||||
|
||||
void *dma_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t flag);
|
||||
|
||||
void dma_free_coherent(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle);
|
||||
|
||||
static inline dma_addr_t
|
||||
dma_map_single(struct device *dev, void *ptr, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
consistent_sync(ptr, size, direction);
|
||||
return virt_to_phys(ptr);
|
||||
}
|
||||
|
||||
static inline void
|
||||
dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
int i;
|
||||
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
|
||||
for (i = 0; i < nents; i++, sg++ ) {
|
||||
BUG_ON(!sg_page(sg));
|
||||
|
||||
sg->dma_address = sg_phys(sg);
|
||||
consistent_sync(sg_virt(sg), sg->length, direction);
|
||||
}
|
||||
|
||||
return nents;
|
||||
}
|
||||
|
||||
static inline dma_addr_t
|
||||
dma_map_page(struct device *dev, struct page *page, unsigned long offset,
|
||||
size_t size, enum dma_data_direction direction)
|
||||
{
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
return (dma_addr_t)(page_to_pfn(page)) * PAGE_SIZE + offset;
|
||||
}
|
||||
|
||||
static inline void
|
||||
dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
}
|
||||
|
||||
|
||||
static inline void
|
||||
dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
}
|
||||
|
||||
static inline void
|
||||
dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
consistent_sync((void *)bus_to_virt(dma_handle), size, direction);
|
||||
}
|
||||
|
||||
static inline void
|
||||
dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
consistent_sync((void *)bus_to_virt(dma_handle), size, direction);
|
||||
}
|
||||
|
||||
static inline void
|
||||
dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t dma_handle,
|
||||
unsigned long offset, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
|
||||
consistent_sync((void *)bus_to_virt(dma_handle)+offset,size,direction);
|
||||
}
|
||||
|
||||
static inline void
|
||||
dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_handle,
|
||||
unsigned long offset, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
|
||||
consistent_sync((void *)bus_to_virt(dma_handle)+offset,size,direction);
|
||||
}
|
||||
static inline void
|
||||
dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < nelems; i++, sg++)
|
||||
consistent_sync(sg_virt(sg), sg->length, dir);
|
||||
}
|
||||
|
||||
static inline void
|
||||
dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < nelems; i++, sg++)
|
||||
consistent_sync(sg_virt(sg), sg->length, dir);
|
||||
}
|
||||
static inline int
|
||||
dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
dma_supported(struct device *dev, u64 mask)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline int
|
||||
dma_set_mask(struct device *dev, u64 mask)
|
||||
{
|
||||
if(!dev->dma_mask || !dma_supported(dev, mask))
|
||||
return -EIO;
|
||||
|
||||
*dev->dma_mask = mask;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
dma_get_cache_alignment(void)
|
||||
{
|
||||
return L1_CACHE_BYTES;
|
||||
}
|
||||
|
||||
#define dma_is_consistent(d, h) (1)
|
||||
|
||||
static inline void
|
||||
dma_cache_sync(struct device *dev, void *vaddr, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
consistent_sync(vaddr, size, direction);
|
||||
}
|
||||
|
||||
#endif /* _XTENSA_DMA_MAPPING_H */
|
||||
@@ -1,61 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/dma.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2003 - 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_DMA_H
|
||||
#define _XTENSA_DMA_H
|
||||
|
||||
#include <asm/io.h> /* need byte IO */
|
||||
|
||||
/*
|
||||
* This is only to be defined if we have PC-like DMA.
|
||||
* By default this is not true on an Xtensa processor,
|
||||
* however on boards with a PCI bus, such functionality
|
||||
* might be emulated externally.
|
||||
*
|
||||
* NOTE: there still exists driver code that assumes
|
||||
* this is defined, eg. drivers/sound/soundcard.c (as of 2.4).
|
||||
*/
|
||||
#define MAX_DMA_CHANNELS 8
|
||||
|
||||
/*
|
||||
* The maximum virtual address to which DMA transfers
|
||||
* can be performed on this platform.
|
||||
*
|
||||
* NOTE: This is board (platform) specific, not processor-specific!
|
||||
*
|
||||
* NOTE: This assumes DMA transfers can only be performed on
|
||||
* the section of physical memory contiguously mapped in virtual
|
||||
* space for the kernel. For the Xtensa architecture, this
|
||||
* means the maximum possible size of this DMA area is
|
||||
* the size of the statically mapped kernel segment
|
||||
* (XCHAL_KSEG_{CACHED,BYPASS}_SIZE), ie. 128 MB.
|
||||
*
|
||||
* NOTE: When the entire KSEG area is DMA capable, we substract
|
||||
* one from the max address so that the virt_to_phys() macro
|
||||
* works correctly on the address (otherwise the address
|
||||
* enters another area, and virt_to_phys() may not return
|
||||
* the value desired).
|
||||
*/
|
||||
|
||||
#define MAX_DMA_ADDRESS (PAGE_OFFSET + XCHAL_KIO_SIZE - 1)
|
||||
|
||||
|
||||
/* Reserve and release a DMA channel */
|
||||
extern int request_dma(unsigned int dmanr, const char * device_id);
|
||||
extern void free_dma(unsigned int dmanr);
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
extern int isa_dma_bridge_buggy;
|
||||
#else
|
||||
#define isa_dma_bridge_buggy (0)
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,205 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/elf.h
|
||||
*
|
||||
* ELF register definitions
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2001 - 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_ELF_H
|
||||
#define _XTENSA_ELF_H
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
/* Xtensa processor ELF architecture-magic number */
|
||||
|
||||
#define EM_XTENSA 94
|
||||
#define EM_XTENSA_OLD 0xABC7
|
||||
|
||||
/* Xtensa relocations defined by the ABIs */
|
||||
|
||||
#define R_XTENSA_NONE 0
|
||||
#define R_XTENSA_32 1
|
||||
#define R_XTENSA_RTLD 2
|
||||
#define R_XTENSA_GLOB_DAT 3
|
||||
#define R_XTENSA_JMP_SLOT 4
|
||||
#define R_XTENSA_RELATIVE 5
|
||||
#define R_XTENSA_PLT 6
|
||||
#define R_XTENSA_OP0 8
|
||||
#define R_XTENSA_OP1 9
|
||||
#define R_XTENSA_OP2 10
|
||||
#define R_XTENSA_ASM_EXPAND 11
|
||||
#define R_XTENSA_ASM_SIMPLIFY 12
|
||||
#define R_XTENSA_GNU_VTINHERIT 15
|
||||
#define R_XTENSA_GNU_VTENTRY 16
|
||||
#define R_XTENSA_DIFF8 17
|
||||
#define R_XTENSA_DIFF16 18
|
||||
#define R_XTENSA_DIFF32 19
|
||||
#define R_XTENSA_SLOT0_OP 20
|
||||
#define R_XTENSA_SLOT1_OP 21
|
||||
#define R_XTENSA_SLOT2_OP 22
|
||||
#define R_XTENSA_SLOT3_OP 23
|
||||
#define R_XTENSA_SLOT4_OP 24
|
||||
#define R_XTENSA_SLOT5_OP 25
|
||||
#define R_XTENSA_SLOT6_OP 26
|
||||
#define R_XTENSA_SLOT7_OP 27
|
||||
#define R_XTENSA_SLOT8_OP 28
|
||||
#define R_XTENSA_SLOT9_OP 29
|
||||
#define R_XTENSA_SLOT10_OP 30
|
||||
#define R_XTENSA_SLOT11_OP 31
|
||||
#define R_XTENSA_SLOT12_OP 32
|
||||
#define R_XTENSA_SLOT13_OP 33
|
||||
#define R_XTENSA_SLOT14_OP 34
|
||||
#define R_XTENSA_SLOT0_ALT 35
|
||||
#define R_XTENSA_SLOT1_ALT 36
|
||||
#define R_XTENSA_SLOT2_ALT 37
|
||||
#define R_XTENSA_SLOT3_ALT 38
|
||||
#define R_XTENSA_SLOT4_ALT 39
|
||||
#define R_XTENSA_SLOT5_ALT 40
|
||||
#define R_XTENSA_SLOT6_ALT 41
|
||||
#define R_XTENSA_SLOT7_ALT 42
|
||||
#define R_XTENSA_SLOT8_ALT 43
|
||||
#define R_XTENSA_SLOT9_ALT 44
|
||||
#define R_XTENSA_SLOT10_ALT 45
|
||||
#define R_XTENSA_SLOT11_ALT 46
|
||||
#define R_XTENSA_SLOT12_ALT 47
|
||||
#define R_XTENSA_SLOT13_ALT 48
|
||||
#define R_XTENSA_SLOT14_ALT 49
|
||||
|
||||
/* ELF register definitions. This is needed for core dump support. */
|
||||
|
||||
typedef unsigned long elf_greg_t;
|
||||
|
||||
typedef struct {
|
||||
elf_greg_t pc;
|
||||
elf_greg_t ps;
|
||||
elf_greg_t lbeg;
|
||||
elf_greg_t lend;
|
||||
elf_greg_t lcount;
|
||||
elf_greg_t sar;
|
||||
elf_greg_t windowstart;
|
||||
elf_greg_t windowbase;
|
||||
elf_greg_t reserved[8+48];
|
||||
elf_greg_t a[64];
|
||||
} xtensa_gregset_t;
|
||||
|
||||
#define ELF_NGREG (sizeof(xtensa_gregset_t) / sizeof(elf_greg_t))
|
||||
|
||||
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
|
||||
|
||||
#define ELF_NFPREG 18
|
||||
|
||||
typedef unsigned int elf_fpreg_t;
|
||||
typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
|
||||
|
||||
#define ELF_CORE_COPY_REGS(_eregs, _pregs) \
|
||||
xtensa_elf_core_copy_regs ((xtensa_gregset_t*)&(_eregs), _pregs);
|
||||
|
||||
extern void xtensa_elf_core_copy_regs (xtensa_gregset_t *, struct pt_regs *);
|
||||
|
||||
/*
|
||||
* This is used to ensure we don't load something for the wrong architecture.
|
||||
*/
|
||||
|
||||
#define elf_check_arch(x) ( ( (x)->e_machine == EM_XTENSA ) || \
|
||||
( (x)->e_machine == EM_XTENSA_OLD ) )
|
||||
|
||||
/*
|
||||
* These are used to set parameters in the core dumps.
|
||||
*/
|
||||
|
||||
#ifdef __XTENSA_EL__
|
||||
# define ELF_DATA ELFDATA2LSB
|
||||
#elif defined(__XTENSA_EB__)
|
||||
# define ELF_DATA ELFDATA2MSB
|
||||
#else
|
||||
# error processor byte order undefined!
|
||||
#endif
|
||||
|
||||
#define ELF_CLASS ELFCLASS32
|
||||
#define ELF_ARCH EM_XTENSA
|
||||
|
||||
#define USE_ELF_CORE_DUMP
|
||||
#define ELF_EXEC_PAGESIZE PAGE_SIZE
|
||||
|
||||
/*
|
||||
* This is the location that an ET_DYN program is loaded if exec'ed. Typical
|
||||
* use of this is to invoke "./ld.so someprog" to test out a new version of
|
||||
* the loader. We need to make sure that it is out of the way of the program
|
||||
* that it will "exec", and that there is sufficient room for the brk.
|
||||
*/
|
||||
|
||||
#define ELF_ET_DYN_BASE (2 * TASK_SIZE / 3)
|
||||
|
||||
/*
|
||||
* This yields a mask that user programs can use to figure out what
|
||||
* instruction set this CPU supports. This could be done in user space,
|
||||
* but it's not easy, and we've already done it here.
|
||||
*/
|
||||
|
||||
#define ELF_HWCAP (0)
|
||||
|
||||
/*
|
||||
* This yields a string that ld.so will use to load implementation
|
||||
* specific libraries for optimization. This is more specific in
|
||||
* intent than poking at uname or /proc/cpuinfo.
|
||||
* For the moment, we have only optimizations for the Intel generations,
|
||||
* but that could change...
|
||||
*/
|
||||
|
||||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
/*
|
||||
* The Xtensa processor ABI says that when the program starts, a2
|
||||
* contains a pointer to a function which might be registered using
|
||||
* `atexit'. This provides a mean for the dynamic linker to call
|
||||
* DT_FINI functions for shared libraries that have been loaded before
|
||||
* the code runs.
|
||||
*
|
||||
* A value of 0 tells we have no such handler.
|
||||
*
|
||||
* We might as well make sure everything else is cleared too (except
|
||||
* for the stack pointer in a1), just to make things more
|
||||
* deterministic. Also, clearing a0 terminates debugger backtraces.
|
||||
*/
|
||||
|
||||
#define ELF_PLAT_INIT(_r, load_addr) \
|
||||
do { _r->areg[0]=0; /*_r->areg[1]=0;*/ _r->areg[2]=0; _r->areg[3]=0; \
|
||||
_r->areg[4]=0; _r->areg[5]=0; _r->areg[6]=0; _r->areg[7]=0; \
|
||||
_r->areg[8]=0; _r->areg[9]=0; _r->areg[10]=0; _r->areg[11]=0; \
|
||||
_r->areg[12]=0; _r->areg[13]=0; _r->areg[14]=0; _r->areg[15]=0; \
|
||||
} while (0)
|
||||
|
||||
typedef struct {
|
||||
xtregs_opt_t opt;
|
||||
xtregs_user_t user;
|
||||
#if XTENSA_HAVE_COPROCESSORS
|
||||
xtregs_cp0_t cp0;
|
||||
xtregs_cp1_t cp1;
|
||||
xtregs_cp2_t cp2;
|
||||
xtregs_cp3_t cp3;
|
||||
xtregs_cp4_t cp4;
|
||||
xtregs_cp5_t cp5;
|
||||
xtregs_cp6_t cp6;
|
||||
xtregs_cp7_t cp7;
|
||||
#endif
|
||||
} elf_xtregs_t;
|
||||
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX_32BIT)
|
||||
|
||||
struct task_struct;
|
||||
|
||||
extern void do_copy_regs (xtensa_gregset_t*, struct pt_regs*,
|
||||
struct task_struct*);
|
||||
extern void do_restore_regs (xtensa_gregset_t*, struct pt_regs*,
|
||||
struct task_struct*);
|
||||
extern void do_save_fpregs (elf_fpregset_t*, struct pt_regs*,
|
||||
struct task_struct*);
|
||||
extern int do_restore_fpregs (elf_fpregset_t*, struct pt_regs*,
|
||||
struct task_struct*);
|
||||
|
||||
#endif /* _XTENSA_ELF_H */
|
||||
@@ -1,6 +0,0 @@
|
||||
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||
#define _ASM_EMERGENCY_RESTART_H
|
||||
|
||||
#include <asm-generic/emergency-restart.h>
|
||||
|
||||
#endif /* _ASM_EMERGENCY_RESTART_H */
|
||||
@@ -1,16 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/errno.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General
|
||||
* Public License. See the file "COPYING" in the main directory of
|
||||
* this archive for more details.
|
||||
*
|
||||
* Copyright (C) 2002 - 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_ERRNO_H
|
||||
#define _XTENSA_ERRNO_H
|
||||
|
||||
#include <asm-generic/errno.h>
|
||||
|
||||
#endif /* _XTENSA_ERRNO_H */
|
||||
@@ -1,12 +0,0 @@
|
||||
#ifndef _ASM_FB_H_
|
||||
#define _ASM_FB_H_
|
||||
#include <linux/fb.h>
|
||||
|
||||
#define fb_pgprotect(...) do {} while (0)
|
||||
|
||||
static inline int fb_is_primary_device(struct fb_info *info)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* _ASM_FB_H_ */
|
||||
@@ -1 +0,0 @@
|
||||
#include <asm-generic/fcntl.h>
|
||||
@@ -1 +0,0 @@
|
||||
#include <asm-generic/futex.h>
|
||||
@@ -1,28 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/hardirq.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General
|
||||
* Public License. See the file "COPYING" in the main directory of
|
||||
* this archive for more details.
|
||||
*
|
||||
* Copyright (C) 2002 - 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_HARDIRQ_H
|
||||
#define _XTENSA_HARDIRQ_H
|
||||
|
||||
#include <linux/cache.h>
|
||||
#include <asm/irq.h>
|
||||
|
||||
/* headers.S is sensitive to the offsets of these fields */
|
||||
typedef struct {
|
||||
unsigned int __softirq_pending;
|
||||
unsigned int __syscall_count;
|
||||
struct task_struct * __ksoftirqd_task; /* waitqueue is too large */
|
||||
unsigned int __nmi_count; /* arch dependent */
|
||||
} ____cacheline_aligned irq_cpustat_t;
|
||||
|
||||
void ack_bad_irq(unsigned int irq);
|
||||
#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
|
||||
|
||||
#endif /* _XTENSA_HARDIRQ_H */
|
||||
@@ -1,17 +0,0 @@
|
||||
/*
|
||||
* include/asm-xtensa/highmem.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General
|
||||
* Public License. See the file "COPYING" in the main directory of
|
||||
* this archive for more details.
|
||||
*
|
||||
* Copyright (C) 2003 - 2005 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_HIGHMEM_H
|
||||
#define _XTENSA_HIGHMEM_H
|
||||
|
||||
extern void flush_cache_kmaps(void);
|
||||
|
||||
#endif
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user