utdebug.c revision 73a3090a2160fb01317f5a44af6ee5a064a29625
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
1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Stay silent if the debug level or component ID is disabled
1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (!(requested_debug_level & acpi_dbg_level) ||
1734be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	    !(component_id & acpi_dbg_layer)) {
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return;
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Thread tracking and context switch notification
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
1804be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	thread_id = acpi_os_get_thread_id();
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (thread_id != acpi_gbl_prev_thread_id) {
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (ACPI_LV_THREADS & acpi_dbg_level) {
1834be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown			acpi_os_printf
18428eb3fcf8762a3b52f4fef5af29dce50d23c7151Lin Ming			    ("\n**** Context Switch from TID %u to TID %u ****\n\n",
18528eb3fcf8762a3b52f4fef5af29dce50d23c7151Lin Ming			     (u32)acpi_gbl_prev_thread_id, (u32)thread_id);
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		acpi_gbl_prev_thread_id = thread_id;
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	 */
1954be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_os_printf("%8s-%04ld ", module_name, line_number);
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (ACPI_LV_THREADS & acpi_dbg_level) {
19828eb3fcf8762a3b52f4fef5af29dce50d23c7151Lin Ming		acpi_os_printf("[%u] ", (u32)thread_id);
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2014be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_os_printf("[%02ld] %-22.22s: ",
2024be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		       acpi_gbl_nesting_level,
2034be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		       acpi_ut_trim_function_name(function_name));
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2054be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	va_start(args, format);
2064be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_os_vprintf(format, args);
207507f046c4dd17e9c94b5130ba184f8da90504685Bob Moore	va_end(args);
2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
21050df4d8b0f6e1971b930f3158c9ee0e4263e636dBob MooreACPI_EXPORT_SYMBOL(acpi_debug_print)
2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
21244f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
21450df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore * FUNCTION:    acpi_debug_print_raw
2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  requested_debug_level - Requested debug print level
2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              line_number         - Caller's line number
218f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
219f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
220f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
221ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              format              - Printf format field
2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              ...                 - Optional printf arguments
2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
22673a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Print message with no headers. Has same interface as
2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              debug_print so that the same macros can be used.
2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
22944f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
2304be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownvoid ACPI_INTERNAL_VAR_XFACE
23150df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Mooreacpi_debug_print_raw(u32 requested_debug_level,
23250df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		     u32 line_number,
23350df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		     const char *function_name,
23450df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		     const char *module_name,
23550df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		     u32 component_id, const char *format, ...)
2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
2374be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	va_list args;
2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (!(requested_debug_level & acpi_dbg_level) ||
2404be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	    !(component_id & acpi_dbg_layer)) {
2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return;
2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2444be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	va_start(args, format);
2454be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_os_vprintf(format, args);
246507f046c4dd17e9c94b5130ba184f8da90504685Bob Moore	va_end(args);
2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24950df4d8b0f6e1971b930f3158c9ee0e4263e636dBob MooreACPI_EXPORT_SYMBOL(acpi_debug_print_raw)
2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25144f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_trace
2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
256f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
257f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
258f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
26273a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
26544f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
2674be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_trace(u32 line_number,
2684b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore	      const char *function_name,
2694b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore	      const char *module_name, u32 component_id)
2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level++;
2734be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_ut_track_stack_ptr();
2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
27550df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore	acpi_debug_print(ACPI_LV_FUNCTIONS,
27650df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 line_number, function_name, module_name, component_id,
27750df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 "%s\n", acpi_gbl_fn_entry_str);
2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2808313524a0d466f451a62709aaedf988d8257b21cBob MooreACPI_EXPORT_SYMBOL(acpi_ut_trace)
2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28244f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_trace_ptr
2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
287f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
288f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
289f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
290ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              pointer             - Pointer to display
2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
29473a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
29744f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
2994be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_trace_ptr(u32 line_number,
3004be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		  const char *function_name,
3014b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		  const char *module_name, u32 component_id, void *pointer)
3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
30368aafc35161dcc9d365a32c2f9f077aedc61754dBob Moore
3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level++;
3054be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_ut_track_stack_ptr();
3061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
30750df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore	acpi_debug_print(ACPI_LV_FUNCTIONS,
30850df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 line_number, function_name, module_name, component_id,
30950df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 "%s %p\n", acpi_gbl_fn_entry_str, pointer);
3101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31244f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_trace_str
3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
317f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
318f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
319f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
320ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              string              - Additional string to display
3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
32473a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
32744f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
3304be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_trace_str(u32 line_number,
3314be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		  const char *function_name,
3324b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		  const char *module_name, u32 component_id, char *string)
3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level++;
3364be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_ut_track_stack_ptr();
3371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
33850df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore	acpi_debug_print(ACPI_LV_FUNCTIONS,
33950df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 line_number, function_name, module_name, component_id,
34050df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 "%s %s\n", acpi_gbl_fn_entry_str, string);
3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
34344f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_trace_u32
3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
348f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
349f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
350f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
351ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              integer             - Integer to display
3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
35573a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
3561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
3571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
35844f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
3614be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_trace_u32(u32 line_number,
3624be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		  const char *function_name,
3634b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		  const char *module_name, u32 component_id, u32 integer)
3641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level++;
3674be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	acpi_ut_track_stack_ptr();
3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
36950df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore	acpi_debug_print(ACPI_LV_FUNCTIONS,
37050df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 line_number, function_name, module_name, component_id,
37150df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 "%s %08X\n", acpi_gbl_fn_entry_str, integer);
3721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
3731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37444f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
3751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_exit
3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
379f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
380f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
381f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
3821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
3841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
38573a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
3861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level
3871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
38844f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
3891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
3914be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_exit(u32 line_number,
3924b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore	     const char *function_name,
3934b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore	     const char *module_name, u32 component_id)
3941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
3951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
39650df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore	acpi_debug_print(ACPI_LV_FUNCTIONS,
39750df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 line_number, function_name, module_name, component_id,
39850df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 "%s\n", acpi_gbl_fn_exit_str);
3991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level--;
4011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
4021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4038313524a0d466f451a62709aaedf988d8257b21cBob MooreACPI_EXPORT_SYMBOL(acpi_ut_exit)
4041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
40544f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
4061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_status_exit
4081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
410f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
411f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
412f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
413ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              status              - Exit status code
4141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
4161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41773a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
4181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level. Prints exit status also.
4191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
42044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
4211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
4224be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_status_exit(u32 line_number,
4234be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		    const char *function_name,
4244b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		    const char *module_name,
4254b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		    u32 component_id, acpi_status status)
4261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
4271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4284be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	if (ACPI_SUCCESS(status)) {
42950df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
43050df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore				 line_number, function_name, module_name,
43150df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore				 component_id, "%s %s\n", acpi_gbl_fn_exit_str,
43250df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore				 acpi_format_exception(status));
4334be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	} else {
43450df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore		acpi_debug_print(ACPI_LV_FUNCTIONS,
43550df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore				 line_number, function_name, module_name,
43650df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore				 component_id, "%s ****Exception****: %s\n",
43750df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore				 acpi_gbl_fn_exit_str,
43850df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore				 acpi_format_exception(status));
4391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
4401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level--;
4421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
4431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4448313524a0d466f451a62709aaedf988d8257b21cBob MooreACPI_EXPORT_SYMBOL(acpi_ut_status_exit)
4451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
44644f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
4471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_value_exit
4491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
451f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
452f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
453f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
454ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              value               - Value to be printed with exit msg
4551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
4571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
45873a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
4591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level. Prints exit value also.
4601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
46144f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
4621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
4634be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_value_exit(u32 line_number,
4644be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		   const char *function_name,
4655df7e6cb42da36c7d878239bebc81907b15f3943Bob Moore		   const char *module_name, u32 component_id, u64 value)
4661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
4671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
46850df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore	acpi_debug_print(ACPI_LV_FUNCTIONS,
46950df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 line_number, function_name, module_name, component_id,
47050df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 "%s %8.8X%8.8X\n", acpi_gbl_fn_exit_str,
47150df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 ACPI_FORMAT_UINT64(value));
4721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level--;
4741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
4751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4768313524a0d466f451a62709aaedf988d8257b21cBob MooreACPI_EXPORT_SYMBOL(acpi_ut_value_exit)
4771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
47844f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
4791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_ptr_exit
4811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  line_number         - Caller's line number
483f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              function_name       - Caller's procedure name
484f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              module_name         - Caller's module name
485f9f4601f331aa1226d7a798a01950efbb388f07fRobert Moore *              component_id        - Caller's component ID
486ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              ptr                 - Pointer to display
4871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
4891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
49073a3090a2160fb01317f5a44af6ee5a064a29625Bob Moore * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
4911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              set in debug_level. Prints exit value also.
4921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
49344f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
4941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
4954be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brownacpi_ut_ptr_exit(u32 line_number,
4964be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		 const char *function_name,
4974b8ed631679070c183c8ae7519d2bdb9df124ae4Bob Moore		 const char *module_name, u32 component_id, u8 *ptr)
4981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
4991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
50050df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore	acpi_debug_print(ACPI_LV_FUNCTIONS,
50150df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 line_number, function_name, module_name, component_id,
50250df4d8b0f6e1971b930f3158c9ee0e4263e636dBob Moore			 "%s %p\n", acpi_gbl_fn_exit_str, ptr);
5031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_gbl_nesting_level--;
5051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
5061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
5081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
50944f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore/*******************************************************************************
5101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
5111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_ut_dump_buffer
5121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
513ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore * PARAMETERS:  buffer              - Buffer to dump
514ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              count               - Amount to dump, in bytes
515ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              display             - BYTE, WORD, DWORD, or QWORD display
516ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              component_ID        - Caller's component ID
5171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
5181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      None
5191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
5201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DESCRIPTION: Generic dump buffer in both hex and ascii.
5211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
52244f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore ******************************************************************************/
5231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5246d33b6be17dd6a0934396704f969ceb7f3206347Lv Zhengvoid acpi_ut_dump_buffer2(u8 *buffer, u32 count, u32 display)
5251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
52667a119f990063f5662574f6d6414fe9bc5ece86aBob Moore	u32 i = 0;
52767a119f990063f5662574f6d6414fe9bc5ece86aBob Moore	u32 j;
5284be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	u32 temp32;
5294be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown	u8 buf_char;
5301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5315eb691805f7ec5960fe9d5d7fc57a7fc3097bbd0Bob Moore	if (!buffer) {
5325eb691805f7ec5960fe9d5d7fc57a7fc3097bbd0Bob Moore		acpi_os_printf("Null Buffer Pointer in DumpBuffer!\n");
5335eb691805f7ec5960fe9d5d7fc57a7fc3097bbd0Bob Moore		return;
5345eb691805f7ec5960fe9d5d7fc57a7fc3097bbd0Bob Moore	}
5355eb691805f7ec5960fe9d5d7fc57a7fc3097bbd0Bob Moore
5361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if ((count < 4) || (count & 0x01)) {
5371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		display = DB_BYTE_DISPLAY;
5381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
5391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
54044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore	/* Nasty little dump buffer routine! */
5411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	while (i < count) {
54352fc0b026e99b5d5d585095148d997d5634bbc25Bob Moore
5441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* Print current offset */
5451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
54667a119f990063f5662574f6d6414fe9bc5ece86aBob Moore		acpi_os_printf("%6.4X: ", i);
5471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* Print 16 hex chars */
5491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		for (j = 0; j < 16;) {
5511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			if (i + j >= count) {
55252fc0b026e99b5d5d585095148d997d5634bbc25Bob Moore
55344f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore				/* Dump fill spaces */
5541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5554be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("%*s", ((display * 2) + 1), " ");
55667a119f990063f5662574f6d6414fe9bc5ece86aBob Moore				j += display;
55744f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore				continue;
55844f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore			}
5591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			switch (display) {
561793c2388cae3fd023b3b5166354931752d42353cBob Moore			case DB_BYTE_DISPLAY:
5624be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown			default:	/* Default is BYTE display */
5631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
56467a119f990063f5662574f6d6414fe9bc5ece86aBob Moore				acpi_os_printf("%02X ",
56567a119f990063f5662574f6d6414fe9bc5ece86aBob Moore					       buffer[(acpi_size) i + j]);
5661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				break;
5671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			case DB_WORD_DISPLAY:
5691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
57067a119f990063f5662574f6d6414fe9bc5ece86aBob Moore				ACPI_MOVE_16_TO_32(&temp32,
57167a119f990063f5662574f6d6414fe9bc5ece86aBob Moore						   &buffer[(acpi_size) i + j]);
5724be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("%04X ", temp32);
5731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				break;
5741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			case DB_DWORD_DISPLAY:
5761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
57767a119f990063f5662574f6d6414fe9bc5ece86aBob Moore				ACPI_MOVE_32_TO_32(&temp32,
57867a119f990063f5662574f6d6414fe9bc5ece86aBob Moore						   &buffer[(acpi_size) i + j]);
5794be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("%08X ", temp32);
5801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				break;
5811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			case DB_QWORD_DISPLAY:
5831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
58467a119f990063f5662574f6d6414fe9bc5ece86aBob Moore				ACPI_MOVE_32_TO_32(&temp32,
58567a119f990063f5662574f6d6414fe9bc5ece86aBob Moore						   &buffer[(acpi_size) i + j]);
5864be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("%08X", temp32);
5871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
58867a119f990063f5662574f6d6414fe9bc5ece86aBob Moore				ACPI_MOVE_32_TO_32(&temp32,
58967a119f990063f5662574f6d6414fe9bc5ece86aBob Moore						   &buffer[(acpi_size) i + j +
59067a119f990063f5662574f6d6414fe9bc5ece86aBob Moore							   4]);
5914be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("%08X ", temp32);
5921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				break;
5931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			}
59444f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore
59567a119f990063f5662574f6d6414fe9bc5ece86aBob Moore			j += display;
5961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
5971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/*
5990c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore		 * Print the ASCII equivalent characters but watch out for the bad
6000c9938cc75057c0fca1af55a55dcfc2842436695Robert Moore		 * unprintable ones (printable chars are 0x20 through 0x7E)
6011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		 */
6024be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		acpi_os_printf(" ");
6031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		for (j = 0; j < 16; j++) {
6041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			if (i + j >= count) {
6054be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("\n");
6061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				return;
6071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			}
6081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
60967a119f990063f5662574f6d6414fe9bc5ece86aBob Moore			buf_char = buffer[(acpi_size) i + j];
6104be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown			if (ACPI_IS_PRINT(buf_char)) {
6114be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf("%c", buf_char);
6124be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown			} else {
6134be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown				acpi_os_printf(".");
6141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			}
6151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
6161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* Done with that line. */
6181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6194be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown		acpi_os_printf("\n");
6201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		i += 16;
6211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
6221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return;
6241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
625793c2388cae3fd023b3b5166354931752d42353cBob Moore
626793c2388cae3fd023b3b5166354931752d42353cBob Moore/*******************************************************************************
627793c2388cae3fd023b3b5166354931752d42353cBob Moore *
628793c2388cae3fd023b3b5166354931752d42353cBob Moore * FUNCTION:    acpi_ut_dump_buffer
629793c2388cae3fd023b3b5166354931752d42353cBob Moore *
630ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore * PARAMETERS:  buffer              - Buffer to dump
631ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              count               - Amount to dump, in bytes
632ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              display             - BYTE, WORD, DWORD, or QWORD display
633ba494beeaa69bc0fb01eb89464ad5d57d26e3901Bob Moore *              component_ID        - Caller's component ID
634793c2388cae3fd023b3b5166354931752d42353cBob Moore *
635793c2388cae3fd023b3b5166354931752d42353cBob Moore * RETURN:      None
636793c2388cae3fd023b3b5166354931752d42353cBob Moore *
637793c2388cae3fd023b3b5166354931752d42353cBob Moore * DESCRIPTION: Generic dump buffer in both hex and ascii.
638793c2388cae3fd023b3b5166354931752d42353cBob Moore *
639793c2388cae3fd023b3b5166354931752d42353cBob Moore ******************************************************************************/
640793c2388cae3fd023b3b5166354931752d42353cBob Moore
6416d33b6be17dd6a0934396704f969ceb7f3206347Lv Zhengvoid acpi_ut_dump_buffer(u8 *buffer, u32 count, u32 display, u32 component_id)
642793c2388cae3fd023b3b5166354931752d42353cBob Moore{
643793c2388cae3fd023b3b5166354931752d42353cBob Moore
644793c2388cae3fd023b3b5166354931752d42353cBob Moore	/* Only dump the buffer if tracing is enabled */
645793c2388cae3fd023b3b5166354931752d42353cBob Moore
646793c2388cae3fd023b3b5166354931752d42353cBob Moore	if (!((ACPI_LV_TABLES & acpi_dbg_level) &&
647793c2388cae3fd023b3b5166354931752d42353cBob Moore	      (component_id & acpi_dbg_layer))) {
648793c2388cae3fd023b3b5166354931752d42353cBob Moore		return;
649793c2388cae3fd023b3b5166354931752d42353cBob Moore	}
650793c2388cae3fd023b3b5166354931752d42353cBob Moore
651793c2388cae3fd023b3b5166354931752d42353cBob Moore	acpi_ut_dump_buffer2(buffer, count, display);
652793c2388cae3fd023b3b5166354931752d42353cBob Moore}
653