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