xref: /openbmc/linux/drivers/acpi/acpica/utxferror.c (revision ba494beeaa69bc0fb01eb89464ad5d57d26e3901)
1cc84e262SBob Moore /*******************************************************************************
2cc84e262SBob Moore  *
3cc84e262SBob Moore  * Module Name: utxferror - Various error/warning output functions
4cc84e262SBob Moore  *
5cc84e262SBob Moore  ******************************************************************************/
6cc84e262SBob Moore 
7cc84e262SBob Moore /*
877848130SBob Moore  * Copyright (C) 2000 - 2012, Intel Corp.
9cc84e262SBob Moore  * All rights reserved.
10cc84e262SBob Moore  *
11cc84e262SBob Moore  * Redistribution and use in source and binary forms, with or without
12cc84e262SBob Moore  * modification, are permitted provided that the following conditions
13cc84e262SBob Moore  * are met:
14cc84e262SBob Moore  * 1. Redistributions of source code must retain the above copyright
15cc84e262SBob Moore  *    notice, this list of conditions, and the following disclaimer,
16cc84e262SBob Moore  *    without modification.
17cc84e262SBob Moore  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18cc84e262SBob Moore  *    substantially similar to the "NO WARRANTY" disclaimer below
19cc84e262SBob Moore  *    ("Disclaimer") and any redistribution must be conditioned upon
20cc84e262SBob Moore  *    including a substantially similar Disclaimer requirement for further
21cc84e262SBob Moore  *    binary redistribution.
22cc84e262SBob Moore  * 3. Neither the names of the above-listed copyright holders nor the names
23cc84e262SBob Moore  *    of any contributors may be used to endorse or promote products derived
24cc84e262SBob Moore  *    from this software without specific prior written permission.
25cc84e262SBob Moore  *
26cc84e262SBob Moore  * Alternatively, this software may be distributed under the terms of the
27cc84e262SBob Moore  * GNU General Public License ("GPL") version 2 as published by the Free
28cc84e262SBob Moore  * Software Foundation.
29cc84e262SBob Moore  *
30cc84e262SBob Moore  * NO WARRANTY
31cc84e262SBob Moore  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32cc84e262SBob Moore  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33cc84e262SBob Moore  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34cc84e262SBob Moore  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35cc84e262SBob Moore  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36cc84e262SBob Moore  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37cc84e262SBob Moore  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38cc84e262SBob Moore  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39cc84e262SBob Moore  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40cc84e262SBob Moore  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41cc84e262SBob Moore  * POSSIBILITY OF SUCH DAMAGES.
42cc84e262SBob Moore  */
43cc84e262SBob Moore 
44214f2c90SPaul Gortmaker #include <linux/export.h>
45cc84e262SBob Moore #include <acpi/acpi.h>
46cc84e262SBob Moore #include "accommon.h"
47cc84e262SBob Moore #include "acnamesp.h"
48cc84e262SBob Moore 
49cc84e262SBob Moore #define _COMPONENT          ACPI_UTILITIES
50cc84e262SBob Moore ACPI_MODULE_NAME("utxferror")
51cc84e262SBob Moore 
52cc84e262SBob Moore /*
53cc84e262SBob Moore  * This module is used for the in-kernel ACPICA as well as the ACPICA
54cc84e262SBob Moore  * tools/applications.
55cc84e262SBob Moore  *
56*ba494beeSBob Moore  * For the iASL compiler case, the output is redirected to stderr so that
57cc84e262SBob Moore  * any of the various ACPI errors and warnings do not appear in the output
58cc84e262SBob Moore  * files, for either the compiler or disassembler portions of the tool.
59cc84e262SBob Moore  */
60cc84e262SBob Moore #ifdef ACPI_ASL_COMPILER
61cc84e262SBob Moore #include <stdio.h>
62cc84e262SBob Moore extern FILE *acpi_gbl_output_file;
63cc84e262SBob Moore 
64cc84e262SBob Moore #define ACPI_MSG_REDIRECT_BEGIN \
65cc84e262SBob Moore 	FILE                            *output_file = acpi_gbl_output_file; \
66cc84e262SBob Moore 	acpi_os_redirect_output (stderr);
67cc84e262SBob Moore 
68cc84e262SBob Moore #define ACPI_MSG_REDIRECT_END \
69cc84e262SBob Moore 	acpi_os_redirect_output (output_file);
70cc84e262SBob Moore 
71cc84e262SBob Moore #else
72cc84e262SBob Moore /*
73*ba494beeSBob Moore  * non-iASL case - no redirection, nothing to do
74cc84e262SBob Moore  */
75cc84e262SBob Moore #define ACPI_MSG_REDIRECT_BEGIN
76cc84e262SBob Moore #define ACPI_MSG_REDIRECT_END
77cc84e262SBob Moore #endif
78cc84e262SBob Moore /*
79cc84e262SBob Moore  * Common message prefixes
80cc84e262SBob Moore  */
81cc84e262SBob Moore #define ACPI_MSG_ERROR          "ACPI Error: "
82cc84e262SBob Moore #define ACPI_MSG_EXCEPTION      "ACPI Exception: "
83cc84e262SBob Moore #define ACPI_MSG_WARNING        "ACPI Warning: "
84cc84e262SBob Moore #define ACPI_MSG_INFO           "ACPI: "
8562cdd141SBob Moore #define ACPI_MSG_BIOS_ERROR     "ACPI BIOS Bug: Error: "
8662cdd141SBob Moore #define ACPI_MSG_BIOS_WARNING   "ACPI BIOS Bug: Warning: "
87cc84e262SBob Moore /*
88cc84e262SBob Moore  * Common message suffix
89cc84e262SBob Moore  */
90cc84e262SBob Moore #define ACPI_MSG_SUFFIX \
91cc84e262SBob Moore 	acpi_os_printf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, module_name, line_number)
92cc84e262SBob Moore /*******************************************************************************
93cc84e262SBob Moore  *
94cc84e262SBob Moore  * FUNCTION:    acpi_error
95cc84e262SBob Moore  *
96cc84e262SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
97cc84e262SBob Moore  *              line_number         - Caller's line number (for error output)
98*ba494beeSBob Moore  *              format              - Printf format string + additional args
99cc84e262SBob Moore  *
100cc84e262SBob Moore  * RETURN:      None
101cc84e262SBob Moore  *
102cc84e262SBob Moore  * DESCRIPTION: Print "ACPI Error" message with module/line/version info
103cc84e262SBob Moore  *
104cc84e262SBob Moore  ******************************************************************************/
105cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE
106cc84e262SBob Moore acpi_error(const char *module_name, u32 line_number, const char *format, ...)
107cc84e262SBob Moore {
108cc84e262SBob Moore 	va_list arg_list;
109cc84e262SBob Moore 
110cc84e262SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
111cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_ERROR);
112cc84e262SBob Moore 
113cc84e262SBob Moore 	va_start(arg_list, format);
114cc84e262SBob Moore 	acpi_os_vprintf(format, arg_list);
115cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
116cc84e262SBob Moore 	va_end(arg_list);
117cc84e262SBob Moore 
118cc84e262SBob Moore 	ACPI_MSG_REDIRECT_END;
119cc84e262SBob Moore }
120cc84e262SBob Moore 
121cc84e262SBob Moore ACPI_EXPORT_SYMBOL(acpi_error)
122cc84e262SBob Moore 
123cc84e262SBob Moore /*******************************************************************************
124cc84e262SBob Moore  *
125cc84e262SBob Moore  * FUNCTION:    acpi_exception
126cc84e262SBob Moore  *
127cc84e262SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
128cc84e262SBob Moore  *              line_number         - Caller's line number (for error output)
129*ba494beeSBob Moore  *              status              - Status to be formatted
130*ba494beeSBob Moore  *              format              - Printf format string + additional args
131cc84e262SBob Moore  *
132cc84e262SBob Moore  * RETURN:      None
133cc84e262SBob Moore  *
134cc84e262SBob Moore  * DESCRIPTION: Print "ACPI Exception" message with module/line/version info
135cc84e262SBob Moore  *              and decoded acpi_status.
136cc84e262SBob Moore  *
137cc84e262SBob Moore  ******************************************************************************/
138cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE
139cc84e262SBob Moore acpi_exception(const char *module_name,
140cc84e262SBob Moore 	       u32 line_number, acpi_status status, const char *format, ...)
141cc84e262SBob Moore {
142cc84e262SBob Moore 	va_list arg_list;
143cc84e262SBob Moore 
144cc84e262SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
145cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_EXCEPTION "%s, ",
146cc84e262SBob Moore 		       acpi_format_exception(status));
147cc84e262SBob Moore 
148cc84e262SBob Moore 	va_start(arg_list, format);
149cc84e262SBob Moore 	acpi_os_vprintf(format, arg_list);
150cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
151cc84e262SBob Moore 	va_end(arg_list);
152cc84e262SBob Moore 
153cc84e262SBob Moore 	ACPI_MSG_REDIRECT_END;
154cc84e262SBob Moore }
155cc84e262SBob Moore 
156cc84e262SBob Moore ACPI_EXPORT_SYMBOL(acpi_exception)
157cc84e262SBob Moore 
158cc84e262SBob Moore /*******************************************************************************
159cc84e262SBob Moore  *
160cc84e262SBob Moore  * FUNCTION:    acpi_warning
161cc84e262SBob Moore  *
162cc84e262SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
163cc84e262SBob Moore  *              line_number         - Caller's line number (for error output)
164*ba494beeSBob Moore  *              format              - Printf format string + additional args
165cc84e262SBob Moore  *
166cc84e262SBob Moore  * RETURN:      None
167cc84e262SBob Moore  *
168cc84e262SBob Moore  * DESCRIPTION: Print "ACPI Warning" message with module/line/version info
169cc84e262SBob Moore  *
170cc84e262SBob Moore  ******************************************************************************/
171cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE
172cc84e262SBob Moore acpi_warning(const char *module_name, u32 line_number, const char *format, ...)
173cc84e262SBob Moore {
174cc84e262SBob Moore 	va_list arg_list;
175cc84e262SBob Moore 
176cc84e262SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
177cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_WARNING);
178cc84e262SBob Moore 
179cc84e262SBob Moore 	va_start(arg_list, format);
180cc84e262SBob Moore 	acpi_os_vprintf(format, arg_list);
181cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
182cc84e262SBob Moore 	va_end(arg_list);
183cc84e262SBob Moore 
184cc84e262SBob Moore 	ACPI_MSG_REDIRECT_END;
185cc84e262SBob Moore }
186cc84e262SBob Moore 
187cc84e262SBob Moore ACPI_EXPORT_SYMBOL(acpi_warning)
188cc84e262SBob Moore 
189cc84e262SBob Moore /*******************************************************************************
190cc84e262SBob Moore  *
191cc84e262SBob Moore  * FUNCTION:    acpi_info
192cc84e262SBob Moore  *
193cc84e262SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
194cc84e262SBob Moore  *              line_number         - Caller's line number (for error output)
195*ba494beeSBob Moore  *              format              - Printf format string + additional args
196cc84e262SBob Moore  *
197cc84e262SBob Moore  * RETURN:      None
198cc84e262SBob Moore  *
199cc84e262SBob Moore  * DESCRIPTION: Print generic "ACPI:" information message. There is no
200cc84e262SBob Moore  *              module/line/version info in order to keep the message simple.
201cc84e262SBob Moore  *
202cc84e262SBob Moore  * TBD: module_name and line_number args are not needed, should be removed.
203cc84e262SBob Moore  *
204cc84e262SBob Moore  ******************************************************************************/
205cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE
206cc84e262SBob Moore acpi_info(const char *module_name, u32 line_number, const char *format, ...)
207cc84e262SBob Moore {
208cc84e262SBob Moore 	va_list arg_list;
209cc84e262SBob Moore 
210cc84e262SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
211cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_INFO);
212cc84e262SBob Moore 
213cc84e262SBob Moore 	va_start(arg_list, format);
214cc84e262SBob Moore 	acpi_os_vprintf(format, arg_list);
215cc84e262SBob Moore 	acpi_os_printf("\n");
216cc84e262SBob Moore 	va_end(arg_list);
217cc84e262SBob Moore 
218cc84e262SBob Moore 	ACPI_MSG_REDIRECT_END;
219cc84e262SBob Moore }
220cc84e262SBob Moore 
221cc84e262SBob Moore ACPI_EXPORT_SYMBOL(acpi_info)
222cc84e262SBob Moore 
22362cdd141SBob Moore /*******************************************************************************
22462cdd141SBob Moore  *
22562cdd141SBob Moore  * FUNCTION:    acpi_bios_error
22662cdd141SBob Moore  *
22762cdd141SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
22862cdd141SBob Moore  *              line_number         - Caller's line number (for error output)
22962cdd141SBob Moore  *              format              - Printf format string + additional args
23062cdd141SBob Moore  *
23162cdd141SBob Moore  * RETURN:      None
23262cdd141SBob Moore  *
23362cdd141SBob Moore  * DESCRIPTION: Print "ACPI Firmware Error" message with module/line/version
23462cdd141SBob Moore  *              info
23562cdd141SBob Moore  *
23662cdd141SBob Moore  ******************************************************************************/
23762cdd141SBob Moore void ACPI_INTERNAL_VAR_XFACE
23862cdd141SBob Moore acpi_bios_error(const char *module_name,
23962cdd141SBob Moore 		u32 line_number, const char *format, ...)
24062cdd141SBob Moore {
24162cdd141SBob Moore 	va_list arg_list;
24262cdd141SBob Moore 
24362cdd141SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
24462cdd141SBob Moore 	acpi_os_printf(ACPI_MSG_BIOS_ERROR);
24562cdd141SBob Moore 
24662cdd141SBob Moore 	va_start(arg_list, format);
24762cdd141SBob Moore 	acpi_os_vprintf(format, arg_list);
24862cdd141SBob Moore 	ACPI_MSG_SUFFIX;
24962cdd141SBob Moore 	va_end(arg_list);
25062cdd141SBob Moore 
25162cdd141SBob Moore 	ACPI_MSG_REDIRECT_END;
25262cdd141SBob Moore }
25362cdd141SBob Moore 
25462cdd141SBob Moore ACPI_EXPORT_SYMBOL(acpi_bios_error)
25562cdd141SBob Moore 
25662cdd141SBob Moore /*******************************************************************************
25762cdd141SBob Moore  *
25862cdd141SBob Moore  * FUNCTION:    acpi_bios_warning
25962cdd141SBob Moore  *
26062cdd141SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
26162cdd141SBob Moore  *              line_number         - Caller's line number (for error output)
26262cdd141SBob Moore  *              format              - Printf format string + additional args
26362cdd141SBob Moore  *
26462cdd141SBob Moore  * RETURN:      None
26562cdd141SBob Moore  *
26662cdd141SBob Moore  * DESCRIPTION: Print "ACPI Firmware Warning" message with module/line/version
26762cdd141SBob Moore  *              info
26862cdd141SBob Moore  *
26962cdd141SBob Moore  ******************************************************************************/
27062cdd141SBob Moore void ACPI_INTERNAL_VAR_XFACE
27162cdd141SBob Moore acpi_bios_warning(const char *module_name,
27262cdd141SBob Moore 		  u32 line_number, const char *format, ...)
27362cdd141SBob Moore {
27462cdd141SBob Moore 	va_list arg_list;
27562cdd141SBob Moore 
27662cdd141SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
27762cdd141SBob Moore 	acpi_os_printf(ACPI_MSG_BIOS_WARNING);
27862cdd141SBob Moore 
27962cdd141SBob Moore 	va_start(arg_list, format);
28062cdd141SBob Moore 	acpi_os_vprintf(format, arg_list);
28162cdd141SBob Moore 	ACPI_MSG_SUFFIX;
28262cdd141SBob Moore 	va_end(arg_list);
28362cdd141SBob Moore 
28462cdd141SBob Moore 	ACPI_MSG_REDIRECT_END;
28562cdd141SBob Moore }
28662cdd141SBob Moore 
28762cdd141SBob Moore ACPI_EXPORT_SYMBOL(acpi_bios_warning)
28862cdd141SBob Moore 
289cc84e262SBob Moore /*
290cc84e262SBob Moore  * The remainder of this module contains internal error functions that may
291cc84e262SBob Moore  * be configured out.
292cc84e262SBob Moore  */
29375434a2aSBob Moore #if !defined (ACPI_NO_ERROR_MESSAGES) && !defined (ACPI_BIN_APP)
294cc84e262SBob Moore /*******************************************************************************
295cc84e262SBob Moore  *
296cc84e262SBob Moore  * FUNCTION:    acpi_ut_predefined_warning
297cc84e262SBob Moore  *
298cc84e262SBob Moore  * PARAMETERS:  module_name     - Caller's module name (for error output)
299cc84e262SBob Moore  *              line_number     - Caller's line number (for error output)
300cc84e262SBob Moore  *              Pathname        - Full pathname to the node
301cc84e262SBob Moore  *              node_flags      - From Namespace node for the method/object
302cc84e262SBob Moore  *              Format          - Printf format string + additional args
303cc84e262SBob Moore  *
304cc84e262SBob Moore  * RETURN:      None
305cc84e262SBob Moore  *
306cc84e262SBob Moore  * DESCRIPTION: Warnings for the predefined validation module. Messages are
307cc84e262SBob Moore  *              only emitted the first time a problem with a particular
308cc84e262SBob Moore  *              method/object is detected. This prevents a flood of error
309cc84e262SBob Moore  *              messages for methods that are repeatedly evaluated.
310cc84e262SBob Moore  *
311cc84e262SBob Moore  ******************************************************************************/
312cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE
313cc84e262SBob Moore acpi_ut_predefined_warning(const char *module_name,
314cc84e262SBob Moore 			   u32 line_number,
315cc84e262SBob Moore 			   char *pathname,
316cc84e262SBob Moore 			   u8 node_flags, const char *format, ...)
317cc84e262SBob Moore {
318cc84e262SBob Moore 	va_list arg_list;
319cc84e262SBob Moore 
320cc84e262SBob Moore 	/*
321cc84e262SBob Moore 	 * Warning messages for this method/object will be disabled after the
322cc84e262SBob Moore 	 * first time a validation fails or an object is successfully repaired.
323cc84e262SBob Moore 	 */
324cc84e262SBob Moore 	if (node_flags & ANOBJ_EVALUATED) {
325cc84e262SBob Moore 		return;
326cc84e262SBob Moore 	}
327cc84e262SBob Moore 
328cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_WARNING "For %s: ", pathname);
329cc84e262SBob Moore 
330cc84e262SBob Moore 	va_start(arg_list, format);
331cc84e262SBob Moore 	acpi_os_vprintf(format, arg_list);
332cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
333cc84e262SBob Moore 	va_end(arg_list);
334cc84e262SBob Moore }
335cc84e262SBob Moore 
336cc84e262SBob Moore /*******************************************************************************
337cc84e262SBob Moore  *
338cc84e262SBob Moore  * FUNCTION:    acpi_ut_predefined_info
339cc84e262SBob Moore  *
340cc84e262SBob Moore  * PARAMETERS:  module_name     - Caller's module name (for error output)
341cc84e262SBob Moore  *              line_number     - Caller's line number (for error output)
342*ba494beeSBob Moore  *              pathname        - Full pathname to the node
343cc84e262SBob Moore  *              node_flags      - From Namespace node for the method/object
344*ba494beeSBob Moore  *              format          - Printf format string + additional args
345cc84e262SBob Moore  *
346cc84e262SBob Moore  * RETURN:      None
347cc84e262SBob Moore  *
348cc84e262SBob Moore  * DESCRIPTION: Info messages for the predefined validation module. Messages
349cc84e262SBob Moore  *              are only emitted the first time a problem with a particular
350cc84e262SBob Moore  *              method/object is detected. This prevents a flood of
351cc84e262SBob Moore  *              messages for methods that are repeatedly evaluated.
352cc84e262SBob Moore  *
353cc84e262SBob Moore  ******************************************************************************/
354cc84e262SBob Moore 
355cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE
356cc84e262SBob Moore acpi_ut_predefined_info(const char *module_name,
357cc84e262SBob Moore 			u32 line_number,
358cc84e262SBob Moore 			char *pathname, u8 node_flags, const char *format, ...)
359cc84e262SBob Moore {
360cc84e262SBob Moore 	va_list arg_list;
361cc84e262SBob Moore 
362cc84e262SBob Moore 	/*
363cc84e262SBob Moore 	 * Warning messages for this method/object will be disabled after the
364cc84e262SBob Moore 	 * first time a validation fails or an object is successfully repaired.
365cc84e262SBob Moore 	 */
366cc84e262SBob Moore 	if (node_flags & ANOBJ_EVALUATED) {
367cc84e262SBob Moore 		return;
368cc84e262SBob Moore 	}
369cc84e262SBob Moore 
370cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_INFO "For %s: ", pathname);
371cc84e262SBob Moore 
372cc84e262SBob Moore 	va_start(arg_list, format);
373cc84e262SBob Moore 	acpi_os_vprintf(format, arg_list);
374cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
375cc84e262SBob Moore 	va_end(arg_list);
376cc84e262SBob Moore }
377cc84e262SBob Moore 
378cc84e262SBob Moore /*******************************************************************************
379cc84e262SBob Moore  *
380cc84e262SBob Moore  * FUNCTION:    acpi_ut_namespace_error
381cc84e262SBob Moore  *
382cc84e262SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
383cc84e262SBob Moore  *              line_number         - Caller's line number (for error output)
384cc84e262SBob Moore  *              internal_name       - Name or path of the namespace node
385cc84e262SBob Moore  *              lookup_status       - Exception code from NS lookup
386cc84e262SBob Moore  *
387cc84e262SBob Moore  * RETURN:      None
388cc84e262SBob Moore  *
389cc84e262SBob Moore  * DESCRIPTION: Print error message with the full pathname for the NS node.
390cc84e262SBob Moore  *
391cc84e262SBob Moore  ******************************************************************************/
392cc84e262SBob Moore 
393cc84e262SBob Moore void
394cc84e262SBob Moore acpi_ut_namespace_error(const char *module_name,
395cc84e262SBob Moore 			u32 line_number,
396cc84e262SBob Moore 			const char *internal_name, acpi_status lookup_status)
397cc84e262SBob Moore {
398cc84e262SBob Moore 	acpi_status status;
399cc84e262SBob Moore 	u32 bad_name;
400cc84e262SBob Moore 	char *name = NULL;
401cc84e262SBob Moore 
402cc84e262SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
403cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_ERROR);
404cc84e262SBob Moore 
405cc84e262SBob Moore 	if (lookup_status == AE_BAD_CHARACTER) {
406cc84e262SBob Moore 
407cc84e262SBob Moore 		/* There is a non-ascii character in the name */
408cc84e262SBob Moore 
409cc84e262SBob Moore 		ACPI_MOVE_32_TO_32(&bad_name,
410cc84e262SBob Moore 				   ACPI_CAST_PTR(u32, internal_name));
411cc84e262SBob Moore 		acpi_os_printf("[0x%4.4X] (NON-ASCII)", bad_name);
412cc84e262SBob Moore 	} else {
413cc84e262SBob Moore 		/* Convert path to external format */
414cc84e262SBob Moore 
415cc84e262SBob Moore 		status = acpi_ns_externalize_name(ACPI_UINT32_MAX,
416cc84e262SBob Moore 						  internal_name, NULL, &name);
417cc84e262SBob Moore 
418cc84e262SBob Moore 		/* Print target name */
419cc84e262SBob Moore 
420cc84e262SBob Moore 		if (ACPI_SUCCESS(status)) {
421cc84e262SBob Moore 			acpi_os_printf("[%s]", name);
422cc84e262SBob Moore 		} else {
423cc84e262SBob Moore 			acpi_os_printf("[COULD NOT EXTERNALIZE NAME]");
424cc84e262SBob Moore 		}
425cc84e262SBob Moore 
426cc84e262SBob Moore 		if (name) {
427cc84e262SBob Moore 			ACPI_FREE(name);
428cc84e262SBob Moore 		}
429cc84e262SBob Moore 	}
430cc84e262SBob Moore 
431cc84e262SBob Moore 	acpi_os_printf(" Namespace lookup failure, %s",
432cc84e262SBob Moore 		       acpi_format_exception(lookup_status));
433cc84e262SBob Moore 
434cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
435cc84e262SBob Moore 	ACPI_MSG_REDIRECT_END;
436cc84e262SBob Moore }
437cc84e262SBob Moore 
438cc84e262SBob Moore /*******************************************************************************
439cc84e262SBob Moore  *
440cc84e262SBob Moore  * FUNCTION:    acpi_ut_method_error
441cc84e262SBob Moore  *
442cc84e262SBob Moore  * PARAMETERS:  module_name         - Caller's module name (for error output)
443cc84e262SBob Moore  *              line_number         - Caller's line number (for error output)
444*ba494beeSBob Moore  *              message             - Error message to use on failure
445cc84e262SBob Moore  *              prefix_node         - Prefix relative to the path
446*ba494beeSBob Moore  *              path                - Path to the node (optional)
447cc84e262SBob Moore  *              method_status       - Execution status
448cc84e262SBob Moore  *
449cc84e262SBob Moore  * RETURN:      None
450cc84e262SBob Moore  *
451cc84e262SBob Moore  * DESCRIPTION: Print error message with the full pathname for the method.
452cc84e262SBob Moore  *
453cc84e262SBob Moore  ******************************************************************************/
454cc84e262SBob Moore 
455cc84e262SBob Moore void
456cc84e262SBob Moore acpi_ut_method_error(const char *module_name,
457cc84e262SBob Moore 		     u32 line_number,
458cc84e262SBob Moore 		     const char *message,
459cc84e262SBob Moore 		     struct acpi_namespace_node *prefix_node,
460cc84e262SBob Moore 		     const char *path, acpi_status method_status)
461cc84e262SBob Moore {
462cc84e262SBob Moore 	acpi_status status;
463cc84e262SBob Moore 	struct acpi_namespace_node *node = prefix_node;
464cc84e262SBob Moore 
465cc84e262SBob Moore 	ACPI_MSG_REDIRECT_BEGIN;
466cc84e262SBob Moore 	acpi_os_printf(ACPI_MSG_ERROR);
467cc84e262SBob Moore 
468cc84e262SBob Moore 	if (path) {
469cc84e262SBob Moore 		status =
470cc84e262SBob Moore 		    acpi_ns_get_node(prefix_node, path, ACPI_NS_NO_UPSEARCH,
471cc84e262SBob Moore 				     &node);
472cc84e262SBob Moore 		if (ACPI_FAILURE(status)) {
473cc84e262SBob Moore 			acpi_os_printf("[Could not get node by pathname]");
474cc84e262SBob Moore 		}
475cc84e262SBob Moore 	}
476cc84e262SBob Moore 
477cc84e262SBob Moore 	acpi_ns_print_node_pathname(node, message);
478cc84e262SBob Moore 	acpi_os_printf(", %s", acpi_format_exception(method_status));
479cc84e262SBob Moore 
480cc84e262SBob Moore 	ACPI_MSG_SUFFIX;
481cc84e262SBob Moore 	ACPI_MSG_REDIRECT_END;
482cc84e262SBob Moore }
483cc84e262SBob Moore 
484cc84e262SBob Moore #endif				/* ACPI_NO_ERROR_MESSAGES */
485