ACPICA: Implemented full argument resolution support for the BankValue argument to BankField
Previously, only constants were supported, now any TermArg may be used. http://www.acpica.org/bugzilla/show_bug.cgi?id=387 http://www.acpica.org/bugzilla/show_bug.cgi?id=393 Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
@ -325,6 +325,15 @@ acpi_ps_create_op(struct acpi_walk_state *walk_state,
|
||||
op->named.length = 0;
|
||||
}
|
||||
|
||||
if (walk_state->opcode == AML_BANK_FIELD_OP) {
|
||||
/*
|
||||
* Backup to beginning of bank_field declaration
|
||||
* body_length is unknown until we parse the body
|
||||
*/
|
||||
op->named.data = aml_op_start;
|
||||
op->named.length = 0;
|
||||
}
|
||||
|
||||
parent_scope = acpi_ps_get_parent_scope(&(walk_state->parser_state));
|
||||
acpi_ps_append_arg(parent_scope, op);
|
||||
|
||||
@ -1040,6 +1049,16 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
|
||||
(u32) (parser_state->aml - op->named.data);
|
||||
}
|
||||
|
||||
if (op->common.aml_opcode == AML_BANK_FIELD_OP) {
|
||||
/*
|
||||
* Backup to beginning of bank_field declaration
|
||||
*
|
||||
* body_length is unknown until we parse the body
|
||||
*/
|
||||
op->named.length =
|
||||
(u32) (parser_state->aml - op->named.data);
|
||||
}
|
||||
|
||||
/* This op complete, notify the dispatcher */
|
||||
|
||||
if (walk_state->ascending_callback != NULL) {
|
||||
|
@ -520,9 +520,10 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = {
|
||||
AML_TYPE_NAMED_FIELD,
|
||||
AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
|
||||
/* 5F */ ACPI_OP("BankField", ARGP_BANK_FIELD_OP, ARGI_BANK_FIELD_OP,
|
||||
ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT,
|
||||
ACPI_TYPE_LOCAL_BANK_FIELD, AML_CLASS_NAMED_OBJECT,
|
||||
AML_TYPE_NAMED_FIELD,
|
||||
AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
|
||||
AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD |
|
||||
AML_DEFER),
|
||||
|
||||
/* Internal opcodes that map to invalid AML opcodes */
|
||||
|
||||
|
@ -204,6 +204,8 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
|
||||
AML_BUFFER_OP)
|
||||
|| (op->common.parent->common.aml_opcode ==
|
||||
AML_PACKAGE_OP)
|
||||
|| (op->common.parent->common.aml_opcode ==
|
||||
AML_BANK_FIELD_OP)
|
||||
|| (op->common.parent->common.aml_opcode ==
|
||||
AML_VAR_PACKAGE_OP)) {
|
||||
replacement_op =
|
||||
|
Reference in New Issue
Block a user