^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Module Name: utdecode - Utility decoding routines (value-to-string)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (C) 2000 - 2020, Intel Corp.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *****************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <acpi/acpi.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include "accommon.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include "acnamesp.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include "amlcode.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define _COMPONENT ACPI_UTILITIES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) ACPI_MODULE_NAME("utdecode")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * Properties of the ACPI Object Types, both internal and external.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * The table is indexed by values of acpi_object_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) const u8 acpi_gbl_ns_properties[ACPI_NUM_NS_TYPES] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) ACPI_NS_NORMAL, /* 00 Any */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) ACPI_NS_NORMAL, /* 01 Number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) ACPI_NS_NORMAL, /* 02 String */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) ACPI_NS_NORMAL, /* 03 Buffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) ACPI_NS_NORMAL, /* 04 Package */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) ACPI_NS_NORMAL, /* 05 field_unit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) ACPI_NS_NEWSCOPE, /* 06 Device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) ACPI_NS_NORMAL, /* 07 Event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) ACPI_NS_NEWSCOPE, /* 08 Method */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) ACPI_NS_NORMAL, /* 09 Mutex */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) ACPI_NS_NORMAL, /* 10 Region */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) ACPI_NS_NEWSCOPE, /* 11 Power */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) ACPI_NS_NEWSCOPE, /* 12 Processor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) ACPI_NS_NEWSCOPE, /* 13 Thermal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) ACPI_NS_NORMAL, /* 14 buffer_field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) ACPI_NS_NORMAL, /* 15 ddb_handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) ACPI_NS_NORMAL, /* 16 Debug Object */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) ACPI_NS_NORMAL, /* 17 def_field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) ACPI_NS_NORMAL, /* 18 bank_field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) ACPI_NS_NORMAL, /* 19 index_field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) ACPI_NS_NORMAL, /* 20 Reference */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) ACPI_NS_NORMAL, /* 21 Alias */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) ACPI_NS_NORMAL, /* 22 method_alias */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) ACPI_NS_NORMAL, /* 23 Notify */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) ACPI_NS_NORMAL, /* 24 Address Handler */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 25 Resource Desc */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 26 Resource Field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) ACPI_NS_NEWSCOPE, /* 27 Scope */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) ACPI_NS_NORMAL, /* 28 Extra */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) ACPI_NS_NORMAL, /* 29 Data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) ACPI_NS_NORMAL /* 30 Invalid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) * FUNCTION: acpi_ut_get_region_name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) * PARAMETERS: Space ID - ID for the region
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) * RETURN: Decoded region space_id name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) * DESCRIPTION: Translate a Space ID into a name string (Debug only)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) /* Region type decoding */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) "SystemMemory", /* 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) "SystemIO", /* 0x01 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) "PCI_Config", /* 0x02 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) "EmbeddedControl", /* 0x03 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) "SMBus", /* 0x04 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) "SystemCMOS", /* 0x05 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) "PCIBARTarget", /* 0x06 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) "IPMI", /* 0x07 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) "GeneralPurposeIo", /* 0x08 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) "GenericSerialBus", /* 0x09 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) "PCC", /* 0x0A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) "PlatformRtMechanism" /* 0x0B */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) const char *acpi_ut_get_region_name(u8 space_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) if (space_id >= ACPI_USER_REGION_BEGIN) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) return ("UserDefinedRegion");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) } else if (space_id == ACPI_ADR_SPACE_DATA_TABLE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) return ("DataTable");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) } else if (space_id == ACPI_ADR_SPACE_FIXED_HARDWARE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) return ("FunctionalFixedHW");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) } else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) return ("InvalidSpaceId");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) return (acpi_gbl_region_types[space_id]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) * FUNCTION: acpi_ut_get_event_name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) * PARAMETERS: event_id - Fixed event ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) * RETURN: Decoded event ID name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) * DESCRIPTION: Translate a Event ID into a name string (Debug only)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) /* Event type decoding */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) static const char *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) "PM_Timer",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) "GlobalLock",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) "PowerButton",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) "SleepButton",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) "RealTimeClock",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) const char *acpi_ut_get_event_name(u32 event_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) if (event_id > ACPI_EVENT_MAX) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) return ("InvalidEventID");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) return (acpi_gbl_event_types[event_id]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) * FUNCTION: acpi_ut_get_type_name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) * PARAMETERS: type - An ACPI object type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) * RETURN: Decoded ACPI object type name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) * DESCRIPTION: Translate a Type ID into a name string (Debug only)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) * Elements of acpi_gbl_ns_type_names below must match
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) * one-to-one with values of acpi_object_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) * when stored in a table it really means that we have thus far seen no
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) * evidence to indicate what type is actually going to be stored for this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) & entry.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) static const char acpi_gbl_bad_type[] = "UNDEFINED";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) /* Printable names of the ACPI object types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) static const char *acpi_gbl_ns_type_names[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) /* 00 */ "Untyped",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) /* 01 */ "Integer",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) /* 02 */ "String",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) /* 03 */ "Buffer",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) /* 04 */ "Package",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) /* 05 */ "FieldUnit",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) /* 06 */ "Device",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) /* 07 */ "Event",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) /* 08 */ "Method",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) /* 09 */ "Mutex",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) /* 10 */ "Region",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) /* 11 */ "Power",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) /* 12 */ "Processor",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) /* 13 */ "Thermal",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) /* 14 */ "BufferField",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) /* 15 */ "DdbHandle",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) /* 16 */ "DebugObject",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) /* 17 */ "RegionField",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) /* 18 */ "BankField",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) /* 19 */ "IndexField",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) /* 20 */ "Reference",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) /* 21 */ "Alias",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) /* 22 */ "MethodAlias",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) /* 23 */ "Notify",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) /* 24 */ "AddrHandler",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) /* 25 */ "ResourceDesc",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) /* 26 */ "ResourceFld",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) /* 27 */ "Scope",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) /* 28 */ "Extra",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) /* 29 */ "Data",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) /* 30 */ "Invalid"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) const char *acpi_ut_get_type_name(acpi_object_type type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) if (type > ACPI_TYPE_INVALID) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) return (acpi_gbl_bad_type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) return (acpi_gbl_ns_type_names[type]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) const char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) ACPI_FUNCTION_TRACE(ut_get_object_type_name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) if (!obj_desc) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Null Object Descriptor\n"));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) return_STR("[NULL Object Descriptor]");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) /* These descriptor types share a common area */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) if ((ACPI_GET_DESCRIPTOR_TYPE(obj_desc) != ACPI_DESC_TYPE_OPERAND) &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) != ACPI_DESC_TYPE_NAMED)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) "Invalid object descriptor type: 0x%2.2X [%s] (%p)\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) ACPI_GET_DESCRIPTOR_TYPE(obj_desc),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) acpi_ut_get_descriptor_name(obj_desc),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) obj_desc));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) return_STR("Invalid object");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) return_STR(acpi_ut_get_type_name(obj_desc->common.type));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) * FUNCTION: acpi_ut_get_node_name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) * PARAMETERS: object - A namespace node
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) * RETURN: ASCII name of the node
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) * DESCRIPTION: Validate the node and return the node's ACPI name.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) const char *acpi_ut_get_node_name(void *object)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) struct acpi_namespace_node *node = (struct acpi_namespace_node *)object;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) /* Must return a string of exactly 4 characters == ACPI_NAMESEG_SIZE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) if (!object) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) return ("NULL");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) /* Check for Root node */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) if ((object == ACPI_ROOT_OBJECT) || (object == acpi_gbl_root_node)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) return ("\"\\\" ");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) /* Descriptor must be a namespace node */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) if (ACPI_GET_DESCRIPTOR_TYPE(node) != ACPI_DESC_TYPE_NAMED) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) return ("####");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) * Ensure name is valid. The name was validated/repaired when the node
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) * was created, but make sure it has not been corrupted.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) acpi_ut_repair_name(node->name.ascii);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) /* Return the name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) return (node->name.ascii);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) * FUNCTION: acpi_ut_get_descriptor_name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) * PARAMETERS: object - An ACPI object
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) * RETURN: Decoded name of the descriptor type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) * DESCRIPTION: Validate object and return the descriptor type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) /* Printable names of object descriptor types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) static const char *acpi_gbl_desc_type_names[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) /* 00 */ "Not a Descriptor",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) /* 01 */ "Cached Object",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) /* 02 */ "State-Generic",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) /* 03 */ "State-Update",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) /* 04 */ "State-Package",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) /* 05 */ "State-Control",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) /* 06 */ "State-RootParseScope",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) /* 07 */ "State-ParseScope",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) /* 08 */ "State-WalkScope",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) /* 09 */ "State-Result",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) /* 10 */ "State-Notify",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) /* 11 */ "State-Thread",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) /* 12 */ "Tree Walk State",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) /* 13 */ "Parse Tree Op",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) /* 14 */ "Operand Object",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) /* 15 */ "Namespace Node"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) const char *acpi_ut_get_descriptor_name(void *object)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) if (!object) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) return ("NULL OBJECT");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) if (ACPI_GET_DESCRIPTOR_TYPE(object) > ACPI_DESC_TYPE_MAX) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) return ("Not a Descriptor");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) return (acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE(object)]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) * FUNCTION: acpi_ut_get_reference_name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) * PARAMETERS: object - An ACPI reference object
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) * RETURN: Decoded name of the type of reference
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) * DESCRIPTION: Decode a reference object sub-type to a string.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) /* Printable names of reference object sub-types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) static const char *acpi_gbl_ref_class_names[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) /* 00 */ "Local",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) /* 01 */ "Argument",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) /* 02 */ "RefOf",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) /* 03 */ "Index",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) /* 04 */ "DdbHandle",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) /* 05 */ "Named Object",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) /* 06 */ "Debug"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) const char *acpi_ut_get_reference_name(union acpi_operand_object *object)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) if (!object) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) return ("NULL Object");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) if (ACPI_GET_DESCRIPTOR_TYPE(object) != ACPI_DESC_TYPE_OPERAND) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) return ("Not an Operand object");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) if (object->common.type != ACPI_TYPE_LOCAL_REFERENCE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) return ("Not a Reference object");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) if (object->reference.class > ACPI_REFCLASS_MAX) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) return ("Unknown Reference class");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) return (acpi_gbl_ref_class_names[object->reference.class]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) * FUNCTION: acpi_ut_get_mutex_name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) * PARAMETERS: mutex_id - The predefined ID for this mutex.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) * RETURN: Decoded name of the internal mutex
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) /* Names for internal mutex objects, used for debug output */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) static const char *acpi_gbl_mutex_names[ACPI_NUM_MUTEX] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) "ACPI_MTX_Interpreter",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) "ACPI_MTX_Namespace",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) "ACPI_MTX_Tables",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) "ACPI_MTX_Events",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) "ACPI_MTX_Caches",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) "ACPI_MTX_Memory",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) const char *acpi_ut_get_mutex_name(u32 mutex_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) if (mutex_id > ACPI_MAX_MUTEX) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) return ("Invalid Mutex ID");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) return (acpi_gbl_mutex_names[mutex_id]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) * Strings and procedures used for debug only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) * FUNCTION: acpi_ut_get_notify_name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) * PARAMETERS: notify_value - Value from the Notify() request
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) * RETURN: Decoded name for the notify value
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) * DESCRIPTION: Translate a Notify Value to a notify namestring.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) /* Names for Notify() values, used for debug output */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) static const char *acpi_gbl_generic_notify[ACPI_GENERIC_NOTIFY_MAX + 1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) /* 00 */ "Bus Check",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) /* 01 */ "Device Check",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) /* 02 */ "Device Wake",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) /* 03 */ "Eject Request",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) /* 04 */ "Device Check Light",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) /* 05 */ "Frequency Mismatch",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) /* 06 */ "Bus Mode Mismatch",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) /* 07 */ "Power Fault",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) /* 08 */ "Capabilities Check",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) /* 09 */ "Device PLD Check",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) /* 0A */ "Reserved",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) /* 0B */ "System Locality Update",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) /* 0C */ "Reserved (was previously Shutdown Request)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) /* Reserved in ACPI 6.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) /* 0D */ "System Resource Affinity Update",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) /* 0E */ "Heterogeneous Memory Attributes Update",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) /* ACPI 6.2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) /* 0F */ "Error Disconnect Recover"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) /* ACPI 6.3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) static const char *acpi_gbl_device_notify[5] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) /* 80 */ "Status Change",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) /* 81 */ "Information Change",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) /* 82 */ "Device-Specific Change",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) /* 83 */ "Device-Specific Change",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) /* 84 */ "Reserved"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) static const char *acpi_gbl_processor_notify[5] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) /* 80 */ "Performance Capability Change",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) /* 81 */ "C-State Change",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) /* 82 */ "Throttling Capability Change",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) /* 83 */ "Guaranteed Change",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) /* 84 */ "Minimum Excursion"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) static const char *acpi_gbl_thermal_notify[5] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) /* 80 */ "Thermal Status Change",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) /* 81 */ "Thermal Trip Point Change",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) /* 82 */ "Thermal Device List Change",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) /* 83 */ "Thermal Relationship Change",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) /* 84 */ "Reserved"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) const char *acpi_ut_get_notify_name(u32 notify_value, acpi_object_type type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) /* 00 - 0F are "common to all object types" (from ACPI Spec) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) if (notify_value <= ACPI_GENERIC_NOTIFY_MAX) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) return (acpi_gbl_generic_notify[notify_value]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) /* 10 - 7F are reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) if (notify_value <= ACPI_MAX_SYS_NOTIFY) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) return ("Reserved");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) /* 80 - 84 are per-object-type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) if (notify_value <= ACPI_SPECIFIC_NOTIFY_MAX) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) switch (type) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) case ACPI_TYPE_ANY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) case ACPI_TYPE_DEVICE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) return (acpi_gbl_device_notify[notify_value - 0x80]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) case ACPI_TYPE_PROCESSOR:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) return (acpi_gbl_processor_notify[notify_value - 0x80]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) case ACPI_TYPE_THERMAL:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) return (acpi_gbl_thermal_notify[notify_value - 0x80]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) return ("Target object type does not support notifies");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) /* 84 - BF are device-specific */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) if (notify_value <= ACPI_MAX_DEVICE_SPECIFIC_NOTIFY) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) return ("Device-Specific");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) /* C0 and above are hardware-specific */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) return ("Hardware-Specific");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) * FUNCTION: acpi_ut_get_argument_type_name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) * PARAMETERS: arg_type - an ARGP_* parser argument type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) * RETURN: Decoded ARGP_* type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) * DESCRIPTION: Decode an ARGP_* parser type, as defined in the amlcode.h file,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) * and used in the acopcode.h file. For example, ARGP_TERMARG.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) * Used for debug only.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) static const char *acpi_gbl_argument_type[20] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) /* 00 */ "Unknown ARGP",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) /* 01 */ "ByteData",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) /* 02 */ "ByteList",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) /* 03 */ "CharList",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) /* 04 */ "DataObject",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) /* 05 */ "DataObjectList",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) /* 06 */ "DWordData",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) /* 07 */ "FieldList",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) /* 08 */ "Name",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) /* 09 */ "NameString",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) /* 0A */ "ObjectList",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) /* 0B */ "PackageLength",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) /* 0C */ "SuperName",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) /* 0D */ "Target",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) /* 0E */ "TermArg",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) /* 0F */ "TermList",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) /* 10 */ "WordData",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) /* 11 */ "QWordData",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) /* 12 */ "SimpleName",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) /* 13 */ "NameOrRef"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) const char *acpi_ut_get_argument_type_name(u32 arg_type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) if (arg_type > ARGP_MAX) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) return ("Unknown ARGP");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) return (acpi_gbl_argument_type[arg_type]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) * FUNCTION: acpi_ut_valid_object_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) * PARAMETERS: type - Object type to be validated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) * RETURN: TRUE if valid object type, FALSE otherwise
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) * DESCRIPTION: Validate an object type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) u8 acpi_ut_valid_object_type(acpi_object_type type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) if (type > ACPI_TYPE_LOCAL_MAX) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) /* Note: Assumes all TYPEs are contiguous (external/local) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) return (FALSE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) return (TRUE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) }