1238367Sjkim/******************************************************************************* 2238367Sjkim * 3238367Sjkim * Module Name: utexcep - Exception code support 4238367Sjkim * 5238367Sjkim ******************************************************************************/ 6238367Sjkim 7238367Sjkim/* 8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp. 9238367Sjkim * All rights reserved. 10238367Sjkim * 11238367Sjkim * Redistribution and use in source and binary forms, with or without 12238367Sjkim * modification, are permitted provided that the following conditions 13238367Sjkim * are met: 14238367Sjkim * 1. Redistributions of source code must retain the above copyright 15238367Sjkim * notice, this list of conditions, and the following disclaimer, 16238367Sjkim * without modification. 17238367Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18238367Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19238367Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20238367Sjkim * including a substantially similar Disclaimer requirement for further 21238367Sjkim * binary redistribution. 22238367Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23238367Sjkim * of any contributors may be used to endorse or promote products derived 24238367Sjkim * from this software without specific prior written permission. 25238367Sjkim * 26238367Sjkim * Alternatively, this software may be distributed under the terms of the 27238367Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28238367Sjkim * Software Foundation. 29238367Sjkim * 30238367Sjkim * NO WARRANTY 31238367Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32238367Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33238367Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34238367Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35238367Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36238367Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37238367Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38238367Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39238367Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40238367Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41238367Sjkim * POSSIBILITY OF SUCH DAMAGES. 42238367Sjkim */ 43238367Sjkim 44281075Sdim#define EXPORT_ACPI_INTERFACES 45238367Sjkim 46238367Sjkim#define ACPI_DEFINE_EXCEPTION_TABLE 47238381Sjkim#include <contrib/dev/acpica/include/acpi.h> 48238381Sjkim#include <contrib/dev/acpica/include/accommon.h> 49238367Sjkim 50238367Sjkim 51238367Sjkim#define _COMPONENT ACPI_UTILITIES 52238367Sjkim ACPI_MODULE_NAME ("utexcep") 53238367Sjkim 54238367Sjkim 55238367Sjkim/******************************************************************************* 56238367Sjkim * 57238367Sjkim * FUNCTION: AcpiFormatException 58238367Sjkim * 59238367Sjkim * PARAMETERS: Status - The ACPI_STATUS code to be formatted 60238367Sjkim * 61238367Sjkim * RETURN: A string containing the exception text. A valid pointer is 62238367Sjkim * always returned. 63238367Sjkim * 64238367Sjkim * DESCRIPTION: This function translates an ACPI exception into an ASCII 65238367Sjkim * string. Returns "unknown status" string for invalid codes. 66238367Sjkim * 67238367Sjkim ******************************************************************************/ 68238367Sjkim 69238367Sjkimconst char * 70238367SjkimAcpiFormatException ( 71238367Sjkim ACPI_STATUS Status) 72238367Sjkim{ 73246849Sjkim const ACPI_EXCEPTION_INFO *Exception; 74238367Sjkim 75238367Sjkim 76238367Sjkim ACPI_FUNCTION_ENTRY (); 77238367Sjkim 78238367Sjkim 79238367Sjkim Exception = AcpiUtValidateException (Status); 80238367Sjkim if (!Exception) 81238367Sjkim { 82238367Sjkim /* Exception code was not recognized */ 83238367Sjkim 84238367Sjkim ACPI_ERROR ((AE_INFO, 85238367Sjkim "Unknown exception code: 0x%8.8X", Status)); 86238367Sjkim 87246849Sjkim return ("UNKNOWN_STATUS_CODE"); 88238367Sjkim } 89238367Sjkim 90246849Sjkim return (Exception->Name); 91238367Sjkim} 92238367Sjkim 93238367SjkimACPI_EXPORT_SYMBOL (AcpiFormatException) 94238367Sjkim 95238367Sjkim 96238367Sjkim/******************************************************************************* 97238367Sjkim * 98238367Sjkim * FUNCTION: AcpiUtValidateException 99238367Sjkim * 100238367Sjkim * PARAMETERS: Status - The ACPI_STATUS code to be formatted 101238367Sjkim * 102238367Sjkim * RETURN: A string containing the exception text. NULL if exception is 103238367Sjkim * not valid. 104238367Sjkim * 105238367Sjkim * DESCRIPTION: This function validates and translates an ACPI exception into 106238367Sjkim * an ASCII string. 107238367Sjkim * 108238367Sjkim ******************************************************************************/ 109238367Sjkim 110246849Sjkimconst ACPI_EXCEPTION_INFO * 111238367SjkimAcpiUtValidateException ( 112238367Sjkim ACPI_STATUS Status) 113238367Sjkim{ 114246849Sjkim UINT32 SubStatus; 115246849Sjkim const ACPI_EXCEPTION_INFO *Exception = NULL; 116238367Sjkim 117238367Sjkim 118238367Sjkim ACPI_FUNCTION_ENTRY (); 119238367Sjkim 120238367Sjkim 121238367Sjkim /* 122238367Sjkim * Status is composed of two parts, a "type" and an actual code 123238367Sjkim */ 124238367Sjkim SubStatus = (Status & ~AE_CODE_MASK); 125238367Sjkim 126238367Sjkim switch (Status & AE_CODE_MASK) 127238367Sjkim { 128238367Sjkim case AE_CODE_ENVIRONMENTAL: 129238367Sjkim 130238367Sjkim if (SubStatus <= AE_CODE_ENV_MAX) 131238367Sjkim { 132246849Sjkim Exception = &AcpiGbl_ExceptionNames_Env [SubStatus]; 133238367Sjkim } 134238367Sjkim break; 135238367Sjkim 136238367Sjkim case AE_CODE_PROGRAMMER: 137238367Sjkim 138238367Sjkim if (SubStatus <= AE_CODE_PGM_MAX) 139238367Sjkim { 140246849Sjkim Exception = &AcpiGbl_ExceptionNames_Pgm [SubStatus]; 141238367Sjkim } 142238367Sjkim break; 143238367Sjkim 144238367Sjkim case AE_CODE_ACPI_TABLES: 145238367Sjkim 146238367Sjkim if (SubStatus <= AE_CODE_TBL_MAX) 147238367Sjkim { 148246849Sjkim Exception = &AcpiGbl_ExceptionNames_Tbl [SubStatus]; 149238367Sjkim } 150238367Sjkim break; 151238367Sjkim 152238367Sjkim case AE_CODE_AML: 153238367Sjkim 154238367Sjkim if (SubStatus <= AE_CODE_AML_MAX) 155238367Sjkim { 156246849Sjkim Exception = &AcpiGbl_ExceptionNames_Aml [SubStatus]; 157238367Sjkim } 158238367Sjkim break; 159238367Sjkim 160238367Sjkim case AE_CODE_CONTROL: 161238367Sjkim 162238367Sjkim if (SubStatus <= AE_CODE_CTRL_MAX) 163238367Sjkim { 164246849Sjkim Exception = &AcpiGbl_ExceptionNames_Ctrl [SubStatus]; 165238367Sjkim } 166238367Sjkim break; 167238367Sjkim 168238367Sjkim default: 169250838Sjkim 170238367Sjkim break; 171238367Sjkim } 172238367Sjkim 173246849Sjkim if (!Exception || !Exception->Name) 174246849Sjkim { 175246849Sjkim return (NULL); 176246849Sjkim } 177246849Sjkim 178246849Sjkim return (Exception); 179238367Sjkim} 180