utexcep.c revision 1.1.1.2 1 /*******************************************************************************
2 *
3 * Module Name: utexcep - Exception code support
4 *
5 ******************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2014, 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 __UTEXCEP_C__
45 #define EXPORT_ACPI_INTERFACES
46
47 #define ACPI_DEFINE_EXCEPTION_TABLE
48 #include "acpi.h"
49 #include "accommon.h"
50
51
52 #define _COMPONENT ACPI_UTILITIES
53 ACPI_MODULE_NAME ("utexcep")
54
55
56 /*******************************************************************************
57 *
58 * FUNCTION: AcpiFormatException
59 *
60 * PARAMETERS: Status - The ACPI_STATUS code to be formatted
61 *
62 * RETURN: A string containing the exception text. A valid pointer is
63 * always returned.
64 *
65 * DESCRIPTION: This function translates an ACPI exception into an ASCII
66 * string. Returns "unknown status" string for invalid codes.
67 *
68 ******************************************************************************/
69
70 const char *
71 AcpiFormatException (
72 ACPI_STATUS Status)
73 {
74 const ACPI_EXCEPTION_INFO *Exception;
75
76
77 ACPI_FUNCTION_ENTRY ();
78
79
80 Exception = AcpiUtValidateException (Status);
81 if (!Exception)
82 {
83 /* Exception code was not recognized */
84
85 ACPI_ERROR ((AE_INFO,
86 "Unknown exception code: 0x%8.8X", Status));
87
88 return ("UNKNOWN_STATUS_CODE");
89 }
90
91 return (Exception->Name);
92 }
93
94 ACPI_EXPORT_SYMBOL (AcpiFormatException)
95
96
97 /*******************************************************************************
98 *
99 * FUNCTION: AcpiUtValidateException
100 *
101 * PARAMETERS: Status - The ACPI_STATUS code to be formatted
102 *
103 * RETURN: A string containing the exception text. NULL if exception is
104 * not valid.
105 *
106 * DESCRIPTION: This function validates and translates an ACPI exception into
107 * an ASCII string.
108 *
109 ******************************************************************************/
110
111 const ACPI_EXCEPTION_INFO *
112 AcpiUtValidateException (
113 ACPI_STATUS Status)
114 {
115 UINT32 SubStatus;
116 const ACPI_EXCEPTION_INFO *Exception = NULL;
117
118
119 ACPI_FUNCTION_ENTRY ();
120
121
122 /*
123 * Status is composed of two parts, a "type" and an actual code
124 */
125 SubStatus = (Status & ~AE_CODE_MASK);
126
127 switch (Status & AE_CODE_MASK)
128 {
129 case AE_CODE_ENVIRONMENTAL:
130
131 if (SubStatus <= AE_CODE_ENV_MAX)
132 {
133 Exception = &AcpiGbl_ExceptionNames_Env [SubStatus];
134 }
135 break;
136
137 case AE_CODE_PROGRAMMER:
138
139 if (SubStatus <= AE_CODE_PGM_MAX)
140 {
141 Exception = &AcpiGbl_ExceptionNames_Pgm [SubStatus];
142 }
143 break;
144
145 case AE_CODE_ACPI_TABLES:
146
147 if (SubStatus <= AE_CODE_TBL_MAX)
148 {
149 Exception = &AcpiGbl_ExceptionNames_Tbl [SubStatus];
150 }
151 break;
152
153 case AE_CODE_AML:
154
155 if (SubStatus <= AE_CODE_AML_MAX)
156 {
157 Exception = &AcpiGbl_ExceptionNames_Aml [SubStatus];
158 }
159 break;
160
161 case AE_CODE_CONTROL:
162
163 if (SubStatus <= AE_CODE_CTRL_MAX)
164 {
165 Exception = &AcpiGbl_ExceptionNames_Ctrl [SubStatus];
166 }
167 break;
168
169 default:
170
171 break;
172 }
173
174 if (!Exception || !Exception->Name)
175 {
176 return (NULL);
177 }
178
179 return (Exception);
180 }
181