mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 04:34:11 +08:00
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_TEMPORARY 0x0040
|
||||||
#define ACPI_NS_OVERRIDE_IF_FOUND 0x0080
|
#define ACPI_NS_OVERRIDE_IF_FOUND 0x0080
|
||||||
#define ACPI_NS_EARLY_INIT 0x0100
|
#define ACPI_NS_EARLY_INIT 0x0100
|
||||||
|
#define ACPI_NS_PREFIX_MUST_EXIST 0x0200
|
||||||
|
|
||||||
/* Flags for acpi_ns_walk_namespace */
|
/* 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);
|
void acpi_db_method_end(struct acpi_walk_state *walk_state);
|
||||||
#endif
|
#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
|
* 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");
|
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
|
* FUNCTION: acpi_db_single_step
|
||||||
@ -134,8 +205,6 @@ acpi_db_single_step(struct acpi_walk_state *walk_state,
|
|||||||
union acpi_parse_object *next;
|
union acpi_parse_object *next;
|
||||||
acpi_status status = AE_OK;
|
acpi_status status = AE_OK;
|
||||||
u32 original_debug_level;
|
u32 original_debug_level;
|
||||||
union acpi_parse_object *display_op;
|
|
||||||
union acpi_parse_object *parent_op;
|
|
||||||
u32 aml_offset;
|
u32 aml_offset;
|
||||||
|
|
||||||
ACPI_FUNCTION_ENTRY();
|
ACPI_FUNCTION_ENTRY();
|
||||||
@ -222,51 +291,12 @@ acpi_db_single_step(struct acpi_walk_state *walk_state,
|
|||||||
next = op->common.next;
|
next = op->common.next;
|
||||||
op->common.next = NULL;
|
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 */
|
/* Now we can disassemble and display it */
|
||||||
|
|
||||||
#ifdef ACPI_DISASSEMBLER
|
#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
|
#else
|
||||||
/*
|
/*
|
||||||
* The AML Disassembler is not configured - at least we can
|
* 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
|
#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 */
|
/* Add new entry or lookup existing entry */
|
||||||
|
|
||||||
status =
|
status =
|
||||||
|
@ -267,6 +267,7 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
|
|||||||
acpi_object_type this_search_type;
|
acpi_object_type this_search_type;
|
||||||
u32 search_parent_flag = ACPI_NS_SEARCH_PARENT;
|
u32 search_parent_flag = ACPI_NS_SEARCH_PARENT;
|
||||||
u32 local_flags;
|
u32 local_flags;
|
||||||
|
acpi_interpreter_mode local_interpreter_mode;
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE(ns_lookup);
|
ACPI_FUNCTION_TRACE(ns_lookup);
|
||||||
|
|
||||||
@ -506,6 +507,7 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
|
|||||||
*/
|
*/
|
||||||
this_search_type = ACPI_TYPE_ANY;
|
this_search_type = ACPI_TYPE_ANY;
|
||||||
current_node = this_node;
|
current_node = this_node;
|
||||||
|
|
||||||
while (num_segments && current_node) {
|
while (num_segments && current_node) {
|
||||||
num_segments--;
|
num_segments--;
|
||||||
if (!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 */
|
/* Extract one ACPI name from the front of the pathname */
|
||||||
|
|
||||||
ACPI_MOVE_32_TO_32(&simple_name, path);
|
ACPI_MOVE_32_TO_32(&simple_name, path);
|
||||||
@ -544,12 +556,19 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
|
|||||||
|
|
||||||
status =
|
status =
|
||||||
acpi_ns_search_and_enter(simple_name, walk_state,
|
acpi_ns_search_and_enter(simple_name, walk_state,
|
||||||
current_node, interpreter_mode,
|
current_node,
|
||||||
|
local_interpreter_mode,
|
||||||
this_search_type, local_flags,
|
this_search_type, local_flags,
|
||||||
&this_node);
|
&this_node);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
if (status == AE_NOT_FOUND) {
|
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 */
|
/* Name not found in ACPI namespace */
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
|
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->
|
if ((walk_state->
|
||||||
parse_flags & ACPI_PARSE_MODULE_LEVEL)
|
parse_flags & ACPI_PARSE_MODULE_LEVEL)
|
||||||
&& status == AE_ALREADY_EXISTS) {
|
&& ((status == AE_ALREADY_EXISTS)
|
||||||
|
|| (status == AE_NOT_FOUND))) {
|
||||||
status = AE_OK;
|
status = AE_OK;
|
||||||
}
|
}
|
||||||
if (status == AE_CTRL_PARSE_CONTINUE) {
|
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 scope op because the parse failure indicates that
|
||||||
* the device may not exist.
|
* the device may not exist.
|
||||||
*/
|
*/
|
||||||
ACPI_ERROR((AE_INFO,
|
ACPI_INFO(("Skipping parse of AML opcode: %s (0x%4.4X)", acpi_ps_get_opcode_name(walk_state->opcode), walk_state->opcode));
|
||||||
"Skip parsing opcode %s",
|
|
||||||
acpi_ps_get_opcode_name
|
|
||||||
(walk_state->opcode)));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine the opcode length before skipping the 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
|
* because there could be correct AML beyond the parts that caused
|
||||||
* the runtime error.
|
* the runtime error.
|
||||||
*/
|
*/
|
||||||
ACPI_ERROR((AE_INFO,
|
ACPI_INFO(("Ignoring error and continuing table load"));
|
||||||
"Ignore error and continue table load"));
|
|
||||||
return_ACPI_STATUS(AE_OK);
|
return_ACPI_STATUS(AE_OK);
|
||||||
}
|
}
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||||
|
|
||||||
#define ACPI_CA_VERSION 0x20181003
|
#define ACPI_CA_VERSION 0x20181031
|
||||||
|
|
||||||
#include <acpi/acconfig.h>
|
#include <acpi/acconfig.h>
|
||||||
#include <acpi/actypes.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_tpm2 {
|
||||||
struct acpi_table_header header; /* Common ACPI table header */
|
struct acpi_table_header header; /* Common ACPI table header */
|
||||||
u16 platform_class;
|
u16 platform_class;
|
||||||
|
@ -106,7 +106,7 @@ static int ap_insert_action(char *argument, u32 to_be_done)
|
|||||||
|
|
||||||
current_action++;
|
current_action++;
|
||||||
if (current_action > AP_MAX_ACTIONS) {
|
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);
|
AP_MAX_ACTIONS);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user