Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6595 serge 1
/*******************************************************************************
2
 *
3
 * Module Name: uterror - Various internal error/warning output functions
4
 *
5
 ******************************************************************************/
6
 
7
/*
8
 * Copyright (C) 2000 - 2015, Intel Corp.
9
 * All rights reserved.
10
 *
11
 * Redistribution and use in source and binary forms, with or without
12
 * modification, are permitted provided that the following conditions
13
 * are met:
14
 * 1. Redistributions of source code must retain the above copyright
15
 *    notice, this list of conditions, and the following disclaimer,
16
 *    without modification.
17
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18
 *    substantially similar to the "NO WARRANTY" disclaimer below
19
 *    ("Disclaimer") and any redistribution must be conditioned upon
20
 *    including a substantially similar Disclaimer requirement for further
21
 *    binary redistribution.
22
 * 3. Neither the names of the above-listed copyright holders nor the names
23
 *    of any contributors may be used to endorse or promote products derived
24
 *    from this software without specific prior written permission.
25
 *
26
 * Alternatively, this software may be distributed under the terms of the
27
 * GNU General Public License ("GPL") version 2 as published by the Free
28
 * Software Foundation.
29
 *
30
 * NO WARRANTY
31
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41
 * POSSIBILITY OF SUCH DAMAGES.
42
 */
43
 
44
#include 
45
#include "accommon.h"
46
#include "acnamesp.h"
47
 
48
#define _COMPONENT          ACPI_UTILITIES
49
ACPI_MODULE_NAME("uterror")
50
 
51
/*
52
 * This module contains internal error functions that may
53
 * be configured out.
54
 */
55
#if !defined (ACPI_NO_ERROR_MESSAGES)
56
/*******************************************************************************
57
 *
58
 * FUNCTION:    acpi_ut_predefined_warning
59
 *
60
 * PARAMETERS:  module_name     - Caller's module name (for error output)
61
 *              line_number     - Caller's line number (for error output)
62
 *              pathname        - Full pathname to the node
63
 *              node_flags      - From Namespace node for the method/object
64
 *              format          - Printf format string + additional args
65
 *
66
 * RETURN:      None
67
 *
68
 * DESCRIPTION: Warnings for the predefined validation module. Messages are
69
 *              only emitted the first time a problem with a particular
70
 *              method/object is detected. This prevents a flood of error
71
 *              messages for methods that are repeatedly evaluated.
72
 *
73
 ******************************************************************************/
74
void ACPI_INTERNAL_VAR_XFACE
75
acpi_ut_predefined_warning(const char *module_name,
76
			   u32 line_number,
77
			   char *pathname,
78
			   u8 node_flags, const char *format, ...)
79
{
80
	va_list arg_list;
81
 
82
	/*
83
	 * Warning messages for this method/object will be disabled after the
84
	 * first time a validation fails or an object is successfully repaired.
85
	 */
86
	if (node_flags & ANOBJ_EVALUATED) {
87
		return;
88
	}
89
 
90
	acpi_os_printf(ACPI_MSG_WARNING "%s: ", pathname);
91
 
92
	va_start(arg_list, format);
93
	acpi_os_vprintf(format, arg_list);
94
	ACPI_MSG_SUFFIX;
95
	va_end(arg_list);
96
}
97
 
98
/*******************************************************************************
99
 *
100
 * FUNCTION:    acpi_ut_predefined_info
101
 *
102
 * PARAMETERS:  module_name     - Caller's module name (for error output)
103
 *              line_number     - Caller's line number (for error output)
104
 *              pathname        - Full pathname to the node
105
 *              node_flags      - From Namespace node for the method/object
106
 *              format          - Printf format string + additional args
107
 *
108
 * RETURN:      None
109
 *
110
 * DESCRIPTION: Info messages for the predefined validation module. Messages
111
 *              are only emitted the first time a problem with a particular
112
 *              method/object is detected. This prevents a flood of
113
 *              messages for methods that are repeatedly evaluated.
114
 *
115
 ******************************************************************************/
116
 
117
void ACPI_INTERNAL_VAR_XFACE
118
acpi_ut_predefined_info(const char *module_name,
119
			u32 line_number,
120
			char *pathname, u8 node_flags, const char *format, ...)
121
{
122
	va_list arg_list;
123
 
124
	/*
125
	 * Warning messages for this method/object will be disabled after the
126
	 * first time a validation fails or an object is successfully repaired.
127
	 */
128
	if (node_flags & ANOBJ_EVALUATED) {
129
		return;
130
	}
131
 
132
	acpi_os_printf(ACPI_MSG_INFO "%s: ", pathname);
133
 
134
	va_start(arg_list, format);
135
	acpi_os_vprintf(format, arg_list);
136
	ACPI_MSG_SUFFIX;
137
	va_end(arg_list);
138
}
139
 
140
/*******************************************************************************
141
 *
142
 * FUNCTION:    acpi_ut_predefined_bios_error
143
 *
144
 * PARAMETERS:  module_name     - Caller's module name (for error output)
145
 *              line_number     - Caller's line number (for error output)
146
 *              pathname        - Full pathname to the node
147
 *              node_flags      - From Namespace node for the method/object
148
 *              format          - Printf format string + additional args
149
 *
150
 * RETURN:      None
151
 *
152
 * DESCRIPTION: BIOS error message for predefined names. Messages
153
 *              are only emitted the first time a problem with a particular
154
 *              method/object is detected. This prevents a flood of
155
 *              messages for methods that are repeatedly evaluated.
156
 *
157
 ******************************************************************************/
158
 
159
void ACPI_INTERNAL_VAR_XFACE
160
acpi_ut_predefined_bios_error(const char *module_name,
161
			      u32 line_number,
162
			      char *pathname,
163
			      u8 node_flags, const char *format, ...)
164
{
165
	va_list arg_list;
166
 
167
	/*
168
	 * Warning messages for this method/object will be disabled after the
169
	 * first time a validation fails or an object is successfully repaired.
170
	 */
171
	if (node_flags & ANOBJ_EVALUATED) {
172
		return;
173
	}
174
 
175
	acpi_os_printf(ACPI_MSG_BIOS_ERROR "%s: ", pathname);
176
 
177
	va_start(arg_list, format);
178
	acpi_os_vprintf(format, arg_list);
179
	ACPI_MSG_SUFFIX;
180
	va_end(arg_list);
181
}
182
 
183
/*******************************************************************************
184
 *
185
 * FUNCTION:    acpi_ut_namespace_error
186
 *
187
 * PARAMETERS:  module_name         - Caller's module name (for error output)
188
 *              line_number         - Caller's line number (for error output)
189
 *              internal_name       - Name or path of the namespace node
190
 *              lookup_status       - Exception code from NS lookup
191
 *
192
 * RETURN:      None
193
 *
194
 * DESCRIPTION: Print error message with the full pathname for the NS node.
195
 *
196
 ******************************************************************************/
197
 
198
void
199
acpi_ut_namespace_error(const char *module_name,
200
			u32 line_number,
201
			const char *internal_name, acpi_status lookup_status)
202
{
203
	acpi_status status;
204
	u32 bad_name;
205
	char *name = NULL;
206
 
207
	ACPI_MSG_REDIRECT_BEGIN;
208
	acpi_os_printf(ACPI_MSG_ERROR);
209
 
210
	if (lookup_status == AE_BAD_CHARACTER) {
211
 
212
		/* There is a non-ascii character in the name */
213
 
214
		ACPI_MOVE_32_TO_32(&bad_name,
215
				   ACPI_CAST_PTR(u32, internal_name));
216
		acpi_os_printf("[0x%.8X] (NON-ASCII)", bad_name);
217
	} else {
218
		/* Convert path to external format */
219
 
220
		status = acpi_ns_externalize_name(ACPI_UINT32_MAX,
221
						  internal_name, NULL, &name);
222
 
223
		/* Print target name */
224
 
225
		if (ACPI_SUCCESS(status)) {
226
			acpi_os_printf("[%s]", name);
227
		} else {
228
			acpi_os_printf("[COULD NOT EXTERNALIZE NAME]");
229
		}
230
 
231
		if (name) {
232
			ACPI_FREE(name);
233
		}
234
	}
235
 
236
	acpi_os_printf(" Namespace lookup failure, %s",
237
		       acpi_format_exception(lookup_status));
238
 
239
	ACPI_MSG_SUFFIX;
240
	ACPI_MSG_REDIRECT_END;
241
}
242
 
243
/*******************************************************************************
244
 *
245
 * FUNCTION:    acpi_ut_method_error
246
 *
247
 * PARAMETERS:  module_name         - Caller's module name (for error output)
248
 *              line_number         - Caller's line number (for error output)
249
 *              message             - Error message to use on failure
250
 *              prefix_node         - Prefix relative to the path
251
 *              path                - Path to the node (optional)
252
 *              method_status       - Execution status
253
 *
254
 * RETURN:      None
255
 *
256
 * DESCRIPTION: Print error message with the full pathname for the method.
257
 *
258
 ******************************************************************************/
259
 
260
void
261
acpi_ut_method_error(const char *module_name,
262
		     u32 line_number,
263
		     const char *message,
264
		     struct acpi_namespace_node *prefix_node,
265
		     const char *path, acpi_status method_status)
266
{
267
	acpi_status status;
268
	struct acpi_namespace_node *node = prefix_node;
269
 
270
	ACPI_MSG_REDIRECT_BEGIN;
271
	acpi_os_printf(ACPI_MSG_ERROR);
272
 
273
	if (path) {
274
		status =
275
		    acpi_ns_get_node(prefix_node, path, ACPI_NS_NO_UPSEARCH,
276
				     &node);
277
		if (ACPI_FAILURE(status)) {
278
			acpi_os_printf("[Could not get node by pathname]");
279
		}
280
	}
281
 
282
	acpi_ns_print_node_pathname(node, message);
283
	acpi_os_printf(", %s", acpi_format_exception(method_status));
284
 
285
	ACPI_MSG_SUFFIX;
286
	ACPI_MSG_REDIRECT_END;
287
}
288
 
289
#endif				/* ACPI_NO_ERROR_MESSAGES */