Branch data Line data Source code
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 15 : : ACPI_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 : : ******************************************************************************/ 30 : 0 : const char *acpi_format_exception(acpi_status status) 31 : : { 32 : 0 : const struct acpi_exception_info *exception; 33 : : 34 : 0 : ACPI_FUNCTION_ENTRY(); 35 : : 36 : 0 : exception = acpi_ut_validate_exception(status); 37 [ # # ]: 0 : if (!exception) { 38 : : 39 : : /* Exception code was not recognized */ 40 : : 41 : 0 : ACPI_ERROR((AE_INFO, 42 : : "Unknown exception code: 0x%8.8X", status)); 43 : : 44 : 0 : return ("UNKNOWN_STATUS_CODE"); 45 : : } 46 : : 47 : 0 : return (exception->name); 48 : : } 49 : : 50 : : ACPI_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 : : ******************************************************************************/ 65 : 0 : const struct acpi_exception_info *acpi_ut_validate_exception(acpi_status status) 66 : : { 67 : 0 : u32 sub_status; 68 : 0 : const struct acpi_exception_info *exception = NULL; 69 : : 70 : 0 : ACPI_FUNCTION_ENTRY(); 71 : : 72 : : /* 73 : : * Status is composed of two parts, a "type" and an actual code 74 : : */ 75 : 0 : sub_status = (status & ~AE_CODE_MASK); 76 : : 77 [ # # # # : 0 : switch (status & AE_CODE_MASK) { # # ] 78 : 0 : case AE_CODE_ENVIRONMENTAL: 79 : : 80 [ # # ]: 0 : if (sub_status <= AE_CODE_ENV_MAX) { 81 : 0 : exception = &acpi_gbl_exception_names_env[sub_status]; 82 : : } 83 : : break; 84 : : 85 : 0 : case AE_CODE_PROGRAMMER: 86 : : 87 [ # # ]: 0 : if (sub_status <= AE_CODE_PGM_MAX) { 88 : 0 : exception = &acpi_gbl_exception_names_pgm[sub_status]; 89 : : } 90 : : break; 91 : : 92 : 0 : case AE_CODE_ACPI_TABLES: 93 : : 94 [ # # ]: 0 : if (sub_status <= AE_CODE_TBL_MAX) { 95 : 0 : exception = &acpi_gbl_exception_names_tbl[sub_status]; 96 : : } 97 : : break; 98 : : 99 : 0 : case AE_CODE_AML: 100 : : 101 [ # # ]: 0 : if (sub_status <= AE_CODE_AML_MAX) { 102 : 0 : exception = &acpi_gbl_exception_names_aml[sub_status]; 103 : : } 104 : : break; 105 : : 106 : 0 : case AE_CODE_CONTROL: 107 : : 108 [ # # ]: 0 : if (sub_status <= AE_CODE_CTRL_MAX) { 109 : 0 : exception = &acpi_gbl_exception_names_ctrl[sub_status]; 110 : : } 111 : : break; 112 : : 113 : : default: 114 : : 115 : : break; 116 : : } 117 : : 118 [ # # ]: 0 : if (!exception || !exception->name) { 119 : 0 : return (NULL); 120 : : } 121 : : 122 : : return (exception); 123 : : }