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

📄 dsmthdat.c

📁 内核linux2.4.20,可跟rtlinux3.2打补丁 组成实时linux系统,编译内核
💻 C
📖 第 1 页 / 共 2 页
字号:
	if (ACPI_FAILURE (status)) {		return_VALUE ((ACPI_TYPE_NOT_FOUND));	}	/* Get the object from the method stack */	object = *entry;	/* Get the object type */	if (!object) {		/* Any == 0 => "uninitialized" -- see spec 15.2.3.5.2.28 */		return_VALUE (ACPI_TYPE_ANY);	}	return_VALUE (object->common.type);}/******************************************************************************* * * FUNCTION:    Acpi_ds_method_data_get_node * * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP *              Index               - Which local_var or argument whose type *                                      to get *              Walk_state          - Current walk state object * * RETURN:      Get the Node associated with a local or arg. * ******************************************************************************/acpi_namespace_node *acpi_ds_method_data_get_node (	u16                     opcode,	u32                     index,	acpi_walk_state         *walk_state){	acpi_namespace_node     *node = NULL;	FUNCTION_TRACE ("Ds_method_data_get_node");	switch (opcode) {	case AML_LOCAL_OP:		if (index > MTH_MAX_LOCAL) {			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Local index %d is invalid (max %d)\n",				index, MTH_MAX_LOCAL));			return_PTR (node);		}		node =  &walk_state->local_variables[index];		break;	case AML_ARG_OP:		if (index > MTH_MAX_ARG) {			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Arg index %d is invalid (max %d)\n",				index, MTH_MAX_ARG));			return_PTR (node);		}		node = &walk_state->arguments[index];		break;	default:		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Opcode %d is invalid\n", opcode));		break;	}	return_PTR (node);}/******************************************************************************* * * FUNCTION:    Acpi_ds_method_data_get_value * * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP *              Index               - Which local_var or argument to get *              Walk_state          - Current walk state object *              *Dest_desc          - Ptr to Descriptor into which selected Arg *                                    or Local value should be copied * * RETURN:      Status * * DESCRIPTION: Retrieve value of selected Arg or Local from the method frame *              at the current top of the method stack. *              Used only in Acpi_ex_resolve_to_value(). * ******************************************************************************/acpi_statusacpi_ds_method_data_get_value (	u16                     opcode,	u32                     index,	acpi_walk_state         *walk_state,	acpi_operand_object     **dest_desc){	acpi_status             status;	acpi_operand_object     **entry;	acpi_operand_object     *object;	FUNCTION_TRACE ("Ds_method_data_get_value");	/* Validate the object descriptor */	if (!dest_desc) {		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null object descriptor pointer\n"));		return_ACPI_STATUS (AE_BAD_PARAMETER);	}	/* Get a pointer to the requested method stack entry */	status = acpi_ds_method_data_get_entry (opcode, index, walk_state, &entry);	if (ACPI_FAILURE (status)) {		return_ACPI_STATUS (status);	}	/* Get the object from the method stack */	object = *entry;	/* Examine the returned object, it must be valid. */	if (!object) {		/*		 * Index points to uninitialized object stack value.		 * This means that either 1) The expected argument was		 * not passed to the method, or 2) A local variable		 * was referenced by the method (via the ASL)		 * before it was initialized.  Either case is an error.		 */		switch (opcode) {		case AML_ARG_OP:			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Uninitialized Arg[%d] at entry %p\n",				index, entry));			return_ACPI_STATUS (AE_AML_UNINITIALIZED_ARG);			break;		case AML_LOCAL_OP:			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Uninitialized Local[%d] at entry %p\n",				index, entry));			return_ACPI_STATUS (AE_AML_UNINITIALIZED_LOCAL);			break;		}	}	/*	 * Index points to initialized and valid object stack value.	 * Return an additional reference to the object	 */	*dest_desc = object;	acpi_ut_add_reference (object);	return_ACPI_STATUS (AE_OK);}/******************************************************************************* * * FUNCTION:    Acpi_ds_method_data_delete_value * * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP *              Index               - Which local_var or argument to delete *              Walk_state          - Current walk state object * * RETURN:      Status * * DESCRIPTION: Delete the entry at Opcode:Index on the method stack.  Inserts *              a null into the stack slot after the object is deleted. * ******************************************************************************/acpi_statusacpi_ds_method_data_delete_value (	u16                     opcode,	u32                     index,	acpi_walk_state         *walk_state){	acpi_status             status;	acpi_operand_object     **entry;	acpi_operand_object     *object;	FUNCTION_TRACE ("Ds_method_data_delete_value");	/* Get a pointer to the requested entry */	status = acpi_ds_method_data_get_entry (opcode, index, walk_state, &entry);	if (ACPI_FAILURE (status)) {		return_ACPI_STATUS (status);	}	/* Get the current entry in this slot k */	object = *entry;	/*	 * Undefine the Arg or Local by setting its descriptor	 * pointer to NULL. Locals/Args can contain both	 * ACPI_OPERAND_OBJECTS and ACPI_NAMESPACE_NODEs	 */	*entry = NULL;	if ((object) &&		(VALID_DESCRIPTOR_TYPE (object, ACPI_DESC_TYPE_INTERNAL))) {		/*		 * There is a valid object in this slot		 * Decrement the reference count by one to balance the		 * increment when the object was stored in the slot.		 */		acpi_ut_remove_reference (object);	}	return_ACPI_STATUS (AE_OK);}/******************************************************************************* * * FUNCTION:    Acpi_ds_store_object_to_local * * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP *              Index               - Which local_var or argument to set *              Src_desc            - Value to be stored *              Walk_state          - Current walk state * * RETURN:      Status * * DESCRIPTION: Store a value in an Arg or Local.  The Src_desc is installed *              as the new value for the Arg or Local and the reference count *              for Src_desc is incremented. * ******************************************************************************/acpi_statusacpi_ds_store_object_to_local (	u16                     opcode,	u32                     index,	acpi_operand_object     *src_desc,	acpi_walk_state         *walk_state){	acpi_status             status;	acpi_operand_object     **entry;	FUNCTION_TRACE ("Ds_method_data_set_value");	ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Opcode=%d Idx=%d Obj=%p\n",		opcode, index, src_desc));	/* Parameter validation */	if (!src_desc) {		return_ACPI_STATUS (AE_BAD_PARAMETER);	}	/* Get a pointer to the requested method stack entry */	status = acpi_ds_method_data_get_entry (opcode, index, walk_state, &entry);	if (ACPI_FAILURE (status)) {		goto cleanup;	}	if (*entry == src_desc) {		ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p already installed!\n", src_desc));		goto cleanup;	}	/*	 * If there is an object already in this slot, we either	 * have to delete it, or if this is an argument and there	 * is an object reference stored there, we have to do	 * an indirect store!	 */	if (*entry) {		/*		 * Check for an indirect store if an argument		 * contains an object reference (stored as an Node).		 * We don't allow this automatic dereferencing for		 * locals, since a store to a local should overwrite		 * anything there, including an object reference.		 *		 * If both Arg0 and Local0 contain Ref_of (Local4):		 *		 * Store (1, Arg0)             - Causes indirect store to local4		 * Store (1, Local0)           - Stores 1 in local0, overwriting		 *                                  the reference to local4		 * Store (1, De_refof (Local0)) - Causes indirect store to local4		 *		 * Weird, but true.		 */		if ((opcode == AML_ARG_OP) &&			(VALID_DESCRIPTOR_TYPE (*entry, ACPI_DESC_TYPE_NAMED))) {			ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,				"Arg (%p) is an Obj_ref(Node), storing in %p\n",				src_desc, *entry));			/* Detach an existing object from the Node */			acpi_ns_detach_object ((acpi_namespace_node *) *entry);			/*			 * Store this object into the Node			 * (do the indirect store)			 */			status = acpi_ns_attach_object ((acpi_namespace_node *) *entry, src_desc,					   src_desc->common.type);			return_ACPI_STATUS (status);		}#ifdef ACPI_ENABLE_IMPLICIT_CONVERSION		/*		 * Perform "Implicit conversion" of the new object to the type of the		 * existing object		 */		status = acpi_ex_convert_to_target_type ((*entry)->common.type, &src_desc, walk_state);		if (ACPI_FAILURE (status)) {			goto cleanup;		}#endif		/*		 * Delete the existing object		 * before storing the new one		 */		acpi_ds_method_data_delete_value (opcode, index, walk_state);	}	/*	 * Install the Obj_stack descriptor (*Src_desc) into	 * the descriptor for the Arg or Local.	 * Install the new object in the stack entry	 * (increments the object reference count by one)	 */	status = acpi_ds_method_data_set_entry (opcode, index, src_desc, walk_state);	if (ACPI_FAILURE (status)) {		goto cleanup;	}	/* Normal exit */	return_ACPI_STATUS (AE_OK);	/* Error exit */cleanup:	return_ACPI_STATUS (status);}

⌨️ 快捷键说明

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