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

📄 exresop.c

📁 h内核
💻 C
📖 第 1 页 / 共 2 页
字号:
			break;		}		/*		 * Resolve this object to a value		 */		status = acpi_ex_resolve_to_value (stack_ptr, walk_state);		if (ACPI_FAILURE (status)) {			return_ACPI_STATUS (status);		}		/* Get the resolved object */		obj_desc = *stack_ptr;		/*		 * Check the resulting object (value) type		 */		switch (this_arg_type) {		/*		 * For the simple cases, only one type of resolved object		 * is allowed		 */		case ARGI_MUTEX:			/* Need an operand of type ACPI_TYPE_MUTEX */			type_needed = ACPI_TYPE_MUTEX;			break;		case ARGI_EVENT:			/* Need an operand of type ACPI_TYPE_EVENT */			type_needed = ACPI_TYPE_EVENT;			break;		case ARGI_PACKAGE:   /* Package */			/* Need an operand of type ACPI_TYPE_PACKAGE */			type_needed = ACPI_TYPE_PACKAGE;			break;		case ARGI_ANYTYPE:			/* Any operand type will do */			type_needed = ACPI_TYPE_ANY;			break;		case ARGI_DDBHANDLE:			/* Need an operand of type ACPI_TYPE_DDB_HANDLE */			type_needed = ACPI_TYPE_LOCAL_REFERENCE;			break;		/*		 * The more complex cases allow multiple resolved object types		 */		case ARGI_INTEGER:   /* Number */			/*			 * Need an operand of type ACPI_TYPE_INTEGER,			 * But we can implicitly convert from a STRING or BUFFER			 * Aka - "Implicit Source Operand Conversion"			 */			status = acpi_ex_convert_to_integer (obj_desc, stack_ptr, 16);			if (ACPI_FAILURE (status)) {				if (status == AE_TYPE) {					ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,						"Needed [Integer/String/Buffer], found [%s] %p\n",						acpi_ut_get_object_type_name (obj_desc), obj_desc));					return_ACPI_STATUS (AE_AML_OPERAND_TYPE);				}				return_ACPI_STATUS (status);			}			goto next_operand;		case ARGI_BUFFER:			/*			 * Need an operand of type ACPI_TYPE_BUFFER,			 * But we can implicitly convert from a STRING or INTEGER			 * Aka - "Implicit Source Operand Conversion"			 */			status = acpi_ex_convert_to_buffer (obj_desc, stack_ptr);			if (ACPI_FAILURE (status)) {				if (status == AE_TYPE) {					ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,						"Needed [Integer/String/Buffer], found [%s] %p\n",						acpi_ut_get_object_type_name (obj_desc), obj_desc));					return_ACPI_STATUS (AE_AML_OPERAND_TYPE);				}				return_ACPI_STATUS (status);			}			goto next_operand;		case ARGI_STRING:			/*			 * Need an operand of type ACPI_TYPE_STRING,			 * But we can implicitly convert from a BUFFER or INTEGER			 * Aka - "Implicit Source Operand Conversion"			 */			status = acpi_ex_convert_to_string (obj_desc, stack_ptr,					 ACPI_IMPLICIT_CONVERT_HEX);			if (ACPI_FAILURE (status)) {				if (status == AE_TYPE) {					ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,						"Needed [Integer/String/Buffer], found [%s] %p\n",						acpi_ut_get_object_type_name (obj_desc), obj_desc));					return_ACPI_STATUS (AE_AML_OPERAND_TYPE);				}				return_ACPI_STATUS (status);			}			goto next_operand;		case ARGI_COMPUTEDATA:			/* Need an operand of type INTEGER, STRING or BUFFER */			switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {			case ACPI_TYPE_INTEGER:			case ACPI_TYPE_STRING:			case ACPI_TYPE_BUFFER:				/* Valid operand */			   break;			default:				ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,					"Needed [Integer/String/Buffer], found [%s] %p\n",					acpi_ut_get_object_type_name (obj_desc), obj_desc));				return_ACPI_STATUS (AE_AML_OPERAND_TYPE);			}			goto next_operand;		case ARGI_BUFFER_OR_STRING:			/* Need an operand of type STRING or BUFFER */			switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {			case ACPI_TYPE_STRING:			case ACPI_TYPE_BUFFER:				/* Valid operand */			   break;			case ACPI_TYPE_INTEGER:				/* Highest priority conversion is to type Buffer */				status = acpi_ex_convert_to_buffer (obj_desc, stack_ptr);				if (ACPI_FAILURE (status)) {					return_ACPI_STATUS (status);				}				break;			default:				ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,					"Needed [Integer/String/Buffer], found [%s] %p\n",					acpi_ut_get_object_type_name (obj_desc), obj_desc));				return_ACPI_STATUS (AE_AML_OPERAND_TYPE);			}			goto next_operand;		case ARGI_DATAOBJECT:			/*			 * ARGI_DATAOBJECT is only used by the size_of operator.			 * Need a buffer, string, package, or ref_of reference.			 *			 * The only reference allowed here is a direct reference to			 * a namespace node.			 */			switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {			case ACPI_TYPE_PACKAGE:			case ACPI_TYPE_STRING:			case ACPI_TYPE_BUFFER:			case ACPI_TYPE_LOCAL_REFERENCE:				/* Valid operand */				break;			default:				ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,					"Needed [Buffer/String/Package/Reference], found [%s] %p\n",					acpi_ut_get_object_type_name (obj_desc), obj_desc));				return_ACPI_STATUS (AE_AML_OPERAND_TYPE);			}			goto next_operand;		case ARGI_COMPLEXOBJ:			/* Need a buffer or package or (ACPI 2.0) String */			switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {			case ACPI_TYPE_PACKAGE:			case ACPI_TYPE_STRING:			case ACPI_TYPE_BUFFER:				/* Valid operand */				break;			default:				ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,					"Needed [Buffer/String/Package], found [%s] %p\n",					acpi_ut_get_object_type_name (obj_desc), obj_desc));				return_ACPI_STATUS (AE_AML_OPERAND_TYPE);			}			goto next_operand;		case ARGI_REGION_OR_FIELD:			/* Need an operand of type ACPI_TYPE_REGION or a FIELD in a region */			switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {			case ACPI_TYPE_REGION:			case ACPI_TYPE_LOCAL_REGION_FIELD:			case ACPI_TYPE_LOCAL_BANK_FIELD:			case ACPI_TYPE_LOCAL_INDEX_FIELD:				/* Valid operand */				break;			default:				ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,					"Needed [Region/region_field], found [%s] %p\n",					acpi_ut_get_object_type_name (obj_desc), obj_desc));				return_ACPI_STATUS (AE_AML_OPERAND_TYPE);			}			goto next_operand;		case ARGI_DATAREFOBJ:			/* Used by the Store() operator only */			switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {			case ACPI_TYPE_INTEGER:			case ACPI_TYPE_PACKAGE:			case ACPI_TYPE_STRING:			case ACPI_TYPE_BUFFER:			case ACPI_TYPE_BUFFER_FIELD:			case ACPI_TYPE_LOCAL_REFERENCE:			case ACPI_TYPE_LOCAL_REGION_FIELD:			case ACPI_TYPE_LOCAL_BANK_FIELD:			case ACPI_TYPE_LOCAL_INDEX_FIELD:			case ACPI_TYPE_DDB_HANDLE:				/* Valid operand */				break;			default:				if (acpi_gbl_enable_interpreter_slack) {					/*					 * Enable original behavior of Store(), allowing any and all					 * objects as the source operand.  The ACPI spec does not					 * allow this, however.					 */					break;				}				ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,					"Needed Integer/Buffer/String/Package/Ref/Ddb], found [%s] %p\n",					acpi_ut_get_object_type_name (obj_desc), obj_desc));				return_ACPI_STATUS (AE_AML_OPERAND_TYPE);			}			goto next_operand;		default:			/* Unknown type */			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,				"Internal - Unknown ARGI (required operand) type %X\n",				this_arg_type));			return_ACPI_STATUS (AE_BAD_PARAMETER);		}		/*		 * Make sure that the original object was resolved to the		 * required object type (Simple cases only).		 */		status = acpi_ex_check_object_type (type_needed,				  ACPI_GET_OBJECT_TYPE (*stack_ptr), *stack_ptr);		if (ACPI_FAILURE (status)) {			return_ACPI_STATUS (status);		}next_operand:		/*		 * If more operands needed, decrement stack_ptr to point		 * to next operand on stack		 */		if (GET_CURRENT_ARG_TYPE (arg_types)) {			stack_ptr--;		}	}   /* while (*Types) */	return_ACPI_STATUS (status);}

⌨️ 快捷键说明

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