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

📄 utdebug.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************** * * Module Name: utdebug - Debug print routines * *****************************************************************************//* * Copyright (C) 2000 - 2005, R. Byron Moore * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions, and the following disclaimer, *    without modification. * 2. Redistributions in binary form must reproduce at minimum a disclaimer *    substantially similar to the "NO WARRANTY" disclaimer below *    ("Disclaimer") and any redistribution must be conditioned upon *    including a substantially similar Disclaimer requirement for further *    binary redistribution. * 3. Neither the names of the above-listed copyright holders nor the names *    of any contributors may be used to endorse or promote products derived *    from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * * NO WARRANTY * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. */#include <linux/module.h>#include <acpi/acpi.h>#define _COMPONENT          ACPI_UTILITIESACPI_MODULE_NAME("utdebug")#ifdef ACPI_DEBUG_OUTPUTstatic u32 acpi_gbl_prev_thread_id = 0xFFFFFFFF;static char *acpi_gbl_fn_entry_str = "----Entry";static char *acpi_gbl_fn_exit_str = "----Exit-";/* Local prototypes */static const char *acpi_ut_trim_function_name(const char *function_name);/******************************************************************************* * * FUNCTION:    acpi_ut_init_stack_ptr_trace * * PARAMETERS:  None * * RETURN:      None * * DESCRIPTION: Save the current CPU stack pointer at subsystem startup * ******************************************************************************/void acpi_ut_init_stack_ptr_trace(void){	u32 current_sp;	acpi_gbl_entry_stack_pointer = ACPI_PTR_DIFF(&current_sp, NULL);}/******************************************************************************* * * FUNCTION:    acpi_ut_track_stack_ptr * * PARAMETERS:  None * * RETURN:      None * * DESCRIPTION: Save the current CPU stack pointer * ******************************************************************************/void acpi_ut_track_stack_ptr(void){	acpi_size current_sp;	current_sp = ACPI_PTR_DIFF(&current_sp, NULL);	if (current_sp < acpi_gbl_lowest_stack_pointer) {		acpi_gbl_lowest_stack_pointer = current_sp;	}	if (acpi_gbl_nesting_level > acpi_gbl_deepest_nesting) {		acpi_gbl_deepest_nesting = acpi_gbl_nesting_level;	}}/******************************************************************************* * * FUNCTION:    acpi_ut_trim_function_name * * PARAMETERS:  function_name       - Ascii string containing a procedure name * * RETURN:      Updated pointer to the function name * * DESCRIPTION: Remove the "Acpi" prefix from the function name, if present. *              This allows compiler macros such as __FUNCTION__ to be used *              with no change to the debug output. * ******************************************************************************/static const char *acpi_ut_trim_function_name(const char *function_name){	/* All Function names are longer than 4 chars, check is safe */	if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_MIXED) {		/* This is the case where the original source has not been modified */		return (function_name + 4);	}	if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_LOWER) {		/* This is the case where the source has been 'linuxized' */		return (function_name + 5);	}	return (function_name);}/******************************************************************************* * * FUNCTION:    acpi_ut_debug_print * * PARAMETERS:  requested_debug_level - Requested debug print level *              line_number         - Caller's line number (for error output) *              function_name       - Caller's procedure name *              module_name         - Caller's module name *              component_id        - Caller's component ID *              Format              - Printf format field *              ...                 - Optional printf arguments * * RETURN:      None * * DESCRIPTION: Print error message with prefix consisting of the module name, *              line number, and component ID. * ******************************************************************************/void ACPI_INTERNAL_VAR_XFACEacpi_ut_debug_print(u32 requested_debug_level,		    u32 line_number,		    const char *function_name,		    char *module_name, u32 component_id, char *format, ...){	u32 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)) {		return;	}	/*	 * Thread tracking and context switch notification	 */	thread_id = acpi_os_get_thread_id();	if (thread_id != acpi_gbl_prev_thread_id) {		if (ACPI_LV_THREADS & acpi_dbg_level) {			acpi_os_printf			    ("\n**** Context Switch from TID %X to TID %X ****\n\n",			     acpi_gbl_prev_thread_id, thread_id);		}		acpi_gbl_prev_thread_id = thread_id;	}	/*	 * 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);	if (ACPI_LV_THREADS & acpi_dbg_level) {		acpi_os_printf("[%04lX] ", thread_id);	}	acpi_os_printf("[%02ld] %-22.22s: ",		       acpi_gbl_nesting_level,		       acpi_ut_trim_function_name(function_name));	va_start(args, format);	acpi_os_vprintf(format, args);}EXPORT_SYMBOL(acpi_ut_debug_print);/******************************************************************************* * * FUNCTION:    acpi_ut_debug_print_raw * * PARAMETERS:  requested_debug_level - Requested debug print level *              line_number         - Caller's line number *              function_name       - Caller's procedure name *              module_name         - Caller's module name *              component_id        - Caller's component ID *              Format              - Printf format field *              ...                 - Optional printf arguments * * RETURN:      None * * DESCRIPTION: Print message with no headers.  Has same interface as *              debug_print so that the same macros can be used. * ******************************************************************************/void ACPI_INTERNAL_VAR_XFACEacpi_ut_debug_print_raw(u32 requested_debug_level,			u32 line_number,			const char *function_name,			char *module_name, u32 component_id, char *format, ...){	va_list args;	if (!(requested_debug_level & acpi_dbg_level) ||	    !(component_id & acpi_dbg_layer)) {		return;	}	va_start(args, format);	acpi_os_vprintf(format, args);}EXPORT_SYMBOL(acpi_ut_debug_print_raw);/******************************************************************************* * * FUNCTION:    acpi_ut_trace * * PARAMETERS:  line_number         - Caller's line number *              function_name       - Caller's procedure name *              module_name         - Caller's module name *              component_id        - Caller's component ID * * RETURN:      None * * DESCRIPTION: Function entry trace.  Prints only if TRACE_FUNCTIONS bit is *              set in debug_level * ******************************************************************************/voidacpi_ut_trace(u32 line_number,	      const char *function_name, char *module_name, u32 component_id){	acpi_gbl_nesting_level++;	acpi_ut_track_stack_ptr();	acpi_ut_debug_print(ACPI_LV_FUNCTIONS,			    line_number, function_name, module_name,			    component_id, "%s\n", acpi_gbl_fn_entry_str);}EXPORT_SYMBOL(acpi_ut_trace);/******************************************************************************* * * FUNCTION:    acpi_ut_trace_ptr * * PARAMETERS:  line_number         - Caller's line number *              function_name       - Caller's procedure name *              module_name         - Caller's module name *              component_id        - Caller's component ID *              Pointer             - Pointer to display * * RETURN:      None * * DESCRIPTION: Function entry trace.  Prints only if TRACE_FUNCTIONS bit is *              set in debug_level * ******************************************************************************/voidacpi_ut_trace_ptr(u32 line_number,		  const char *function_name,		  char *module_name, u32 component_id, void *pointer){	acpi_gbl_nesting_level++;	acpi_ut_track_stack_ptr();	acpi_ut_debug_print(ACPI_LV_FUNCTIONS,			    line_number, function_name, module_name,			    component_id, "%s %p\n", acpi_gbl_fn_entry_str,			    pointer);}/*******************************************************************************

⌨️ 快捷键说明

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