linux/drivers/acpi/acpica/utexcep.c
<<
>>
Prefs
   1// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
   2/*******************************************************************************
   3 *
   4 * Module Name: utexcep - Exception code support
   5 *
   6 ******************************************************************************/
   7
   8#define EXPORT_ACPI_INTERFACES
   9
  10#define ACPI_DEFINE_EXCEPTION_TABLE
  11#include <acpi/acpi.h>
  12#include "accommon.h"
  13
  14#define _COMPONENT          ACPI_UTILITIES
  15ACPI_MODULE_NAME("utexcep")
  16
  17/*******************************************************************************
  18 *
  19 * FUNCTION:    acpi_format_exception
  20 *
  21 * PARAMETERS:  status              - The acpi_status code to be formatted
  22 *
  23 * RETURN:      A string containing the exception text. A valid pointer is
  24 *              always returned.
  25 *
  26 * DESCRIPTION: This function translates an ACPI exception into an ASCII
  27 *              string. Returns "unknown status" string for invalid codes.
  28 *
  29 ******************************************************************************/
  30const char *acpi_format_exception(acpi_status status)
  31{
  32        const struct acpi_exception_info *exception;
  33
  34        ACPI_FUNCTION_ENTRY();
  35
  36        exception = acpi_ut_validate_exception(status);
  37        if (!exception) {
  38
  39                /* Exception code was not recognized */
  40
  41                ACPI_ERROR((AE_INFO,
  42                            "Unknown exception code: 0x%8.8X", status));
  43
  44                return ("UNKNOWN_STATUS_CODE");
  45        }
  46
  47        return (exception->name);
  48}
  49
  50ACPI_EXPORT_SYMBOL(acpi_format_exception)
  51
  52/*******************************************************************************
  53 *
  54 * FUNCTION:    acpi_ut_validate_exception
  55 *
  56 * PARAMETERS:  status              - The acpi_status code to be formatted
  57 *
  58 * RETURN:      A string containing the exception text. NULL if exception is
  59 *              not valid.
  60 *
  61 * DESCRIPTION: This function validates and translates an ACPI exception into
  62 *              an ASCII string.
  63 *
  64 ******************************************************************************/
  65const struct acpi_exception_info *acpi_ut_validate_exception(acpi_status status)
  66{
  67        u32 sub_status;
  68        const struct acpi_exception_info *exception = NULL;
  69
  70        ACPI_FUNCTION_ENTRY();
  71
  72        /*
  73         * Status is composed of two parts, a "type" and an actual code
  74         */
  75        sub_status = (status & ~AE_CODE_MASK);
  76
  77        switch (status & AE_CODE_MASK) {
  78        case AE_CODE_ENVIRONMENTAL:
  79
  80                if (sub_status <= AE_CODE_ENV_MAX) {
  81                        exception = &acpi_gbl_exception_names_env[sub_status];
  82                }
  83                break;
  84
  85        case AE_CODE_PROGRAMMER:
  86
  87                if (sub_status <= AE_CODE_PGM_MAX) {
  88                        exception = &acpi_gbl_exception_names_pgm[sub_status];
  89                }
  90                break;
  91
  92        case AE_CODE_ACPI_TABLES:
  93
  94                if (sub_status <= AE_CODE_TBL_MAX) {
  95                        exception = &acpi_gbl_exception_names_tbl[sub_status];
  96                }
  97                break;
  98
  99        case AE_CODE_AML:
 100
 101                if (sub_status <= AE_CODE_AML_MAX) {
 102                        exception = &acpi_gbl_exception_names_aml[sub_status];
 103                }
 104                break;
 105
 106        case AE_CODE_CONTROL:
 107
 108                if (sub_status <= AE_CODE_CTRL_MAX) {
 109                        exception = &acpi_gbl_exception_names_ctrl[sub_status];
 110                }
 111                break;
 112
 113        default:
 114
 115                break;
 116        }
 117
 118        if (!exception || !exception->name) {
 119                return (NULL);
 120        }
 121
 122        return (exception);
 123}
 124