aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/acpica/psloop.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/acpica/psloop.c')
-rw-r--r--drivers/acpi/acpica/psloop.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/drivers/acpi/acpica/psloop.c b/drivers/acpi/acpica/psloop.c
index e8b6dc0c51ca..d48c8fc0e729 100644
--- a/drivers/acpi/acpica/psloop.c
+++ b/drivers/acpi/acpica/psloop.c
@@ -133,7 +133,7 @@ static acpi_status acpi_ps_get_aml_opcode(struct acpi_walk_state *walk_state)
133 133
134 case AML_CLASS_UNKNOWN: 134 case AML_CLASS_UNKNOWN:
135 135
136 /* The opcode is unrecognized. Just skip unknown opcodes */ 136 /* The opcode is unrecognized. Complain and skip unknown opcodes */
137 137
138 if (walk_state->pass_number == 2) { 138 if (walk_state->pass_number == 2) {
139 ACPI_ERROR((AE_INFO, 139 ACPI_ERROR((AE_INFO,
@@ -142,28 +142,34 @@ static acpi_status acpi_ps_get_aml_opcode(struct acpi_walk_state *walk_state)
142 walk_state->aml_offset + 142 walk_state->aml_offset +
143 sizeof(struct acpi_table_header))); 143 sizeof(struct acpi_table_header)));
144 144
145 ACPI_DUMP_BUFFER(walk_state->parser_state.aml, 128); 145 ACPI_DUMP_BUFFER(walk_state->parser_state.aml - 16, 48);
146 146
147#ifdef ACPI_ASL_COMPILER 147#ifdef ACPI_ASL_COMPILER
148 148 /*
149 * This is executed for the disassembler only. Output goes
150 * to the disassembled ASL output file.
151 */
149 acpi_os_printf 152 acpi_os_printf
150 ("/*\nError: Unknown opcode 0x%.2X at table offset 0x%.4X, context:\n", 153 ("/*\nError: Unknown opcode 0x%.2X at table offset 0x%.4X, context:\n",
151 walk_state->opcode, 154 walk_state->opcode,
152 walk_state->aml_offset + 155 walk_state->aml_offset +
153 sizeof(struct acpi_table_header)); 156 sizeof(struct acpi_table_header));
154 157
155 /* TBD: Pass current offset to dump_buffer */ 158 /* Dump the context surrounding the invalid opcode */
156 159
157 acpi_ut_dump_buffer2(((u8 *)walk_state->parser_state. 160 acpi_ut_dump_buffer(((u8 *)walk_state->parser_state.
158 aml - 16), 48, DB_BYTE_DISPLAY); 161 aml - 16), 48, DB_BYTE_DISPLAY,
162 walk_state->aml_offset +
163 sizeof(struct acpi_table_header) -
164 16);
159 acpi_os_printf(" */\n"); 165 acpi_os_printf(" */\n");
160#endif 166#endif
161 } 167 }
162 168
163 /* Increment past one or two-byte opcode */ 169 /* Increment past one-byte or two-byte opcode */
164 170
165 walk_state->parser_state.aml++; 171 walk_state->parser_state.aml++;
166 if (walk_state->opcode > 0xFF) { 172 if (walk_state->opcode > 0xFF) { /* Can only happen if first byte is 0x5B */
167 walk_state->parser_state.aml++; 173 walk_state->parser_state.aml++;
168 } 174 }
169 175