aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/acpica/nsinit.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/acpica/nsinit.c')
-rw-r--r--drivers/acpi/acpica/nsinit.c76
1 files changed, 56 insertions, 20 deletions
diff --git a/drivers/acpi/acpica/nsinit.c b/drivers/acpi/acpica/nsinit.c
index 77f2b5f4948a..d77257d1c827 100644
--- a/drivers/acpi/acpica/nsinit.c
+++ b/drivers/acpi/acpica/nsinit.c
@@ -242,6 +242,58 @@ error_exit:
242 242
243/******************************************************************************* 243/*******************************************************************************
244 * 244 *
245 * FUNCTION: acpi_ns_init_one_package
246 *
247 * PARAMETERS: obj_handle - Node
248 * level - Current nesting level
249 * context - Not used
250 * return_value - Not used
251 *
252 * RETURN: Status
253 *
254 * DESCRIPTION: Callback from acpi_walk_namespace. Invoked for every package
255 * within the namespace. Used during dynamic load of an SSDT.
256 *
257 ******************************************************************************/
258
259acpi_status
260acpi_ns_init_one_package(acpi_handle obj_handle,
261 u32 level, void *context, void **return_value)
262{
263 acpi_status status;
264 union acpi_operand_object *obj_desc;
265 struct acpi_namespace_node *node =
266 (struct acpi_namespace_node *)obj_handle;
267
268 obj_desc = acpi_ns_get_attached_object(node);
269 if (!obj_desc) {
270 return (AE_OK);
271 }
272
273 /* Exit if package is already initialized */
274
275 if (obj_desc->package.flags & AOPOBJ_DATA_VALID) {
276 return (AE_OK);
277 }
278
279 status = acpi_ds_get_package_arguments(obj_desc);
280 if (ACPI_FAILURE(status)) {
281 return (AE_OK);
282 }
283
284 status =
285 acpi_ut_walk_package_tree(obj_desc, NULL,
286 acpi_ds_init_package_element, NULL);
287 if (ACPI_FAILURE(status)) {
288 return (AE_OK);
289 }
290
291 obj_desc->package.flags |= AOPOBJ_DATA_VALID;
292 return (AE_OK);
293}
294
295/*******************************************************************************
296 *
245 * FUNCTION: acpi_ns_init_one_object 297 * FUNCTION: acpi_ns_init_one_object
246 * 298 *
247 * PARAMETERS: obj_handle - Node 299 * PARAMETERS: obj_handle - Node
@@ -360,27 +412,11 @@ acpi_ns_init_one_object(acpi_handle obj_handle,
360 412
361 case ACPI_TYPE_PACKAGE: 413 case ACPI_TYPE_PACKAGE:
362 414
363 info->package_init++; 415 /* Complete the initialization/resolution of the package object */
364 status = acpi_ds_get_package_arguments(obj_desc);
365 if (ACPI_FAILURE(status)) {
366 break;
367 }
368
369 ACPI_DEBUG_PRINT_RAW((ACPI_DB_PARSE,
370 "%s: Completing resolution of Package elements\n",
371 ACPI_GET_FUNCTION_NAME));
372 416
373 /* 417 info->package_init++;
374 * Resolve all named references in package objects (and all 418 status =
375 * sub-packages). This action has been deferred until the entire 419 acpi_ns_init_one_package(obj_handle, level, NULL, NULL);
376 * namespace has been loaded, in order to support external and
377 * forward references from individual package elements (05/2017).
378 */
379 status = acpi_ut_walk_package_tree(obj_desc, NULL,
380 acpi_ds_init_package_element,
381 NULL);
382
383 obj_desc->package.flags |= AOPOBJ_DATA_VALID;
384 break; 420 break;
385 421
386 default: 422 default: