]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/contrib/dev/acpica/components/utilities/uterror.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / contrib / dev / acpica / components / utilities / uterror.c
1 /*******************************************************************************
2  *
3  * Module Name: uterror - Various internal error/warning output functions
4  *
5  ******************************************************************************/
6
7 /*
8  * Copyright (C) 2000 - 2013, 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 #define __UTERROR_C__
45
46 #include <contrib/dev/acpica/include/acpi.h>
47 #include <contrib/dev/acpica/include/accommon.h>
48 #include <contrib/dev/acpica/include/acnamesp.h>
49
50
51 #define _COMPONENT          ACPI_UTILITIES
52         ACPI_MODULE_NAME    ("uterror")
53
54
55 /*
56  * This module contains internal error functions that may
57  * be configured out.
58  */
59 #if !defined (ACPI_NO_ERROR_MESSAGES)
60
61 /*******************************************************************************
62  *
63  * FUNCTION:    AcpiUtPredefinedWarning
64  *
65  * PARAMETERS:  ModuleName      - Caller's module name (for error output)
66  *              LineNumber      - Caller's line number (for error output)
67  *              Pathname        - Full pathname to the node
68  *              NodeFlags       - From Namespace node for the method/object
69  *              Format          - Printf format string + additional args
70  *
71  * RETURN:      None
72  *
73  * DESCRIPTION: Warnings for the predefined validation module. Messages are
74  *              only emitted the first time a problem with a particular
75  *              method/object is detected. This prevents a flood of error
76  *              messages for methods that are repeatedly evaluated.
77  *
78  ******************************************************************************/
79
80 void ACPI_INTERNAL_VAR_XFACE
81 AcpiUtPredefinedWarning (
82     const char              *ModuleName,
83     UINT32                  LineNumber,
84     char                    *Pathname,
85     UINT8                   NodeFlags,
86     const char              *Format,
87     ...)
88 {
89     va_list                 ArgList;
90
91
92     /*
93      * Warning messages for this method/object will be disabled after the
94      * first time a validation fails or an object is successfully repaired.
95      */
96     if (NodeFlags & ANOBJ_EVALUATED)
97     {
98         return;
99     }
100
101     AcpiOsPrintf (ACPI_MSG_WARNING "%s: ", Pathname);
102
103     va_start (ArgList, Format);
104     AcpiOsVprintf (Format, ArgList);
105     ACPI_MSG_SUFFIX;
106     va_end (ArgList);
107 }
108
109
110 /*******************************************************************************
111  *
112  * FUNCTION:    AcpiUtPredefinedInfo
113  *
114  * PARAMETERS:  ModuleName      - Caller's module name (for error output)
115  *              LineNumber      - Caller's line number (for error output)
116  *              Pathname        - Full pathname to the node
117  *              NodeFlags       - From Namespace node for the method/object
118  *              Format          - Printf format string + additional args
119  *
120  * RETURN:      None
121  *
122  * DESCRIPTION: Info messages for the predefined validation module. Messages
123  *              are only emitted the first time a problem with a particular
124  *              method/object is detected. This prevents a flood of
125  *              messages for methods that are repeatedly evaluated.
126  *
127  ******************************************************************************/
128
129 void ACPI_INTERNAL_VAR_XFACE
130 AcpiUtPredefinedInfo (
131     const char              *ModuleName,
132     UINT32                  LineNumber,
133     char                    *Pathname,
134     UINT8                   NodeFlags,
135     const char              *Format,
136     ...)
137 {
138     va_list                 ArgList;
139
140
141     /*
142      * Warning messages for this method/object will be disabled after the
143      * first time a validation fails or an object is successfully repaired.
144      */
145     if (NodeFlags & ANOBJ_EVALUATED)
146     {
147         return;
148     }
149
150     AcpiOsPrintf (ACPI_MSG_INFO "%s: ", Pathname);
151
152     va_start (ArgList, Format);
153     AcpiOsVprintf (Format, ArgList);
154     ACPI_MSG_SUFFIX;
155     va_end (ArgList);
156 }
157
158
159 /*******************************************************************************
160  *
161  * FUNCTION:    AcpiUtPredefinedBiosError
162  *
163  * PARAMETERS:  ModuleName      - Caller's module name (for error output)
164  *              LineNumber      - Caller's line number (for error output)
165  *              Pathname        - Full pathname to the node
166  *              NodeFlags       - From Namespace node for the method/object
167  *              Format          - Printf format string + additional args
168  *
169  * RETURN:      None
170  *
171  * DESCRIPTION: BIOS error message for predefined names. Messages
172  *              are only emitted the first time a problem with a particular
173  *              method/object is detected. This prevents a flood of
174  *              messages for methods that are repeatedly evaluated.
175  *
176  ******************************************************************************/
177
178 void ACPI_INTERNAL_VAR_XFACE
179 AcpiUtPredefinedBiosError (
180     const char              *ModuleName,
181     UINT32                  LineNumber,
182     char                    *Pathname,
183     UINT8                   NodeFlags,
184     const char              *Format,
185     ...)
186 {
187     va_list                 ArgList;
188
189
190     /*
191      * Warning messages for this method/object will be disabled after the
192      * first time a validation fails or an object is successfully repaired.
193      */
194     if (NodeFlags & ANOBJ_EVALUATED)
195     {
196         return;
197     }
198
199     AcpiOsPrintf (ACPI_MSG_BIOS_ERROR "%s: ", Pathname);
200
201     va_start (ArgList, Format);
202     AcpiOsVprintf (Format, ArgList);
203     ACPI_MSG_SUFFIX;
204     va_end (ArgList);
205 }
206
207
208 /*******************************************************************************
209  *
210  * FUNCTION:    AcpiUtNamespaceError
211  *
212  * PARAMETERS:  ModuleName          - Caller's module name (for error output)
213  *              LineNumber          - Caller's line number (for error output)
214  *              InternalName        - Name or path of the namespace node
215  *              LookupStatus        - Exception code from NS lookup
216  *
217  * RETURN:      None
218  *
219  * DESCRIPTION: Print error message with the full pathname for the NS node.
220  *
221  ******************************************************************************/
222
223 void
224 AcpiUtNamespaceError (
225     const char              *ModuleName,
226     UINT32                  LineNumber,
227     const char              *InternalName,
228     ACPI_STATUS             LookupStatus)
229 {
230     ACPI_STATUS             Status;
231     UINT32                  BadName;
232     char                    *Name = NULL;
233
234
235     ACPI_MSG_REDIRECT_BEGIN;
236     AcpiOsPrintf (ACPI_MSG_ERROR);
237
238     if (LookupStatus == AE_BAD_CHARACTER)
239     {
240         /* There is a non-ascii character in the name */
241
242         ACPI_MOVE_32_TO_32 (&BadName, ACPI_CAST_PTR (UINT32, InternalName));
243         AcpiOsPrintf ("[0x%.8X] (NON-ASCII)", BadName);
244     }
245     else
246     {
247         /* Convert path to external format */
248
249         Status = AcpiNsExternalizeName (ACPI_UINT32_MAX,
250                     InternalName, NULL, &Name);
251
252         /* Print target name */
253
254         if (ACPI_SUCCESS (Status))
255         {
256             AcpiOsPrintf ("[%s]", Name);
257         }
258         else
259         {
260             AcpiOsPrintf ("[COULD NOT EXTERNALIZE NAME]");
261         }
262
263         if (Name)
264         {
265             ACPI_FREE (Name);
266         }
267     }
268
269     AcpiOsPrintf (" Namespace lookup failure, %s",
270         AcpiFormatException (LookupStatus));
271
272     ACPI_MSG_SUFFIX;
273     ACPI_MSG_REDIRECT_END;
274 }
275
276
277 /*******************************************************************************
278  *
279  * FUNCTION:    AcpiUtMethodError
280  *
281  * PARAMETERS:  ModuleName          - Caller's module name (for error output)
282  *              LineNumber          - Caller's line number (for error output)
283  *              Message             - Error message to use on failure
284  *              PrefixNode          - Prefix relative to the path
285  *              Path                - Path to the node (optional)
286  *              MethodStatus        - Execution status
287  *
288  * RETURN:      None
289  *
290  * DESCRIPTION: Print error message with the full pathname for the method.
291  *
292  ******************************************************************************/
293
294 void
295 AcpiUtMethodError (
296     const char              *ModuleName,
297     UINT32                  LineNumber,
298     const char              *Message,
299     ACPI_NAMESPACE_NODE     *PrefixNode,
300     const char              *Path,
301     ACPI_STATUS             MethodStatus)
302 {
303     ACPI_STATUS             Status;
304     ACPI_NAMESPACE_NODE     *Node = PrefixNode;
305
306
307     ACPI_MSG_REDIRECT_BEGIN;
308     AcpiOsPrintf (ACPI_MSG_ERROR);
309
310     if (Path)
311     {
312         Status = AcpiNsGetNode (PrefixNode, Path, ACPI_NS_NO_UPSEARCH,
313                     &Node);
314         if (ACPI_FAILURE (Status))
315         {
316             AcpiOsPrintf ("[Could not get node by pathname]");
317         }
318     }
319
320     AcpiNsPrintNodePathname (Node, Message);
321     AcpiOsPrintf (", %s", AcpiFormatException (MethodStatus));
322
323     ACPI_MSG_SUFFIX;
324     ACPI_MSG_REDIRECT_END;
325 }
326
327 #endif /* ACPI_NO_ERROR_MESSAGES */