brintos

brintos / linux-shallow public Read only

0
0
Text · 3.0 KiB · 60fbdcd Raw
124 lines · c
1// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.02/*******************************************************************************3 *4 * Module Name: utexcep - Exception code support5 *6 ******************************************************************************/7 8#define EXPORT_ACPI_INTERFACES9 10#define ACPI_DEFINE_EXCEPTION_TABLE11#include <acpi/acpi.h>12#include "accommon.h"13 14#define _COMPONENT          ACPI_UTILITIES15ACPI_MODULE_NAME("utexcep")16 17/*******************************************************************************18 *19 * FUNCTION:    acpi_format_exception20 *21 * PARAMETERS:  status              - The acpi_status code to be formatted22 *23 * RETURN:      A string containing the exception text. A valid pointer is24 *              always returned.25 *26 * DESCRIPTION: This function translates an ACPI exception into an ASCII27 *              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_exception55 *56 * PARAMETERS:  status              - The acpi_status code to be formatted57 *58 * RETURN:      A string containing the exception text. NULL if exception is59 *              not valid.60 *61 * DESCRIPTION: This function validates and translates an ACPI exception into62 *              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 code74	 */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