1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44#include <acpi/acpi.h>
45#include "accommon.h"
46#include "acnamesp.h"
47
48#define _COMPONENT ACPI_UTILITIES
49ACPI_MODULE_NAME("utdecode")
50
51
52
53
54
55const u8 acpi_gbl_ns_properties[ACPI_NUM_NS_TYPES] = {
56 ACPI_NS_NORMAL,
57 ACPI_NS_NORMAL,
58 ACPI_NS_NORMAL,
59 ACPI_NS_NORMAL,
60 ACPI_NS_NORMAL,
61 ACPI_NS_NORMAL,
62 ACPI_NS_NEWSCOPE,
63 ACPI_NS_NORMAL,
64 ACPI_NS_NEWSCOPE,
65 ACPI_NS_NORMAL,
66 ACPI_NS_NORMAL,
67 ACPI_NS_NEWSCOPE,
68 ACPI_NS_NEWSCOPE,
69 ACPI_NS_NEWSCOPE,
70 ACPI_NS_NORMAL,
71 ACPI_NS_NORMAL,
72 ACPI_NS_NORMAL,
73 ACPI_NS_NORMAL,
74 ACPI_NS_NORMAL,
75 ACPI_NS_NORMAL,
76 ACPI_NS_NORMAL,
77 ACPI_NS_NORMAL,
78 ACPI_NS_NORMAL,
79 ACPI_NS_NORMAL,
80 ACPI_NS_NORMAL,
81 ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,
82 ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,
83 ACPI_NS_NEWSCOPE,
84 ACPI_NS_NORMAL,
85 ACPI_NS_NORMAL,
86 ACPI_NS_NORMAL
87};
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = {
104 "SystemMemory",
105 "SystemIO",
106 "PCI_Config",
107 "EmbeddedControl",
108 "SMBus",
109 "SystemCMOS",
110 "PCIBARTarget",
111 "IPMI",
112 "GeneralPurposeIo",
113 "GenericSerialBus",
114 "PCC"
115};
116
117char *acpi_ut_get_region_name(u8 space_id)
118{
119
120 if (space_id >= ACPI_USER_REGION_BEGIN) {
121 return ("UserDefinedRegion");
122 } else if (space_id == ACPI_ADR_SPACE_DATA_TABLE) {
123 return ("DataTable");
124 } else if (space_id == ACPI_ADR_SPACE_FIXED_HARDWARE) {
125 return ("FunctionalFixedHW");
126 } else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS) {
127 return ("InvalidSpaceId");
128 }
129
130 return (ACPI_CAST_PTR(char, acpi_gbl_region_types[space_id]));
131}
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147static const char *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] = {
148 "PM_Timer",
149 "GlobalLock",
150 "PowerButton",
151 "SleepButton",
152 "RealTimeClock",
153};
154
155char *acpi_ut_get_event_name(u32 event_id)
156{
157
158 if (event_id > ACPI_EVENT_MAX) {
159 return ("InvalidEventID");
160 }
161
162 return (ACPI_CAST_PTR(char, acpi_gbl_event_types[event_id]));
163}
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185static const char acpi_gbl_bad_type[] = "UNDEFINED";
186
187
188
189static const char *acpi_gbl_ns_type_names[] = {
190 "Untyped",
191 "Integer",
192 "String",
193 "Buffer",
194 "Package",
195 "FieldUnit",
196 "Device",
197 "Event",
198 "Method",
199 "Mutex",
200 "Region",
201 "Power",
202 "Processor",
203 "Thermal",
204 "BufferField",
205 "DdbHandle",
206 "DebugObject",
207 "RegionField",
208 "BankField",
209 "IndexField",
210 "Reference",
211 "Alias",
212 "MethodAlias",
213 "Notify",
214 "AddrHandler",
215 "ResourceDesc",
216 "ResourceFld",
217 "Scope",
218 "Extra",
219 "Data",
220 "Invalid"
221};
222
223char *acpi_ut_get_type_name(acpi_object_type type)
224{
225
226 if (type > ACPI_TYPE_INVALID) {
227 return (ACPI_CAST_PTR(char, acpi_gbl_bad_type));
228 }
229
230 return (ACPI_CAST_PTR(char, acpi_gbl_ns_type_names[type]));
231}
232
233char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc)
234{
235
236 if (!obj_desc) {
237 return ("[NULL Object Descriptor]");
238 }
239
240 return (acpi_ut_get_type_name(obj_desc->common.type));
241}
242
243
244
245
246
247
248
249
250
251
252
253
254
255char *acpi_ut_get_node_name(void *object)
256{
257 struct acpi_namespace_node *node = (struct acpi_namespace_node *)object;
258
259
260
261 if (!object) {
262 return ("NULL");
263 }
264
265
266
267 if ((object == ACPI_ROOT_OBJECT) || (object == acpi_gbl_root_node)) {
268 return ("\"\\\" ");
269 }
270
271
272
273 if (ACPI_GET_DESCRIPTOR_TYPE(node) != ACPI_DESC_TYPE_NAMED) {
274 return ("####");
275 }
276
277
278
279
280
281 acpi_ut_repair_name(node->name.ascii);
282
283
284
285 return (node->name.ascii);
286}
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302static const char *acpi_gbl_desc_type_names[] = {
303 "Not a Descriptor",
304 "Cached",
305 "State-Generic",
306 "State-Update",
307 "State-Package",
308 "State-Control",
309 "State-RootParseScope",
310 "State-ParseScope",
311 "State-WalkScope",
312 "State-Result",
313 "State-Notify",
314 "State-Thread",
315 "Walk",
316 "Parser",
317 "Operand",
318 "Node"
319};
320
321char *acpi_ut_get_descriptor_name(void *object)
322{
323
324 if (!object) {
325 return ("NULL OBJECT");
326 }
327
328 if (ACPI_GET_DESCRIPTOR_TYPE(object) > ACPI_DESC_TYPE_MAX) {
329 return ("Not a Descriptor");
330 }
331
332 return (ACPI_CAST_PTR(char,
333 acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE
334 (object)]));
335
336}
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352static const char *acpi_gbl_ref_class_names[] = {
353 "Local",
354 "Argument",
355 "RefOf",
356 "Index",
357 "DdbHandle",
358 "Named Object",
359 "Debug"
360};
361
362const char *acpi_ut_get_reference_name(union acpi_operand_object *object)
363{
364
365 if (!object) {
366 return ("NULL Object");
367 }
368
369 if (ACPI_GET_DESCRIPTOR_TYPE(object) != ACPI_DESC_TYPE_OPERAND) {
370 return ("Not an Operand object");
371 }
372
373 if (object->common.type != ACPI_TYPE_LOCAL_REFERENCE) {
374 return ("Not a Reference object");
375 }
376
377 if (object->reference.class > ACPI_REFCLASS_MAX) {
378 return ("Unknown Reference class");
379 }
380
381 return (acpi_gbl_ref_class_names[object->reference.class]);
382}
383
384#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403static char *acpi_gbl_mutex_names[ACPI_NUM_MUTEX] = {
404 "ACPI_MTX_Interpreter",
405 "ACPI_MTX_Namespace",
406 "ACPI_MTX_Tables",
407 "ACPI_MTX_Events",
408 "ACPI_MTX_Caches",
409 "ACPI_MTX_Memory",
410 "ACPI_MTX_CommandComplete",
411 "ACPI_MTX_CommandReady"
412};
413
414char *acpi_ut_get_mutex_name(u32 mutex_id)
415{
416
417 if (mutex_id > ACPI_MAX_MUTEX) {
418 return ("Invalid Mutex ID");
419 }
420
421 return (acpi_gbl_mutex_names[mutex_id]);
422}
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438static const char *acpi_gbl_generic_notify[ACPI_NOTIFY_MAX + 1] = {
439 "Bus Check",
440 "Device Check",
441 "Device Wake",
442 "Eject Request",
443 "Device Check Light",
444 "Frequency Mismatch",
445 "Bus Mode Mismatch",
446 "Power Fault",
447 "Capabilities Check",
448 "Device PLD Check",
449 "Reserved",
450 "System Locality Update",
451 "Shutdown Request",
452 "System Resource Affinity Update"
453};
454
455static const char *acpi_gbl_device_notify[4] = {
456 "Status Change",
457 "Information Change",
458 "Device-Specific Change",
459 "Device-Specific Change"
460};
461
462static const char *acpi_gbl_processor_notify[4] = {
463 "Performance Capability Change",
464 "C-State Change",
465 "Throttling Capability Change",
466 "Device-Specific Change"
467};
468
469static const char *acpi_gbl_thermal_notify[4] = {
470 "Thermal Status Change",
471 "Thermal Trip Point Change",
472 "Thermal Device List Change",
473 "Thermal Relationship Change"
474};
475
476const char *acpi_ut_get_notify_name(u32 notify_value, acpi_object_type type)
477{
478
479
480
481 if (notify_value <= ACPI_NOTIFY_MAX) {
482 return (acpi_gbl_generic_notify[notify_value]);
483 }
484
485
486
487 if (notify_value <= ACPI_MAX_SYS_NOTIFY) {
488 return ("Reserved");
489 }
490
491
492
493 if (notify_value <= 0x83) {
494 switch (type) {
495 case ACPI_TYPE_ANY:
496 case ACPI_TYPE_DEVICE:
497 return (acpi_gbl_device_notify[notify_value - 0x80]);
498
499 case ACPI_TYPE_PROCESSOR:
500 return (acpi_gbl_processor_notify[notify_value - 0x80]);
501
502 case ACPI_TYPE_THERMAL:
503 return (acpi_gbl_thermal_notify[notify_value - 0x80]);
504
505 default:
506 return ("Target object type does not support notifies");
507 }
508 }
509
510
511
512 if (notify_value <= ACPI_MAX_DEVICE_SPECIFIC_NOTIFY) {
513 return ("Device-Specific");
514 }
515
516
517
518 return ("Hardware-Specific");
519}
520#endif
521
522
523
524
525
526
527
528
529
530
531
532
533
534u8 acpi_ut_valid_object_type(acpi_object_type type)
535{
536
537 if (type > ACPI_TYPE_LOCAL_MAX) {
538
539
540
541 return (FALSE);
542 }
543
544 return (TRUE);
545}
546