cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

utexcep.c (3060B)


      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}