1// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
2/*******************************************************************************
3 *
4 * Module Name: utxferror - Various error/warning output functions
5 *
6 ******************************************************************************/
7
8#define EXPORT_ACPI_INTERFACES
9
10#include <acpi/acpi.h>
11#include "accommon.h"
12
13#define _COMPONENT          ACPI_UTILITIES
14ACPI_MODULE_NAME("utxferror")
15
16/*
17 * This module is used for the in-kernel ACPICA as well as the ACPICA
18 * tools/applications.
19 */
20#ifndef ACPI_NO_ERROR_MESSAGES	/* Entire module */
21/*******************************************************************************
22 *
23 * FUNCTION:    acpi_error
24 *
25 * PARAMETERS:  module_name         - Caller's module name (for error output)
26 *              line_number         - Caller's line number (for error output)
27 *              format              - Printf format string + additional args
28 *
29 * RETURN:      None
30 *
31 * DESCRIPTION: Print "ACPI Error" message with module/line/version info
32 *
33 ******************************************************************************/
34void ACPI_INTERNAL_VAR_XFACE
35acpi_error(const char *module_name, u32 line_number, const char *format, ...)
36{
37	va_list arg_list;
38
39	ACPI_MSG_REDIRECT_BEGIN;
40	acpi_os_printf(ACPI_MSG_ERROR);
41
42	va_start(arg_list, format);
43	acpi_os_vprintf(format, arg_list);
44	ACPI_MSG_SUFFIX;
45	va_end(arg_list);
46
47	ACPI_MSG_REDIRECT_END;
48}
49
50ACPI_EXPORT_SYMBOL(acpi_error)
51
52/*******************************************************************************
53 *
54 * FUNCTION:    acpi_exception
55 *
56 * PARAMETERS:  module_name         - Caller's module name (for error output)
57 *              line_number         - Caller's line number (for error output)
58 *              status              - Status value to be decoded/formatted
59 *              format              - Printf format string + additional args
60 *
61 * RETURN:      None
62 *
63 * DESCRIPTION: Print an "ACPI Error" message with module/line/version
64 *              info as well as decoded acpi_status.
65 *
66 ******************************************************************************/
67void ACPI_INTERNAL_VAR_XFACE
68acpi_exception(const char *module_name,
69	       u32 line_number, acpi_status status, const char *format, ...)
70{
71	va_list arg_list;
72
73	ACPI_MSG_REDIRECT_BEGIN;
74
75	/* For AE_OK, just print the message */
76
77	if (ACPI_SUCCESS(status)) {
78		acpi_os_printf(ACPI_MSG_ERROR);
79
80	} else {
81		acpi_os_printf(ACPI_MSG_ERROR "%s, ",
82			       acpi_format_exception(status));
83	}
84
85	va_start(arg_list, format);
86	acpi_os_vprintf(format, arg_list);
87	ACPI_MSG_SUFFIX;
88	va_end(arg_list);
89
90	ACPI_MSG_REDIRECT_END;
91}
92
93ACPI_EXPORT_SYMBOL(acpi_exception)
94
95/*******************************************************************************
96 *
97 * FUNCTION:    acpi_warning
98 *
99 * PARAMETERS:  module_name         - Caller's module name (for warning output)
100 *              line_number         - Caller's line number (for warning output)
101 *              format              - Printf format string + additional args
102 *
103 * RETURN:      None
104 *
105 * DESCRIPTION: Print "ACPI Warning" message with module/line/version info
106 *
107 ******************************************************************************/
108void ACPI_INTERNAL_VAR_XFACE
109acpi_warning(const char *module_name, u32 line_number, const char *format, ...)
110{
111	va_list arg_list;
112
113	ACPI_MSG_REDIRECT_BEGIN;
114	acpi_os_printf(ACPI_MSG_WARNING);
115
116	va_start(arg_list, format);
117	acpi_os_vprintf(format, arg_list);
118	ACPI_MSG_SUFFIX;
119	va_end(arg_list);
120
121	ACPI_MSG_REDIRECT_END;
122}
123
124ACPI_EXPORT_SYMBOL(acpi_warning)
125
126/*******************************************************************************
127 *
128 * FUNCTION:    acpi_info
129 *
130 * PARAMETERS:  format              - Printf format string + additional args
131 *
132 * RETURN:      None
133 *
134 * DESCRIPTION: Print generic "ACPI:" information message. There is no
135 *              module/line/version info in order to keep the message simple.
136 *
137 ******************************************************************************/
138void ACPI_INTERNAL_VAR_XFACE acpi_info(const char *format, ...)
139{
140	va_list arg_list;
141
142	ACPI_MSG_REDIRECT_BEGIN;
143	acpi_os_printf(ACPI_MSG_INFO);
144
145	va_start(arg_list, format);
146	acpi_os_vprintf(format, arg_list);
147	acpi_os_printf("\n");
148	va_end(arg_list);
149
150	ACPI_MSG_REDIRECT_END;
151}
152
153ACPI_EXPORT_SYMBOL(acpi_info)
154
155/*******************************************************************************
156 *
157 * FUNCTION:    acpi_bios_error
158 *
159 * PARAMETERS:  module_name         - Caller's module name (for error output)
160 *              line_number         - Caller's line number (for error output)
161 *              format              - Printf format string + additional args
162 *
163 * RETURN:      None
164 *
165 * DESCRIPTION: Print "ACPI Firmware Error" message with module/line/version
166 *              info
167 *
168 ******************************************************************************/
169void ACPI_INTERNAL_VAR_XFACE
170acpi_bios_error(const char *module_name,
171		u32 line_number, const char *format, ...)
172{
173	va_list arg_list;
174
175	ACPI_MSG_REDIRECT_BEGIN;
176	acpi_os_printf(ACPI_MSG_BIOS_ERROR);
177
178	va_start(arg_list, format);
179	acpi_os_vprintf(format, arg_list);
180	ACPI_MSG_SUFFIX;
181	va_end(arg_list);
182
183	ACPI_MSG_REDIRECT_END;
184}
185
186ACPI_EXPORT_SYMBOL(acpi_bios_error)
187
188/*******************************************************************************
189 *
190 * FUNCTION:    acpi_bios_exception
191 *
192 * PARAMETERS:  module_name         - Caller's module name (for error output)
193 *              line_number         - Caller's line number (for error output)
194 *              status              - Status value to be decoded/formatted
195 *              format              - Printf format string + additional args
196 *
197 * RETURN:      None
198 *
199 * DESCRIPTION: Print an "ACPI Firmware Error" message with module/line/version
200 *              info as well as decoded acpi_status.
201 *
202 ******************************************************************************/
203void ACPI_INTERNAL_VAR_XFACE
204acpi_bios_exception(const char *module_name,
205		    u32 line_number,
206		    acpi_status status, const char *format, ...)
207{
208	va_list arg_list;
209
210	ACPI_MSG_REDIRECT_BEGIN;
211
212	/* For AE_OK, just print the message */
213
214	if (ACPI_SUCCESS(status)) {
215		acpi_os_printf(ACPI_MSG_BIOS_ERROR);
216
217	} else {
218		acpi_os_printf(ACPI_MSG_BIOS_ERROR "%s, ",
219			       acpi_format_exception(status));
220	}
221
222	va_start(arg_list, format);
223	acpi_os_vprintf(format, arg_list);
224	ACPI_MSG_SUFFIX;
225	va_end(arg_list);
226
227	ACPI_MSG_REDIRECT_END;
228}
229
230ACPI_EXPORT_SYMBOL(acpi_bios_exception)
231
232/*******************************************************************************
233 *
234 * FUNCTION:    acpi_bios_warning
235 *
236 * PARAMETERS:  module_name         - Caller's module name (for warning output)
237 *              line_number         - Caller's line number (for warning output)
238 *              format              - Printf format string + additional args
239 *
240 * RETURN:      None
241 *
242 * DESCRIPTION: Print "ACPI Firmware Warning" message with module/line/version
243 *              info
244 *
245 ******************************************************************************/
246void ACPI_INTERNAL_VAR_XFACE
247acpi_bios_warning(const char *module_name,
248		  u32 line_number, const char *format, ...)
249{
250	va_list arg_list;
251
252	ACPI_MSG_REDIRECT_BEGIN;
253	acpi_os_printf(ACPI_MSG_BIOS_WARNING);
254
255	va_start(arg_list, format);
256	acpi_os_vprintf(format, arg_list);
257	ACPI_MSG_SUFFIX;
258	va_end(arg_list);
259
260	ACPI_MSG_REDIRECT_END;
261}
262
263ACPI_EXPORT_SYMBOL(acpi_bios_warning)
264#endif				/* ACPI_NO_ERROR_MESSAGES */
265