diff options
Diffstat (limited to 'drivers/acpi/acpica/utdebug.c')
| -rw-r--r-- | drivers/acpi/acpica/utdebug.c | 338 | 
1 files changed, 126 insertions, 212 deletions
diff --git a/drivers/acpi/acpica/utdebug.c b/drivers/acpi/acpica/utdebug.c index f21c486929a..21a20ac5b1e 100644 --- a/drivers/acpi/acpica/utdebug.c +++ b/drivers/acpi/acpica/utdebug.c @@ -1,11 +1,11 @@  /******************************************************************************   * - * Module Name: utdebug - Debug print routines + * Module Name: utdebug - Debug print/trace routines   *   *****************************************************************************/  /* - * Copyright (C) 2000 - 2010, Intel Corp. + * Copyright (C) 2000 - 2014, Intel Corp.   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without @@ -41,13 +41,16 @@   * POSSIBILITY OF SUCH DAMAGES.   */ +#define EXPORT_ACPI_INTERFACES +  #include <acpi/acpi.h>  #include "accommon.h"  #define _COMPONENT          ACPI_UTILITIES  ACPI_MODULE_NAME("utdebug") +  #ifdef ACPI_DEBUG_OUTPUT -static acpi_thread_id acpi_gbl_prev_thread_id; +static acpi_thread_id acpi_gbl_prev_thread_id = (acpi_thread_id) 0xFFFFFFFF;  static char *acpi_gbl_fn_entry_str = "----Entry";  static char *acpi_gbl_fn_exit_str = "----Exit-"; @@ -108,7 +111,7 @@ void acpi_ut_track_stack_ptr(void)   * RETURN:      Updated pointer to the function name   *   * DESCRIPTION: Remove the "Acpi" prefix from the function name, if present. - *              This allows compiler macros such as __func__ to be used + *              This allows compiler macros such as __FUNCTION__ to be used   *              with no change to the debug output.   *   ******************************************************************************/ @@ -144,7 +147,7 @@ static const char *acpi_ut_trim_function_name(const char *function_name)   *              function_name       - Caller's procedure name   *              module_name         - Caller's module name   *              component_id        - Caller's component ID - *              Format              - Printf format field + *              format              - Printf format field   *              ...                 - Optional printf arguments   *   * RETURN:      None @@ -164,11 +167,9 @@ acpi_debug_print(u32 requested_debug_level,  	acpi_thread_id thread_id;  	va_list args; -	/* -	 * Stay silent if the debug level or component ID is disabled -	 */ -	if (!(requested_debug_level & acpi_dbg_level) || -	    !(component_id & acpi_dbg_layer)) { +	/* Check if debug output enabled */ + +	if (!ACPI_IS_DEBUG_ENABLED(requested_debug_level, component_id)) {  		return;  	} @@ -184,21 +185,30 @@ acpi_debug_print(u32 requested_debug_level,  		}  		acpi_gbl_prev_thread_id = thread_id; +		acpi_gbl_nesting_level = 0;  	}  	/*  	 * Display the module name, current line number, thread ID (if requested),  	 * current procedure nesting level, and the current procedure name  	 */ -	acpi_os_printf("%8s-%04ld ", module_name, line_number); +	acpi_os_printf("%9s-%04ld ", module_name, line_number); +#ifdef ACPI_APPLICATION +	/* +	 * For acpi_exec/iASL only, emit the thread ID and nesting level. +	 * Note: nesting level is really only useful during a single-thread +	 * execution. Otherwise, multiple threads will keep resetting the +	 * level. +	 */  	if (ACPI_LV_THREADS & acpi_dbg_level) {  		acpi_os_printf("[%u] ", (u32)thread_id);  	} -	acpi_os_printf("[%02ld] %-22.22s: ", -		       acpi_gbl_nesting_level, -		       acpi_ut_trim_function_name(function_name)); +	acpi_os_printf("[%02ld] ", acpi_gbl_nesting_level); +#endif + +	acpi_os_printf("%-22.22s: ", acpi_ut_trim_function_name(function_name));  	va_start(args, format);  	acpi_os_vprintf(format, args); @@ -216,12 +226,12 @@ ACPI_EXPORT_SYMBOL(acpi_debug_print)   *              function_name       - Caller's procedure name   *              module_name         - Caller's module name   *              component_id        - Caller's component ID - *              Format              - Printf format field + *              format              - Printf format field   *              ...                 - Optional printf arguments   *   * RETURN:      None   * - * DESCRIPTION: Print message with no headers.  Has same interface as + * DESCRIPTION: Print message with no headers. Has same interface as   *              debug_print so that the same macros can be used.   *   ******************************************************************************/ @@ -234,8 +244,9 @@ acpi_debug_print_raw(u32 requested_debug_level,  {  	va_list args; -	if (!(requested_debug_level & acpi_dbg_level) || -	    !(component_id & acpi_dbg_layer)) { +	/* Check if debug output enabled */ + +	if (!ACPI_IS_DEBUG_ENABLED(requested_debug_level, component_id)) {  		return;  	} @@ -257,7 +268,7 @@ ACPI_EXPORT_SYMBOL(acpi_debug_print_raw)   *   * RETURN:      None   * - * DESCRIPTION: Function entry trace.  Prints only if TRACE_FUNCTIONS bit is + * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is   *              set in debug_level   *   ******************************************************************************/ @@ -270,9 +281,13 @@ acpi_ut_trace(u32 line_number,  	acpi_gbl_nesting_level++;  	acpi_ut_track_stack_ptr(); -	acpi_debug_print(ACPI_LV_FUNCTIONS, -			 line_number, function_name, module_name, component_id, -			 "%s\n", acpi_gbl_fn_entry_str); +	/* Check if enabled up-front for performance */ + +	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) { +		acpi_debug_print(ACPI_LV_FUNCTIONS, +				 line_number, function_name, module_name, +				 component_id, "%s\n", acpi_gbl_fn_entry_str); +	}  }  ACPI_EXPORT_SYMBOL(acpi_ut_trace) @@ -285,11 +300,11 @@ ACPI_EXPORT_SYMBOL(acpi_ut_trace)   *              function_name       - Caller's procedure name   *              module_name         - Caller's module name   *              component_id        - Caller's component ID - *              Pointer             - Pointer to display + *              pointer             - Pointer to display   *   * RETURN:      None   * - * DESCRIPTION: Function entry trace.  Prints only if TRACE_FUNCTIONS bit is + * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is   *              set in debug_level   *   ******************************************************************************/ @@ -298,12 +313,18 @@ acpi_ut_trace_ptr(u32 line_number,  		  const char *function_name,  		  const char *module_name, u32 component_id, void *pointer)  { +  	acpi_gbl_nesting_level++;  	acpi_ut_track_stack_ptr(); -	acpi_debug_print(ACPI_LV_FUNCTIONS, -			 line_number, function_name, module_name, component_id, -			 "%s %p\n", acpi_gbl_fn_entry_str, pointer); +	/* Check if enabled up-front for performance */ + +	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) { +		acpi_debug_print(ACPI_LV_FUNCTIONS, +				 line_number, function_name, module_name, +				 component_id, "%s %p\n", acpi_gbl_fn_entry_str, +				 pointer); +	}  }  /******************************************************************************* @@ -314,11 +335,11 @@ acpi_ut_trace_ptr(u32 line_number,   *              function_name       - Caller's procedure name   *              module_name         - Caller's module name   *              component_id        - Caller's component ID - *              String              - Additional string to display + *              string              - Additional string to display   *   * RETURN:      None   * - * DESCRIPTION: Function entry trace.  Prints only if TRACE_FUNCTIONS bit is + * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is   *              set in debug_level   *   ******************************************************************************/ @@ -332,9 +353,14 @@ acpi_ut_trace_str(u32 line_number,  	acpi_gbl_nesting_level++;  	acpi_ut_track_stack_ptr(); -	acpi_debug_print(ACPI_LV_FUNCTIONS, -			 line_number, function_name, module_name, component_id, -			 "%s %s\n", acpi_gbl_fn_entry_str, string); +	/* Check if enabled up-front for performance */ + +	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) { +		acpi_debug_print(ACPI_LV_FUNCTIONS, +				 line_number, function_name, module_name, +				 component_id, "%s %s\n", acpi_gbl_fn_entry_str, +				 string); +	}  }  /******************************************************************************* @@ -345,11 +371,11 @@ acpi_ut_trace_str(u32 line_number,   *              function_name       - Caller's procedure name   *              module_name         - Caller's module name   *              component_id        - Caller's component ID - *              Integer             - Integer to display + *              integer             - Integer to display   *   * RETURN:      None   * - * DESCRIPTION: Function entry trace.  Prints only if TRACE_FUNCTIONS bit is + * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is   *              set in debug_level   *   ******************************************************************************/ @@ -363,9 +389,14 @@ acpi_ut_trace_u32(u32 line_number,  	acpi_gbl_nesting_level++;  	acpi_ut_track_stack_ptr(); -	acpi_debug_print(ACPI_LV_FUNCTIONS, -			 line_number, function_name, module_name, component_id, -			 "%s %08X\n", acpi_gbl_fn_entry_str, integer); +	/* Check if enabled up-front for performance */ + +	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) { +		acpi_debug_print(ACPI_LV_FUNCTIONS, +				 line_number, function_name, module_name, +				 component_id, "%s %08X\n", +				 acpi_gbl_fn_entry_str, integer); +	}  }  /******************************************************************************* @@ -379,7 +410,7 @@ acpi_ut_trace_u32(u32 line_number,   *   * RETURN:      None   * - * DESCRIPTION: Function exit trace.  Prints only if TRACE_FUNCTIONS bit is + * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is   *              set in debug_level   *   ******************************************************************************/ @@ -390,11 +421,17 @@ acpi_ut_exit(u32 line_number,  	     const char *module_name, u32 component_id)  { -	acpi_debug_print(ACPI_LV_FUNCTIONS, -			 line_number, function_name, module_name, component_id, -			 "%s\n", acpi_gbl_fn_exit_str); +	/* Check if enabled up-front for performance */ -	acpi_gbl_nesting_level--; +	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) { +		acpi_debug_print(ACPI_LV_FUNCTIONS, +				 line_number, function_name, module_name, +				 component_id, "%s\n", acpi_gbl_fn_exit_str); +	} + +	if (acpi_gbl_nesting_level) { +		acpi_gbl_nesting_level--; +	}  }  ACPI_EXPORT_SYMBOL(acpi_ut_exit) @@ -407,11 +444,11 @@ ACPI_EXPORT_SYMBOL(acpi_ut_exit)   *              function_name       - Caller's procedure name   *              module_name         - Caller's module name   *              component_id        - Caller's component ID - *              Status              - Exit status code + *              status              - Exit status code   *   * RETURN:      None   * - * DESCRIPTION: Function exit trace.  Prints only if TRACE_FUNCTIONS bit is + * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is   *              set in debug_level. Prints exit status also.   *   ******************************************************************************/ @@ -422,20 +459,28 @@ acpi_ut_status_exit(u32 line_number,  		    u32 component_id, acpi_status status)  { -	if (ACPI_SUCCESS(status)) { -		acpi_debug_print(ACPI_LV_FUNCTIONS, -				 line_number, function_name, module_name, -				 component_id, "%s %s\n", acpi_gbl_fn_exit_str, -				 acpi_format_exception(status)); -	} else { -		acpi_debug_print(ACPI_LV_FUNCTIONS, -				 line_number, function_name, module_name, -				 component_id, "%s ****Exception****: %s\n", -				 acpi_gbl_fn_exit_str, -				 acpi_format_exception(status)); +	/* Check if enabled up-front for performance */ + +	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) { +		if (ACPI_SUCCESS(status)) { +			acpi_debug_print(ACPI_LV_FUNCTIONS, +					 line_number, function_name, +					 module_name, component_id, "%s %s\n", +					 acpi_gbl_fn_exit_str, +					 acpi_format_exception(status)); +		} else { +			acpi_debug_print(ACPI_LV_FUNCTIONS, +					 line_number, function_name, +					 module_name, component_id, +					 "%s ****Exception****: %s\n", +					 acpi_gbl_fn_exit_str, +					 acpi_format_exception(status)); +		}  	} -	acpi_gbl_nesting_level--; +	if (acpi_gbl_nesting_level) { +		acpi_gbl_nesting_level--; +	}  }  ACPI_EXPORT_SYMBOL(acpi_ut_status_exit) @@ -448,11 +493,11 @@ ACPI_EXPORT_SYMBOL(acpi_ut_status_exit)   *              function_name       - Caller's procedure name   *              module_name         - Caller's module name   *              component_id        - Caller's component ID - *              Value               - Value to be printed with exit msg + *              value               - Value to be printed with exit msg   *   * RETURN:      None   * - * DESCRIPTION: Function exit trace.  Prints only if TRACE_FUNCTIONS bit is + * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is   *              set in debug_level. Prints exit value also.   *   ******************************************************************************/ @@ -462,12 +507,19 @@ acpi_ut_value_exit(u32 line_number,  		   const char *module_name, u32 component_id, u64 value)  { -	acpi_debug_print(ACPI_LV_FUNCTIONS, -			 line_number, function_name, module_name, component_id, -			 "%s %8.8X%8.8X\n", acpi_gbl_fn_exit_str, -			 ACPI_FORMAT_UINT64(value)); +	/* Check if enabled up-front for performance */ + +	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) { +		acpi_debug_print(ACPI_LV_FUNCTIONS, +				 line_number, function_name, module_name, +				 component_id, "%s %8.8X%8.8X\n", +				 acpi_gbl_fn_exit_str, +				 ACPI_FORMAT_UINT64(value)); +	} -	acpi_gbl_nesting_level--; +	if (acpi_gbl_nesting_level) { +		acpi_gbl_nesting_level--; +	}  }  ACPI_EXPORT_SYMBOL(acpi_ut_value_exit) @@ -480,11 +532,11 @@ ACPI_EXPORT_SYMBOL(acpi_ut_value_exit)   *              function_name       - Caller's procedure name   *              module_name         - Caller's module name   *              component_id        - Caller's component ID - *              Ptr                 - Pointer to display + *              ptr                 - Pointer to display   *   * RETURN:      None   * - * DESCRIPTION: Function exit trace.  Prints only if TRACE_FUNCTIONS bit is + * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is   *              set in debug_level. Prints exit value also.   *   ******************************************************************************/ @@ -494,156 +546,18 @@ acpi_ut_ptr_exit(u32 line_number,  		 const char *module_name, u32 component_id, u8 *ptr)  { -	acpi_debug_print(ACPI_LV_FUNCTIONS, -			 line_number, function_name, module_name, component_id, -			 "%s %p\n", acpi_gbl_fn_exit_str, ptr); - -	acpi_gbl_nesting_level--; -} +	/* Check if enabled up-front for performance */ -#endif - -/******************************************************************************* - * - * FUNCTION:    acpi_ut_dump_buffer - * - * PARAMETERS:  Buffer              - Buffer to dump - *              Count               - Amount to dump, in bytes - *              Display             - BYTE, WORD, DWORD, or QWORD display - *              component_iD        - Caller's component ID - * - * RETURN:      None - * - * DESCRIPTION: Generic dump buffer in both hex and ascii. - * - ******************************************************************************/ - -void acpi_ut_dump_buffer2(u8 * buffer, u32 count, u32 display) -{ -	u32 i = 0; -	u32 j; -	u32 temp32; -	u8 buf_char; - -	if (!buffer) { -		acpi_os_printf("Null Buffer Pointer in DumpBuffer!\n"); -		return; -	} - -	if ((count < 4) || (count & 0x01)) { -		display = DB_BYTE_DISPLAY; +	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) { +		acpi_debug_print(ACPI_LV_FUNCTIONS, +				 line_number, function_name, module_name, +				 component_id, "%s %p\n", acpi_gbl_fn_exit_str, +				 ptr);  	} -	/* Nasty little dump buffer routine! */ - -	while (i < count) { - -		/* Print current offset */ - -		acpi_os_printf("%6.4X: ", i); - -		/* Print 16 hex chars */ - -		for (j = 0; j < 16;) { -			if (i + j >= count) { - -				/* Dump fill spaces */ - -				acpi_os_printf("%*s", ((display * 2) + 1), " "); -				j += display; -				continue; -			} - -			switch (display) { -			case DB_BYTE_DISPLAY: -			default:	/* Default is BYTE display */ - -				acpi_os_printf("%02X ", -					       buffer[(acpi_size) i + j]); -				break; - -			case DB_WORD_DISPLAY: - -				ACPI_MOVE_16_TO_32(&temp32, -						   &buffer[(acpi_size) i + j]); -				acpi_os_printf("%04X ", temp32); -				break; - -			case DB_DWORD_DISPLAY: - -				ACPI_MOVE_32_TO_32(&temp32, -						   &buffer[(acpi_size) i + j]); -				acpi_os_printf("%08X ", temp32); -				break; - -			case DB_QWORD_DISPLAY: - -				ACPI_MOVE_32_TO_32(&temp32, -						   &buffer[(acpi_size) i + j]); -				acpi_os_printf("%08X", temp32); - -				ACPI_MOVE_32_TO_32(&temp32, -						   &buffer[(acpi_size) i + j + -							   4]); -				acpi_os_printf("%08X ", temp32); -				break; -			} - -			j += display; -		} - -		/* -		 * Print the ASCII equivalent characters but watch out for the bad -		 * unprintable ones (printable chars are 0x20 through 0x7E) -		 */ -		acpi_os_printf(" "); -		for (j = 0; j < 16; j++) { -			if (i + j >= count) { -				acpi_os_printf("\n"); -				return; -			} - -			buf_char = buffer[(acpi_size) i + j]; -			if (ACPI_IS_PRINT(buf_char)) { -				acpi_os_printf("%c", buf_char); -			} else { -				acpi_os_printf("."); -			} -		} - -		/* Done with that line. */ - -		acpi_os_printf("\n"); -		i += 16; +	if (acpi_gbl_nesting_level) { +		acpi_gbl_nesting_level--;  	} - -	return;  } -/******************************************************************************* - * - * FUNCTION:    acpi_ut_dump_buffer - * - * PARAMETERS:  Buffer              - Buffer to dump - *              Count               - Amount to dump, in bytes - *              Display             - BYTE, WORD, DWORD, or QWORD display - *              component_iD        - Caller's component ID - * - * RETURN:      None - * - * DESCRIPTION: Generic dump buffer in both hex and ascii. - * - ******************************************************************************/ - -void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id) -{ - -	/* Only dump the buffer if tracing is enabled */ - -	if (!((ACPI_LV_TABLES & acpi_dbg_level) && -	      (component_id & acpi_dbg_layer))) { -		return; -	} - -	acpi_ut_dump_buffer2(buffer, count, display); -} +#endif  | 
