xref: /freebsd/sys/contrib/dev/acpica/components/utilities/utexcep.c (revision e8241eabbbf83f4cef70bce69981e9215496455a)
1*e8241eabSJung-uk Kim /*******************************************************************************
2*e8241eabSJung-uk Kim  *
3*e8241eabSJung-uk Kim  * Module Name: utexcep - Exception code support
4*e8241eabSJung-uk Kim  *
5*e8241eabSJung-uk Kim  ******************************************************************************/
6*e8241eabSJung-uk Kim 
7*e8241eabSJung-uk Kim /*
8*e8241eabSJung-uk Kim  * Copyright (C) 2000 - 2012, Intel Corp.
9*e8241eabSJung-uk Kim  * All rights reserved.
10*e8241eabSJung-uk Kim  *
11*e8241eabSJung-uk Kim  * Redistribution and use in source and binary forms, with or without
12*e8241eabSJung-uk Kim  * modification, are permitted provided that the following conditions
13*e8241eabSJung-uk Kim  * are met:
14*e8241eabSJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
15*e8241eabSJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
16*e8241eabSJung-uk Kim  *    without modification.
17*e8241eabSJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18*e8241eabSJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
19*e8241eabSJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
20*e8241eabSJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
21*e8241eabSJung-uk Kim  *    binary redistribution.
22*e8241eabSJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
23*e8241eabSJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
24*e8241eabSJung-uk Kim  *    from this software without specific prior written permission.
25*e8241eabSJung-uk Kim  *
26*e8241eabSJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
27*e8241eabSJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
28*e8241eabSJung-uk Kim  * Software Foundation.
29*e8241eabSJung-uk Kim  *
30*e8241eabSJung-uk Kim  * NO WARRANTY
31*e8241eabSJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32*e8241eabSJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33*e8241eabSJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34*e8241eabSJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35*e8241eabSJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36*e8241eabSJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37*e8241eabSJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38*e8241eabSJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39*e8241eabSJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40*e8241eabSJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41*e8241eabSJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
42*e8241eabSJung-uk Kim  */
43*e8241eabSJung-uk Kim 
44*e8241eabSJung-uk Kim 
45*e8241eabSJung-uk Kim #define __UTEXCEP_C__
46*e8241eabSJung-uk Kim 
47*e8241eabSJung-uk Kim #define ACPI_DEFINE_EXCEPTION_TABLE
48*e8241eabSJung-uk Kim #include <contrib/dev/acpica/include/acpi.h>
49*e8241eabSJung-uk Kim #include <contrib/dev/acpica/include/accommon.h>
50*e8241eabSJung-uk Kim 
51*e8241eabSJung-uk Kim 
52*e8241eabSJung-uk Kim #define _COMPONENT          ACPI_UTILITIES
53*e8241eabSJung-uk Kim         ACPI_MODULE_NAME    ("utexcep")
54*e8241eabSJung-uk Kim 
55*e8241eabSJung-uk Kim 
56*e8241eabSJung-uk Kim /*******************************************************************************
57*e8241eabSJung-uk Kim  *
58*e8241eabSJung-uk Kim  * FUNCTION:    AcpiFormatException
59*e8241eabSJung-uk Kim  *
60*e8241eabSJung-uk Kim  * PARAMETERS:  Status              - The ACPI_STATUS code to be formatted
61*e8241eabSJung-uk Kim  *
62*e8241eabSJung-uk Kim  * RETURN:      A string containing the exception text. A valid pointer is
63*e8241eabSJung-uk Kim  *              always returned.
64*e8241eabSJung-uk Kim  *
65*e8241eabSJung-uk Kim  * DESCRIPTION: This function translates an ACPI exception into an ASCII
66*e8241eabSJung-uk Kim  *              string. Returns "unknown status" string for invalid codes.
67*e8241eabSJung-uk Kim  *
68*e8241eabSJung-uk Kim  ******************************************************************************/
69*e8241eabSJung-uk Kim 
70*e8241eabSJung-uk Kim const char *
71*e8241eabSJung-uk Kim AcpiFormatException (
72*e8241eabSJung-uk Kim     ACPI_STATUS             Status)
73*e8241eabSJung-uk Kim {
74*e8241eabSJung-uk Kim     const char              *Exception = NULL;
75*e8241eabSJung-uk Kim 
76*e8241eabSJung-uk Kim 
77*e8241eabSJung-uk Kim     ACPI_FUNCTION_ENTRY ();
78*e8241eabSJung-uk Kim 
79*e8241eabSJung-uk Kim 
80*e8241eabSJung-uk Kim     Exception = AcpiUtValidateException (Status);
81*e8241eabSJung-uk Kim     if (!Exception)
82*e8241eabSJung-uk Kim     {
83*e8241eabSJung-uk Kim         /* Exception code was not recognized */
84*e8241eabSJung-uk Kim 
85*e8241eabSJung-uk Kim         ACPI_ERROR ((AE_INFO,
86*e8241eabSJung-uk Kim             "Unknown exception code: 0x%8.8X", Status));
87*e8241eabSJung-uk Kim 
88*e8241eabSJung-uk Kim         Exception = "UNKNOWN_STATUS_CODE";
89*e8241eabSJung-uk Kim     }
90*e8241eabSJung-uk Kim 
91*e8241eabSJung-uk Kim     return (ACPI_CAST_PTR (const char, Exception));
92*e8241eabSJung-uk Kim }
93*e8241eabSJung-uk Kim 
94*e8241eabSJung-uk Kim ACPI_EXPORT_SYMBOL (AcpiFormatException)
95*e8241eabSJung-uk Kim 
96*e8241eabSJung-uk Kim 
97*e8241eabSJung-uk Kim /*******************************************************************************
98*e8241eabSJung-uk Kim  *
99*e8241eabSJung-uk Kim  * FUNCTION:    AcpiUtValidateException
100*e8241eabSJung-uk Kim  *
101*e8241eabSJung-uk Kim  * PARAMETERS:  Status              - The ACPI_STATUS code to be formatted
102*e8241eabSJung-uk Kim  *
103*e8241eabSJung-uk Kim  * RETURN:      A string containing the exception text. NULL if exception is
104*e8241eabSJung-uk Kim  *              not valid.
105*e8241eabSJung-uk Kim  *
106*e8241eabSJung-uk Kim  * DESCRIPTION: This function validates and translates an ACPI exception into
107*e8241eabSJung-uk Kim  *              an ASCII string.
108*e8241eabSJung-uk Kim  *
109*e8241eabSJung-uk Kim  ******************************************************************************/
110*e8241eabSJung-uk Kim 
111*e8241eabSJung-uk Kim const char *
112*e8241eabSJung-uk Kim AcpiUtValidateException (
113*e8241eabSJung-uk Kim     ACPI_STATUS             Status)
114*e8241eabSJung-uk Kim {
115*e8241eabSJung-uk Kim     UINT32                  SubStatus;
116*e8241eabSJung-uk Kim     const char              *Exception = NULL;
117*e8241eabSJung-uk Kim 
118*e8241eabSJung-uk Kim 
119*e8241eabSJung-uk Kim     ACPI_FUNCTION_ENTRY ();
120*e8241eabSJung-uk Kim 
121*e8241eabSJung-uk Kim 
122*e8241eabSJung-uk Kim     /*
123*e8241eabSJung-uk Kim      * Status is composed of two parts, a "type" and an actual code
124*e8241eabSJung-uk Kim      */
125*e8241eabSJung-uk Kim     SubStatus = (Status & ~AE_CODE_MASK);
126*e8241eabSJung-uk Kim 
127*e8241eabSJung-uk Kim     switch (Status & AE_CODE_MASK)
128*e8241eabSJung-uk Kim     {
129*e8241eabSJung-uk Kim     case AE_CODE_ENVIRONMENTAL:
130*e8241eabSJung-uk Kim 
131*e8241eabSJung-uk Kim         if (SubStatus <= AE_CODE_ENV_MAX)
132*e8241eabSJung-uk Kim         {
133*e8241eabSJung-uk Kim             Exception = AcpiGbl_ExceptionNames_Env [SubStatus];
134*e8241eabSJung-uk Kim         }
135*e8241eabSJung-uk Kim         break;
136*e8241eabSJung-uk Kim 
137*e8241eabSJung-uk Kim     case AE_CODE_PROGRAMMER:
138*e8241eabSJung-uk Kim 
139*e8241eabSJung-uk Kim         if (SubStatus <= AE_CODE_PGM_MAX)
140*e8241eabSJung-uk Kim         {
141*e8241eabSJung-uk Kim             Exception = AcpiGbl_ExceptionNames_Pgm [SubStatus];
142*e8241eabSJung-uk Kim         }
143*e8241eabSJung-uk Kim         break;
144*e8241eabSJung-uk Kim 
145*e8241eabSJung-uk Kim     case AE_CODE_ACPI_TABLES:
146*e8241eabSJung-uk Kim 
147*e8241eabSJung-uk Kim         if (SubStatus <= AE_CODE_TBL_MAX)
148*e8241eabSJung-uk Kim         {
149*e8241eabSJung-uk Kim             Exception = AcpiGbl_ExceptionNames_Tbl [SubStatus];
150*e8241eabSJung-uk Kim         }
151*e8241eabSJung-uk Kim         break;
152*e8241eabSJung-uk Kim 
153*e8241eabSJung-uk Kim     case AE_CODE_AML:
154*e8241eabSJung-uk Kim 
155*e8241eabSJung-uk Kim         if (SubStatus <= AE_CODE_AML_MAX)
156*e8241eabSJung-uk Kim         {
157*e8241eabSJung-uk Kim             Exception = AcpiGbl_ExceptionNames_Aml [SubStatus];
158*e8241eabSJung-uk Kim         }
159*e8241eabSJung-uk Kim         break;
160*e8241eabSJung-uk Kim 
161*e8241eabSJung-uk Kim     case AE_CODE_CONTROL:
162*e8241eabSJung-uk Kim 
163*e8241eabSJung-uk Kim         if (SubStatus <= AE_CODE_CTRL_MAX)
164*e8241eabSJung-uk Kim         {
165*e8241eabSJung-uk Kim             Exception = AcpiGbl_ExceptionNames_Ctrl [SubStatus];
166*e8241eabSJung-uk Kim         }
167*e8241eabSJung-uk Kim         break;
168*e8241eabSJung-uk Kim 
169*e8241eabSJung-uk Kim     default:
170*e8241eabSJung-uk Kim         break;
171*e8241eabSJung-uk Kim     }
172*e8241eabSJung-uk Kim 
173*e8241eabSJung-uk Kim     return (ACPI_CAST_PTR (const char, Exception));
174*e8241eabSJung-uk Kim }
175