xref: /openbmc/linux/drivers/acpi/acpica/utxferror.c (revision cc84e262b71bab53c3b2be2e71209c85b88b4b4d)
1*cc84e262SBob Moore /*******************************************************************************
2*cc84e262SBob Moore  *
3*cc84e262SBob Moore  * Module Name: utxferror - Various error/warning output functions
4*cc84e262SBob Moore  *
5*cc84e262SBob Moore  ******************************************************************************/
6*cc84e262SBob Moore 
7*cc84e262SBob Moore /*
8*cc84e262SBob Moore  * Copyright (C) 2000 - 2010, Intel Corp.
9*cc84e262SBob Moore  * All rights reserved.
10*cc84e262SBob Moore  *
11*cc84e262SBob Moore  * Redistribution and use in source and binary forms, with or without
12*cc84e262SBob Moore  * modification, are permitted provided that the following conditions
13*cc84e262SBob Moore  * are met:
14*cc84e262SBob Moore  * 1. Redistributions of source code must retain the above copyright
15*cc84e262SBob Moore  *    notice, this list of conditions, and the following disclaimer,
16*cc84e262SBob Moore  *    without modification.
17*cc84e262SBob Moore  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18*cc84e262SBob Moore  *    substantially similar to the "NO WARRANTY" disclaimer below
19*cc84e262SBob Moore  *    ("Disclaimer") and any redistribution must be conditioned upon
20*cc84e262SBob Moore  *    including a substantially similar Disclaimer requirement for further
21*cc84e262SBob Moore  *    binary redistribution.
22*cc84e262SBob Moore  * 3. Neither the names of the above-listed copyright holders nor the names
23*cc84e262SBob Moore  *    of any contributors may be used to endorse or promote products derived
24*cc84e262SBob Moore  *    from this software without specific prior written permission.
25*cc84e262SBob Moore  *
26*cc84e262SBob Moore  * Alternatively, this software may be distributed under the terms of the
27*cc84e262SBob Moore  * GNU General Public License ("GPL") version 2 as published by the Free
28*cc84e262SBob Moore  * Software Foundation.
29*cc84e262SBob Moore  *
30*cc84e262SBob Moore  * NO WARRANTY
31*cc84e262SBob Moore  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32*cc84e262SBob Moore  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33*cc84e262SBob Moore  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34*cc84e262SBob Moore  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35*cc84e262SBob Moore  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36*cc84e262SBob Moore  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37*cc84e262SBob Moore  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38*cc84e262SBob Moore  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39*cc84e262SBob Moore  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40*cc84e262SBob Moore  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41*cc84e262SBob Moore  * POSSIBILITY OF SUCH DAMAGES.
42*cc84e262SBob Moore  */
43*cc84e262SBob Moore 
44*cc84e262SBob Moore #include <acpi/acpi.h>
45*cc84e262SBob Moore #include "accommon.h"
46*cc84e262SBob Moore #include "acnamesp.h"
47*cc84e262SBob Moore 
48*cc84e262SBob Moore #define _COMPONENT          ACPI_UTILITIES
49*cc84e262SBob Moore ACPI_MODULE_NAME("utxferror")
50*cc84e262SBob Moore 
51*cc84e262SBob Moore /*
52*cc84e262SBob Moore  * This module is used for the in-kernel ACPICA as well as the ACPICA
53*cc84e262SBob Moore  * tools/applications.
54*cc84e262SBob Moore  *
55*cc84e262SBob Moore  * For the i_aSL compiler case, the output is redirected to stderr so that
56*cc84e262SBob Moore  * any of the various ACPI errors and warnings do not appear in the output
57*cc84e262SBob Moore  * files, for either the compiler or disassembler portions of the tool.
58*cc84e262SBob Moore  */
59*cc84e262SBob Moore #ifdef ACPI_ASL_COMPILER
60*cc84e262SBob Moore #include <stdio.h>
61*cc84e262SBob Moore extern FILE *acpi_gbl_output_file;
62*cc84e262SBob Moore 
63*cc84e262SBob Moore #define ACPI_MSG_REDIRECT_BEGIN \
64*cc84e262SBob Moore 	FILE                            *output_file = acpi_gbl_output_file; \
65*cc84e262SBob Moore 	acpi_os_redirect_output (stderr);
66*cc84e262SBob Moore 
67*cc84e262SBob Moore #define ACPI_MSG_REDIRECT_END \
68*cc84e262SBob Moore 	acpi_os_redirect_output (output_file);
69*cc84e262SBob Moore 
70*cc84e262SBob Moore #else
71*cc84e262SBob Moore /*
72*cc84e262SBob Moore  * non-i_aSL case - no redirection, nothing to do
73*cc84e262SBob Moore  */
74*cc84e262SBob Moore #define ACPI_MSG_REDIRECT_BEGIN
75*cc84e262SBob Moore #define ACPI_MSG_REDIRECT_END
76*cc84e262SBob Moore #endif
77*cc84e262SBob Moore /*
78*cc84e262SBob Moore  * Common message prefixes
79*cc84e262SBob Moore  */
80*cc84e262SBob Moore #define ACPI_MSG_ERROR          "ACPI Error: "
81*cc84e262SBob Moore #define ACPI_MSG_EXCEPTION      "ACPI Exception: "
82*cc84e262SBob Moore #define ACPI_MSG_WARNING        "ACPI Warning: "
83*cc84e262SBob Moore #define ACPI_MSG_INFO           "ACPI: "
84*cc84e262SBob Moore /*
85*cc84e262SBob Moore  * Common message suffix
86*cc84e262SBob Moore  */
87*cc84e262SBob Moore #define ACPI_MSG_SUFFIX \
88*cc84e262SBob Moore 	acpi_os_printf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, module_name, line_number)
89*cc84e262SBob Moore /*******************************************************************************
90*cc84e262SBob Moore  *
91*cc84e262SBob Moore  * FUNCTION:    acpi_error
92*cc84e262SBob Moore  *
93*cc84e262SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
94*cc84e262SBob Moore  *              line_number         - Caller's line number (for error output)
95*cc84e262SBob Moore  *              Format              - Printf format string + additional args
96*cc84e262SBob Moore  *
97*cc84e262SBob Moore  * RETURN:      None
98*cc84e262SBob Moore  *
99*cc84e262SBob Moore  * DESCRIPTION: Print "ACPI Error" message with module/line/version info
100*cc84e262SBob Moore  *
101*cc84e262SBob Moore  ******************************************************************************/
102*cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE
103*cc84e262SBob Moore acpi_error(const char *module_name, u32 line_number, const char *format, ...)
104*cc84e262SBob Moore {
105*cc84e262SBob Moore 	va_list arg_list;
106*cc84e262SBob Moore 
107*cc84e262SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
108*cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_ERROR);
109*cc84e262SBob Moore 
110*cc84e262SBob Moore 	va_start(arg_list, format);
111*cc84e262SBob Moore 	acpi_os_vprintf(format, arg_list);
112*cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
113*cc84e262SBob Moore 	va_end(arg_list);
114*cc84e262SBob Moore 
115*cc84e262SBob Moore 	ACPI_MSG_REDIRECT_END;
116*cc84e262SBob Moore }
117*cc84e262SBob Moore 
118*cc84e262SBob Moore ACPI_EXPORT_SYMBOL(acpi_error)
119*cc84e262SBob Moore 
120*cc84e262SBob Moore /*******************************************************************************
121*cc84e262SBob Moore  *
122*cc84e262SBob Moore  * FUNCTION:    acpi_exception
123*cc84e262SBob Moore  *
124*cc84e262SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
125*cc84e262SBob Moore  *              line_number         - Caller's line number (for error output)
126*cc84e262SBob Moore  *              Status              - Status to be formatted
127*cc84e262SBob Moore  *              Format              - Printf format string + additional args
128*cc84e262SBob Moore  *
129*cc84e262SBob Moore  * RETURN:      None
130*cc84e262SBob Moore  *
131*cc84e262SBob Moore  * DESCRIPTION: Print "ACPI Exception" message with module/line/version info
132*cc84e262SBob Moore  *              and decoded acpi_status.
133*cc84e262SBob Moore  *
134*cc84e262SBob Moore  ******************************************************************************/
135*cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE
136*cc84e262SBob Moore acpi_exception(const char *module_name,
137*cc84e262SBob Moore 	       u32 line_number, acpi_status status, const char *format, ...)
138*cc84e262SBob Moore {
139*cc84e262SBob Moore 	va_list arg_list;
140*cc84e262SBob Moore 
141*cc84e262SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
142*cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_EXCEPTION "%s, ",
143*cc84e262SBob Moore 		       acpi_format_exception(status));
144*cc84e262SBob Moore 
145*cc84e262SBob Moore 	va_start(arg_list, format);
146*cc84e262SBob Moore 	acpi_os_vprintf(format, arg_list);
147*cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
148*cc84e262SBob Moore 	va_end(arg_list);
149*cc84e262SBob Moore 
150*cc84e262SBob Moore 	ACPI_MSG_REDIRECT_END;
151*cc84e262SBob Moore }
152*cc84e262SBob Moore 
153*cc84e262SBob Moore ACPI_EXPORT_SYMBOL(acpi_exception)
154*cc84e262SBob Moore 
155*cc84e262SBob Moore /*******************************************************************************
156*cc84e262SBob Moore  *
157*cc84e262SBob Moore  * FUNCTION:    acpi_warning
158*cc84e262SBob Moore  *
159*cc84e262SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
160*cc84e262SBob Moore  *              line_number         - Caller's line number (for error output)
161*cc84e262SBob Moore  *              Format              - Printf format string + additional args
162*cc84e262SBob Moore  *
163*cc84e262SBob Moore  * RETURN:      None
164*cc84e262SBob Moore  *
165*cc84e262SBob Moore  * DESCRIPTION: Print "ACPI Warning" message with module/line/version info
166*cc84e262SBob Moore  *
167*cc84e262SBob Moore  ******************************************************************************/
168*cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE
169*cc84e262SBob Moore acpi_warning(const char *module_name, u32 line_number, const char *format, ...)
170*cc84e262SBob Moore {
171*cc84e262SBob Moore 	va_list arg_list;
172*cc84e262SBob Moore 
173*cc84e262SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
174*cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_WARNING);
175*cc84e262SBob Moore 
176*cc84e262SBob Moore 	va_start(arg_list, format);
177*cc84e262SBob Moore 	acpi_os_vprintf(format, arg_list);
178*cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
179*cc84e262SBob Moore 	va_end(arg_list);
180*cc84e262SBob Moore 
181*cc84e262SBob Moore 	ACPI_MSG_REDIRECT_END;
182*cc84e262SBob Moore }
183*cc84e262SBob Moore 
184*cc84e262SBob Moore ACPI_EXPORT_SYMBOL(acpi_warning)
185*cc84e262SBob Moore 
186*cc84e262SBob Moore /*******************************************************************************
187*cc84e262SBob Moore  *
188*cc84e262SBob Moore  * FUNCTION:    acpi_info
189*cc84e262SBob Moore  *
190*cc84e262SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
191*cc84e262SBob Moore  *              line_number         - Caller's line number (for error output)
192*cc84e262SBob Moore  *              Format              - Printf format string + additional args
193*cc84e262SBob Moore  *
194*cc84e262SBob Moore  * RETURN:      None
195*cc84e262SBob Moore  *
196*cc84e262SBob Moore  * DESCRIPTION: Print generic "ACPI:" information message. There is no
197*cc84e262SBob Moore  *              module/line/version info in order to keep the message simple.
198*cc84e262SBob Moore  *
199*cc84e262SBob Moore  * TBD: module_name and line_number args are not needed, should be removed.
200*cc84e262SBob Moore  *
201*cc84e262SBob Moore  ******************************************************************************/
202*cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE
203*cc84e262SBob Moore acpi_info(const char *module_name, u32 line_number, const char *format, ...)
204*cc84e262SBob Moore {
205*cc84e262SBob Moore 	va_list arg_list;
206*cc84e262SBob Moore 
207*cc84e262SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
208*cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_INFO);
209*cc84e262SBob Moore 
210*cc84e262SBob Moore 	va_start(arg_list, format);
211*cc84e262SBob Moore 	acpi_os_vprintf(format, arg_list);
212*cc84e262SBob Moore 	acpi_os_printf("\n");
213*cc84e262SBob Moore 	va_end(arg_list);
214*cc84e262SBob Moore 
215*cc84e262SBob Moore 	ACPI_MSG_REDIRECT_END;
216*cc84e262SBob Moore }
217*cc84e262SBob Moore 
218*cc84e262SBob Moore ACPI_EXPORT_SYMBOL(acpi_info)
219*cc84e262SBob Moore 
220*cc84e262SBob Moore /*
221*cc84e262SBob Moore  * The remainder of this module contains internal error functions that may
222*cc84e262SBob Moore  * be configured out.
223*cc84e262SBob Moore  */
224*cc84e262SBob Moore #ifndef ACPI_NO_ERROR_MESSAGES
225*cc84e262SBob Moore /*******************************************************************************
226*cc84e262SBob Moore  *
227*cc84e262SBob Moore  * FUNCTION:    acpi_ut_predefined_warning
228*cc84e262SBob Moore  *
229*cc84e262SBob Moore  * PARAMETERS:  module_name     - Caller's module name (for error output)
230*cc84e262SBob Moore  *              line_number     - Caller's line number (for error output)
231*cc84e262SBob Moore  *              Pathname        - Full pathname to the node
232*cc84e262SBob Moore  *              node_flags      - From Namespace node for the method/object
233*cc84e262SBob Moore  *              Format          - Printf format string + additional args
234*cc84e262SBob Moore  *
235*cc84e262SBob Moore  * RETURN:      None
236*cc84e262SBob Moore  *
237*cc84e262SBob Moore  * DESCRIPTION: Warnings for the predefined validation module. Messages are
238*cc84e262SBob Moore  *              only emitted the first time a problem with a particular
239*cc84e262SBob Moore  *              method/object is detected. This prevents a flood of error
240*cc84e262SBob Moore  *              messages for methods that are repeatedly evaluated.
241*cc84e262SBob Moore  *
242*cc84e262SBob Moore  ******************************************************************************/
243*cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE
244*cc84e262SBob Moore acpi_ut_predefined_warning(const char *module_name,
245*cc84e262SBob Moore 			   u32 line_number,
246*cc84e262SBob Moore 			   char *pathname,
247*cc84e262SBob Moore 			   u8 node_flags, const char *format, ...)
248*cc84e262SBob Moore {
249*cc84e262SBob Moore 	va_list arg_list;
250*cc84e262SBob Moore 
251*cc84e262SBob Moore 	/*
252*cc84e262SBob Moore 	 * Warning messages for this method/object will be disabled after the
253*cc84e262SBob Moore 	 * first time a validation fails or an object is successfully repaired.
254*cc84e262SBob Moore 	 */
255*cc84e262SBob Moore 	if (node_flags & ANOBJ_EVALUATED) {
256*cc84e262SBob Moore 		return;
257*cc84e262SBob Moore 	}
258*cc84e262SBob Moore 
259*cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_WARNING "For %s: ", pathname);
260*cc84e262SBob Moore 
261*cc84e262SBob Moore 	va_start(arg_list, format);
262*cc84e262SBob Moore 	acpi_os_vprintf(format, arg_list);
263*cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
264*cc84e262SBob Moore 	va_end(arg_list);
265*cc84e262SBob Moore }
266*cc84e262SBob Moore 
267*cc84e262SBob Moore /*******************************************************************************
268*cc84e262SBob Moore  *
269*cc84e262SBob Moore  * FUNCTION:    acpi_ut_predefined_info
270*cc84e262SBob Moore  *
271*cc84e262SBob Moore  * PARAMETERS:  module_name     - Caller's module name (for error output)
272*cc84e262SBob Moore  *              line_number     - Caller's line number (for error output)
273*cc84e262SBob Moore  *              Pathname        - Full pathname to the node
274*cc84e262SBob Moore  *              node_flags      - From Namespace node for the method/object
275*cc84e262SBob Moore  *              Format          - Printf format string + additional args
276*cc84e262SBob Moore  *
277*cc84e262SBob Moore  * RETURN:      None
278*cc84e262SBob Moore  *
279*cc84e262SBob Moore  * DESCRIPTION: Info messages for the predefined validation module. Messages
280*cc84e262SBob Moore  *              are only emitted the first time a problem with a particular
281*cc84e262SBob Moore  *              method/object is detected. This prevents a flood of
282*cc84e262SBob Moore  *              messages for methods that are repeatedly evaluated.
283*cc84e262SBob Moore  *
284*cc84e262SBob Moore  ******************************************************************************/
285*cc84e262SBob Moore 
286*cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE
287*cc84e262SBob Moore acpi_ut_predefined_info(const char *module_name,
288*cc84e262SBob Moore 			u32 line_number,
289*cc84e262SBob Moore 			char *pathname, u8 node_flags, const char *format, ...)
290*cc84e262SBob Moore {
291*cc84e262SBob Moore 	va_list arg_list;
292*cc84e262SBob Moore 
293*cc84e262SBob Moore 	/*
294*cc84e262SBob Moore 	 * Warning messages for this method/object will be disabled after the
295*cc84e262SBob Moore 	 * first time a validation fails or an object is successfully repaired.
296*cc84e262SBob Moore 	 */
297*cc84e262SBob Moore 	if (node_flags & ANOBJ_EVALUATED) {
298*cc84e262SBob Moore 		return;
299*cc84e262SBob Moore 	}
300*cc84e262SBob Moore 
301*cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_INFO "For %s: ", pathname);
302*cc84e262SBob Moore 
303*cc84e262SBob Moore 	va_start(arg_list, format);
304*cc84e262SBob Moore 	acpi_os_vprintf(format, arg_list);
305*cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
306*cc84e262SBob Moore 	va_end(arg_list);
307*cc84e262SBob Moore }
308*cc84e262SBob Moore 
309*cc84e262SBob Moore /*******************************************************************************
310*cc84e262SBob Moore  *
311*cc84e262SBob Moore  * FUNCTION:    acpi_ut_namespace_error
312*cc84e262SBob Moore  *
313*cc84e262SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
314*cc84e262SBob Moore  *              line_number         - Caller's line number (for error output)
315*cc84e262SBob Moore  *              internal_name       - Name or path of the namespace node
316*cc84e262SBob Moore  *              lookup_status       - Exception code from NS lookup
317*cc84e262SBob Moore  *
318*cc84e262SBob Moore  * RETURN:      None
319*cc84e262SBob Moore  *
320*cc84e262SBob Moore  * DESCRIPTION: Print error message with the full pathname for the NS node.
321*cc84e262SBob Moore  *
322*cc84e262SBob Moore  ******************************************************************************/
323*cc84e262SBob Moore 
324*cc84e262SBob Moore void
325*cc84e262SBob Moore acpi_ut_namespace_error(const char *module_name,
326*cc84e262SBob Moore 			u32 line_number,
327*cc84e262SBob Moore 			const char *internal_name, acpi_status lookup_status)
328*cc84e262SBob Moore {
329*cc84e262SBob Moore 	acpi_status status;
330*cc84e262SBob Moore 	u32 bad_name;
331*cc84e262SBob Moore 	char *name = NULL;
332*cc84e262SBob Moore 
333*cc84e262SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
334*cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_ERROR);
335*cc84e262SBob Moore 
336*cc84e262SBob Moore 	if (lookup_status == AE_BAD_CHARACTER) {
337*cc84e262SBob Moore 
338*cc84e262SBob Moore 		/* There is a non-ascii character in the name */
339*cc84e262SBob Moore 
340*cc84e262SBob Moore 		ACPI_MOVE_32_TO_32(&bad_name,
341*cc84e262SBob Moore 				   ACPI_CAST_PTR(u32, internal_name));
342*cc84e262SBob Moore 		acpi_os_printf("[0x%4.4X] (NON-ASCII)", bad_name);
343*cc84e262SBob Moore 	} else {
344*cc84e262SBob Moore 		/* Convert path to external format */
345*cc84e262SBob Moore 
346*cc84e262SBob Moore 		status = acpi_ns_externalize_name(ACPI_UINT32_MAX,
347*cc84e262SBob Moore 						  internal_name, NULL, &name);
348*cc84e262SBob Moore 
349*cc84e262SBob Moore 		/* Print target name */
350*cc84e262SBob Moore 
351*cc84e262SBob Moore 		if (ACPI_SUCCESS(status)) {
352*cc84e262SBob Moore 			acpi_os_printf("[%s]", name);
353*cc84e262SBob Moore 		} else {
354*cc84e262SBob Moore 			acpi_os_printf("[COULD NOT EXTERNALIZE NAME]");
355*cc84e262SBob Moore 		}
356*cc84e262SBob Moore 
357*cc84e262SBob Moore 		if (name) {
358*cc84e262SBob Moore 			ACPI_FREE(name);
359*cc84e262SBob Moore 		}
360*cc84e262SBob Moore 	}
361*cc84e262SBob Moore 
362*cc84e262SBob Moore 	acpi_os_printf(" Namespace lookup failure, %s",
363*cc84e262SBob Moore 		       acpi_format_exception(lookup_status));
364*cc84e262SBob Moore 
365*cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
366*cc84e262SBob Moore 	ACPI_MSG_REDIRECT_END;
367*cc84e262SBob Moore }
368*cc84e262SBob Moore 
369*cc84e262SBob Moore /*******************************************************************************
370*cc84e262SBob Moore  *
371*cc84e262SBob Moore  * FUNCTION:    acpi_ut_method_error
372*cc84e262SBob Moore  *
373*cc84e262SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
374*cc84e262SBob Moore  *              line_number         - Caller's line number (for error output)
375*cc84e262SBob Moore  *              Message             - Error message to use on failure
376*cc84e262SBob Moore  *              prefix_node         - Prefix relative to the path
377*cc84e262SBob Moore  *              Path                - Path to the node (optional)
378*cc84e262SBob Moore  *              method_status       - Execution status
379*cc84e262SBob Moore  *
380*cc84e262SBob Moore  * RETURN:      None
381*cc84e262SBob Moore  *
382*cc84e262SBob Moore  * DESCRIPTION: Print error message with the full pathname for the method.
383*cc84e262SBob Moore  *
384*cc84e262SBob Moore  ******************************************************************************/
385*cc84e262SBob Moore 
386*cc84e262SBob Moore void
387*cc84e262SBob Moore acpi_ut_method_error(const char *module_name,
388*cc84e262SBob Moore 		     u32 line_number,
389*cc84e262SBob Moore 		     const char *message,
390*cc84e262SBob Moore 		     struct acpi_namespace_node *prefix_node,
391*cc84e262SBob Moore 		     const char *path, acpi_status method_status)
392*cc84e262SBob Moore {
393*cc84e262SBob Moore 	acpi_status status;
394*cc84e262SBob Moore 	struct acpi_namespace_node *node = prefix_node;
395*cc84e262SBob Moore 
396*cc84e262SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
397*cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_ERROR);
398*cc84e262SBob Moore 
399*cc84e262SBob Moore 	if (path) {
400*cc84e262SBob Moore 		status =
401*cc84e262SBob Moore 		    acpi_ns_get_node(prefix_node, path, ACPI_NS_NO_UPSEARCH,
402*cc84e262SBob Moore 				     &node);
403*cc84e262SBob Moore 		if (ACPI_FAILURE(status)) {
404*cc84e262SBob Moore 			acpi_os_printf("[Could not get node by pathname]");
405*cc84e262SBob Moore 		}
406*cc84e262SBob Moore 	}
407*cc84e262SBob Moore 
408*cc84e262SBob Moore 	acpi_ns_print_node_pathname(node, message);
409*cc84e262SBob Moore 	acpi_os_printf(", %s", acpi_format_exception(method_status));
410*cc84e262SBob Moore 
411*cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
412*cc84e262SBob Moore 	ACPI_MSG_REDIRECT_END;
413*cc84e262SBob Moore }
414*cc84e262SBob Moore 
415*cc84e262SBob Moore #endif				/* ACPI_NO_ERROR_MESSAGES */
416