0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <acpi/acpi.h>
0011 #include "accommon.h"
0012 #include "acparser.h"
0013 #include "acopcode.h"
0014 #include "amlcode.h"
0015
0016 #define _COMPONENT ACPI_PARSER
0017 ACPI_MODULE_NAME("psopinfo")
0018
0019 static const u8 acpi_gbl_argument_count[] =
0020 { 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 6 };
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode)
0036 {
0037 #ifdef ACPI_DEBUG_OUTPUT
0038 const char *opcode_name = "Unknown AML opcode";
0039 #endif
0040
0041 ACPI_FUNCTION_NAME(ps_get_opcode_info);
0042
0043
0044
0045
0046 if (!(opcode & 0xFF00)) {
0047
0048
0049
0050 return (&acpi_gbl_aml_op_info
0051 [acpi_gbl_short_op_index[(u8)opcode]]);
0052 }
0053
0054 if (((opcode & 0xFF00) == AML_EXTENDED_OPCODE) &&
0055 (((u8)opcode) <= MAX_EXTENDED_OPCODE)) {
0056
0057
0058
0059 return (&acpi_gbl_aml_op_info
0060 [acpi_gbl_long_op_index[(u8)opcode]]);
0061 }
0062 #if defined ACPI_ASL_COMPILER && defined ACPI_DEBUG_OUTPUT
0063 #include "asldefine.h"
0064
0065 switch (opcode) {
0066 case AML_RAW_DATA_BYTE:
0067 opcode_name = "-Raw Data Byte-";
0068 break;
0069
0070 case AML_RAW_DATA_WORD:
0071 opcode_name = "-Raw Data Word-";
0072 break;
0073
0074 case AML_RAW_DATA_DWORD:
0075 opcode_name = "-Raw Data Dword-";
0076 break;
0077
0078 case AML_RAW_DATA_QWORD:
0079 opcode_name = "-Raw Data Qword-";
0080 break;
0081
0082 case AML_RAW_DATA_BUFFER:
0083 opcode_name = "-Raw Data Buffer-";
0084 break;
0085
0086 case AML_RAW_DATA_CHAIN:
0087 opcode_name = "-Raw Data Buffer Chain-";
0088 break;
0089
0090 case AML_PACKAGE_LENGTH:
0091 opcode_name = "-Package Length-";
0092 break;
0093
0094 case AML_UNASSIGNED_OPCODE:
0095 opcode_name = "-Unassigned Opcode-";
0096 break;
0097
0098 case AML_DEFAULT_ARG_OP:
0099 opcode_name = "-Default Arg-";
0100 break;
0101
0102 default:
0103 break;
0104 }
0105 #endif
0106
0107
0108
0109 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%s [%4.4X]\n", opcode_name, opcode));
0110
0111 return (&acpi_gbl_aml_op_info[_UNK]);
0112 }
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127 const char *acpi_ps_get_opcode_name(u16 opcode)
0128 {
0129 #if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
0130
0131 const struct acpi_opcode_info *op;
0132
0133 op = acpi_ps_get_opcode_info(opcode);
0134
0135
0136
0137 return (op->name);
0138
0139 #else
0140 return ("OpcodeName unavailable");
0141
0142 #endif
0143 }
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157 u8 acpi_ps_get_argument_count(u32 op_type)
0158 {
0159
0160 if (op_type <= AML_TYPE_EXEC_6A_0T_1R) {
0161 return (acpi_gbl_argument_count[op_type]);
0162 }
0163
0164 return (0);
0165 }
0166
0167
0168
0169
0170
0171 const u8 acpi_gbl_short_op_index[256] = {
0172
0173
0174 0x00, 0x01, _UNK, _UNK, _UNK, _UNK, 0x02, _UNK,
0175 0x03, _UNK, 0x04, 0x05, 0x06, 0x07, 0x6E, _UNK,
0176 0x08, 0x09, 0x0a, 0x6F, 0x0b, 0x81, _UNK, _UNK,
0177 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0178 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0179 _UNK, _UNK, _UNK, _UNK, _UNK, 0x63, _PFX, _PFX,
0180 0x67, 0x66, 0x68, 0x65, 0x69, 0x64, 0x6A, 0x7D,
0181 0x7F, 0x80, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0182 _UNK, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
0183 _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
0184 _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
0185 _ASC, _ASC, _ASC, _UNK, _PFX, _UNK, _PFX, _ASC,
0186 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
0187 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, _UNK,
0188 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22,
0189 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a,
0190 0x2b, 0x2c, 0x2d, 0x2e, 0x70, 0x71, 0x2f, 0x30,
0191 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x72,
0192 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x73, 0x74,
0193 0x75, 0x76, _UNK, _UNK, 0x77, 0x78, 0x79, 0x7A,
0194 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x60, 0x61,
0195 0x62, 0x82, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0196 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0197 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0198 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0199 _UNK, _UNK, _UNK, _UNK, 0x44, _UNK, _UNK, _UNK,
0200 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0201 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0202 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0203 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0204 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0205 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x45,
0206 };
0207
0208
0209
0210
0211
0212 const u8 acpi_gbl_long_op_index[NUM_EXTENDED_OPCODE] = {
0213
0214
0215 _UNK, 0x46, 0x47, _UNK, _UNK, _UNK, _UNK, _UNK,
0216 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0217 _UNK, _UNK, 0x48, 0x49, _UNK, _UNK, _UNK, _UNK,
0218 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x7B,
0219 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51,
0220 0x52, 0x53, 0x54, _UNK, _UNK, _UNK, _UNK, _UNK,
0221 0x55, 0x56, 0x57, 0x7e, _UNK, _UNK, _UNK, _UNK,
0222 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0223 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0224 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0225 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0226 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0227 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0228 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0229 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0230 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
0231 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0232 0x7C,
0233 };