xref: /openbmc/linux/drivers/acpi/acpica/nsinit.c (revision 60772e48)
1 /******************************************************************************
2  *
3  * Module Name: nsinit - namespace initialization
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2018, Intel Corp.
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions, and the following disclaimer,
16  *    without modification.
17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18  *    substantially similar to the "NO WARRANTY" disclaimer below
19  *    ("Disclaimer") and any redistribution must be conditioned upon
20  *    including a substantially similar Disclaimer requirement for further
21  *    binary redistribution.
22  * 3. Neither the names of the above-listed copyright holders nor the names
23  *    of any contributors may be used to endorse or promote products derived
24  *    from this software without specific prior written permission.
25  *
26  * Alternatively, this software may be distributed under the terms of the
27  * GNU General Public License ("GPL") version 2 as published by the Free
28  * Software Foundation.
29  *
30  * NO WARRANTY
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41  * POSSIBILITY OF SUCH DAMAGES.
42  */
43 
44 #include <acpi/acpi.h>
45 #include "accommon.h"
46 #include "acnamesp.h"
47 #include "acdispat.h"
48 #include "acinterp.h"
49 #include "acevents.h"
50 
51 #define _COMPONENT          ACPI_NAMESPACE
52 ACPI_MODULE_NAME("nsinit")
53 
54 /* Local prototypes */
55 static acpi_status
56 acpi_ns_init_one_object(acpi_handle obj_handle,
57 			u32 level, void *context, void **return_value);
58 
59 static acpi_status
60 acpi_ns_init_one_device(acpi_handle obj_handle,
61 			u32 nesting_level, void *context, void **return_value);
62 
63 static acpi_status
64 acpi_ns_find_ini_methods(acpi_handle obj_handle,
65 			 u32 nesting_level, void *context, void **return_value);
66 
67 /*******************************************************************************
68  *
69  * FUNCTION:    acpi_ns_initialize_objects
70  *
71  * PARAMETERS:  None
72  *
73  * RETURN:      Status
74  *
75  * DESCRIPTION: Walk the entire namespace and perform any necessary
76  *              initialization on the objects found therein
77  *
78  ******************************************************************************/
79 
80 acpi_status acpi_ns_initialize_objects(void)
81 {
82 	acpi_status status;
83 	struct acpi_init_walk_info info;
84 
85 	ACPI_FUNCTION_TRACE(ns_initialize_objects);
86 
87 	ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
88 			  "[Init] Completing Initialization of ACPI Objects\n"));
89 	ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
90 			  "**** Starting initialization of namespace objects ****\n"));
91 	ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
92 			      "Completing Region/Field/Buffer/Package initialization:\n"));
93 
94 	/* Set all init info to zero */
95 
96 	memset(&info, 0, sizeof(struct acpi_init_walk_info));
97 
98 	/* Walk entire namespace from the supplied root */
99 
100 	status = acpi_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
101 				     ACPI_UINT32_MAX, acpi_ns_init_one_object,
102 				     NULL, &info, NULL);
103 	if (ACPI_FAILURE(status)) {
104 		ACPI_EXCEPTION((AE_INFO, status, "During WalkNamespace"));
105 	}
106 
107 	ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
108 			      "    Initialized %u/%u Regions %u/%u Fields %u/%u "
109 			      "Buffers %u/%u Packages (%u nodes)\n",
110 			      info.op_region_init, info.op_region_count,
111 			      info.field_init, info.field_count,
112 			      info.buffer_init, info.buffer_count,
113 			      info.package_init, info.package_count,
114 			      info.object_count));
115 
116 	ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
117 			  "%u Control Methods found\n%u Op Regions found\n",
118 			  info.method_count, info.op_region_count));
119 
120 	return_ACPI_STATUS(AE_OK);
121 }
122 
123 /*******************************************************************************
124  *
125  * FUNCTION:    acpi_ns_initialize_devices
126  *
127  * PARAMETERS:  None
128  *
129  * RETURN:      acpi_status
130  *
131  * DESCRIPTION: Walk the entire namespace and initialize all ACPI devices.
132  *              This means running _INI on all present devices.
133  *
134  *              Note: We install PCI config space handler on region access,
135  *              not here.
136  *
137  ******************************************************************************/
138 
139 acpi_status acpi_ns_initialize_devices(u32 flags)
140 {
141 	acpi_status status = AE_OK;
142 	struct acpi_device_walk_info info;
143 	acpi_handle handle;
144 
145 	ACPI_FUNCTION_TRACE(ns_initialize_devices);
146 
147 	if (!(flags & ACPI_NO_DEVICE_INIT)) {
148 		ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
149 				  "[Init] Initializing ACPI Devices\n"));
150 
151 		/* Init counters */
152 
153 		info.device_count = 0;
154 		info.num_STA = 0;
155 		info.num_INI = 0;
156 
157 		ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
158 				      "Initializing Device/Processor/Thermal objects "
159 				      "and executing _INI/_STA methods:\n"));
160 
161 		/* Tree analysis: find all subtrees that contain _INI methods */
162 
163 		status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
164 						ACPI_UINT32_MAX, FALSE,
165 						acpi_ns_find_ini_methods, NULL,
166 						&info, NULL);
167 		if (ACPI_FAILURE(status)) {
168 			goto error_exit;
169 		}
170 
171 		/* Allocate the evaluation information block */
172 
173 		info.evaluate_info =
174 		    ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
175 		if (!info.evaluate_info) {
176 			status = AE_NO_MEMORY;
177 			goto error_exit;
178 		}
179 
180 		/*
181 		 * Execute the "global" _INI method that may appear at the root.
182 		 * This support is provided for Windows compatibility (Vista+) and
183 		 * is not part of the ACPI specification.
184 		 */
185 		info.evaluate_info->prefix_node = acpi_gbl_root_node;
186 		info.evaluate_info->relative_pathname = METHOD_NAME__INI;
187 		info.evaluate_info->parameters = NULL;
188 		info.evaluate_info->flags = ACPI_IGNORE_RETURN_VALUE;
189 
190 		status = acpi_ns_evaluate(info.evaluate_info);
191 		if (ACPI_SUCCESS(status)) {
192 			info.num_INI++;
193 		}
194 
195 		/*
196 		 * Execute \_SB._INI.
197 		 * There appears to be a strict order requirement for \_SB._INI,
198 		 * which should be evaluated before any _REG evaluations.
199 		 */
200 		status = acpi_get_handle(NULL, "\\_SB", &handle);
201 		if (ACPI_SUCCESS(status)) {
202 			memset(info.evaluate_info, 0,
203 			       sizeof(struct acpi_evaluate_info));
204 			info.evaluate_info->prefix_node = handle;
205 			info.evaluate_info->relative_pathname =
206 			    METHOD_NAME__INI;
207 			info.evaluate_info->parameters = NULL;
208 			info.evaluate_info->flags = ACPI_IGNORE_RETURN_VALUE;
209 
210 			status = acpi_ns_evaluate(info.evaluate_info);
211 			if (ACPI_SUCCESS(status)) {
212 				info.num_INI++;
213 			}
214 		}
215 	}
216 
217 	/*
218 	 * Run all _REG methods
219 	 *
220 	 * Note: Any objects accessed by the _REG methods will be automatically
221 	 * initialized, even if they contain executable AML (see the call to
222 	 * acpi_ns_initialize_objects below).
223 	 *
224 	 * Note: According to the ACPI specification, we actually needn't execute
225 	 * _REG for system_memory/system_io operation regions, but for PCI_Config
226 	 * operation regions, it is required to evaluate _REG for those on a PCI
227 	 * root bus that doesn't contain _BBN object. So this code is kept here
228 	 * in order not to break things.
229 	 */
230 	if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) {
231 		ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
232 				  "[Init] Executing _REG OpRegion methods\n"));
233 
234 		status = acpi_ev_initialize_op_regions();
235 		if (ACPI_FAILURE(status)) {
236 			goto error_exit;
237 		}
238 	}
239 
240 	if (!(flags & ACPI_NO_DEVICE_INIT)) {
241 
242 		/* Walk namespace to execute all _INIs on present devices */
243 
244 		status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
245 						ACPI_UINT32_MAX, FALSE,
246 						acpi_ns_init_one_device, NULL,
247 						&info, NULL);
248 
249 		/*
250 		 * Any _OSI requests should be completed by now. If the BIOS has
251 		 * requested any Windows OSI strings, we will always truncate
252 		 * I/O addresses to 16 bits -- for Windows compatibility.
253 		 */
254 		if (acpi_gbl_osi_data >= ACPI_OSI_WIN_2000) {
255 			acpi_gbl_truncate_io_addresses = TRUE;
256 		}
257 
258 		ACPI_FREE(info.evaluate_info);
259 		if (ACPI_FAILURE(status)) {
260 			goto error_exit;
261 		}
262 
263 		ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
264 				      "    Executed %u _INI methods requiring %u _STA executions "
265 				      "(examined %u objects)\n",
266 				      info.num_INI, info.num_STA,
267 				      info.device_count));
268 	}
269 
270 	return_ACPI_STATUS(status);
271 
272 error_exit:
273 	ACPI_EXCEPTION((AE_INFO, status, "During device initialization"));
274 	return_ACPI_STATUS(status);
275 }
276 
277 /*******************************************************************************
278  *
279  * FUNCTION:    acpi_ns_init_one_object
280  *
281  * PARAMETERS:  obj_handle      - Node
282  *              level           - Current nesting level
283  *              context         - Points to a init info struct
284  *              return_value    - Not used
285  *
286  * RETURN:      Status
287  *
288  * DESCRIPTION: Callback from acpi_walk_namespace. Invoked for every object
289  *              within the  namespace.
290  *
291  *              Currently, the only objects that require initialization are:
292  *              1) Methods
293  *              2) Op Regions
294  *
295  ******************************************************************************/
296 
297 static acpi_status
298 acpi_ns_init_one_object(acpi_handle obj_handle,
299 			u32 level, void *context, void **return_value)
300 {
301 	acpi_object_type type;
302 	acpi_status status = AE_OK;
303 	struct acpi_init_walk_info *info =
304 	    (struct acpi_init_walk_info *)context;
305 	struct acpi_namespace_node *node =
306 	    (struct acpi_namespace_node *)obj_handle;
307 	union acpi_operand_object *obj_desc;
308 
309 	ACPI_FUNCTION_NAME(ns_init_one_object);
310 
311 	info->object_count++;
312 
313 	/* And even then, we are only interested in a few object types */
314 
315 	type = acpi_ns_get_type(obj_handle);
316 	obj_desc = acpi_ns_get_attached_object(node);
317 	if (!obj_desc) {
318 		return (AE_OK);
319 	}
320 
321 	/* Increment counters for object types we are looking for */
322 
323 	switch (type) {
324 	case ACPI_TYPE_REGION:
325 
326 		info->op_region_count++;
327 		break;
328 
329 	case ACPI_TYPE_BUFFER_FIELD:
330 
331 		info->field_count++;
332 		break;
333 
334 	case ACPI_TYPE_LOCAL_BANK_FIELD:
335 
336 		info->field_count++;
337 		break;
338 
339 	case ACPI_TYPE_BUFFER:
340 
341 		info->buffer_count++;
342 		break;
343 
344 	case ACPI_TYPE_PACKAGE:
345 
346 		info->package_count++;
347 		break;
348 
349 	default:
350 
351 		/* No init required, just exit now */
352 
353 		return (AE_OK);
354 	}
355 
356 	/* If the object is already initialized, nothing else to do */
357 
358 	if (obj_desc->common.flags & AOPOBJ_DATA_VALID) {
359 		return (AE_OK);
360 	}
361 
362 	/* Must lock the interpreter before executing AML code */
363 
364 	acpi_ex_enter_interpreter();
365 
366 	/*
367 	 * Each of these types can contain executable AML code within the
368 	 * declaration.
369 	 */
370 	switch (type) {
371 	case ACPI_TYPE_REGION:
372 
373 		info->op_region_init++;
374 		status = acpi_ds_get_region_arguments(obj_desc);
375 		break;
376 
377 	case ACPI_TYPE_BUFFER_FIELD:
378 
379 		info->field_init++;
380 		status = acpi_ds_get_buffer_field_arguments(obj_desc);
381 		break;
382 
383 	case ACPI_TYPE_LOCAL_BANK_FIELD:
384 
385 		info->field_init++;
386 		status = acpi_ds_get_bank_field_arguments(obj_desc);
387 		break;
388 
389 	case ACPI_TYPE_BUFFER:
390 
391 		info->buffer_init++;
392 		status = acpi_ds_get_buffer_arguments(obj_desc);
393 		break;
394 
395 	case ACPI_TYPE_PACKAGE:
396 
397 		info->package_init++;
398 		status = acpi_ds_get_package_arguments(obj_desc);
399 		if (ACPI_FAILURE(status)) {
400 			break;
401 		}
402 
403 		/*
404 		 * Resolve all named references in package objects (and all
405 		 * sub-packages). This action has been deferred until the entire
406 		 * namespace has been loaded, in order to support external and
407 		 * forward references from individual package elements (05/2017).
408 		 */
409 		status = acpi_ut_walk_package_tree(obj_desc, NULL,
410 						   acpi_ds_init_package_element,
411 						   NULL);
412 		obj_desc->package.flags |= AOPOBJ_DATA_VALID;
413 		break;
414 
415 	default:
416 
417 		/* No other types can get here */
418 
419 		break;
420 	}
421 
422 	if (ACPI_FAILURE(status)) {
423 		ACPI_EXCEPTION((AE_INFO, status,
424 				"Could not execute arguments for [%4.4s] (%s)",
425 				acpi_ut_get_node_name(node),
426 				acpi_ut_get_type_name(type)));
427 	}
428 
429 	/*
430 	 * We ignore errors from above, and always return OK, since we don't want
431 	 * to abort the walk on any single error.
432 	 */
433 	acpi_ex_exit_interpreter();
434 	return (AE_OK);
435 }
436 
437 /*******************************************************************************
438  *
439  * FUNCTION:    acpi_ns_find_ini_methods
440  *
441  * PARAMETERS:  acpi_walk_callback
442  *
443  * RETURN:      acpi_status
444  *
445  * DESCRIPTION: Called during namespace walk. Finds objects named _INI under
446  *              device/processor/thermal objects, and marks the entire subtree
447  *              with a SUBTREE_HAS_INI flag. This flag is used during the
448  *              subsequent device initialization walk to avoid entire subtrees
449  *              that do not contain an _INI.
450  *
451  ******************************************************************************/
452 
453 static acpi_status
454 acpi_ns_find_ini_methods(acpi_handle obj_handle,
455 			 u32 nesting_level, void *context, void **return_value)
456 {
457 	struct acpi_device_walk_info *info =
458 	    ACPI_CAST_PTR(struct acpi_device_walk_info, context);
459 	struct acpi_namespace_node *node;
460 	struct acpi_namespace_node *parent_node;
461 
462 	/* Keep count of device/processor/thermal objects */
463 
464 	node = ACPI_CAST_PTR(struct acpi_namespace_node, obj_handle);
465 	if ((node->type == ACPI_TYPE_DEVICE) ||
466 	    (node->type == ACPI_TYPE_PROCESSOR) ||
467 	    (node->type == ACPI_TYPE_THERMAL)) {
468 		info->device_count++;
469 		return (AE_OK);
470 	}
471 
472 	/* We are only looking for methods named _INI */
473 
474 	if (!ACPI_COMPARE_NAME(node->name.ascii, METHOD_NAME__INI)) {
475 		return (AE_OK);
476 	}
477 
478 	/*
479 	 * The only _INI methods that we care about are those that are
480 	 * present under Device, Processor, and Thermal objects.
481 	 */
482 	parent_node = node->parent;
483 	switch (parent_node->type) {
484 	case ACPI_TYPE_DEVICE:
485 	case ACPI_TYPE_PROCESSOR:
486 	case ACPI_TYPE_THERMAL:
487 
488 		/* Mark parent and bubble up the INI present flag to the root */
489 
490 		while (parent_node) {
491 			parent_node->flags |= ANOBJ_SUBTREE_HAS_INI;
492 			parent_node = parent_node->parent;
493 		}
494 		break;
495 
496 	default:
497 
498 		break;
499 	}
500 
501 	return (AE_OK);
502 }
503 
504 /*******************************************************************************
505  *
506  * FUNCTION:    acpi_ns_init_one_device
507  *
508  * PARAMETERS:  acpi_walk_callback
509  *
510  * RETURN:      acpi_status
511  *
512  * DESCRIPTION: This is called once per device soon after ACPI is enabled
513  *              to initialize each device. It determines if the device is
514  *              present, and if so, calls _INI.
515  *
516  ******************************************************************************/
517 
518 static acpi_status
519 acpi_ns_init_one_device(acpi_handle obj_handle,
520 			u32 nesting_level, void *context, void **return_value)
521 {
522 	struct acpi_device_walk_info *walk_info =
523 	    ACPI_CAST_PTR(struct acpi_device_walk_info, context);
524 	struct acpi_evaluate_info *info = walk_info->evaluate_info;
525 	u32 flags;
526 	acpi_status status;
527 	struct acpi_namespace_node *device_node;
528 
529 	ACPI_FUNCTION_TRACE(ns_init_one_device);
530 
531 	/* We are interested in Devices, Processors and thermal_zones only */
532 
533 	device_node = ACPI_CAST_PTR(struct acpi_namespace_node, obj_handle);
534 	if ((device_node->type != ACPI_TYPE_DEVICE) &&
535 	    (device_node->type != ACPI_TYPE_PROCESSOR) &&
536 	    (device_node->type != ACPI_TYPE_THERMAL)) {
537 		return_ACPI_STATUS(AE_OK);
538 	}
539 
540 	/*
541 	 * Because of an earlier namespace analysis, all subtrees that contain an
542 	 * _INI method are tagged.
543 	 *
544 	 * If this device subtree does not contain any _INI methods, we
545 	 * can exit now and stop traversing this entire subtree.
546 	 */
547 	if (!(device_node->flags & ANOBJ_SUBTREE_HAS_INI)) {
548 		return_ACPI_STATUS(AE_CTRL_DEPTH);
549 	}
550 
551 	/*
552 	 * Run _STA to determine if this device is present and functioning. We
553 	 * must know this information for two important reasons (from ACPI spec):
554 	 *
555 	 * 1) We can only run _INI if the device is present.
556 	 * 2) We must abort the device tree walk on this subtree if the device is
557 	 *    not present and is not functional (we will not examine the children)
558 	 *
559 	 * The _STA method is not required to be present under the device, we
560 	 * assume the device is present if _STA does not exist.
561 	 */
562 	ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
563 			(ACPI_TYPE_METHOD, device_node, METHOD_NAME__STA));
564 
565 	status = acpi_ut_execute_STA(device_node, &flags);
566 	if (ACPI_FAILURE(status)) {
567 
568 		/* Ignore error and move on to next device */
569 
570 		return_ACPI_STATUS(AE_OK);
571 	}
572 
573 	/*
574 	 * Flags == -1 means that _STA was not found. In this case, we assume that
575 	 * the device is both present and functional.
576 	 *
577 	 * From the ACPI spec, description of _STA:
578 	 *
579 	 * "If a device object (including the processor object) does not have an
580 	 * _STA object, then OSPM assumes that all of the above bits are set (in
581 	 * other words, the device is present, ..., and functioning)"
582 	 */
583 	if (flags != ACPI_UINT32_MAX) {
584 		walk_info->num_STA++;
585 	}
586 
587 	/*
588 	 * Examine the PRESENT and FUNCTIONING status bits
589 	 *
590 	 * Note: ACPI spec does not seem to specify behavior for the present but
591 	 * not functioning case, so we assume functioning if present.
592 	 */
593 	if (!(flags & ACPI_STA_DEVICE_PRESENT)) {
594 
595 		/* Device is not present, we must examine the Functioning bit */
596 
597 		if (flags & ACPI_STA_DEVICE_FUNCTIONING) {
598 			/*
599 			 * Device is not present but is "functioning". In this case,
600 			 * we will not run _INI, but we continue to examine the children
601 			 * of this device.
602 			 *
603 			 * From the ACPI spec, description of _STA: (note - no mention
604 			 * of whether to run _INI or not on the device in question)
605 			 *
606 			 * "_STA may return bit 0 clear (not present) with bit 3 set
607 			 * (device is functional). This case is used to indicate a valid
608 			 * device for which no device driver should be loaded (for example,
609 			 * a bridge device.) Children of this device may be present and
610 			 * valid. OSPM should continue enumeration below a device whose
611 			 * _STA returns this bit combination"
612 			 */
613 			return_ACPI_STATUS(AE_OK);
614 		} else {
615 			/*
616 			 * Device is not present and is not functioning. We must abort the
617 			 * walk of this subtree immediately -- don't look at the children
618 			 * of such a device.
619 			 *
620 			 * From the ACPI spec, description of _INI:
621 			 *
622 			 * "If the _STA method indicates that the device is not present,
623 			 * OSPM will not run the _INI and will not examine the children
624 			 * of the device for _INI methods"
625 			 */
626 			return_ACPI_STATUS(AE_CTRL_DEPTH);
627 		}
628 	}
629 
630 	/*
631 	 * The device is present or is assumed present if no _STA exists.
632 	 * Run the _INI if it exists (not required to exist)
633 	 *
634 	 * Note: We know there is an _INI within this subtree, but it may not be
635 	 * under this particular device, it may be lower in the branch.
636 	 */
637 	if (!ACPI_COMPARE_NAME(device_node->name.ascii, "_SB_") ||
638 	    device_node->parent != acpi_gbl_root_node) {
639 		ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
640 				(ACPI_TYPE_METHOD, device_node,
641 				 METHOD_NAME__INI));
642 
643 		memset(info, 0, sizeof(struct acpi_evaluate_info));
644 		info->prefix_node = device_node;
645 		info->relative_pathname = METHOD_NAME__INI;
646 		info->parameters = NULL;
647 		info->flags = ACPI_IGNORE_RETURN_VALUE;
648 
649 		status = acpi_ns_evaluate(info);
650 		if (ACPI_SUCCESS(status)) {
651 			walk_info->num_INI++;
652 		}
653 #ifdef ACPI_DEBUG_OUTPUT
654 		else if (status != AE_NOT_FOUND) {
655 
656 			/* Ignore error and move on to next device */
657 
658 			char *scope_name =
659 			    acpi_ns_get_normalized_pathname(device_node, TRUE);
660 
661 			ACPI_EXCEPTION((AE_INFO, status,
662 					"during %s._INI execution",
663 					scope_name));
664 			ACPI_FREE(scope_name);
665 		}
666 #endif
667 	}
668 
669 	/* Ignore errors from above */
670 
671 	status = AE_OK;
672 
673 	/*
674 	 * The _INI method has been run if present; call the Global Initialization
675 	 * Handler for this device.
676 	 */
677 	if (acpi_gbl_init_handler) {
678 		status =
679 		    acpi_gbl_init_handler(device_node, ACPI_INIT_DEVICE_INI);
680 	}
681 
682 	return_ACPI_STATUS(status);
683 }
684