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

📄 excreate.c

📁 linux-2.4.29操作系统的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	/* 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_statusacpi_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_statusacpi_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_statusacpi_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 + -