mirror of https://gitee.com/openkylin/linux.git
[ACPI] ACPICA 20051216
Implemented optional support to allow unresolved names within ASL Package objects. A null object is inserted in the package when a named reference cannot be located in the current namespace. Enabled via the interpreter slack flag which Linux has enabled by default (acpi=strict to disable slack). This should eliminate AE_NOT_FOUND exceptions seen on machines that contain such code. Implemented an optimization to the initialization sequence that can improve boot time. During ACPI device initialization, the _STA method is now run if and only if the _INI method exists. The _STA method is used to determine if the device is present; An _INI can only be run if _STA returns present, but it is a waste of time to run the _STA method if the _INI does not exist. (Prototype and assistance from Dong Wei) Implemented use of the C99 uintptr_t for the pointer casting macros if it is available in the current compiler. Otherwise, the default (void *) cast is used as before. Fixed some possible memory leaks found within the execution path of the Break, Continue, If, and CreateField operators. (Valery Podrezov) Fixed a problem introduced in the 20051202 release where an exception is generated during method execution if a control method attempts to declare another method. Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
cb654695f6
commit
defba1d8f2
|
@ -47,10 +47,68 @@
|
|||
#include <acpi/acdispat.h>
|
||||
#include <acpi/acinterp.h>
|
||||
#include <acpi/acnamesp.h>
|
||||
#include <acpi/acdisasm.h>
|
||||
|
||||
#define _COMPONENT ACPI_DISPATCHER
|
||||
ACPI_MODULE_NAME("dsmethod")
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ds_method_error
|
||||
*
|
||||
* PARAMETERS: Status - Execution status
|
||||
* walk_state - Current state
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Called on method error. Invoke the global exception handler if
|
||||
* present, dump the method data if the disassembler is configured
|
||||
*
|
||||
* Note: Allows the exception handler to change the status code
|
||||
*
|
||||
******************************************************************************/
|
||||
acpi_status
|
||||
acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
|
||||
{
|
||||
ACPI_FUNCTION_ENTRY();
|
||||
|
||||
/* Ignore AE_OK and control exception codes */
|
||||
|
||||
if (ACPI_SUCCESS(status) || (status & AE_CODE_CONTROL)) {
|
||||
return (status);
|
||||
}
|
||||
|
||||
/* Invoke the global exception handler */
|
||||
|
||||
if (acpi_gbl_exception_handler) {
|
||||
/* Exit the interpreter, allow handler to execute methods */
|
||||
|
||||
acpi_ex_exit_interpreter();
|
||||
|
||||
/*
|
||||
* Handler can map the exception code to anything it wants, including
|
||||
* AE_OK, in which case the executing method will not be aborted.
|
||||
*/
|
||||
status = acpi_gbl_exception_handler(status,
|
||||
walk_state->method_node ?
|
||||
walk_state->method_node->
|
||||
name.integer : 0,
|
||||
walk_state->opcode,
|
||||
walk_state->aml_offset,
|
||||
NULL);
|
||||
(void)acpi_ex_enter_interpreter();
|
||||
}
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
if (ACPI_FAILURE(status)) {
|
||||
/* Display method locals/args if disassembler is present */
|
||||
|
||||
acpi_dm_dump_method_info(status, walk_state, walk_state->op);
|
||||
}
|
||||
#endif
|
||||
|
||||
return (status);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ds_begin_method_execution
|
||||
|
@ -66,10 +124,11 @@ ACPI_MODULE_NAME("dsmethod")
|
|||
* for clearance to execute.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
|
||||
union acpi_operand_object *obj_desc,
|
||||
struct acpi_namespace_node *calling_method_node)
|
||||
acpi_ds_begin_method_execution(struct acpi_namespace_node * method_node,
|
||||
union acpi_operand_object * obj_desc,
|
||||
struct acpi_namespace_node * calling_method_node)
|
||||
{
|
||||
acpi_status status = AE_OK;
|
||||
|
||||
|
|
|
@ -51,6 +51,7 @@
|
|||
#define _COMPONENT ACPI_DISPATCHER
|
||||
ACPI_MODULE_NAME("dsobject")
|
||||
|
||||
/* Local prototypes */
|
||||
static acpi_status
|
||||
acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op,
|
||||
|
@ -85,7 +86,7 @@ acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
|
|||
*obj_desc_ptr = NULL;
|
||||
if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) {
|
||||
/*
|
||||
* This is an named object reference. If this name was
|
||||
* This is a named object reference. If this name was
|
||||
* previously looked up in the namespace, it was stored in this op.
|
||||
* Otherwise, go ahead and look it up now
|
||||
*/
|
||||
|
@ -96,18 +97,48 @@ acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
|
|||
ACPI_IMODE_EXECUTE,
|
||||
ACPI_NS_SEARCH_PARENT |
|
||||
ACPI_NS_DONT_OPEN_SCOPE, NULL,
|
||||
(struct acpi_namespace_node **)
|
||||
&(op->common.node));
|
||||
|
||||
ACPI_CAST_INDIRECT_PTR(struct
|
||||
acpi_namespace_node,
|
||||
&(op->
|
||||
common.
|
||||
node)));
|
||||
if (ACPI_FAILURE(status)) {
|
||||
ACPI_REPORT_NSERROR(op->common.value.string,
|
||||
status);
|
||||
/* Check if we are resolving a named reference within a package */
|
||||
|
||||
if ((status == AE_NOT_FOUND)
|
||||
&& (acpi_gbl_enable_interpreter_slack)
|
||||
&&
|
||||
((op->common.parent->common.aml_opcode ==
|
||||
AML_PACKAGE_OP)
|
||||
|| (op->common.parent->common.aml_opcode ==
|
||||
AML_VAR_PACKAGE_OP))) {
|
||||
/*
|
||||
* We didn't find the target and we are populating elements
|
||||
* of a package - ignore if slack enabled. Some ASL code
|
||||
* contains dangling invalid references in packages and
|
||||
* expects that no exception will be issued. Leave the
|
||||
* element as a null element. It cannot be used, but it
|
||||
* can be overwritten by subsequent ASL code - this is
|
||||
* typically the case.
|
||||
*/
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"Ignoring unresolved reference in package [%4.4s]\n",
|
||||
walk_state->
|
||||
scope_info->scope.
|
||||
node->name.ascii));
|
||||
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
} else {
|
||||
ACPI_REPORT_NSERROR(op->common.value.
|
||||
string, status);
|
||||
}
|
||||
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Create and init the internal ACPI object */
|
||||
/* Create and init a new internal ACPI object */
|
||||
|
||||
obj_desc = acpi_ut_create_internal_object((acpi_ps_get_opcode_info
|
||||
(op->common.aml_opcode))->
|
||||
|
@ -157,13 +188,13 @@ acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state,
|
|||
|
||||
ACPI_FUNCTION_TRACE("ds_build_internal_buffer_obj");
|
||||
|
||||
/*
|
||||
* If we are evaluating a Named buffer object "Name (xxxx, Buffer)".
|
||||
* The buffer object already exists (from the NS node), otherwise it must
|
||||
* be created.
|
||||
*/
|
||||
obj_desc = *obj_desc_ptr;
|
||||
if (obj_desc) {
|
||||
/*
|
||||
* We are evaluating a Named buffer object "Name (xxxx, Buffer)".
|
||||
* The buffer object already exists (from the NS node)
|
||||
*/
|
||||
} else {
|
||||
if (!obj_desc) {
|
||||
/* Create a new buffer object */
|
||||
|
||||
obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER);
|
||||
|
@ -259,7 +290,7 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
|
|||
union acpi_operand_object *obj_desc = NULL;
|
||||
u32 package_list_length;
|
||||
acpi_status status = AE_OK;
|
||||
u32 i;
|
||||
acpi_native_uint i;
|
||||
|
||||
ACPI_FUNCTION_TRACE("ds_build_internal_package_obj");
|
||||
|
||||
|
@ -271,13 +302,12 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
|
|||
parent = parent->common.parent;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we are evaluating a Named package object "Name (xxxx, Package)",
|
||||
* the package object already exists, otherwise it must be created.
|
||||
*/
|
||||
obj_desc = *obj_desc_ptr;
|
||||
if (obj_desc) {
|
||||
/*
|
||||
* We are evaluating a Named package object "Name (xxxx, Package)".
|
||||
* Get the existing package object from the NS node
|
||||
*/
|
||||
} else {
|
||||
if (!obj_desc) {
|
||||
obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_PACKAGE);
|
||||
*obj_desc_ptr = obj_desc;
|
||||
if (!obj_desc) {
|
||||
|
@ -291,11 +321,9 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
|
|||
|
||||
/* Count the number of items in the package list */
|
||||
|
||||
package_list_length = 0;
|
||||
arg = op->common.value.arg;
|
||||
arg = arg->common.next;
|
||||
while (arg) {
|
||||
package_list_length++;
|
||||
for (package_list_length = 0; arg; package_list_length++) {
|
||||
arg = arg->common.next;
|
||||
}
|
||||
|
||||
|
@ -322,12 +350,11 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
|
|||
}
|
||||
|
||||
/*
|
||||
* Now init the elements of the package
|
||||
* Initialize all elements of the package
|
||||
*/
|
||||
i = 0;
|
||||
arg = op->common.value.arg;
|
||||
arg = arg->common.next;
|
||||
while (arg) {
|
||||
for (i = 0; arg; i++) {
|
||||
if (arg->common.aml_opcode == AML_INT_RETURN_VALUE_OP) {
|
||||
/* Object (package or buffer) is already built */
|
||||
|
||||
|
@ -340,8 +367,6 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
|
|||
package.
|
||||
elements[i]);
|
||||
}
|
||||
|
||||
i++;
|
||||
arg = arg->common.next;
|
||||
}
|
||||
|
||||
|
|
|
@ -314,12 +314,13 @@ acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state,
|
|||
|
||||
case AML_CLASS_EXECUTE:
|
||||
case AML_CLASS_CREATE:
|
||||
|
||||
/*
|
||||
* Most operators with arguments.
|
||||
* Start a new result/operand state
|
||||
*/
|
||||
status = acpi_ds_result_stack_push(walk_state);
|
||||
if (walk_state->opcode != AML_CREATE_FIELD_OP) {
|
||||
status = acpi_ds_result_stack_push(walk_state);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -723,20 +724,6 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
|
|||
|
||||
cleanup:
|
||||
|
||||
/* Invoke exception handler on error */
|
||||
|
||||
if (ACPI_FAILURE(status) &&
|
||||
acpi_gbl_exception_handler && !(status & AE_CODE_CONTROL)) {
|
||||
acpi_ex_exit_interpreter();
|
||||
status = acpi_gbl_exception_handler(status,
|
||||
walk_state->method_node->
|
||||
name.integer,
|
||||
walk_state->opcode,
|
||||
walk_state->aml_offset,
|
||||
NULL);
|
||||
(void)acpi_ex_enter_interpreter();
|
||||
}
|
||||
|
||||
if (walk_state->result_obj) {
|
||||
/* Break to debugger to display result */
|
||||
|
||||
|
@ -758,18 +745,14 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
|
|||
}
|
||||
#endif
|
||||
|
||||
/* Invoke exception handler on error */
|
||||
|
||||
if (ACPI_FAILURE(status)) {
|
||||
status = acpi_ds_method_error(status, walk_state);
|
||||
}
|
||||
|
||||
/* Always clear the object stack */
|
||||
|
||||
walk_state->num_operands = 0;
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
|
||||
/* On error, display method locals/args */
|
||||
|
||||
if (ACPI_FAILURE(status)) {
|
||||
acpi_dm_dump_method_info(status, walk_state, op);
|
||||
}
|
||||
#endif
|
||||
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
|
|
@ -428,43 +428,54 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state)
|
|||
}
|
||||
}
|
||||
|
||||
if (op->common.aml_opcode == AML_METHOD_OP) {
|
||||
/*
|
||||
* method_op pkg_length name_string method_flags term_list
|
||||
*
|
||||
* Note: We must create the method node/object pair as soon as we
|
||||
* see the method declaration. This allows later pass1 parsing
|
||||
* of invocations of the method (need to know the number of
|
||||
* arguments.)
|
||||
*/
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
|
||||
"LOADING-Method: State=%p Op=%p named_obj=%p\n",
|
||||
walk_state, op, op->named.node));
|
||||
/*
|
||||
* If we are executing a method, do not create any namespace objects
|
||||
* during the load phase, only during execution.
|
||||
*/
|
||||
if (!walk_state->method_node) {
|
||||
if (op->common.aml_opcode == AML_METHOD_OP) {
|
||||
/*
|
||||
* method_op pkg_length name_string method_flags term_list
|
||||
*
|
||||
* Note: We must create the method node/object pair as soon as we
|
||||
* see the method declaration. This allows later pass1 parsing
|
||||
* of invocations of the method (need to know the number of
|
||||
* arguments.)
|
||||
*/
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
|
||||
"LOADING-Method: State=%p Op=%p named_obj=%p\n",
|
||||
walk_state, op, op->named.node));
|
||||
|
||||
if (!acpi_ns_get_attached_object(op->named.node)) {
|
||||
walk_state->operands[0] = (void *)op->named.node;
|
||||
walk_state->num_operands = 1;
|
||||
if (!acpi_ns_get_attached_object(op->named.node)) {
|
||||
walk_state->operands[0] =
|
||||
ACPI_CAST_PTR(void, op->named.node);
|
||||
walk_state->num_operands = 1;
|
||||
|
||||
status =
|
||||
acpi_ds_create_operands(walk_state,
|
||||
op->common.value.arg);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
status = acpi_ex_create_method(op->named.data,
|
||||
op->named.length,
|
||||
walk_state);
|
||||
}
|
||||
walk_state->operands[0] = NULL;
|
||||
walk_state->num_operands = 0;
|
||||
status =
|
||||
acpi_ds_create_operands(walk_state,
|
||||
op->common.value.
|
||||
arg);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
status =
|
||||
acpi_ex_create_method(op->named.
|
||||
data,
|
||||
op->named.
|
||||
length,
|
||||
walk_state);
|
||||
}
|
||||
walk_state->operands[0] = NULL;
|
||||
walk_state->num_operands = 0;
|
||||
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Pop the scope stack */
|
||||
/* Pop the scope stack (only if loading a table) */
|
||||
|
||||
if (acpi_ns_opens_scope(object_type)) {
|
||||
if (!walk_state->method_node && acpi_ns_opens_scope(object_type)) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
|
||||
"(%s): Popping scope for Op %p\n",
|
||||
acpi_ut_get_type_name(object_type), op));
|
||||
|
@ -1015,11 +1026,50 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
|
|||
|
||||
status = acpi_ds_create_node(walk_state, node, op);
|
||||
break;
|
||||
|
||||
case AML_METHOD_OP:
|
||||
/*
|
||||
* method_op pkg_length name_string method_flags term_list
|
||||
*
|
||||
* Note: We must create the method node/object pair as soon as we
|
||||
* see the method declaration. This allows later pass1 parsing
|
||||
* of invocations of the method (need to know the number of
|
||||
* arguments.)
|
||||
*/
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
|
||||
"LOADING-Method: State=%p Op=%p named_obj=%p\n",
|
||||
walk_state, op, op->named.node));
|
||||
|
||||
if (!acpi_ns_get_attached_object(op->named.node)) {
|
||||
walk_state->operands[0] =
|
||||
ACPI_CAST_PTR(void, op->named.node);
|
||||
walk_state->num_operands = 1;
|
||||
|
||||
status =
|
||||
acpi_ds_create_operands(walk_state,
|
||||
op->common.value.
|
||||
arg);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
status =
|
||||
acpi_ex_create_method(op->named.
|
||||
data,
|
||||
op->named.
|
||||
length,
|
||||
walk_state);
|
||||
}
|
||||
walk_state->operands[0] = NULL;
|
||||
walk_state->num_operands = 0;
|
||||
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
#endif /* ACPI_NO_METHOD_EXECUTION */
|
||||
|
||||
default:
|
||||
/* All NAMED_COMPLEX opcodes must be handled above */
|
||||
/* Note: Method objects were already created in Pass 1 */
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -223,8 +223,8 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
if (length > 0) {
|
||||
/* Copy the portion requested */
|
||||
if (buffer) {
|
||||
/* We have a buffer, copy the portion requested */
|
||||
|
||||
ACPI_MEMCPY(buffer, operand[0]->string.pointer + index,
|
||||
length);
|
||||
|
|
|
@ -144,7 +144,8 @@ acpi_get_sleep_type_data(u8 sleep_state, u8 * sleep_type_a, u8 * sleep_type_b)
|
|||
|
||||
info.parameters = NULL;
|
||||
info.return_object = NULL;
|
||||
sleep_state_name = (char *)acpi_gbl_sleep_state_names[sleep_state];
|
||||
sleep_state_name =
|
||||
ACPI_CAST_PTR(char, acpi_gbl_sleep_state_names[sleep_state]);
|
||||
|
||||
status = acpi_ns_evaluate_by_name(sleep_state_name, &info);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
|
|
|
@ -336,23 +336,22 @@ acpi_ns_init_one_device(acpi_handle obj_handle,
|
|||
struct acpi_parameter_info pinfo;
|
||||
u32 flags;
|
||||
acpi_status status;
|
||||
struct acpi_namespace_node *ini_node;
|
||||
struct acpi_namespace_node *device_node;
|
||||
|
||||
ACPI_FUNCTION_TRACE("ns_init_one_device");
|
||||
|
||||
pinfo.parameters = NULL;
|
||||
pinfo.parameter_type = ACPI_PARAM_ARGS;
|
||||
|
||||
pinfo.node = acpi_ns_map_handle_to_node(obj_handle);
|
||||
if (!pinfo.node) {
|
||||
device_node = acpi_ns_map_handle_to_node(obj_handle);
|
||||
if (!device_node) {
|
||||
return_ACPI_STATUS(AE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
/*
|
||||
* We will run _STA/_INI on Devices, Processors and thermal_zones only
|
||||
*/
|
||||
if ((pinfo.node->type != ACPI_TYPE_DEVICE) &&
|
||||
(pinfo.node->type != ACPI_TYPE_PROCESSOR) &&
|
||||
(pinfo.node->type != ACPI_TYPE_THERMAL)) {
|
||||
if ((device_node->type != ACPI_TYPE_DEVICE) &&
|
||||
(device_node->type != ACPI_TYPE_PROCESSOR) &&
|
||||
(device_node->type != ACPI_TYPE_THERMAL)) {
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
|
@ -364,57 +363,69 @@ acpi_ns_init_one_device(acpi_handle obj_handle,
|
|||
info->device_count++;
|
||||
|
||||
/*
|
||||
* Run _STA to determine if we can run _INI on the device.
|
||||
* Check if the _INI method exists for this device -
|
||||
* if _INI does not exist, there is no need to run _STA
|
||||
* No _INI means device requires no initialization
|
||||
*/
|
||||
ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname(ACPI_TYPE_METHOD,
|
||||
pinfo.node,
|
||||
METHOD_NAME__STA));
|
||||
status = acpi_ut_execute_STA(pinfo.node, &flags);
|
||||
|
||||
status = acpi_ns_search_node(*ACPI_CAST_PTR(u32, METHOD_NAME__INI),
|
||||
device_node, ACPI_TYPE_METHOD, &ini_node);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
if (pinfo.node->type == ACPI_TYPE_DEVICE) {
|
||||
/* Ignore error and move on to next device */
|
||||
/* No _INI method found - move on to next device */
|
||||
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
/* _STA is not required for Processor or thermal_zone objects */
|
||||
} else {
|
||||
info->num_STA++;
|
||||
|
||||
if (!(flags & 0x01)) {
|
||||
/* Don't look at children of a not present device */
|
||||
|
||||
return_ACPI_STATUS(AE_CTRL_DEPTH);
|
||||
}
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
/*
|
||||
* The device is present. Run _INI.
|
||||
* Run _STA to determine if we can run _INI on the device -
|
||||
* the device must be present before _INI can be run.
|
||||
* However, _STA is not required - assume device present if no _STA
|
||||
*/
|
||||
ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname(ACPI_TYPE_METHOD,
|
||||
device_node,
|
||||
METHOD_NAME__STA));
|
||||
|
||||
pinfo.node = device_node;
|
||||
pinfo.parameters = NULL;
|
||||
pinfo.parameter_type = ACPI_PARAM_ARGS;
|
||||
|
||||
status = acpi_ut_execute_STA(pinfo.node, &flags);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
/* Ignore error and move on to next device */
|
||||
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
if (flags != ACPI_UINT32_MAX) {
|
||||
info->num_STA++;
|
||||
}
|
||||
|
||||
if (!(flags & ACPI_STA_DEVICE_PRESENT)) {
|
||||
/* Don't look at children of a not present device */
|
||||
|
||||
return_ACPI_STATUS(AE_CTRL_DEPTH);
|
||||
}
|
||||
|
||||
/*
|
||||
* The device is present and _INI exists. Run the _INI method.
|
||||
* (We already have the _INI node from above)
|
||||
*/
|
||||
ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname(ACPI_TYPE_METHOD,
|
||||
pinfo.node,
|
||||
METHOD_NAME__INI));
|
||||
status = acpi_ns_evaluate_relative(METHOD_NAME__INI, &pinfo);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
/* No _INI (AE_NOT_FOUND) means device requires no initialization */
|
||||
|
||||
if (status != AE_NOT_FOUND) {
|
||||
/* Ignore error and move on to next device */
|
||||
pinfo.node = ini_node;
|
||||
status = acpi_ns_evaluate_by_handle(&pinfo);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
/* Ignore error and move on to next device */
|
||||
|
||||
#ifdef ACPI_DEBUG_OUTPUT
|
||||
char *scope_name =
|
||||
acpi_ns_get_external_pathname(pinfo.node);
|
||||
char *scope_name = acpi_ns_get_external_pathname(ini_node);
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_WARN, "%s._INI failed: %s\n",
|
||||
scope_name,
|
||||
acpi_format_exception(status)));
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_WARN, "%s._INI failed: %s\n",
|
||||
scope_name, acpi_format_exception(status)));
|
||||
|
||||
ACPI_MEM_FREE(scope_name);
|
||||
ACPI_MEM_FREE(scope_name);
|
||||
#endif
|
||||
}
|
||||
|
||||
status = AE_OK;
|
||||
} else {
|
||||
/* Delete any return object (especially if implicit_return is enabled) */
|
||||
|
||||
|
@ -434,5 +445,5 @@ acpi_ns_init_one_device(acpi_handle obj_handle,
|
|||
acpi_gbl_init_handler(pinfo.node, ACPI_INIT_DEVICE_INI);
|
||||
}
|
||||
|
||||
return_ACPI_STATUS(status);
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
|
|
@ -99,8 +99,8 @@ acpi_ns_search_node(u32 target_name,
|
|||
if (scope_name) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
|
||||
"Searching %s (%p) For [%4.4s] (%s)\n",
|
||||
scope_name, node,
|
||||
(char *)&target_name,
|
||||
scope_name, node, ACPI_CAST_PTR(char,
|
||||
&target_name),
|
||||
acpi_ut_get_type_name(type)));
|
||||
|
||||
ACPI_MEM_FREE(scope_name);
|
||||
|
@ -131,7 +131,7 @@ acpi_ns_search_node(u32 target_name,
|
|||
*/
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
|
||||
"Name [%4.4s] (%s) %p found in scope [%4.4s] %p\n",
|
||||
(char *)&target_name,
|
||||
ACPI_CAST_PTR(char, &target_name),
|
||||
acpi_ut_get_type_name(next_node->
|
||||
type),
|
||||
next_node,
|
||||
|
@ -160,7 +160,8 @@ acpi_ns_search_node(u32 target_name,
|
|||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
|
||||
"Name [%4.4s] (%s) not found in search in scope [%4.4s] %p first child %p\n",
|
||||
(char *)&target_name, acpi_ut_get_type_name(type),
|
||||
ACPI_CAST_PTR(char, &target_name),
|
||||
acpi_ut_get_type_name(type),
|
||||
acpi_ut_get_node_name(node), node, node->child));
|
||||
|
||||
return_ACPI_STATUS(AE_NOT_FOUND);
|
||||
|
@ -210,14 +211,14 @@ acpi_ns_search_parent_tree(u32 target_name,
|
|||
*/
|
||||
if (!parent_node) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "[%4.4s] has no parent\n",
|
||||
(char *)&target_name));
|
||||
ACPI_CAST_PTR(char, &target_name)));
|
||||
return_ACPI_STATUS(AE_NOT_FOUND);
|
||||
}
|
||||
|
||||
if (acpi_ns_local(type)) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
|
||||
"[%4.4s] type [%s] must be local to this scope (no parent search)\n",
|
||||
(char *)&target_name,
|
||||
ACPI_CAST_PTR(char, &target_name),
|
||||
acpi_ut_get_type_name(type)));
|
||||
return_ACPI_STATUS(AE_NOT_FOUND);
|
||||
}
|
||||
|
@ -227,7 +228,7 @@ acpi_ns_search_parent_tree(u32 target_name,
|
|||
ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
|
||||
"Searching parent [%4.4s] for [%4.4s]\n",
|
||||
acpi_ut_get_node_name(parent_node),
|
||||
(char *)&target_name));
|
||||
ACPI_CAST_PTR(char, &target_name)));
|
||||
|
||||
/*
|
||||
* Search parents until target is found or we have backed up to the root
|
||||
|
@ -360,7 +361,7 @@ acpi_ns_search_and_enter(u32 target_name,
|
|||
if (interpreter_mode == ACPI_IMODE_EXECUTE) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
|
||||
"%4.4s Not found in %p [Not adding]\n",
|
||||
(char *)&target_name, node));
|
||||
ACPI_CAST_PTR(char, &target_name), node));
|
||||
|
||||
return_ACPI_STATUS(AE_NOT_FOUND);
|
||||
}
|
||||
|
|
|
@ -473,8 +473,8 @@ acpi_ns_get_device_callback(acpi_handle obj_handle,
|
|||
return (AE_CTRL_DEPTH);
|
||||
}
|
||||
|
||||
if (!(flags & 0x01)) {
|
||||
/* Don't return at the device or children of the device if not there */
|
||||
if (!(flags & ACPI_STA_DEVICE_PRESENT)) {
|
||||
/* Don't examine children of the device if not present */
|
||||
|
||||
return (AE_CTRL_DEPTH);
|
||||
}
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#include <acpi/acparser.h>
|
||||
#include <acpi/amlcode.h>
|
||||
#include <acpi/acnamesp.h>
|
||||
#include <acpi/acdispat.h>
|
||||
|
||||
#define _COMPONENT ACPI_PARSER
|
||||
ACPI_MODULE_NAME("psargs")
|
||||
|
@ -211,7 +212,7 @@ char *acpi_ps_get_next_namestring(struct acpi_parse_state *parser_state)
|
|||
* Arg - Where the namepath will be stored
|
||||
* arg_count - If the namepath points to a control method
|
||||
* the method's argument is returned here.
|
||||
* method_call - Whether the namepath can possibly be the
|
||||
* possible_method_call - Whether the namepath can possibly be the
|
||||
* start of a method call
|
||||
*
|
||||
* RETURN: Status
|
||||
|
@ -227,11 +228,11 @@ char *acpi_ps_get_next_namestring(struct acpi_parse_state *parser_state)
|
|||
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)
|
||||
union acpi_parse_object *arg, u8 possible_method_call)
|
||||
{
|
||||
char *path;
|
||||
union acpi_parse_object *name_op;
|
||||
acpi_status status = AE_OK;
|
||||
acpi_status status;
|
||||
union acpi_operand_object *method_desc;
|
||||
struct acpi_namespace_node *node;
|
||||
union acpi_generic_state scope_info;
|
||||
|
@ -239,114 +240,127 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
|
|||
ACPI_FUNCTION_TRACE("ps_get_next_namepath");
|
||||
|
||||
path = acpi_ps_get_next_namestring(parser_state);
|
||||
acpi_ps_init_op(arg, AML_INT_NAMEPATH_OP);
|
||||
|
||||
/* Null path case is allowed */
|
||||
/* Null path case is allowed, just exit */
|
||||
|
||||
if (path) {
|
||||
/*
|
||||
* Lookup the name in the internal namespace
|
||||
*/
|
||||
scope_info.scope.node = NULL;
|
||||
node = parser_state->start_node;
|
||||
if (node) {
|
||||
scope_info.scope.node = node;
|
||||
}
|
||||
if (!path) {
|
||||
arg->common.value.name = path;
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
/*
|
||||
* Lookup object. We don't want to add anything new to the namespace
|
||||
* here, however. So we use MODE_EXECUTE. Allow searching of the
|
||||
* parent tree, but don't open a new scope -- we just want to lookup the
|
||||
* object (MUST BE mode EXECUTE to perform upsearch)
|
||||
*/
|
||||
status = acpi_ns_lookup(&scope_info, path, ACPI_TYPE_ANY,
|
||||
ACPI_IMODE_EXECUTE,
|
||||
ACPI_NS_SEARCH_PARENT |
|
||||
ACPI_NS_DONT_OPEN_SCOPE, NULL, &node);
|
||||
if (ACPI_SUCCESS(status) && method_call) {
|
||||
if (node->type == ACPI_TYPE_METHOD) {
|
||||
/* This name is actually a control method invocation */
|
||||
/* Setup search scope info */
|
||||
|
||||
method_desc = acpi_ns_get_attached_object(node);
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
|
||||
"Control Method - %p Desc %p Path=%p\n",
|
||||
node, method_desc, path));
|
||||
|
||||
name_op = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP);
|
||||
if (!name_op) {
|
||||
return_ACPI_STATUS(AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
/* Change arg into a METHOD CALL and attach name to it */
|
||||
|
||||
acpi_ps_init_op(arg, AML_INT_METHODCALL_OP);
|
||||
name_op->common.value.name = path;
|
||||
|
||||
/* Point METHODCALL/NAME to the METHOD Node */
|
||||
|
||||
name_op->common.node = node;
|
||||
acpi_ps_append_arg(arg, name_op);
|
||||
|
||||
if (!method_desc) {
|
||||
ACPI_REPORT_ERROR(("ps_get_next_namepath: Control Method %p has no attached object\n", node));
|
||||
return_ACPI_STATUS(AE_AML_INTERNAL);
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
|
||||
"Control Method - %p Args %X\n",
|
||||
node,
|
||||
method_desc->method.
|
||||
param_count));
|
||||
|
||||
/* Get the number of arguments to expect */
|
||||
|
||||
walk_state->arg_count =
|
||||
method_desc->method.param_count;
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
/*
|
||||
* Else this is normal named object reference.
|
||||
* Just init the NAMEPATH object with the pathname.
|
||||
* (See code below)
|
||||
*/
|
||||
}
|
||||
|
||||
if (ACPI_FAILURE(status)) {
|
||||
/*
|
||||
* 1) Any error other than NOT_FOUND is always severe
|
||||
* 2) NOT_FOUND is only important if we are executing a method.
|
||||
* 3) If executing a cond_ref_of opcode, NOT_FOUND is ok.
|
||||
*/
|
||||
if ((((walk_state->
|
||||
parse_flags & ACPI_PARSE_MODE_MASK) ==
|
||||
ACPI_PARSE_EXECUTE) && (status == AE_NOT_FOUND)
|
||||
&& (walk_state->op->common.aml_opcode !=
|
||||
AML_COND_REF_OF_OP))
|
||||
|| (status != AE_NOT_FOUND)) {
|
||||
ACPI_REPORT_NSERROR(path, status);
|
||||
|
||||
acpi_os_printf
|
||||
("search_node %p start_node %p return_node %p\n",
|
||||
scope_info.scope.node,
|
||||
parser_state->start_node, node);
|
||||
} else {
|
||||
/*
|
||||
* We got a NOT_FOUND during table load or we encountered
|
||||
* a cond_ref_of(x) where the target does not exist.
|
||||
* Either case is ok
|
||||
*/
|
||||
status = AE_OK;
|
||||
}
|
||||
}
|
||||
scope_info.scope.node = NULL;
|
||||
node = parser_state->start_node;
|
||||
if (node) {
|
||||
scope_info.scope.node = node;
|
||||
}
|
||||
|
||||
/*
|
||||
* Regardless of success/failure above,
|
||||
* Just initialize the Op with the pathname.
|
||||
* Lookup the name in the internal namespace. We don't want to add
|
||||
* anything new to the namespace here, however, so we use MODE_EXECUTE.
|
||||
* Allow searching of the parent tree, but don't open a new scope -
|
||||
* we just want to lookup the object (must be mode EXECUTE to perform
|
||||
* the upsearch)
|
||||
*/
|
||||
acpi_ps_init_op(arg, AML_INT_NAMEPATH_OP);
|
||||
arg->common.value.name = path;
|
||||
status =
|
||||
acpi_ns_lookup(&scope_info, path, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
|
||||
ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
|
||||
NULL, &node);
|
||||
|
||||
/*
|
||||
* If this name is a control method invocation, we must
|
||||
* setup the method call
|
||||
*/
|
||||
if (ACPI_SUCCESS(status) &&
|
||||
possible_method_call && (node->type == ACPI_TYPE_METHOD)) {
|
||||
/* This name is actually a control method invocation */
|
||||
|
||||
method_desc = acpi_ns_get_attached_object(node);
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
|
||||
"Control Method - %p Desc %p Path=%p\n", node,
|
||||
method_desc, path));
|
||||
|
||||
name_op = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP);
|
||||
if (!name_op) {
|
||||
return_ACPI_STATUS(AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
/* Change Arg into a METHOD CALL and attach name to it */
|
||||
|
||||
acpi_ps_init_op(arg, AML_INT_METHODCALL_OP);
|
||||
name_op->common.value.name = path;
|
||||
|
||||
/* Point METHODCALL/NAME to the METHOD Node */
|
||||
|
||||
name_op->common.node = node;
|
||||
acpi_ps_append_arg(arg, name_op);
|
||||
|
||||
if (!method_desc) {
|
||||
ACPI_REPORT_ERROR(("ps_get_next_namepath: Control Method %p has no attached object\n", node));
|
||||
return_ACPI_STATUS(AE_AML_INTERNAL);
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
|
||||
"Control Method - %p Args %X\n",
|
||||
node, method_desc->method.param_count));
|
||||
|
||||
/* Get the number of arguments to expect */
|
||||
|
||||
walk_state->arg_count = method_desc->method.param_count;
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
/*
|
||||
* Special handling if the name was not found during the lookup -
|
||||
* some not_found cases are allowed
|
||||
*/
|
||||
if (status == AE_NOT_FOUND) {
|
||||
/* 1) not_found is ok during load pass 1/2 (allow forward references) */
|
||||
|
||||
if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) !=
|
||||
ACPI_PARSE_EXECUTE) {
|
||||
status = AE_OK;
|
||||
}
|
||||
|
||||
/* 2) not_found during a cond_ref_of(x) is ok by definition */
|
||||
|
||||
else if (walk_state->op->common.aml_opcode ==
|
||||
AML_COND_REF_OF_OP) {
|
||||
status = AE_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* 3) not_found while building a Package is ok at this point, we
|
||||
* may flag as an error later if slack mode is not enabled.
|
||||
* (Some ASL code depends on allowing this behavior)
|
||||
*/
|
||||
else if ((arg->common.parent) &&
|
||||
((arg->common.parent->common.aml_opcode ==
|
||||
AML_PACKAGE_OP)
|
||||
|| (arg->common.parent->common.aml_opcode ==
|
||||
AML_VAR_PACKAGE_OP))) {
|
||||
status = AE_OK;
|
||||
}
|
||||
}
|
||||
|
||||
/* Final exception check (may have been changed from code above) */
|
||||
|
||||
if (ACPI_FAILURE(status)) {
|
||||
ACPI_REPORT_NSERROR(path, status);
|
||||
|
||||
if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) ==
|
||||
ACPI_PARSE_EXECUTE) {
|
||||
/* Report a control method execution error */
|
||||
|
||||
status = acpi_ds_method_error(status, walk_state);
|
||||
}
|
||||
}
|
||||
|
||||
/* Save the namepath */
|
||||
|
||||
arg->common.value.name = path;
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
|
|
|
@ -704,6 +704,15 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
|
|||
acpi_ps_pop_scope(parser_state, &op,
|
||||
&walk_state->arg_types,
|
||||
&walk_state->arg_count);
|
||||
|
||||
if (op->common.aml_opcode != AML_WHILE_OP) {
|
||||
status2 =
|
||||
acpi_ds_result_stack_pop
|
||||
(walk_state);
|
||||
if (ACPI_FAILURE(status2)) {
|
||||
return_ACPI_STATUS(status2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Close this iteration of the While loop */
|
||||
|
|
|
@ -333,7 +333,6 @@ acpi_ps_next_parse_state(struct acpi_walk_state *walk_state,
|
|||
|
||||
switch (callback_status) {
|
||||
case AE_CTRL_TERMINATE:
|
||||
|
||||
/*
|
||||
* A control method was terminated via a RETURN statement.
|
||||
* The walk of this method is complete.
|
||||
|
@ -346,13 +345,19 @@ acpi_ps_next_parse_state(struct acpi_walk_state *walk_state,
|
|||
|
||||
parser_state->aml = walk_state->aml_last_while;
|
||||
walk_state->control_state->common.value = FALSE;
|
||||
status = AE_CTRL_BREAK;
|
||||
status = acpi_ds_result_stack_pop(walk_state);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
status = AE_CTRL_BREAK;
|
||||
}
|
||||
break;
|
||||
|
||||
case AE_CTRL_CONTINUE:
|
||||
|
||||
parser_state->aml = walk_state->aml_last_while;
|
||||
status = AE_CTRL_CONTINUE;
|
||||
status = acpi_ds_result_stack_pop(walk_state);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
status = AE_CTRL_CONTINUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case AE_CTRL_PENDING:
|
||||
|
@ -369,16 +374,18 @@ acpi_ps_next_parse_state(struct acpi_walk_state *walk_state,
|
|||
#endif
|
||||
|
||||
case AE_CTRL_TRUE:
|
||||
|
||||
/*
|
||||
* Predicate of an IF was true, and we are at the matching ELSE.
|
||||
* Just close out this package
|
||||
*/
|
||||
parser_state->aml = acpi_ps_get_next_package_end(parser_state);
|
||||
status = acpi_ds_result_stack_pop(walk_state);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
status = AE_CTRL_PENDING;
|
||||
}
|
||||
break;
|
||||
|
||||
case AE_CTRL_FALSE:
|
||||
|
||||
/*
|
||||
* Either an IF/WHILE Predicate was false or we encountered a BREAK
|
||||
* opcode. In both cases, we do not execute the rest of the
|
||||
|
|
|
@ -43,7 +43,6 @@
|
|||
|
||||
#include <acpi/acpi.h>
|
||||
#include <acpi/acresrc.h>
|
||||
#include <acpi/acdisasm.h>
|
||||
|
||||
#define _COMPONENT ACPI_RESOURCES
|
||||
ACPI_MODULE_NAME("rsdump")
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
ACPI_MODULE_NAME("utalloc")
|
||||
|
||||
/* Local prototypes */
|
||||
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
|
||||
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
|
||||
static struct acpi_debug_mem_block *acpi_ut_find_allocation(void *allocation);
|
||||
|
||||
static acpi_status
|
||||
|
@ -58,9 +58,7 @@ acpi_ut_track_allocation(struct acpi_debug_mem_block *address,
|
|||
static acpi_status
|
||||
acpi_ut_remove_allocation(struct acpi_debug_mem_block *address,
|
||||
u32 component, char *module, u32 line);
|
||||
#endif /* ACPI_DBG_TRACK_ALLOCATIONS */
|
||||
|
||||
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
|
||||
static acpi_status
|
||||
acpi_ut_create_list(char *list_name,
|
||||
u16 object_size, struct acpi_memory_list **return_cache);
|
||||
|
|
|
@ -95,7 +95,9 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state)
|
|||
|
||||
for (i = 0; i < ACPI_NUM_OSI_STRINGS; i++) {
|
||||
if (!ACPI_STRCMP(string_desc->string.pointer,
|
||||
(char *)acpi_gbl_valid_osi_strings[i])) {
|
||||
ACPI_CAST_PTR(char,
|
||||
acpi_gbl_valid_osi_strings[i])))
|
||||
{
|
||||
/* This string is supported */
|
||||
|
||||
return_desc->integer.value = 0xFFFFFFFF;
|
||||
|
@ -592,7 +594,7 @@ acpi_ut_execute_STA(struct acpi_namespace_node *device_node, u32 * flags)
|
|||
"_STA on %4.4s was not found, assuming device is present\n",
|
||||
acpi_ut_get_node_name(device_node)));
|
||||
|
||||
*flags = 0x0F;
|
||||
*flags = ACPI_UINT32_MAX;
|
||||
status = AE_OK;
|
||||
}
|
||||
|
||||
|
@ -637,17 +639,17 @@ acpi_ut_execute_sxds(struct acpi_namespace_node *device_node, u8 * highest)
|
|||
for (i = 0; i < 4; i++) {
|
||||
highest[i] = 0xFF;
|
||||
status = acpi_ut_evaluate_object(device_node,
|
||||
(char *)
|
||||
acpi_gbl_highest_dstate_names
|
||||
[i], ACPI_BTYPE_INTEGER,
|
||||
&obj_desc);
|
||||
ACPI_CAST_PTR(char,
|
||||
acpi_gbl_highest_dstate_names
|
||||
[i]),
|
||||
ACPI_BTYPE_INTEGER, &obj_desc);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
if (status != AE_NOT_FOUND) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
|
||||
"%s on Device %4.4s, %s\n",
|
||||
(char *)
|
||||
acpi_gbl_highest_dstate_names
|
||||
[i],
|
||||
ACPI_CAST_PTR(char,
|
||||
acpi_gbl_highest_dstate_names
|
||||
[i]),
|
||||
acpi_ut_get_node_name
|
||||
(device_node),
|
||||
acpi_format_exception
|
||||
|
|
|
@ -485,7 +485,7 @@ char *acpi_ut_get_region_name(u8 space_id)
|
|||
return ("invalid_space_id");
|
||||
}
|
||||
|
||||
return ((char *)acpi_gbl_region_types[space_id]);
|
||||
return (ACPI_CAST_PTR(char, acpi_gbl_region_types[space_id]));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
|
@ -690,11 +690,12 @@ char *acpi_ut_get_descriptor_name(void *object)
|
|||
}
|
||||
|
||||
if (ACPI_GET_DESCRIPTOR_TYPE(object) > ACPI_DESC_TYPE_MAX) {
|
||||
return ((char *)acpi_gbl_bad_type);
|
||||
return (ACPI_CAST_PTR(char, acpi_gbl_bad_type));
|
||||
}
|
||||
|
||||
return ((char *)
|
||||
acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE(object)]);
|
||||
return (ACPI_CAST_PTR(char,
|
||||
acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE
|
||||
(object)]));
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -179,7 +179,7 @@ void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr)
|
|||
|
||||
/* Zero is not a valid owner_iD */
|
||||
|
||||
if ((owner_id == 0) || (owner_id > 255)) {
|
||||
if (owner_id == 0) {
|
||||
ACPI_REPORT_ERROR(("Invalid owner_id: %2.2X\n", owner_id));
|
||||
return_VOID;
|
||||
}
|
||||
|
|
|
@ -47,6 +47,115 @@
|
|||
#define _COMPONENT ACPI_UTILITIES
|
||||
ACPI_MODULE_NAME("utmisc")
|
||||
|
||||
#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER)
|
||||
/*
|
||||
* Strings used to decode resource descriptors.
|
||||
* Used by both the disasssembler and the debugger resource dump routines
|
||||
*/
|
||||
const char *acpi_gbl_BMdecode[2] = {
|
||||
"not_bus_master",
|
||||
"bus_master"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_config_decode[4] = {
|
||||
"0 - Good Configuration",
|
||||
"1 - Acceptable Configuration",
|
||||
"2 - Suboptimal Configuration",
|
||||
"3 - ***Invalid Configuration***",
|
||||
};
|
||||
|
||||
const char *acpi_gbl_consume_decode[2] = {
|
||||
"resource_producer",
|
||||
"resource_consumer"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_DECdecode[2] = {
|
||||
"pos_decode",
|
||||
"sub_decode"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_HEdecode[2] = {
|
||||
"Level",
|
||||
"Edge"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_io_decode[2] = {
|
||||
"Decode10",
|
||||
"Decode16"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_LLdecode[2] = {
|
||||
"active_high",
|
||||
"active_low"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_max_decode[2] = {
|
||||
"max_not_fixed",
|
||||
"max_fixed"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_MEMdecode[4] = {
|
||||
"non_cacheable",
|
||||
"Cacheable",
|
||||
"write_combining",
|
||||
"Prefetchable"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_min_decode[2] = {
|
||||
"min_not_fixed",
|
||||
"min_fixed"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_MTPdecode[4] = {
|
||||
"address_range_memory",
|
||||
"address_range_reserved",
|
||||
"address_range_aCPI",
|
||||
"address_range_nVS"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_RNGdecode[4] = {
|
||||
"invalid_ranges",
|
||||
"non_iSAonly_ranges",
|
||||
"ISAonly_ranges",
|
||||
"entire_range"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_RWdecode[2] = {
|
||||
"read_only",
|
||||
"read_write"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_SHRdecode[2] = {
|
||||
"Exclusive",
|
||||
"Shared"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_SIZdecode[4] = {
|
||||
"Transfer8",
|
||||
"Transfer8_16",
|
||||
"Transfer16",
|
||||
"invalid_size"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_TRSdecode[2] = {
|
||||
"dense_translation",
|
||||
"sparse_translation"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_TTPdecode[2] = {
|
||||
"type_static",
|
||||
"type_translation"
|
||||
};
|
||||
|
||||
const char *acpi_gbl_TYPdecode[4] = {
|
||||
"Compatibility",
|
||||
"type_a",
|
||||
"type_b",
|
||||
"type_f"
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Base sizes of the raw AML resource descriptors, indexed by resource type.
|
||||
* Zero indicates a reserved (and therefore invalid) resource type.
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
|
||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||
|
||||
#define ACPI_CA_VERSION 0x20051202
|
||||
#define ACPI_CA_VERSION 0x20051216
|
||||
|
||||
/*
|
||||
* OS name, used for the _OS object. The _OS object is essentially obsolete,
|
||||
|
|
|
@ -57,27 +57,11 @@ struct acpi_external_list {
|
|||
};
|
||||
|
||||
extern struct acpi_external_list *acpi_gbl_external_list;
|
||||
extern const char *acpi_gbl_io_decode[2];
|
||||
extern const char *acpi_gbl_word_decode[4];
|
||||
extern const char *acpi_gbl_consume_decode[2];
|
||||
extern const char *acpi_gbl_config_decode[4];
|
||||
extern const char *acpi_gbl_min_decode[2];
|
||||
extern const char *acpi_gbl_max_decode[2];
|
||||
extern const char *acpi_gbl_DECdecode[2];
|
||||
extern const char *acpi_gbl_RNGdecode[4];
|
||||
extern const char *acpi_gbl_MEMdecode[4];
|
||||
extern const char *acpi_gbl_RWdecode[2];
|
||||
extern const char *acpi_gbl_irq_decode[2];
|
||||
extern const char *acpi_gbl_HEdecode[2];
|
||||
extern const char *acpi_gbl_LLdecode[2];
|
||||
extern const char *acpi_gbl_SHRdecode[2];
|
||||
extern const char *acpi_gbl_TYPdecode[4];
|
||||
extern const char *acpi_gbl_BMdecode[2];
|
||||
extern const char *acpi_gbl_SIZdecode[4];
|
||||
extern const char *acpi_gbl_TTPdecode[2];
|
||||
extern const char *acpi_gbl_MTPdecode[4];
|
||||
extern const char *acpi_gbl_TRSdecode[2];
|
||||
|
||||
/* Strings used for decoding flags to ASL keywords */
|
||||
|
||||
extern const char *acpi_gbl_word_decode[4];
|
||||
extern const char *acpi_gbl_irq_decode[2];
|
||||
extern const char *acpi_gbl_lock_rule[ACPI_NUM_LOCK_RULES];
|
||||
extern const char *acpi_gbl_access_types[ACPI_NUM_ACCESS_TYPES];
|
||||
extern const char *acpi_gbl_update_rules[ACPI_NUM_UPDATE_RULES];
|
||||
|
|
|
@ -201,6 +201,9 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
|
|||
union acpi_operand_object *obj_desc,
|
||||
struct acpi_namespace_node *calling_method_node);
|
||||
|
||||
acpi_status
|
||||
acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state);
|
||||
|
||||
/*
|
||||
* dsinit
|
||||
*/
|
||||
|
|
|
@ -98,11 +98,15 @@ ACPI_EXTERN u32 acpi_gbl_trace_flags;
|
|||
/*
|
||||
* Enable "slack" in the AML interpreter? Default is FALSE, and the
|
||||
* interpreter strictly follows the ACPI specification. Setting to TRUE
|
||||
* allows the interpreter to forgive certain bad AML constructs. Currently:
|
||||
* 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 end of operation region
|
||||
* 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
|
||||
*/
|
||||
ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_enable_interpreter_slack, FALSE);
|
||||
|
||||
|
|
|
@ -276,6 +276,37 @@ struct acpi_create_field_info {
|
|||
u8 field_type;
|
||||
};
|
||||
|
||||
/*
|
||||
* Bitmapped ACPI types. Used internally only
|
||||
*/
|
||||
#define ACPI_BTYPE_ANY 0x00000000
|
||||
#define ACPI_BTYPE_INTEGER 0x00000001
|
||||
#define ACPI_BTYPE_STRING 0x00000002
|
||||
#define ACPI_BTYPE_BUFFER 0x00000004
|
||||
#define ACPI_BTYPE_PACKAGE 0x00000008
|
||||
#define ACPI_BTYPE_FIELD_UNIT 0x00000010
|
||||
#define ACPI_BTYPE_DEVICE 0x00000020
|
||||
#define ACPI_BTYPE_EVENT 0x00000040
|
||||
#define ACPI_BTYPE_METHOD 0x00000080
|
||||
#define ACPI_BTYPE_MUTEX 0x00000100
|
||||
#define ACPI_BTYPE_REGION 0x00000200
|
||||
#define ACPI_BTYPE_POWER 0x00000400
|
||||
#define ACPI_BTYPE_PROCESSOR 0x00000800
|
||||
#define ACPI_BTYPE_THERMAL 0x00001000
|
||||
#define ACPI_BTYPE_BUFFER_FIELD 0x00002000
|
||||
#define ACPI_BTYPE_DDB_HANDLE 0x00004000
|
||||
#define ACPI_BTYPE_DEBUG_OBJECT 0x00008000
|
||||
#define ACPI_BTYPE_REFERENCE 0x00010000
|
||||
#define ACPI_BTYPE_RESOURCE 0x00020000
|
||||
|
||||
#define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER)
|
||||
|
||||
#define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_PACKAGE)
|
||||
#define ACPI_BTYPE_DATA_REFERENCE (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE)
|
||||
#define ACPI_BTYPE_DEVICE_OBJECTS (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
|
||||
#define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */
|
||||
#define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Event typedefs and structs
|
||||
|
|
|
@ -60,7 +60,7 @@
|
|||
|
||||
/*
|
||||
* For 16-bit addresses, we have to assume that the upper 32 bits
|
||||
* are zero.
|
||||
* (out of 64) are zero.
|
||||
*/
|
||||
#define ACPI_LODWORD(l) ((u32)(l))
|
||||
#define ACPI_HIDWORD(l) ((u32)(0))
|
||||
|
@ -104,8 +104,9 @@
|
|||
#define ACPI_FORMAT_UINT64(i) ACPI_HIDWORD(i),ACPI_LODWORD(i)
|
||||
|
||||
/*
|
||||
* Extract a byte of data using a pointer. Any more than a byte and we
|
||||
* get into potential aligment issues -- see the STORE macros below
|
||||
* 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)
|
||||
|
@ -116,16 +117,17 @@
|
|||
#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 *)(void *)(p))
|
||||
#define ACPI_CAST_INDIRECT_PTR(t, p) ((t **)(void *)(p))
|
||||
#define ACPI_ADD_PTR(t,a,b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8, (a)) + (acpi_native_uint)(b)))
|
||||
#define ACPI_PTR_DIFF(a,b) (acpi_native_uint) ((char *)(a) - (char *)(b))
|
||||
/*
|
||||
* 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_native_uint)(b)))
|
||||
#define ACPI_PTR_DIFF(a,b) (acpi_native_uint) (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_native_uint)i)
|
||||
#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void,(void *) NULL,(acpi_native_uint) 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_FADT_OFFSET(f) ACPI_OFFSET (FADT_DESCRIPTOR, f)
|
||||
|
@ -133,7 +135,7 @@
|
|||
#if ACPI_MACHINE_WIDTH == 16
|
||||
#define ACPI_STORE_POINTER(d,s) ACPI_MOVE_32_TO_32(d,s)
|
||||
#define ACPI_PHYSADDR_TO_PTR(i) (void *)(i)
|
||||
#define ACPI_PTR_TO_PHYSADDR(i) (u32) (char *)(i)
|
||||
#define ACPI_PTR_TO_PHYSADDR(i) (u32) ACPI_CAST_PTR (u8,(i))
|
||||
#else
|
||||
#define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i)
|
||||
#define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i)
|
||||
|
|
|
@ -44,6 +44,12 @@
|
|||
#ifndef __ACTBL_H__
|
||||
#define __ACTBL_H__
|
||||
|
||||
/*
|
||||
* Note about bitfields: The u8 type is used for bitfields in ACPI tables.
|
||||
* This is the only type that is even remotely portable. Anything else is not
|
||||
* portable, so do not use any other bitfield types.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Values for description table header signatures
|
||||
*/
|
||||
|
|
|
@ -44,7 +44,15 @@
|
|||
#ifndef __ACTYPES_H__
|
||||
#define __ACTYPES_H__
|
||||
|
||||
/*! [Begin] no source code translation (keep the typedefs) */
|
||||
/*
|
||||
* ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent header
|
||||
* and must be either 16, 32, or 64
|
||||
*/
|
||||
#ifndef ACPI_MACHINE_WIDTH
|
||||
#error ACPI_MACHINE_WIDTH not defined
|
||||
#endif
|
||||
|
||||
/*! [Begin] no source code translation */
|
||||
|
||||
/*
|
||||
* Data type ranges
|
||||
|
@ -58,154 +66,210 @@
|
|||
#define ACPI_UINT64_MAX (UINT64)(~((UINT64) 0)) /* 0xFFFFFFFFFFFFFFFF */
|
||||
#define ACPI_ASCII_MAX 0x7F
|
||||
|
||||
#ifdef DEFINE_ALTERNATE_TYPES
|
||||
/*
|
||||
* Types used only in translated source, defined here to enable
|
||||
* cross-platform compilation only.
|
||||
*/
|
||||
typedef int s32;
|
||||
typedef unsigned char u8;
|
||||
typedef unsigned short u16;
|
||||
typedef unsigned int u32;
|
||||
typedef COMPILER_DEPENDENT_UINT64 u64;
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Data types - Fixed across all compilation models (16/32/64)
|
||||
* Architecture-specific ACPICA Subsystem Data Types
|
||||
*
|
||||
* The goal of these types is to provide source code portability across
|
||||
* 16-bit, 32-bit, and 64-bit targets.
|
||||
*
|
||||
* 1) The following types are of fixed size for all targets (16/32/64):
|
||||
*
|
||||
* BOOLEAN Logical boolean
|
||||
*
|
||||
* UINT8 8-bit (1 byte) unsigned value
|
||||
* UINT16 16-bit (2 byte) unsigned value
|
||||
* UINT32 32-bit (4 byte) unsigned value
|
||||
* UINT64 64-bit (8 byte) unsigned value
|
||||
*
|
||||
* INT16 16-bit (2 byte) signed value
|
||||
* INT32 32-bit (4 byte) signed value
|
||||
* INT64 64-bit (8 byte) signed value
|
||||
*
|
||||
* COMPILER_DEPENDENT_UINT64/INT64 - These types are defined in the
|
||||
* compiler-dependent header(s) and were introduced because there is no common
|
||||
* 64-bit integer type across the various compilation models, as shown in
|
||||
* the table below.
|
||||
*
|
||||
* Datatype LP64 ILP64 LLP64 ILP32 LP32 16bit
|
||||
* char 8 8 8 8 8 8
|
||||
* short 16 16 16 16 16 16
|
||||
* _int32 32
|
||||
* int 32 64 32 32 16 16
|
||||
* long 64 64 32 32 32 32
|
||||
* long long 64 64
|
||||
* pointer 64 64 64 32 32 32
|
||||
*
|
||||
* Note: ILP64 and LP32 are currently not supported.
|
||||
*
|
||||
*
|
||||
* 2) These types represent the native word size of the target mode of the
|
||||
* processor, and may be 16-bit, 32-bit, or 64-bit as required. They are
|
||||
* usually used for memory allocation, efficient loop counters, and array
|
||||
* indexes. The types are similar to the size_t type in the C library and are
|
||||
* required because there is no C type that consistently represents the native
|
||||
* data width.
|
||||
*
|
||||
* ACPI_SIZE 16/32/64-bit unsigned value
|
||||
* ACPI_NATIVE_UINT 16/32/64-bit unsigned value
|
||||
* ACPI_NATIVE_INT 16/32/64-bit signed value
|
||||
*
|
||||
* BOOLEAN Logical Boolean.
|
||||
* INT8 8-bit (1 byte) signed value
|
||||
* UINT8 8-bit (1 byte) unsigned value
|
||||
* INT16 16-bit (2 byte) signed value
|
||||
* UINT16 16-bit (2 byte) unsigned value
|
||||
* INT32 32-bit (4 byte) signed value
|
||||
* UINT32 32-bit (4 byte) unsigned value
|
||||
* INT64 64-bit (8 byte) signed value
|
||||
* UINT64 64-bit (8 byte) unsigned value
|
||||
* ACPI_NATIVE_UINT 32-bit on IA-32, 64-bit on x86_64/IA-64 unsigned value
|
||||
*/
|
||||
|
||||
typedef unsigned long acpi_native_uint;
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Common types for all compilers, all targets
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef ACPI_MACHINE_WIDTH
|
||||
#error ACPI_MACHINE_WIDTH not defined
|
||||
#endif
|
||||
typedef unsigned char BOOLEAN;
|
||||
typedef unsigned char UINT8;
|
||||
typedef unsigned short UINT16;
|
||||
typedef COMPILER_DEPENDENT_UINT64 UINT64;
|
||||
typedef COMPILER_DEPENDENT_INT64 INT64;
|
||||
|
||||
/*! [End] no source code translation !*/
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Types specific to 64-bit targets
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#if ACPI_MACHINE_WIDTH == 64
|
||||
|
||||
/*! [Begin] no source code translation (keep the typedefs) */
|
||||
/*! [Begin] no source code translation (keep the typedefs as-is) */
|
||||
|
||||
/*
|
||||
* 64-bit type definitions
|
||||
*/
|
||||
typedef unsigned char UINT8;
|
||||
typedef unsigned char BOOLEAN;
|
||||
typedef unsigned short UINT16;
|
||||
typedef int INT32;
|
||||
typedef unsigned int UINT32;
|
||||
typedef COMPILER_DEPENDENT_INT64 INT64;
|
||||
typedef COMPILER_DEPENDENT_UINT64 UINT64;
|
||||
typedef int INT32;
|
||||
|
||||
/*! [End] no source code translation !*/
|
||||
|
||||
typedef u64 acpi_native_uint;
|
||||
typedef s64 acpi_native_int;
|
||||
|
||||
typedef u64 acpi_table_ptr;
|
||||
typedef u64 acpi_io_address;
|
||||
typedef u64 acpi_physical_address;
|
||||
typedef u64 acpi_size;
|
||||
|
||||
#define ALIGNED_ADDRESS_BOUNDARY 0x00000008 /* No hardware alignment support in IA64 */
|
||||
#define ACPI_USE_NATIVE_DIVIDE /* Native 64-bit integer support */
|
||||
#define ACPI_MAX_PTR ACPI_UINT64_MAX
|
||||
#define ACPI_SIZE_MAX ACPI_UINT64_MAX
|
||||
|
||||
#define ALIGNED_ADDRESS_BOUNDARY 0x00000008
|
||||
#define ACPI_USE_NATIVE_DIVIDE /* Has native 64-bit integer support */
|
||||
|
||||
/*
|
||||
* In the case of the Itanium Processor Family (IPF), the hardware does not
|
||||
* support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag
|
||||
* to indicate that special precautions must be taken to avoid alignment faults.
|
||||
* (IA64 or ia64 is currently used by existing compilers to indicate IPF.)
|
||||
*
|
||||
* Note: Em64_t and other X86-64 processors do support misaligned transfers,
|
||||
* Note: Em64_t and other X86-64 processors support misaligned transfers,
|
||||
* so there is no need to define this flag.
|
||||
*/
|
||||
#if defined (__IA64__) || defined (__ia64__)
|
||||
#define ACPI_MISALIGNMENT_NOT_SUPPORTED
|
||||
#endif
|
||||
|
||||
#elif ACPI_MACHINE_WIDTH == 16
|
||||
|
||||
/*! [Begin] no source code translation (keep the typedefs as-is) */
|
||||
|
||||
/*
|
||||
* 16-bit type definitions
|
||||
*/
|
||||
typedef unsigned char UINT8;
|
||||
typedef unsigned char BOOLEAN;
|
||||
typedef unsigned int UINT16;
|
||||
typedef long INT32;
|
||||
typedef int INT16;
|
||||
typedef unsigned long UINT32;
|
||||
|
||||
struct {
|
||||
UINT32 Lo;
|
||||
UINT32 Hi;
|
||||
};
|
||||
|
||||
/*! [End] no source code translation !*/
|
||||
|
||||
typedef u32 acpi_table_ptr;
|
||||
typedef u32 acpi_io_address;
|
||||
typedef char *acpi_physical_address;
|
||||
typedef u16 acpi_size;
|
||||
|
||||
#define ALIGNED_ADDRESS_BOUNDARY 0x00000002
|
||||
#define ACPI_USE_NATIVE_DIVIDE /* No 64-bit integers, ok to use native divide */
|
||||
#define ACPI_MAX_PTR ACPI_UINT16_MAX
|
||||
#define ACPI_SIZE_MAX ACPI_UINT16_MAX
|
||||
|
||||
/*
|
||||
* (16-bit only) internal integers must be 32-bits, so
|
||||
* 64-bit integers cannot be supported
|
||||
*/
|
||||
#define ACPI_NO_INTEGER64_SUPPORT
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Types specific to 32-bit targets
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#elif ACPI_MACHINE_WIDTH == 32
|
||||
|
||||
/*! [Begin] no source code translation (keep the typedefs) */
|
||||
/*! [Begin] no source code translation (keep the typedefs as-is) */
|
||||
|
||||
/*
|
||||
* 32-bit type definitions (default)
|
||||
*/
|
||||
typedef unsigned char UINT8;
|
||||
typedef unsigned char BOOLEAN;
|
||||
typedef unsigned short UINT16;
|
||||
typedef int INT32;
|
||||
typedef unsigned int UINT32;
|
||||
typedef COMPILER_DEPENDENT_INT64 INT64;
|
||||
typedef COMPILER_DEPENDENT_UINT64 UINT64;
|
||||
typedef int INT32;
|
||||
|
||||
/*! [End] no source code translation !*/
|
||||
|
||||
typedef u32 acpi_native_uint;
|
||||
typedef s32 acpi_native_int;
|
||||
|
||||
typedef u64 acpi_table_ptr;
|
||||
typedef u32 acpi_io_address;
|
||||
typedef u64 acpi_physical_address;
|
||||
typedef u32 acpi_size;
|
||||
|
||||
#define ALIGNED_ADDRESS_BOUNDARY 0x00000004
|
||||
#define ACPI_MAX_PTR ACPI_UINT32_MAX
|
||||
#define ACPI_SIZE_MAX ACPI_UINT32_MAX
|
||||
|
||||
#define ALIGNED_ADDRESS_BOUNDARY 0x00000004
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Types specific to 16-bit targets
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#elif ACPI_MACHINE_WIDTH == 16
|
||||
|
||||
/*! [Begin] no source code translation (keep the typedefs as-is) */
|
||||
|
||||
typedef unsigned long UINT32;
|
||||
typedef short INT16;
|
||||
typedef long INT32;
|
||||
|
||||
/*! [End] no source code translation !*/
|
||||
|
||||
typedef u16 acpi_native_uint;
|
||||
typedef s16 acpi_native_int;
|
||||
|
||||
typedef u32 acpi_table_ptr;
|
||||
typedef u32 acpi_io_address;
|
||||
typedef char *acpi_physical_address;
|
||||
|
||||
#define ACPI_MAX_PTR ACPI_UINT16_MAX
|
||||
#define ACPI_SIZE_MAX ACPI_UINT16_MAX
|
||||
|
||||
#define ALIGNED_ADDRESS_BOUNDARY 0x00000002
|
||||
#define ACPI_USE_NATIVE_DIVIDE /* No 64-bit integers, ok to use native divide */
|
||||
|
||||
/* 64-bit integers cannot be supported */
|
||||
|
||||
#define ACPI_NO_INTEGER64_SUPPORT
|
||||
|
||||
#else
|
||||
|
||||
/* ACPI_MACHINE_WIDTH must be either 64, 32, or 16 */
|
||||
|
||||
#error unknown ACPI_MACHINE_WIDTH
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* OS- or compiler-dependent types
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* This type is used for bitfields in ACPI tables. The only type that is
|
||||
* even remotely portable is u8. Anything else is not portable, so
|
||||
* do not add any more bitfield types.
|
||||
* If acpi_uintptr_t was not defined in the OS- or compiler-dependent header,
|
||||
* define it now (use C99 uintptr_t for pointer casting if available,
|
||||
* "void *" otherwise)
|
||||
*/
|
||||
typedef u8 UINT8_BIT;
|
||||
typedef acpi_native_uint ACPI_PTRDIFF;
|
||||
#ifndef acpi_uintptr_t
|
||||
#define acpi_uintptr_t void *
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If acpi_cache_t was not defined in the OS-dependent header,
|
||||
* define it now. This is typically the case where the local cache
|
||||
* manager implementation is to be used (ACPI_USE_LOCAL_CACHE)
|
||||
*/
|
||||
#ifndef acpi_cache_t
|
||||
#define acpi_cache_t struct acpi_memory_list
|
||||
#endif
|
||||
|
||||
/* Variable-width type, used instead of clib size_t */
|
||||
|
||||
typedef acpi_native_uint acpi_size;
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Independent types
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* Pointer overlays to avoid lots of typecasting for
|
||||
|
@ -237,18 +301,8 @@ struct acpi_pointer {
|
|||
#define ACPI_LOGMODE_PHYSPTR ACPI_LOGICAL_ADDRESSING | ACPI_PHYSICAL_POINTER
|
||||
#define ACPI_LOGMODE_LOGPTR ACPI_LOGICAL_ADDRESSING | ACPI_LOGICAL_POINTER
|
||||
|
||||
/*
|
||||
* If acpi_cache_t was not defined in the OS-dependent header,
|
||||
* define it now. This is typically the case where the local cache
|
||||
* manager implementation is to be used (ACPI_USE_LOCAL_CACHE)
|
||||
*/
|
||||
#ifndef acpi_cache_t
|
||||
#define acpi_cache_t struct acpi_memory_list
|
||||
#endif
|
||||
/* Logical defines and NULL */
|
||||
|
||||
/*
|
||||
* Useful defines
|
||||
*/
|
||||
#ifdef FALSE
|
||||
#undef FALSE
|
||||
#endif
|
||||
|
@ -264,12 +318,12 @@ struct acpi_pointer {
|
|||
#endif
|
||||
|
||||
/*
|
||||
* Local datatypes
|
||||
* Mescellaneous 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 an Node */
|
||||
typedef void *acpi_handle; /* Actually a ptr to a NS Node */
|
||||
|
||||
struct uint64_struct {
|
||||
u32 lo;
|
||||
|
@ -472,37 +526,6 @@ typedef u32 acpi_object_type;
|
|||
#define ACPI_TYPE_INVALID 0x1E
|
||||
#define ACPI_TYPE_NOT_FOUND 0xFF
|
||||
|
||||
/*
|
||||
* Bitmapped ACPI types. Used internally only
|
||||
*/
|
||||
#define ACPI_BTYPE_ANY 0x00000000
|
||||
#define ACPI_BTYPE_INTEGER 0x00000001
|
||||
#define ACPI_BTYPE_STRING 0x00000002
|
||||
#define ACPI_BTYPE_BUFFER 0x00000004
|
||||
#define ACPI_BTYPE_PACKAGE 0x00000008
|
||||
#define ACPI_BTYPE_FIELD_UNIT 0x00000010
|
||||
#define ACPI_BTYPE_DEVICE 0x00000020
|
||||
#define ACPI_BTYPE_EVENT 0x00000040
|
||||
#define ACPI_BTYPE_METHOD 0x00000080
|
||||
#define ACPI_BTYPE_MUTEX 0x00000100
|
||||
#define ACPI_BTYPE_REGION 0x00000200
|
||||
#define ACPI_BTYPE_POWER 0x00000400
|
||||
#define ACPI_BTYPE_PROCESSOR 0x00000800
|
||||
#define ACPI_BTYPE_THERMAL 0x00001000
|
||||
#define ACPI_BTYPE_BUFFER_FIELD 0x00002000
|
||||
#define ACPI_BTYPE_DDB_HANDLE 0x00004000
|
||||
#define ACPI_BTYPE_DEBUG_OBJECT 0x00008000
|
||||
#define ACPI_BTYPE_REFERENCE 0x00010000
|
||||
#define ACPI_BTYPE_RESOURCE 0x00020000
|
||||
|
||||
#define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER)
|
||||
|
||||
#define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_PACKAGE)
|
||||
#define ACPI_BTYPE_DATA_REFERENCE (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE)
|
||||
#define ACPI_BTYPE_DEVICE_OBJECTS (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
|
||||
#define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */
|
||||
#define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF
|
||||
|
||||
/*
|
||||
* All I/O
|
||||
*/
|
||||
|
@ -856,6 +879,14 @@ struct acpi_compatible_id_list {
|
|||
#define ACPI_VALID_CID 0x0010
|
||||
#define ACPI_VALID_SXDS 0x0020
|
||||
|
||||
/* Flags for _STA method */
|
||||
|
||||
#define ACPI_STA_DEVICE_PRESENT 0x01
|
||||
#define ACPI_STA_DEVICE_ENABLED 0x02
|
||||
#define ACPI_STA_DEVICE_UI 0x04
|
||||
#define ACPI_STA_DEVICE_OK 0x08
|
||||
#define ACPI_STA_BATTERY_PRESENT 0x10
|
||||
|
||||
#define ACPI_COMMON_OBJ_INFO \
|
||||
acpi_object_type type; /* ACPI object type */ \
|
||||
acpi_name name /* ACPI object Name */
|
||||
|
@ -921,7 +952,9 @@ typedef u32 acpi_rsdesc_size; /* Max Resource Descriptor size is (length+3) = (6
|
|||
#define ACPI_ISA_ONLY_RANGES (u8) 0x02
|
||||
#define ACPI_ENTIRE_RANGE (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES)
|
||||
|
||||
#define ACPI_SPARSE_TRANSLATION (u8) 0x03
|
||||
/* Type of translation - 1=Sparse, 0=Dense */
|
||||
|
||||
#define ACPI_SPARSE_TRANSLATION (u8) 0x01
|
||||
|
||||
/*
|
||||
* IO Port Descriptor Decode
|
||||
|
|
|
@ -46,6 +46,30 @@
|
|||
|
||||
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_BMdecode[2];
|
||||
extern const char *acpi_gbl_config_decode[4];
|
||||
extern const char *acpi_gbl_consume_decode[2];
|
||||
extern const char *acpi_gbl_DECdecode[2];
|
||||
extern const char *acpi_gbl_HEdecode[2];
|
||||
extern const char *acpi_gbl_io_decode[2];
|
||||
extern const char *acpi_gbl_LLdecode[2];
|
||||
extern const char *acpi_gbl_max_decode[2];
|
||||
extern const char *acpi_gbl_MEMdecode[4];
|
||||
extern const char *acpi_gbl_min_decode[2];
|
||||
extern const char *acpi_gbl_MTPdecode[4];
|
||||
extern const char *acpi_gbl_RNGdecode[4];
|
||||
extern const char *acpi_gbl_RWdecode[2];
|
||||
extern const char *acpi_gbl_SHRdecode[2];
|
||||
extern const char *acpi_gbl_SIZdecode[4];
|
||||
extern const char *acpi_gbl_TRSdecode[2];
|
||||
extern const char *acpi_gbl_TTPdecode[2];
|
||||
extern const char *acpi_gbl_TYPdecode[4];
|
||||
#endif
|
||||
|
||||
/* Types for Resource descriptor entries */
|
||||
|
||||
#define ACPI_INVALID_RESOURCE 0
|
||||
|
|
Loading…
Reference in New Issue