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