Merge back earlier ACPICA changes for 4.21.
This commit is contained in:
commit
3e407c16f5
|
@ -34,6 +34,7 @@
|
|||
#define ACPI_NS_TEMPORARY 0x0040
|
||||
#define ACPI_NS_OVERRIDE_IF_FOUND 0x0080
|
||||
#define ACPI_NS_EARLY_INIT 0x0100
|
||||
#define ACPI_NS_PREFIX_MUST_EXIST 0x0200
|
||||
|
||||
/* Flags for acpi_ns_walk_namespace */
|
||||
|
||||
|
|
|
@ -24,6 +24,13 @@ acpi_db_start_command(struct acpi_walk_state *walk_state,
|
|||
void acpi_db_method_end(struct acpi_walk_state *walk_state);
|
||||
#endif
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
static union acpi_parse_object *acpi_db_get_display_op(struct acpi_walk_state
|
||||
*walk_state,
|
||||
union acpi_parse_object
|
||||
*op);
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_db_start_command
|
||||
|
@ -113,6 +120,70 @@ void acpi_db_signal_break_point(struct acpi_walk_state *walk_state)
|
|||
acpi_os_printf("**break** Executed AML BreakPoint opcode\n");
|
||||
}
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_db_get_display_op
|
||||
*
|
||||
* PARAMETERS: walk_state - Current walk
|
||||
* op - Current executing op (from aml interpreter)
|
||||
*
|
||||
* RETURN: Opcode to display
|
||||
*
|
||||
* DESCRIPTION: Find the opcode to display during single stepping
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static union acpi_parse_object *acpi_db_get_display_op(struct acpi_walk_state
|
||||
*walk_state,
|
||||
union acpi_parse_object
|
||||
*op)
|
||||
{
|
||||
union acpi_parse_object *display_op;
|
||||
union acpi_parse_object *parent_op;
|
||||
|
||||
display_op = op;
|
||||
parent_op = op->common.parent;
|
||||
if (parent_op) {
|
||||
if ((walk_state->control_state) &&
|
||||
(walk_state->control_state->common.state ==
|
||||
ACPI_CONTROL_PREDICATE_EXECUTING)) {
|
||||
/*
|
||||
* We are executing the predicate of an IF or WHILE statement
|
||||
* Search upwards for the containing IF or WHILE so that the
|
||||
* entire predicate can be displayed.
|
||||
*/
|
||||
while (parent_op) {
|
||||
if ((parent_op->common.aml_opcode == AML_IF_OP)
|
||||
|| (parent_op->common.aml_opcode ==
|
||||
AML_WHILE_OP)) {
|
||||
display_op = parent_op;
|
||||
break;
|
||||
}
|
||||
parent_op = parent_op->common.parent;
|
||||
}
|
||||
} else {
|
||||
while (parent_op) {
|
||||
if ((parent_op->common.aml_opcode == AML_IF_OP)
|
||||
|| (parent_op->common.aml_opcode ==
|
||||
AML_ELSE_OP)
|
||||
|| (parent_op->common.aml_opcode ==
|
||||
AML_SCOPE_OP)
|
||||
|| (parent_op->common.aml_opcode ==
|
||||
AML_METHOD_OP)
|
||||
|| (parent_op->common.aml_opcode ==
|
||||
AML_WHILE_OP)) {
|
||||
break;
|
||||
}
|
||||
display_op = parent_op;
|
||||
parent_op = parent_op->common.parent;
|
||||
}
|
||||
}
|
||||
}
|
||||
return display_op;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_db_single_step
|
||||
|
@ -134,8 +205,6 @@ acpi_db_single_step(struct acpi_walk_state *walk_state,
|
|||
union acpi_parse_object *next;
|
||||
acpi_status status = AE_OK;
|
||||
u32 original_debug_level;
|
||||
union acpi_parse_object *display_op;
|
||||
union acpi_parse_object *parent_op;
|
||||
u32 aml_offset;
|
||||
|
||||
ACPI_FUNCTION_ENTRY();
|
||||
|
@ -222,51 +291,12 @@ acpi_db_single_step(struct acpi_walk_state *walk_state,
|
|||
next = op->common.next;
|
||||
op->common.next = NULL;
|
||||
|
||||
display_op = op;
|
||||
parent_op = op->common.parent;
|
||||
if (parent_op) {
|
||||
if ((walk_state->control_state) &&
|
||||
(walk_state->control_state->common.state ==
|
||||
ACPI_CONTROL_PREDICATE_EXECUTING)) {
|
||||
/*
|
||||
* We are executing the predicate of an IF or WHILE statement
|
||||
* Search upwards for the containing IF or WHILE so that the
|
||||
* entire predicate can be displayed.
|
||||
*/
|
||||
while (parent_op) {
|
||||
if ((parent_op->common.aml_opcode ==
|
||||
AML_IF_OP)
|
||||
|| (parent_op->common.aml_opcode ==
|
||||
AML_WHILE_OP)) {
|
||||
display_op = parent_op;
|
||||
break;
|
||||
}
|
||||
parent_op = parent_op->common.parent;
|
||||
}
|
||||
} else {
|
||||
while (parent_op) {
|
||||
if ((parent_op->common.aml_opcode ==
|
||||
AML_IF_OP)
|
||||
|| (parent_op->common.aml_opcode ==
|
||||
AML_ELSE_OP)
|
||||
|| (parent_op->common.aml_opcode ==
|
||||
AML_SCOPE_OP)
|
||||
|| (parent_op->common.aml_opcode ==
|
||||
AML_METHOD_OP)
|
||||
|| (parent_op->common.aml_opcode ==
|
||||
AML_WHILE_OP)) {
|
||||
break;
|
||||
}
|
||||
display_op = parent_op;
|
||||
parent_op = parent_op->common.parent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Now we can disassemble and display it */
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
acpi_dm_disassemble(walk_state, display_op, ACPI_UINT32_MAX);
|
||||
acpi_dm_disassemble(walk_state,
|
||||
acpi_db_get_display_op(walk_state, op),
|
||||
ACPI_UINT32_MAX);
|
||||
#else
|
||||
/*
|
||||
* The AML Disassembler is not configured - at least we can
|
||||
|
|
|
@ -296,6 +296,14 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
|
|||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* For name creation opcodes, the full namepath prefix must
|
||||
* exist, except for the final (new) nameseg.
|
||||
*/
|
||||
if (walk_state->op_info->flags & AML_NAMED) {
|
||||
flags |= ACPI_NS_PREFIX_MUST_EXIST;
|
||||
}
|
||||
|
||||
/* Add new entry or lookup existing entry */
|
||||
|
||||
status =
|
||||
|
|
|
@ -267,6 +267,7 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
|
|||
acpi_object_type this_search_type;
|
||||
u32 search_parent_flag = ACPI_NS_SEARCH_PARENT;
|
||||
u32 local_flags;
|
||||
acpi_interpreter_mode local_interpreter_mode;
|
||||
|
||||
ACPI_FUNCTION_TRACE(ns_lookup);
|
||||
|
||||
|
@ -506,6 +507,7 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
|
|||
*/
|
||||
this_search_type = ACPI_TYPE_ANY;
|
||||
current_node = this_node;
|
||||
|
||||
while (num_segments && current_node) {
|
||||
num_segments--;
|
||||
if (!num_segments) {
|
||||
|
@ -536,6 +538,16 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
|
|||
}
|
||||
}
|
||||
|
||||
/* Handle opcodes that create a new name_seg via a full name_path */
|
||||
|
||||
local_interpreter_mode = interpreter_mode;
|
||||
if ((flags & ACPI_NS_PREFIX_MUST_EXIST) && (num_segments > 0)) {
|
||||
|
||||
/* Every element of the path must exist (except for the final name_seg) */
|
||||
|
||||
local_interpreter_mode = ACPI_IMODE_EXECUTE;
|
||||
}
|
||||
|
||||
/* Extract one ACPI name from the front of the pathname */
|
||||
|
||||
ACPI_MOVE_32_TO_32(&simple_name, path);
|
||||
|
@ -544,12 +556,19 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
|
|||
|
||||
status =
|
||||
acpi_ns_search_and_enter(simple_name, walk_state,
|
||||
current_node, interpreter_mode,
|
||||
current_node,
|
||||
local_interpreter_mode,
|
||||
this_search_type, local_flags,
|
||||
&this_node);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
if (status == AE_NOT_FOUND) {
|
||||
|
||||
#if !defined ACPI_ASL_COMPILER /* Note: iASL reports this error by itself, not needed here */
|
||||
if (flags & ACPI_NS_PREFIX_MUST_EXIST) {
|
||||
acpi_os_printf(ACPI_MSG_BIOS_ERROR
|
||||
"Object does not exist: %4.4s\n",
|
||||
&simple_name);
|
||||
}
|
||||
#endif
|
||||
/* Name not found in ACPI namespace */
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
|
||||
|
|
|
@ -508,7 +508,8 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
|
|||
*/
|
||||
if ((walk_state->
|
||||
parse_flags & ACPI_PARSE_MODULE_LEVEL)
|
||||
&& status == AE_ALREADY_EXISTS) {
|
||||
&& ((status == AE_ALREADY_EXISTS)
|
||||
|| (status == AE_NOT_FOUND))) {
|
||||
status = AE_OK;
|
||||
}
|
||||
if (status == AE_CTRL_PARSE_CONTINUE) {
|
||||
|
@ -537,10 +538,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
|
|||
* the scope op because the parse failure indicates that
|
||||
* the device may not exist.
|
||||
*/
|
||||
ACPI_ERROR((AE_INFO,
|
||||
"Skip parsing opcode %s",
|
||||
acpi_ps_get_opcode_name
|
||||
(walk_state->opcode)));
|
||||
ACPI_INFO(("Skipping parse of AML opcode: %s (0x%4.4X)", acpi_ps_get_opcode_name(walk_state->opcode), walk_state->opcode));
|
||||
|
||||
/*
|
||||
* Determine the opcode length before skipping the opcode.
|
||||
|
|
|
@ -600,8 +600,7 @@ acpi_ps_complete_op(struct acpi_walk_state *walk_state,
|
|||
* because there could be correct AML beyond the parts that caused
|
||||
* the runtime error.
|
||||
*/
|
||||
ACPI_ERROR((AE_INFO,
|
||||
"Ignore error and continue table load"));
|
||||
ACPI_INFO(("Ignoring error and continuing table load"));
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
return_ACPI_STATUS(status);
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||
|
||||
#define ACPI_CA_VERSION 0x20181003
|
||||
#define ACPI_CA_VERSION 0x20181031
|
||||
|
||||
#include <acpi/acconfig.h>
|
||||
#include <acpi/actypes.h>
|
||||
|
|
|
@ -365,6 +365,29 @@ struct acpi_table_tcpa_server {
|
|||
*
|
||||
******************************************************************************/
|
||||
|
||||
/* Revision 3 */
|
||||
|
||||
struct acpi_table_tpm23 {
|
||||
struct acpi_table_header header; /* Common ACPI table header */
|
||||
u32 reserved;
|
||||
u64 control_address;
|
||||
u32 start_method;
|
||||
};
|
||||
|
||||
/* Value for start_method above */
|
||||
|
||||
#define ACPI_TPM23_ACPI_START_METHOD 2
|
||||
|
||||
/*
|
||||
* Optional trailer for revision 3. If start method is 2, there is a 4 byte
|
||||
* reserved area of all zeros.
|
||||
*/
|
||||
struct acpi_tmp23_trailer {
|
||||
u32 reserved;
|
||||
};
|
||||
|
||||
/* Revision 4 */
|
||||
|
||||
struct acpi_table_tpm2 {
|
||||
struct acpi_table_header header; /* Common ACPI table header */
|
||||
u16 platform_class;
|
||||
|
|
|
@ -106,7 +106,7 @@ static int ap_insert_action(char *argument, u32 to_be_done)
|
|||
|
||||
current_action++;
|
||||
if (current_action > AP_MAX_ACTIONS) {
|
||||
fprintf(stderr, "Too many table options (max %u)\n",
|
||||
fprintf(stderr, "Too many table options (max %d)\n",
|
||||
AP_MAX_ACTIONS);
|
||||
return (-1);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue