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

📄 utmisc.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 2 页
字号:
	}	return (TRUE);}/******************************************************************************* * * FUNCTION:    acpi_ut_valid_acpi_character * * PARAMETERS:  Character           - The character to be examined * * RETURN:      1 if Character may appear in a name, else 0 * * DESCRIPTION: Check for a printable character * ******************************************************************************/u8 acpi_ut_valid_acpi_character(char character){	ACPI_FUNCTION_ENTRY();	return ((u8) ((character == '_') ||		      (character >= 'A' && character <= 'Z') ||		      (character >= '0' && character <= '9')));}/******************************************************************************* * * FUNCTION:    acpi_ut_strtoul64 * * PARAMETERS:  String          - Null terminated string *              Base            - Radix of the string: 10, 16, or ACPI_ANY_BASE *              ret_integer     - Where the converted integer is returned * * RETURN:      Status and Converted value * * DESCRIPTION: Convert a string into an unsigned value. *              NOTE: Does not support Octal strings, not needed. * ******************************************************************************/acpi_statusacpi_ut_strtoul64(char *string, u32 base, acpi_integer * ret_integer){	u32 this_digit = 0;	acpi_integer return_value = 0;	acpi_integer quotient;	ACPI_FUNCTION_TRACE("ut_stroul64");	if ((!string) || !(*string)) {		goto error_exit;	}	switch (base) {	case ACPI_ANY_BASE:	case 10:	case 16:		break;	default:		/* Invalid Base */		return_ACPI_STATUS(AE_BAD_PARAMETER);	}	/* Skip over any white space in the buffer */	while (ACPI_IS_SPACE(*string) || *string == '\t') {		string++;	}	/*	 * If the input parameter Base is zero, then we need to	 * determine if it is decimal or hexadecimal:	 */	if (base == 0) {		if ((*string == '0') && (ACPI_TOLOWER(*(string + 1)) == 'x')) {			base = 16;			string += 2;		} else {			base = 10;		}	}	/*	 * For hexadecimal base, skip over the leading	 * 0 or 0x, if they are present.	 */	if ((base == 16) &&	    (*string == '0') && (ACPI_TOLOWER(*(string + 1)) == 'x')) {		string += 2;	}	/* Any string left? */	if (!(*string)) {		goto error_exit;	}	/* Main loop: convert the string to a 64-bit integer */	while (*string) {		if (ACPI_IS_DIGIT(*string)) {			/* Convert ASCII 0-9 to Decimal value */			this_digit = ((u8) * string) - '0';		} else {			if (base == 10) {				/* Digit is out of range */				goto error_exit;			}			this_digit = (u8) ACPI_TOUPPER(*string);			if (ACPI_IS_XDIGIT((char)this_digit)) {				/* Convert ASCII Hex char to value */				this_digit = this_digit - 'A' + 10;			} else {				/*				 * We allow non-hex chars, just stop now, same as end-of-string.				 * See ACPI spec, string-to-integer conversion.				 */				break;			}		}		/* Divide the digit into the correct position */		(void)		    acpi_ut_short_divide((ACPI_INTEGER_MAX -					  (acpi_integer) this_digit), base,					 &quotient, NULL);		if (return_value > quotient) {			goto error_exit;		}		return_value *= base;		return_value += this_digit;		string++;	}	/* All done, normal exit */	*ret_integer = return_value;	return_ACPI_STATUS(AE_OK);      error_exit:	/* Base was set/validated above */	if (base == 10) {		return_ACPI_STATUS(AE_BAD_DECIMAL_CONSTANT);	} else {		return_ACPI_STATUS(AE_BAD_HEX_CONSTANT);	}}/******************************************************************************* * * FUNCTION:    acpi_ut_create_update_state_and_push * * PARAMETERS:  Object          - Object to be added to the new state *              Action          - Increment/Decrement *              state_list      - List the state will be added to * * RETURN:      Status * * DESCRIPTION: Create a new state and push it * ******************************************************************************/acpi_statusacpi_ut_create_update_state_and_push(union acpi_operand_object *object,				     u16 action,				     union acpi_generic_state **state_list){	union acpi_generic_state *state;	ACPI_FUNCTION_ENTRY();	/* Ignore null objects; these are expected */	if (!object) {		return (AE_OK);	}	state = acpi_ut_create_update_state(object, action);	if (!state) {		return (AE_NO_MEMORY);	}	acpi_ut_push_generic_state(state_list, state);	return (AE_OK);}/******************************************************************************* * * FUNCTION:    acpi_ut_walk_package_tree * * PARAMETERS:  source_object       - The package to walk *              target_object       - Target object (if package is being copied) *              walk_callback       - Called once for each package element *              Context             - Passed to the callback function * * RETURN:      Status * * DESCRIPTION: Walk through a package * ******************************************************************************/acpi_statusacpi_ut_walk_package_tree(union acpi_operand_object * source_object,			  void *target_object,			  acpi_pkg_callback walk_callback, void *context){	acpi_status status = AE_OK;	union acpi_generic_state *state_list = NULL;	union acpi_generic_state *state;	u32 this_index;	union acpi_operand_object *this_source_obj;	ACPI_FUNCTION_TRACE("ut_walk_package_tree");	state = acpi_ut_create_pkg_state(source_object, target_object, 0);	if (!state) {		return_ACPI_STATUS(AE_NO_MEMORY);	}	while (state) {		/* Get one element of the package */		this_index = state->pkg.index;		this_source_obj = (union acpi_operand_object *)		    state->pkg.source_object->package.elements[this_index];		/*		 * Check for:		 * 1) An uninitialized package element.  It is completely		 *    legal to declare a package and leave it uninitialized		 * 2) Not an internal object - can be a namespace node instead		 * 3) Any type other than a package.  Packages are handled in else		 *    case below.		 */		if ((!this_source_obj) ||		    (ACPI_GET_DESCRIPTOR_TYPE(this_source_obj) !=		     ACPI_DESC_TYPE_OPERAND)		    || (ACPI_GET_OBJECT_TYPE(this_source_obj) !=			ACPI_TYPE_PACKAGE)) {			status =			    walk_callback(ACPI_COPY_TYPE_SIMPLE,					  this_source_obj, state, context);			if (ACPI_FAILURE(status)) {				return_ACPI_STATUS(status);			}			state->pkg.index++;			while (state->pkg.index >=			       state->pkg.source_object->package.count) {				/*				 * We've handled all of the objects at this level,  This means				 * that we have just completed a package.  That package may				 * have contained one or more packages itself.				 *				 * Delete this state and pop the previous state (package).				 */				acpi_ut_delete_generic_state(state);				state = acpi_ut_pop_generic_state(&state_list);				/* Finished when there are no more states */				if (!state) {					/*					 * We have handled all of the objects in the top level					 * package just add the length of the package objects					 * and exit					 */					return_ACPI_STATUS(AE_OK);				}				/*				 * Go back up a level and move the index past the just				 * completed package object.				 */				state->pkg.index++;			}		} else {			/* This is a subobject of type package */			status =			    walk_callback(ACPI_COPY_TYPE_PACKAGE,					  this_source_obj, state, context);			if (ACPI_FAILURE(status)) {				return_ACPI_STATUS(status);			}			/*			 * Push the current state and create a new one			 * The callback above returned a new target package object.			 */			acpi_ut_push_generic_state(&state_list, state);			state = acpi_ut_create_pkg_state(this_source_obj,							 state->pkg.							 this_target_obj, 0);			if (!state) {				return_ACPI_STATUS(AE_NO_MEMORY);			}		}	}	/* We should never get here */	return_ACPI_STATUS(AE_AML_INTERNAL);}/******************************************************************************* * * FUNCTION:    acpi_ut_generate_checksum * * PARAMETERS:  Buffer          - Buffer to be scanned *              Length          - number of bytes to examine * * RETURN:      The generated checksum * * DESCRIPTION: Generate a checksum on a raw buffer * ******************************************************************************/u8 acpi_ut_generate_checksum(u8 * buffer, u32 length){	u32 i;	signed char sum = 0;	for (i = 0; i < length; i++) {		sum = (signed char)(sum + buffer[i]);	}	return ((u8) (0 - sum));}/******************************************************************************* * * FUNCTION:    acpi_ut_get_resource_end_tag * * PARAMETERS:  obj_desc        - The resource template buffer object * * RETURN:      Pointer to the end tag * * DESCRIPTION: Find the END_TAG resource descriptor in a resource template * ******************************************************************************/u8 *acpi_ut_get_resource_end_tag(union acpi_operand_object * obj_desc){	u8 buffer_byte;	u8 *buffer;	u8 *end_buffer;	buffer = obj_desc->buffer.pointer;	end_buffer = buffer + obj_desc->buffer.length;	while (buffer < end_buffer) {		buffer_byte = *buffer;		if (buffer_byte & ACPI_RDESC_TYPE_MASK) {			/* Large Descriptor - Length is next 2 bytes */			buffer += ((*(buffer + 1) | (*(buffer + 2) << 8)) + 3);		} else {			/* Small Descriptor.  End Tag will be found here */			if ((buffer_byte & ACPI_RDESC_SMALL_MASK) ==			    ACPI_RDESC_TYPE_END_TAG) {				/* Found the end tag descriptor, all done. */				return (buffer);			}			/* Length is in the header */			buffer += ((buffer_byte & 0x07) + 1);		}	}	/* End tag not found */	return (NULL);}/******************************************************************************* * * FUNCTION:    acpi_ut_report_error * * PARAMETERS:  module_name         - Caller's module name (for error output) *              line_number         - Caller's line number (for error output) *              component_id        - Caller's component ID (for error output) * * RETURN:      None * * DESCRIPTION: Print error message * ******************************************************************************/void acpi_ut_report_error(char *module_name, u32 line_number, u32 component_id){	acpi_os_printf("%8s-%04d: *** Error: ", module_name, line_number);}/******************************************************************************* * * FUNCTION:    acpi_ut_report_warning * * PARAMETERS:  module_name         - Caller's module name (for error output) *              line_number         - Caller's line number (for error output) *              component_id        - Caller's component ID (for error output) * * RETURN:      None * * DESCRIPTION: Print warning message * ******************************************************************************/voidacpi_ut_report_warning(char *module_name, u32 line_number, u32 component_id){	acpi_os_printf("%8s-%04d: *** Warning: ", module_name, line_number);}/******************************************************************************* * * FUNCTION:    acpi_ut_report_info * * PARAMETERS:  module_name         - Caller's module name (for error output) *              line_number         - Caller's line number (for error output) *              component_id        - Caller's component ID (for error output) * * RETURN:      None * * DESCRIPTION: Print information message * ******************************************************************************/void acpi_ut_report_info(char *module_name, u32 line_number, u32 component_id){	acpi_os_printf("%8s-%04d: *** Info: ", module_name, line_number);}

⌨️ 快捷键说明

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