⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 excreate.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 2 页
字号:
	}	ACPI_DEBUG_PRINT((ACPI_DB_LOAD, "Region Type - %s (%X)\n",			  acpi_ut_get_region_name(region_space), region_space));	/* Create the region descriptor */	obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_REGION);	if (!obj_desc) {		status = AE_NO_MEMORY;		goto cleanup;	}	/*	 * Remember location in AML stream of address & length	 * operands since they need to be evaluated at run time.	 */	region_obj2 = obj_desc->common.next_object;	region_obj2->extra.aml_start = aml_start;	region_obj2->extra.aml_length = aml_length;	/* Init the region from the operands */	obj_desc->region.space_id = region_space;	obj_desc->region.address = 0;	obj_desc->region.length = 0;	obj_desc->region.node = node;	/* Install the new region object in the parent Node */	status = acpi_ns_attach_object(node, obj_desc, ACPI_TYPE_REGION);      cleanup:	/* Remove local reference to the object */	acpi_ut_remove_reference(obj_desc);	return_ACPI_STATUS(status);}/******************************************************************************* * * FUNCTION:    acpi_ex_create_table_region * * PARAMETERS:  walk_state          - Current state * * RETURN:      Status * * DESCRIPTION: Create a new data_table_region object * ******************************************************************************/acpi_status acpi_ex_create_table_region(struct acpi_walk_state *walk_state){	acpi_status status;	union acpi_operand_object **operand = &walk_state->operands[0];	union acpi_operand_object *obj_desc;	struct acpi_namespace_node *node;	struct acpi_table_header *table;	union acpi_operand_object *region_obj2;	ACPI_FUNCTION_TRACE("ex_create_table_region");	/* Get the Node from the object stack  */	node = walk_state->op->common.node;	/*	 * If the region object is already attached to this node,	 * just return	 */	if (acpi_ns_get_attached_object(node)) {		return_ACPI_STATUS(AE_OK);	}	/* Find the ACPI table */	status = acpi_tb_find_table(operand[1]->string.pointer,				    operand[2]->string.pointer,				    operand[3]->string.pointer, &table);	if (ACPI_FAILURE(status)) {		return_ACPI_STATUS(status);	}	/* Create the region descriptor */	obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_REGION);	if (!obj_desc) {		return_ACPI_STATUS(AE_NO_MEMORY);	}	region_obj2 = obj_desc->common.next_object;	region_obj2->extra.region_context = NULL;	/* Init the region from the operands */	obj_desc->region.space_id = REGION_DATA_TABLE;	obj_desc->region.address =	    (acpi_physical_address) ACPI_TO_INTEGER(table);	obj_desc->region.length = table->length;	obj_desc->region.node = node;	obj_desc->region.flags = AOPOBJ_DATA_VALID;	/* Install the new region object in the parent Node */	status = acpi_ns_attach_object(node, obj_desc, ACPI_TYPE_REGION);	if (ACPI_FAILURE(status)) {		goto cleanup;	}	status = acpi_ev_initialize_region(obj_desc, FALSE);	if (ACPI_FAILURE(status)) {		if (status == AE_NOT_EXIST) {			status = AE_OK;		} else {			goto cleanup;		}	}	obj_desc->region.flags |= AOPOBJ_SETUP_COMPLETE;      cleanup:	/* Remove local reference to the object */	acpi_ut_remove_reference(obj_desc);	return_ACPI_STATUS(status);}/******************************************************************************* * * FUNCTION:    acpi_ex_create_processor * * PARAMETERS:  walk_state          - Current state * * RETURN:      Status * * DESCRIPTION: Create a new processor object and populate the fields * *              Processor (Name[0], cpu_iD[1], pblock_addr[2], pblock_length[3]) * ******************************************************************************/acpi_status acpi_ex_create_processor(struct acpi_walk_state *walk_state){	union acpi_operand_object **operand = &walk_state->operands[0];	union acpi_operand_object *obj_desc;	acpi_status status;	ACPI_FUNCTION_TRACE_PTR("ex_create_processor", walk_state);	/* Create the processor object */	obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_PROCESSOR);	if (!obj_desc) {		return_ACPI_STATUS(AE_NO_MEMORY);	}	/* Initialize the processor object from the operands */	obj_desc->processor.proc_id = (u8) operand[1]->integer.value;	obj_desc->processor.address =	    (acpi_io_address) operand[2]->integer.value;	obj_desc->processor.length = (u8) operand[3]->integer.value;	/* Install the processor object in the parent Node */	status = acpi_ns_attach_object((struct acpi_namespace_node *)operand[0],				       obj_desc, ACPI_TYPE_PROCESSOR);	/* Remove local reference to the object */	acpi_ut_remove_reference(obj_desc);	return_ACPI_STATUS(status);}/******************************************************************************* * * FUNCTION:    acpi_ex_create_power_resource * * PARAMETERS:  walk_state          - Current state * * RETURN:      Status * * DESCRIPTION: Create a new power_resource object and populate the fields * *              power_resource (Name[0], system_level[1], resource_order[2]) * ******************************************************************************/acpi_status acpi_ex_create_power_resource(struct acpi_walk_state *walk_state){	union acpi_operand_object **operand = &walk_state->operands[0];	acpi_status status;	union acpi_operand_object *obj_desc;	ACPI_FUNCTION_TRACE_PTR("ex_create_power_resource", walk_state);	/* Create the power resource object */	obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_POWER);	if (!obj_desc) {		return_ACPI_STATUS(AE_NO_MEMORY);	}	/* Initialize the power object from the operands */	obj_desc->power_resource.system_level = (u8) operand[1]->integer.value;	obj_desc->power_resource.resource_order =	    (u16) operand[2]->integer.value;	/* Install the  power resource object in the parent Node */	status = acpi_ns_attach_object((struct acpi_namespace_node *)operand[0],				       obj_desc, ACPI_TYPE_POWER);	/* Remove local reference to the object */	acpi_ut_remove_reference(obj_desc);	return_ACPI_STATUS(status);}#endif/******************************************************************************* * * FUNCTION:    acpi_ex_create_method * * PARAMETERS:  aml_start       - First byte of the method's AML *              aml_length      - AML byte count for this method *              walk_state      - Current state * * RETURN:      Status * * DESCRIPTION: Create a new method object * ******************************************************************************/acpi_statusacpi_ex_create_method(u8 * aml_start,		      u32 aml_length, struct acpi_walk_state *walk_state){	union acpi_operand_object **operand = &walk_state->operands[0];	union acpi_operand_object *obj_desc;	acpi_status status;	u8 method_flags;	ACPI_FUNCTION_TRACE_PTR("ex_create_method", walk_state);	/* Create a new method object */	obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_METHOD);	if (!obj_desc) {		return_ACPI_STATUS(AE_NO_MEMORY);	}	/* Save the method's AML pointer and length  */	obj_desc->method.aml_start = aml_start;	obj_desc->method.aml_length = aml_length;	/*	 * Disassemble the method flags.  Split off the Arg Count	 * for efficiency	 */	method_flags = (u8) operand[1]->integer.value;	obj_desc->method.method_flags =	    (u8) (method_flags & ~AML_METHOD_ARG_COUNT);	obj_desc->method.param_count =	    (u8) (method_flags & AML_METHOD_ARG_COUNT);	/*	 * Get the concurrency count.  If required, a semaphore will be	 * created for this method when it is parsed.	 */	if (acpi_gbl_all_methods_serialized) {		obj_desc->method.concurrency = 1;		obj_desc->method.method_flags |= AML_METHOD_SERIALIZED;	} else if (method_flags & AML_METHOD_SERIALIZED) {		/*		 * ACPI 1.0: Concurrency = 1		 * ACPI 2.0: Concurrency = (sync_level (in method declaration) + 1)		 */		obj_desc->method.concurrency = (u8)		    (((method_flags & AML_METHOD_SYNCH_LEVEL) >> 4) + 1);	} else {		obj_desc->method.concurrency = ACPI_INFINITE_CONCURRENCY;	}	/* Attach the new object to the method Node */	status = acpi_ns_attach_object((struct acpi_namespace_node *)operand[0],				       obj_desc, ACPI_TYPE_METHOD);	/* Remove local reference to the object */	acpi_ut_remove_reference(obj_desc);	/* Remove a reference to the operand */	acpi_ut_remove_reference(operand[1]);	return_ACPI_STATUS(status);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -