mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	ACPICA: Namespace: simplify creation of the initial/default namespace
ACPICA commit 76658f55d8cc498a763bdb92f8e0d934822a129c For the objects that are created by default (_GPE, _SB_, etc) there is no need to use the heavyweight ns_lookup function. Instead, simply create each object and link it in as the namespace is built. Link: https://github.com/acpica/acpica/commit/76658f55 Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Erik Schmauss <erik.schmauss@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
		
							parent
							
								
									d4ca763eed
								
							
						
					
					
						commit
						f79c8e4136
					
				
					 1 changed files with 43 additions and 11 deletions
				
			
		| 
						 | 
					@ -36,6 +36,7 @@ acpi_status acpi_ns_root_initialize(void)
 | 
				
			||||||
	acpi_status status;
 | 
						acpi_status status;
 | 
				
			||||||
	const struct acpi_predefined_names *init_val = NULL;
 | 
						const struct acpi_predefined_names *init_val = NULL;
 | 
				
			||||||
	struct acpi_namespace_node *new_node;
 | 
						struct acpi_namespace_node *new_node;
 | 
				
			||||||
 | 
						struct acpi_namespace_node *prev_node = NULL;
 | 
				
			||||||
	union acpi_operand_object *obj_desc;
 | 
						union acpi_operand_object *obj_desc;
 | 
				
			||||||
	acpi_string val = NULL;
 | 
						acpi_string val = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,12 +62,28 @@ acpi_status acpi_ns_root_initialize(void)
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	acpi_gbl_root_node = &acpi_gbl_root_node_struct;
 | 
						acpi_gbl_root_node = &acpi_gbl_root_node_struct;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Enter the pre-defined names in the name table */
 | 
						/* Enter the predefined names in the name table */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 | 
						ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 | 
				
			||||||
			  "Entering predefined entries into namespace\n"));
 | 
								  "Entering predefined entries into namespace\n"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Create the initial (default) namespace.
 | 
				
			||||||
 | 
						 * This namespace looks like something similar to this:
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 *   ACPI Namespace (from Namespace Root):
 | 
				
			||||||
 | 
						 *    0  _GPE Scope        00203160 00
 | 
				
			||||||
 | 
						 *    0  _PR_ Scope        002031D0 00
 | 
				
			||||||
 | 
						 *    0  _SB_ Device       00203240 00 Notify Object: 0020ADD8
 | 
				
			||||||
 | 
						 *    0  _SI_ Scope        002032B0 00
 | 
				
			||||||
 | 
						 *    0  _TZ_ Device       00203320 00
 | 
				
			||||||
 | 
						 *    0  _REV Integer      00203390 00 = 0000000000000002
 | 
				
			||||||
 | 
						 *    0  _OS_ String       00203488 00 Len 14 "Microsoft Windows NT"
 | 
				
			||||||
 | 
						 *    0  _GL_ Mutex        00203580 00 Object 002035F0
 | 
				
			||||||
 | 
						 *    0  _OSI Method       00203678 00 Args 1 Len 0000 Aml 00000000
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
	for (init_val = acpi_gbl_pre_defined_names; init_val->name; init_val++) {
 | 
						for (init_val = acpi_gbl_pre_defined_names; init_val->name; init_val++) {
 | 
				
			||||||
 | 
							status = AE_OK;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* _OSI is optional for now, will be permanent later */
 | 
							/* _OSI is optional for now, will be permanent later */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,17 +92,32 @@ acpi_status acpi_ns_root_initialize(void)
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		status =
 | 
							/*
 | 
				
			||||||
		    acpi_ns_lookup(NULL, ACPI_CAST_PTR(char, init_val->name),
 | 
							 * Create, init, and link the new predefined name
 | 
				
			||||||
				   init_val->type, ACPI_IMODE_LOAD_PASS2,
 | 
							 * Note: No need to use acpi_ns_lookup here because all the
 | 
				
			||||||
				   ACPI_NS_NO_UPSEARCH, NULL, &new_node);
 | 
							 * predefined names are at the root level. It is much easier to
 | 
				
			||||||
		if (ACPI_FAILURE(status)) {
 | 
							 * just create and link the new node(s) here.
 | 
				
			||||||
			ACPI_EXCEPTION((AE_INFO, status,
 | 
							 */
 | 
				
			||||||
					"Could not create predefined name %s",
 | 
							new_node =
 | 
				
			||||||
					init_val->name));
 | 
							    ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_namespace_node));
 | 
				
			||||||
			continue;
 | 
							if (!new_node) {
 | 
				
			||||||
 | 
								status = AE_NO_MEMORY;
 | 
				
			||||||
 | 
								goto unlock_and_exit;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ACPI_COPY_NAMESEG(new_node->name.ascii, init_val->name);
 | 
				
			||||||
 | 
							new_node->descriptor_type = ACPI_DESC_TYPE_NAMED;
 | 
				
			||||||
 | 
							new_node->type = init_val->type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!prev_node) {
 | 
				
			||||||
 | 
								acpi_gbl_root_node_struct.child = new_node;
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								prev_node->peer = new_node;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							new_node->parent = &acpi_gbl_root_node_struct;
 | 
				
			||||||
 | 
							prev_node = new_node;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * Name entered successfully. If entry in pre_defined_names[] specifies
 | 
							 * Name entered successfully. If entry in pre_defined_names[] specifies
 | 
				
			||||||
		 * an initial value, create the initial value.
 | 
							 * an initial value, create the initial value.
 | 
				
			||||||
| 
						 | 
					@ -131,7 +163,7 @@ acpi_status acpi_ns_root_initialize(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				new_node->value = obj_desc->method.param_count;
 | 
									new_node->value = obj_desc->method.param_count;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
				/* Mark this as a very SPECIAL method */
 | 
									/* Mark this as a very SPECIAL method (_OSI) */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				obj_desc->method.info_flags =
 | 
									obj_desc->method.info_flags =
 | 
				
			||||||
				    ACPI_METHOD_INTERNAL_ONLY;
 | 
									    ACPI_METHOD_INTERNAL_ONLY;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue