11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
388ec28603c09ccba0346c15eef64ff0b4327c9eeBob Moore * Module Name: utdebug - Debug print/trace routines
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *****************************************************************************/
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
8fbb7a2dc2be493c87399550bdc2ddaa510cdf450Bob Moore * Copyright (C) 2000 - 2014, Intel Corp.
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * All rights reserved.
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Redistribution and use in source and binary forms, with or without
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * modification, are permitted provided that the following conditions
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * are met:
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 1. Redistributions of source code must retain the above copyright
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    notice, this list of conditions, and the following disclaimer,
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    without modification.
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 2. Redistributions in binary form must reproduce at minimum a disclaimer
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    substantially similar to the "NO WARRANTY" disclaimer below
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    ("Disclaimer") and any redistribution must be conditioned upon
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    including a substantially similar Disclaimer requirement for further
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    binary redistribution.
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 3. Neither the names of the above-listed copyright holders nor the names
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    of any contributors may be used to endorse or promote products derived
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    from this software without specific prior written permission.
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Alternatively, this software may be distributed under the terms of the
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License ("GPL") version 2 as published by the Free
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Software Foundation.
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * NO WARRANTY
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * POSSIBILITY OF SUCH DAMAGES.
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
44839e928f5bbb695c31ddc23cf3fae3cf1c9e9f20Lv Zheng#define EXPORT_ACPI_INTERFACES
45839e928f5bbb695c31ddc23cf3fae3cf1c9e9f20Lv Zheng
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <acpi/acpi.h>
47e2f7a7772880458edff1b1cc5a988947229fac26Len Brown#include "accommon.h"
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _COMPONENT          ACPI_UTILITIES
504be44fcd3bf648b782f4460fd06dfae6c42ded4bLen BrownACPI_MODULE_NAME("utdebug")
516d33b6be17dd6a0934396704f969ceb7f3206347Lv Zheng
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef ACPI_DEBUG_OUTPUT
536d33b6be17dd6a0934396704f969ceb7f3206347Lv Zhengstatic acpi_thread_id acpi_gbl_prev_thread_id = (acpi_thread_id) 0xFFFFFFFF;
544be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstatic char *acpi_gbl_fn_entry_str = "----Entry";
554be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstatic char *acpi_gbl_fn_exit_str = "----Exit-";
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
570c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore/* Local prototypes */
580c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
594be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstatic const char *acpi_ut_trim_function_name(const char *function_name);
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6144f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_init_stack_ptr_trace
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  None
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
6944f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore * DESCRIPTION: Save the current CPU stack pointer at subsystem startup
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
7144f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
734be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownvoid acpi_ut_init_stack_ptr_trace(void)
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
751d18c05825c3f2b8933a7fc7f7528881e98deb04Bob Moore	acpi_size current_sp;
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
771d18c05825c3f2b8933a7fc7f7528881e98deb04Bob Moore	acpi_gbl_entry_stack_pointer = &current_sp;
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_track_stack_ptr
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  None
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
8844f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore * DESCRIPTION: Save the current CPU stack pointer
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
9044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
924be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownvoid acpi_ut_track_stack_ptr(void)
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
944be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_size current_sp;
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
961d18c05825c3f2b8933a7fc7f7528881e98deb04Bob Moore	if (&current_sp < acpi_gbl_lowest_stack_pointer) {
971d18c05825c3f2b8933a7fc7f7528881e98deb04Bob Moore		acpi_gbl_lowest_stack_pointer = &current_sp;
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (acpi_gbl_nesting_level > acpi_gbl_deepest_nesting) {
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		acpi_gbl_deepest_nesting = acpi_gbl_nesting_level;
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10544f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1070c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore * FUNCTION:    acpi_ut_trim_function_name
1080c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore *
1090c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore * PARAMETERS:  function_name       - Ascii string containing a procedure name
1100c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore *
1110c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore * RETURN:      Updated pointer to the function name
1120c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore *
1130c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore * DESCRIPTION: Remove the "Acpi" prefix from the function name, if present.
1146d33b6be17dd6a0934396704f969ceb7f3206347Lv Zheng *              This allows compiler macros such as __FUNCTION__ to be used
1150c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore *              with no change to the debug output.
1160c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore *
1170c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore ******************************************************************************/
1180c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
1194be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstatic const char *acpi_ut_trim_function_name(const char *function_name)
1200c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore{
1210c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
1220c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore	/* All Function names are longer than 4 chars, check is safe */
1230c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
124a18ecf413ca9846becb760f7f990c2c62c15965eBob Moore	if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_MIXED) {
12552fc0b026e99b5d5d585095148d997d5634bbc25Bob Moore
1260c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore		/* This is the case where the original source has not been modified */
1270c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
1280c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore		return (function_name + 4);
1290c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore	}
1300c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
131a18ecf413ca9846becb760f7f990c2c62c15965eBob Moore	if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_LOWER) {
13252fc0b026e99b5d5d585095148d997d5634bbc25Bob Moore
1330c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore		/* This is the case where the source has been 'linuxized' */
1340c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
1350c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore		return (function_name + 5);
1360c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore	}
1370c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
1380c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore	return (function_name);
1390c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore}
1400c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
1410c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore/*******************************************************************************
1420c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore *
14350df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore * FUNCTION:    acpi_debug_print
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
14544f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore * PARAMETERS:  requested_debug_level - Requested debug print level
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              line_number         - Caller's line number (for error output)
147f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
148f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
149f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
150ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              format              - Printf format field
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              ...                 - Optional printf arguments
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DESCRIPTION: Print error message with prefix consisting of the module name,
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              line number, and component ID.
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
15844f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1604be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownvoid ACPI_INTERNAL_VAR_XFACE
16150df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Mooreacpi_debug_print(u32 requested_debug_level,
16250df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		 u32 line_number,
16350df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		 const char *function_name,
16450df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		 const char *module_name,
16550df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		 u32 component_id, const char *format, ...)
1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1678313524a0d466f451a62709aaedf988d8257b21cBob Moore	acpi_thread_id thread_id;
1684be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	va_list args;
1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
170db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if debug output enabled */
171db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
172db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (!ACPI_IS_DEBUG_ENABLED(requested_debug_level, component_id)) {
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return;
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Thread tracking and context switch notification
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
1794be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	thread_id = acpi_os_get_thread_id();
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (thread_id != acpi_gbl_prev_thread_id) {
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (ACPI_LV_THREADS & acpi_dbg_level) {
1824be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown			acpi_os_printf
18328eb3fcf8762a3b52f4fef5af29dce50d23c7151Lin Ming			    ("\n**** Context Switch from TID %u to TID %u ****\n\n",
18428eb3fcf8762a3b52f4fef5af29dce50d23c7151Lin Ming			     (u32)acpi_gbl_prev_thread_id, (u32)thread_id);
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		acpi_gbl_prev_thread_id = thread_id;
188bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore		acpi_gbl_nesting_level = 0;
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Display the module name, current line number, thread ID (if requested),
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * current procedure nesting level, and the current procedure name
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
1952856846e3a7bee02ce6b498c760376061e41aaedBob Moore	acpi_os_printf("%9s-%04ld ", module_name, line_number);
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1975076f00504c62489b63197392856b9bad1ebcbd5Bob Moore#ifdef ACPI_APPLICATION
198bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	/*
1995076f00504c62489b63197392856b9bad1ebcbd5Bob Moore	 * For acpi_exec/iASL only, emit the thread ID and nesting level.
200bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	 * Note: nesting level is really only useful during a single-thread
201bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	 * execution. Otherwise, multiple threads will keep resetting the
202bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	 * level.
203bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	 */
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (ACPI_LV_THREADS & acpi_dbg_level) {
20528eb3fcf8762a3b52f4fef5af29dce50d23c7151Lin Ming		acpi_os_printf("[%u] ", (u32)thread_id);
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
208bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	acpi_os_printf("[%02ld] ", acpi_gbl_nesting_level);
209bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore#endif
210bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore
211bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	acpi_os_printf("%-22.22s: ", acpi_ut_trim_function_name(function_name));
2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2134be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	va_start(args, format);
2144be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_os_vprintf(format, args);
215507f046c4dd17e9c94b5130ba184f8da90504685Bob Moore	va_end(args);
2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
21850df4d8b0f6e1971b930f3158c9ee0e4263e636dBob MooreACPI_EXPORT_SYMBOL(acpi_debug_print)
2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
22044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
22250df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore * FUNCTION:    acpi_debug_print_raw
2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  requested_debug_level - Requested debug print level
2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              line_number         - Caller's line number
226f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
227f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
228f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
229ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              format              - Printf format field
2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              ...                 - Optional printf arguments
2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
23473a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Print message with no headers. Has same interface as
2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              debug_print so that the same macros can be used.
2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
23744f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
2384be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownvoid ACPI_INTERNAL_VAR_XFACE
23950df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Mooreacpi_debug_print_raw(u32 requested_debug_level,
24050df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		     u32 line_number,
24150df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		     const char *function_name,
24250df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		     const char *module_name,
24350df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		     u32 component_id, const char *format, ...)
2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
2454be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	va_list args;
2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
247db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if debug output enabled */
248db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
249db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (!ACPI_IS_DEBUG_ENABLED(requested_debug_level, component_id)) {
2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return;
2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2534be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	va_start(args, format);
2544be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_os_vprintf(format, args);
255507f046c4dd17e9c94b5130ba184f8da90504685Bob Moore	va_end(args);
2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25850df4d8b0f6e1971b930f3158c9ee0e4263e636dBob MooreACPI_EXPORT_SYMBOL(acpi_debug_print_raw)
2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
26044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_trace
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
265f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
266f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
267f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
27173a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
27444f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
2764be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_trace(u32 line_number,
2774b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore	      const char *function_name,
2784b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore	      const char *module_name, u32 component_id)
2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level++;
2824be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_ut_track_stack_ptr();
2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
284db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
285db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
286db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
287db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
288db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
289db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s\n", acpi_gbl_fn_entry_str);
290db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2938313524a0d466f451a62709aaedf988d8257b21cBob MooreACPI_EXPORT_SYMBOL(acpi_ut_trace)
2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29544f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_trace_ptr
2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
300f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
301f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
302f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
303ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              pointer             - Pointer to display
3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
3061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
30773a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
3081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
31044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
3124be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_trace_ptr(u32 line_number,
3134be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		  const char *function_name,
3144b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		  const char *module_name, u32 component_id, void *pointer)
3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
31668aafc35161dcc9d365a32c2f9f077aedc61754dBob Moore
3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level++;
3184be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_ut_track_stack_ptr();
3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
320db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
321db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
322db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
323db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
324db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
325db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s %p\n", acpi_gbl_fn_entry_str,
326db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 pointer);
327db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
33044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_trace_str
3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
335f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
336f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
337f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
338ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              string              - Additional string to display
3391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
34273a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
34544f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
3484be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_trace_str(u32 line_number,
3494be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		  const char *function_name,
3504b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		  const char *module_name, u32 component_id, char *string)
3511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level++;
3544be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_ut_track_stack_ptr();
3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
356db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
357db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
358db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
359db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
360db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
361db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s %s\n", acpi_gbl_fn_entry_str,
362db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 string);
363db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
3641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
36644f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
3671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_trace_u32
3691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
371f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
372f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
373f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
374ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              integer             - Integer to display
3751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
37873a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
3791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
3801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
38144f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
3821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
3844be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_trace_u32(u32 line_number,
3854be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		  const char *function_name,
3864b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		  const char *module_name, u32 component_id, u32 integer)
3871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
3881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level++;
3904be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_ut_track_stack_ptr();
3911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
392db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
393db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
394db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
395db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
396db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
397db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s %08X\n",
398db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 acpi_gbl_fn_entry_str, integer);
399db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
4011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
40244f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
4031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_exit
4051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
407f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
408f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
409f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
4101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
4121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41373a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
4141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
4151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41644f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
4171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
4194be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_exit(u32 line_number,
4204b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore	     const char *function_name,
4214b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore	     const char *module_name, u32 component_id)
4221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
4231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
424db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
425db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
426db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
427db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
428db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
429db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s\n", acpi_gbl_fn_exit_str);
430db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
4311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
432bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	if (acpi_gbl_nesting_level) {
433bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore		acpi_gbl_nesting_level--;
434bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	}
4351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
4361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4378313524a0d466f451a62709aaedf988d8257b21cBob MooreACPI_EXPORT_SYMBOL(acpi_ut_exit)
4381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43944f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
4401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_status_exit
4421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
444f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
445f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
446f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
447ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              status              - Exit status code
4481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
4501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
45173a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
4521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level. Prints exit status also.
4531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
45444f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
4551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
4564be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_status_exit(u32 line_number,
4574be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		    const char *function_name,
4584b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		    const char *module_name,
4594b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		    u32 component_id, acpi_status status)
4601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
4611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
462db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
463db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
464db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
465db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		if (ACPI_SUCCESS(status)) {
466db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore			acpi_debug_print(ACPI_LV_FUNCTIONS,
467db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 line_number, function_name,
468db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 module_name, component_id, "%s %s\n",
469db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 acpi_gbl_fn_exit_str,
470db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 acpi_format_exception(status));
471db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		} else {
472db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore			acpi_debug_print(ACPI_LV_FUNCTIONS,
473db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 line_number, function_name,
474db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 module_name, component_id,
475db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 "%s ****Exception****: %s\n",
476db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 acpi_gbl_fn_exit_str,
477db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 acpi_format_exception(status));
478db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		}
4791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
4801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
481bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	if (acpi_gbl_nesting_level) {
482bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore		acpi_gbl_nesting_level--;
483bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	}
4841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
4851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4868313524a0d466f451a62709aaedf988d8257b21cBob MooreACPI_EXPORT_SYMBOL(acpi_ut_status_exit)
4871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
48844f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
4891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_value_exit
4911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
493f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
494f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
495f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
496ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              value               - Value to be printed with exit msg
4971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
4991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
50073a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
5011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level. Prints exit value also.
5021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
50344f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
5041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
5054be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_value_exit(u32 line_number,
5064be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		   const char *function_name,
5075df7e6cb42da36c7d878239bebc81907b15f3943Bob Moore		   const char *module_name, u32 component_id, u64 value)
5081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
5091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
510db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
511db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
512db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
513db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
514db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
515db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s %8.8X%8.8X\n",
516db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 acpi_gbl_fn_exit_str,
517db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 ACPI_FORMAT_UINT64(value));
518db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
5191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
520bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	if (acpi_gbl_nesting_level) {
521bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore		acpi_gbl_nesting_level--;
522bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	}
5231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
5241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5258313524a0d466f451a62709aaedf988d8257b21cBob MooreACPI_EXPORT_SYMBOL(acpi_ut_value_exit)
5261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
52744f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
5281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
5291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_ptr_exit
5301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
5311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
532f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
533f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
534f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
535ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              ptr                 - Pointer to display
5361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
5371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
5381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
53973a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
5401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level. Prints exit value also.
5411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
54244f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
5431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
5444be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_ptr_exit(u32 line_number,
5454be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		 const char *function_name,
5464b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		 const char *module_name, u32 component_id, u8 *ptr)
5471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
5481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
549db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
550db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
551db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
552db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
553db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
554db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s %p\n", acpi_gbl_fn_exit_str,
555db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 ptr);
556db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
5571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
558bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	if (acpi_gbl_nesting_level) {
559bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore		acpi_gbl_nesting_level--;
560bf9b448ef8430548d0608a38ebddbf7f6ca14ed1Bob Moore	}
5611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
5621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
5642e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng
5652e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng#ifdef ACPI_APPLICATION
5662e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng/*******************************************************************************
5672e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng *
5682e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng * FUNCTION:    acpi_log_error
5692e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng *
5702e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng * PARAMETERS:  format              - Printf format field
5712e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng *              ...                 - Optional printf arguments
5722e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng *
5732e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng * RETURN:      None
5742e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng *
5752e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng * DESCRIPTION: Print error message to the console, used by applications.
5762e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng *
5772e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng ******************************************************************************/
5782e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng
5792e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zhengvoid ACPI_INTERNAL_VAR_XFACE acpi_log_error(const char *format, ...)
5802e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng{
5812e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng	va_list args;
5822e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng
5832e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng	va_start(args, format);
5842e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng	(void)acpi_ut_file_vprintf(ACPI_FILE_ERR, format, args);
5852e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng	va_end(args);
5862e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng}
5872e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng
5882e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv ZhengACPI_EXPORT_SYMBOL(acpi_log_error)
5892e70da4c51eb18a4d229aa48763c15f5dbc5b43dLv Zheng#endif
590