utdebug.c revision db38bf5a57a955975986b514c6bbd7cb324fddc3
11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Module Name: utdebug - Debug print routines
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *****************************************************************************/
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
877848130e53b06c22fe37a7b6acbb82bb3e9bfbaBob Moore * Copyright (C) 2000 - 2012, 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
44214f2c90b970e098e75cf719c0c5b0f1fe69b716Paul Gortmaker#include <linux/export.h>
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <acpi/acpi.h>
46e2f7a7772880458edff1b1cc5a988947229fac26Len Brown#include "accommon.h"
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _COMPONENT          ACPI_UTILITIES
494be44fcd3bf648b782f4460fd06dfae6c42ded4bLen BrownACPI_MODULE_NAME("utdebug")
506d33b6be17dd6a0934396704f969ceb7f3206347Lv Zheng
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef ACPI_DEBUG_OUTPUT
526d33b6be17dd6a0934396704f969ceb7f3206347Lv Zhengstatic acpi_thread_id acpi_gbl_prev_thread_id = (acpi_thread_id) 0xFFFFFFFF;
534be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstatic char *acpi_gbl_fn_entry_str = "----Entry";
544be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstatic char *acpi_gbl_fn_exit_str = "----Exit-";
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
560c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore/* Local prototypes */
570c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
584be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstatic const char *acpi_ut_trim_function_name(const char *function_name);
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_init_stack_ptr_trace
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  None
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
6844f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore * DESCRIPTION: Save the current CPU stack pointer at subsystem startup
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
7044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
724be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownvoid acpi_ut_init_stack_ptr_trace(void)
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
741d18c05825c3f2b8933a7fc7f7528881e98deb04Bob Moore	acpi_size current_sp;
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
761d18c05825c3f2b8933a7fc7f7528881e98deb04Bob Moore	acpi_gbl_entry_stack_pointer = &current_sp;
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7944f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_track_stack_ptr
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  None
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
8744f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore * DESCRIPTION: Save the current CPU stack pointer
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
8944f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
914be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownvoid acpi_ut_track_stack_ptr(void)
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
934be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_size current_sp;
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
951d18c05825c3f2b8933a7fc7f7528881e98deb04Bob Moore	if (&current_sp < acpi_gbl_lowest_stack_pointer) {
961d18c05825c3f2b8933a7fc7f7528881e98deb04Bob Moore		acpi_gbl_lowest_stack_pointer = &current_sp;
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (acpi_gbl_nesting_level > acpi_gbl_deepest_nesting) {
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		acpi_gbl_deepest_nesting = acpi_gbl_nesting_level;
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10444f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1060c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore * FUNCTION:    acpi_ut_trim_function_name
1070c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore *
1080c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore * PARAMETERS:  function_name       - Ascii string containing a procedure name
1090c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore *
1100c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore * RETURN:      Updated pointer to the function name
1110c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore *
1120c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore * DESCRIPTION: Remove the "Acpi" prefix from the function name, if present.
1136d33b6be17dd6a0934396704f969ceb7f3206347Lv Zheng *              This allows compiler macros such as __FUNCTION__ to be used
1140c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore *              with no change to the debug output.
1150c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore *
1160c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore ******************************************************************************/
1170c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
1184be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownstatic const char *acpi_ut_trim_function_name(const char *function_name)
1190c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore{
1200c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
1210c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore	/* All Function names are longer than 4 chars, check is safe */
1220c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
123a18ecf413ca9846becb760f7f990c2c62c15965eBob Moore	if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_MIXED) {
12452fc0b026e99b5d5d585095148d997d5634bbc25Bob Moore
1250c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore		/* This is the case where the original source has not been modified */
1260c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
1270c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore		return (function_name + 4);
1280c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore	}
1290c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
130a18ecf413ca9846becb760f7f990c2c62c15965eBob Moore	if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_LOWER) {
13152fc0b026e99b5d5d585095148d997d5634bbc25Bob Moore
1320c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore		/* This is the case where the source has been 'linuxized' */
1330c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
1340c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore		return (function_name + 5);
1350c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore	}
1360c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
1370c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore	return (function_name);
1380c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore}
1390c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore
1400c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore/*******************************************************************************
1410c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore *
14250df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore * FUNCTION:    acpi_debug_print
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
14444f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore * PARAMETERS:  requested_debug_level - Requested debug print level
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              line_number         - Caller's line number (for error output)
146f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
147f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
148f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
149ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              format              - Printf format field
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              ...                 - Optional printf arguments
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DESCRIPTION: Print error message with prefix consisting of the module name,
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              line number, and component ID.
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
15744f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1594be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownvoid ACPI_INTERNAL_VAR_XFACE
16050df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Mooreacpi_debug_print(u32 requested_debug_level,
16150df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		 u32 line_number,
16250df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		 const char *function_name,
16350df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		 const char *module_name,
16450df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		 u32 component_id, const char *format, ...)
1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1668313524a0d466f451a62709aaedf988d8257b21cBob Moore	acpi_thread_id thread_id;
1674be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	va_list args;
1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
169db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if debug output enabled */
170db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
171db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (!ACPI_IS_DEBUG_ENABLED(requested_debug_level, component_id)) {
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return;
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Thread tracking and context switch notification
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
1784be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	thread_id = acpi_os_get_thread_id();
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (thread_id != acpi_gbl_prev_thread_id) {
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (ACPI_LV_THREADS & acpi_dbg_level) {
1814be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown			acpi_os_printf
18228eb3fcf8762a3b52f4fef5af29dce50d23c7151Lin Ming			    ("\n**** Context Switch from TID %u to TID %u ****\n\n",
18328eb3fcf8762a3b52f4fef5af29dce50d23c7151Lin Ming			     (u32)acpi_gbl_prev_thread_id, (u32)thread_id);
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		acpi_gbl_prev_thread_id = thread_id;
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Display the module name, current line number, thread ID (if requested),
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * current procedure nesting level, and the current procedure name
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
1934be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_os_printf("%8s-%04ld ", module_name, line_number);
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (ACPI_LV_THREADS & acpi_dbg_level) {
19628eb3fcf8762a3b52f4fef5af29dce50d23c7151Lin Ming		acpi_os_printf("[%u] ", (u32)thread_id);
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1994be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_os_printf("[%02ld] %-22.22s: ",
2004be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		       acpi_gbl_nesting_level,
2014be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		       acpi_ut_trim_function_name(function_name));
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2034be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	va_start(args, format);
2044be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_os_vprintf(format, args);
205507f046c4dd17e9c94b5130ba184f8da90504685Bob Moore	va_end(args);
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
20850df4d8b0f6e1971b930f3158c9ee0e4263e636dBob MooreACPI_EXPORT_SYMBOL(acpi_debug_print)
2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
21044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
21250df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore * FUNCTION:    acpi_debug_print_raw
2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  requested_debug_level - Requested debug print level
2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              line_number         - Caller's line number
216f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
217f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
218f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
219ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              format              - Printf format field
2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              ...                 - Optional printf arguments
2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
22473a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Print message with no headers. Has same interface as
2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              debug_print so that the same macros can be used.
2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
22744f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
2284be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownvoid ACPI_INTERNAL_VAR_XFACE
22950df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Mooreacpi_debug_print_raw(u32 requested_debug_level,
23050df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		     u32 line_number,
23150df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		     const char *function_name,
23250df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		     const char *module_name,
23350df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		     u32 component_id, const char *format, ...)
2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
2354be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	va_list args;
2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
237db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if debug output enabled */
238db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
239db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (!ACPI_IS_DEBUG_ENABLED(requested_debug_level, component_id)) {
2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return;
2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2434be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	va_start(args, format);
2444be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_os_vprintf(format, args);
245507f046c4dd17e9c94b5130ba184f8da90504685Bob Moore	va_end(args);
2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24850df4d8b0f6e1971b930f3158c9ee0e4263e636dBob MooreACPI_EXPORT_SYMBOL(acpi_debug_print_raw)
2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_trace
2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
255f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
256f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
257f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
26173a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
26444f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
2664be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_trace(u32 line_number,
2674b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore	      const char *function_name,
2684b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore	      const char *module_name, u32 component_id)
2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level++;
2724be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_ut_track_stack_ptr();
2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
274db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
275db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
276db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
277db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
278db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
279db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s\n", acpi_gbl_fn_entry_str);
280db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2838313524a0d466f451a62709aaedf988d8257b21cBob MooreACPI_EXPORT_SYMBOL(acpi_ut_trace)
2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28544f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_trace_ptr
2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
290f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
291f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
292f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
293ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              pointer             - Pointer to display
2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
29773a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
30044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
3011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
3024be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_trace_ptr(u32 line_number,
3034be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		  const char *function_name,
3044b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		  const char *module_name, u32 component_id, void *pointer)
3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
30668aafc35161dcc9d365a32c2f9f077aedc61754dBob Moore
3071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level++;
3084be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_ut_track_stack_ptr();
3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
310db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
311db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
312db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
313db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
314db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
315db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s %p\n", acpi_gbl_fn_entry_str,
316db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 pointer);
317db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
32044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_trace_str
3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
325f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
326f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
327f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
328ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              string              - Additional string to display
3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
33273a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
33544f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
3361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
3384be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_trace_str(u32 line_number,
3394be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		  const char *function_name,
3404b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		  const char *module_name, u32 component_id, char *string)
3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level++;
3444be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_ut_track_stack_ptr();
3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
346db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
347db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
348db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
349db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
350db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
351db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s %s\n", acpi_gbl_fn_entry_str,
352db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 string);
353db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
35644f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
3571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_trace_u32
3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
361f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
362f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
363f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
364ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              integer             - Integer to display
3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
3671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
36873a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
3691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
3701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
37144f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
3721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
3744be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_trace_u32(u32 line_number,
3754be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		  const char *function_name,
3764b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		  const char *module_name, u32 component_id, u32 integer)
3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level++;
3804be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_ut_track_stack_ptr();
3811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
382db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
383db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
384db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
385db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
386db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
387db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s %08X\n",
388db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 acpi_gbl_fn_entry_str, integer);
389db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
3901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
3911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
39244f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
3931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_exit
3951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
397f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
398f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
399f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
4021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
40373a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
4041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
4051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
40644f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
4071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
4094be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_exit(u32 line_number,
4104b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore	     const char *function_name,
4114b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore	     const char *module_name, u32 component_id)
4121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
4131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
414db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
415db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
416db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
417db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
418db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
419db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s\n", acpi_gbl_fn_exit_str);
420db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
4211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level--;
4231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
4241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4258313524a0d466f451a62709aaedf988d8257b21cBob MooreACPI_EXPORT_SYMBOL(acpi_ut_exit)
4261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
42744f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
4281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_status_exit
4301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
432f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
433f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
434f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
435ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              status              - Exit status code
4361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
4381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
43973a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
4401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level. Prints exit status also.
4411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
44244f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
4431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
4444be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_status_exit(u32 line_number,
4454be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		    const char *function_name,
4464b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		    const char *module_name,
4474b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		    u32 component_id, acpi_status status)
4481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
4491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
450db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
451db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
452db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
453db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		if (ACPI_SUCCESS(status)) {
454db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore			acpi_debug_print(ACPI_LV_FUNCTIONS,
455db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 line_number, function_name,
456db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 module_name, component_id, "%s %s\n",
457db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 acpi_gbl_fn_exit_str,
458db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 acpi_format_exception(status));
459db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		} else {
460db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore			acpi_debug_print(ACPI_LV_FUNCTIONS,
461db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 line_number, function_name,
462db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 module_name, component_id,
463db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 "%s ****Exception****: %s\n",
464db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 acpi_gbl_fn_exit_str,
465db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore					 acpi_format_exception(status));
466db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		}
4671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
4681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level--;
4701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
4711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4728313524a0d466f451a62709aaedf988d8257b21cBob MooreACPI_EXPORT_SYMBOL(acpi_ut_status_exit)
4731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
47444f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
4751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_value_exit
4771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
479f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
480f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
481f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
482ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              value               - Value to be printed with exit msg
4831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
4851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
48673a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
4871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level. Prints exit value also.
4881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
48944f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
4901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
4914be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_value_exit(u32 line_number,
4924be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		   const char *function_name,
4935df7e6cb42da36c7d878239bebc81907b15f3943Bob Moore		   const char *module_name, u32 component_id, u64 value)
4941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
4951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
496db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
497db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
498db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
499db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
500db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
501db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s %8.8X%8.8X\n",
502db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 acpi_gbl_fn_exit_str,
503db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 ACPI_FORMAT_UINT64(value));
504db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
5051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level--;
5071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
5081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5098313524a0d466f451a62709aaedf988d8257b21cBob MooreACPI_EXPORT_SYMBOL(acpi_ut_value_exit)
5101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
51144f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
5121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
5131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_ptr_exit
5141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
5151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
516f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
517f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
518f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
519ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              ptr                 - Pointer to display
5201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
5211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
5221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
52373a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
5241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level. Prints exit value also.
5251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
52644f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
5271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
5284be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_ptr_exit(u32 line_number,
5294be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		 const char *function_name,
5304b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		 const char *module_name, u32 component_id, u8 *ptr)
5311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
5321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
533db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	/* Check if enabled up-front for performance */
534db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore
535db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
536db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
537db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 line_number, function_name, module_name,
538db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 component_id, "%s %p\n", acpi_gbl_fn_exit_str,
539db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore				 ptr);
540db38bf5a57a955975986b514c6bbd7cb324fddc3Bob Moore	}
5411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level--;
5431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
5441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
5461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
54744f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
5481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
5491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_dump_buffer
5501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
551ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore * PARAMETERS:  buffer              - Buffer to dump
552ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              count               - Amount to dump, in bytes
553ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              display             - BYTE, WORD, DWORD, or QWORD display
55497171c6be3088a68b403c7285d34c151f7dbfb18Bob Moore *              offset              - Beginning buffer offset (display only)
5551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
5561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
5571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
5581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DESCRIPTION: Generic dump buffer in both hex and ascii.
5591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
56044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
5611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
56297171c6be3088a68b403c7285d34c151f7dbfb18Bob Moorevoid acpi_ut_dump_buffer(u8 *buffer, u32 count, u32 display, u32 base_offset)
5631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
56467a119f990063f5662574f6d6414fe9bc5ece86aBob Moore	u32 i = 0;
56567a119f990063f5662574f6d6414fe9bc5ece86aBob Moore	u32 j;
5664be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	u32 temp32;
5674be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	u8 buf_char;
5681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5695eb691805f7ec5960fe9d5d7fc57a7fc3097bbd0Bob Moore	if (!buffer) {
5705eb691805f7ec5960fe9d5d7fc57a7fc3097bbd0Bob Moore		acpi_os_printf("Null Buffer Pointer in DumpBuffer!\n");
5715eb691805f7ec5960fe9d5d7fc57a7fc3097bbd0Bob Moore		return;
5725eb691805f7ec5960fe9d5d7fc57a7fc3097bbd0Bob Moore	}
5735eb691805f7ec5960fe9d5d7fc57a7fc3097bbd0Bob Moore
5741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if ((count < 4) || (count & 0x01)) {
5751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		display = DB_BYTE_DISPLAY;
5761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
5771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
57844f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore	/* Nasty little dump buffer routine! */
5791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	while (i < count) {
58152fc0b026e99b5d5d585095148d997d5634bbc25Bob Moore
5821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* Print current offset */
5831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
58497171c6be3088a68b403c7285d34c151f7dbfb18Bob Moore		acpi_os_printf("%6.4X: ", (base_offset + i));
5851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* Print 16 hex chars */
5871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		for (j = 0; j < 16;) {
5891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			if (i + j >= count) {
59052fc0b026e99b5d5d585095148d997d5634bbc25Bob Moore
59144f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore				/* Dump fill spaces */
5921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5934be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("%*s", ((display * 2) + 1), " ");
59467a119f990063f5662574f6d6414fe9bc5ece86aBob Moore				j += display;
59544f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore				continue;
59644f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore			}
5971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			switch (display) {
599793c2388cae3fd023b3b5166354931752d42353cBob Moore			case DB_BYTE_DISPLAY:
6004be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown			default:	/* Default is BYTE display */
6011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
60267a119f990063f5662574f6d6414fe9bc5ece86aBob Moore				acpi_os_printf("%02X ",
60367a119f990063f5662574f6d6414fe9bc5ece86aBob Moore					       buffer[(acpi_size) i + j]);
6041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				break;
6051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			case DB_WORD_DISPLAY:
6071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
60867a119f990063f5662574f6d6414fe9bc5ece86aBob Moore				ACPI_MOVE_16_TO_32(&temp32,
60967a119f990063f5662574f6d6414fe9bc5ece86aBob Moore						   &buffer[(acpi_size) i + j]);
6104be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("%04X ", temp32);
6111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				break;
6121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			case DB_DWORD_DISPLAY:
6141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
61567a119f990063f5662574f6d6414fe9bc5ece86aBob Moore				ACPI_MOVE_32_TO_32(&temp32,
61667a119f990063f5662574f6d6414fe9bc5ece86aBob Moore						   &buffer[(acpi_size) i + j]);
6174be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("%08X ", temp32);
6181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				break;
6191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			case DB_QWORD_DISPLAY:
6211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
62267a119f990063f5662574f6d6414fe9bc5ece86aBob Moore				ACPI_MOVE_32_TO_32(&temp32,
62367a119f990063f5662574f6d6414fe9bc5ece86aBob Moore						   &buffer[(acpi_size) i + j]);
6244be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("%08X", temp32);
6251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
62667a119f990063f5662574f6d6414fe9bc5ece86aBob Moore				ACPI_MOVE_32_TO_32(&temp32,
62767a119f990063f5662574f6d6414fe9bc5ece86aBob Moore						   &buffer[(acpi_size) i + j +
62867a119f990063f5662574f6d6414fe9bc5ece86aBob Moore							   4]);
6294be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("%08X ", temp32);
6301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				break;
6311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			}
63244f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore
63367a119f990063f5662574f6d6414fe9bc5ece86aBob Moore			j += display;
6341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
6351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/*
6370c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore		 * Print the ASCII equivalent characters but watch out for the bad
6380c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore		 * unprintable ones (printable chars are 0x20 through 0x7E)
6391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		 */
6404be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		acpi_os_printf(" ");
6411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		for (j = 0; j < 16; j++) {
6421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			if (i + j >= count) {
6434be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("\n");
6441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				return;
6451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			}
6461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
64767a119f990063f5662574f6d6414fe9bc5ece86aBob Moore			buf_char = buffer[(acpi_size) i + j];
6484be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown			if (ACPI_IS_PRINT(buf_char)) {
6494be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("%c", buf_char);
6504be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown			} else {
6514be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf(".");
6521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			}
6531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
6541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* Done with that line. */
6561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6574be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		acpi_os_printf("\n");
6581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		i += 16;
6591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
6601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return;
6621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
663793c2388cae3fd023b3b5166354931752d42353cBob Moore
664793c2388cae3fd023b3b5166354931752d42353cBob Moore/*******************************************************************************
665793c2388cae3fd023b3b5166354931752d42353cBob Moore *
66697171c6be3088a68b403c7285d34c151f7dbfb18Bob Moore * FUNCTION:    acpi_ut_debug_dump_buffer
667793c2388cae3fd023b3b5166354931752d42353cBob Moore *
668ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore * PARAMETERS:  buffer              - Buffer to dump
669ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              count               - Amount to dump, in bytes
670ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              display             - BYTE, WORD, DWORD, or QWORD display
671ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              component_ID        - Caller's component ID
672793c2388cae3fd023b3b5166354931752d42353cBob Moore *
673793c2388cae3fd023b3b5166354931752d42353cBob Moore * RETURN:      None
674793c2388cae3fd023b3b5166354931752d42353cBob Moore *
675793c2388cae3fd023b3b5166354931752d42353cBob Moore * DESCRIPTION: Generic dump buffer in both hex and ascii.
676793c2388cae3fd023b3b5166354931752d42353cBob Moore *
677793c2388cae3fd023b3b5166354931752d42353cBob Moore ******************************************************************************/
678793c2388cae3fd023b3b5166354931752d42353cBob Moore
67997171c6be3088a68b403c7285d34c151f7dbfb18Bob Moorevoid
68097171c6be3088a68b403c7285d34c151f7dbfb18Bob Mooreacpi_ut_debug_dump_buffer(u8 *buffer, u32 count, u32 display, u32 component_id)
681793c2388cae3fd023b3b5166354931752d42353cBob Moore{
682793c2388cae3fd023b3b5166354931752d42353cBob Moore
683793c2388cae3fd023b3b5166354931752d42353cBob Moore	/* Only dump the buffer if tracing is enabled */
684793c2388cae3fd023b3b5166354931752d42353cBob Moore
685793c2388cae3fd023b3b5166354931752d42353cBob Moore	if (!((ACPI_LV_TABLES & acpi_dbg_level) &&
686793c2388cae3fd023b3b5166354931752d42353cBob Moore	      (component_id & acpi_dbg_layer))) {
687793c2388cae3fd023b3b5166354931752d42353cBob Moore		return;
688793c2388cae3fd023b3b5166354931752d42353cBob Moore	}
689793c2388cae3fd023b3b5166354931752d42353cBob Moore
69097171c6be3088a68b403c7285d34c151f7dbfb18Bob Moore	acpi_ut_dump_buffer(buffer, count, display, 0);
691793c2388cae3fd023b3b5166354931752d42353cBob Moore}
692