ReactOS 0.4.16-dev-1561-gba36b90
uacpi.c
Go to the documentation of this file.
1#include <uacpi/uacpi.h>
2#include <uacpi/acpi.h>
3
14#include <uacpi/internal/osi.h>
16
18
20{
21 if (lvl == 0)
23
24 g_uacpi_rt_ctx.log_level = lvl;
25}
26
28{
29 if (g_uacpi_rt_ctx.log_level == 0)
31
32 static uacpi_bool version_printed = UACPI_FALSE;
33 if (!version_printed) {
34 version_printed = UACPI_TRUE;
36 "starting uACPI, version %d.%d.%d\n",
38 );
39 }
40}
41
43{
44 if (setting)
46 else
47 g_uacpi_rt_ctx.flags &= ~UACPI_FLAG_PROACTIVE_TBL_CSUM;
48}
49
51{
52 switch (st) {
53 case UACPI_STATUS_OK:
54 return "no error";
56 return "failed to map memory";
58 return "out of memory";
60 return "bad table checksum";
62 return "invalid table signature";
64 return "invalid table length";
66 return "not found";
68 return "invalid argument";
70 return "unimplemented";
72 return "already exists";
74 return "internal error";
76 return "object type mismatch";
78 return "init level too low/high for this action";
80 return "attempting to use a dangling namespace node";
82 return "no handler found";
84 return "resource template without an end tag";
86 return "this functionality has been compiled out of this build";
88 return "timed out waiting for hardware response";
90 return "wait timed out";
92 return "the requested action has been overridden";
94 return "the requested action has been denied";
95
97 return "AML referenced an undefined object";
99 return "invalid AML name string";
101 return "object already exists";
103 return "invalid AML opcode";
105 return "incompatible AML object type";
107 return "bad AML instruction encoding";
109 return "out of bounds AML index";
111 return "AML attempted to acquire a mutex with a lower sync level";
113 return "invalid resource template encoding or type";
115 return "hanging AML while loop";
117 return "reached maximum AML call stack depth";
118 default:
119 return "<invalid status>";
120 }
121}
122
124{
125#ifndef UACPI_BAREBONES_MODE
131#endif
132
134
135#ifndef UACPI_BAREBONES_MODE
136
137#ifndef UACPI_REDUCED_HARDWARE
138 if (g_uacpi_rt_ctx.was_in_legacy_mode)
140#endif
141
143
144#ifndef UACPI_REDUCED_HARDWARE
145 if (g_uacpi_rt_ctx.global_lock_event)
146 uacpi_kernel_free_event(g_uacpi_rt_ctx.global_lock_event);
147 if (g_uacpi_rt_ctx.global_lock_spinlock)
148 uacpi_kernel_free_spinlock(g_uacpi_rt_ctx.global_lock_spinlock);
149#endif
150
151#endif // !UACPI_BAREBONES_MODE
152
154
155#if defined(UACPI_KERNEL_INITIALIZATION) && !defined(UACPI_BAREBONES_MODE)
156 uacpi_kernel_deinitialize();
157#endif
158}
159
160#ifndef UACPI_BAREBONES_MODE
161
163{
164 if (seconds == 0)
166
167 g_uacpi_rt_ctx.loop_timeout_seconds = seconds;
168}
169
171{
172 if (depth == 0)
174
175 g_uacpi_rt_ctx.max_call_stack_depth = depth;
176}
177
179{
180 return g_uacpi_rt_ctx.loop_timeout_seconds;
181}
182
183#ifndef UACPI_REDUCED_HARDWARE
187};
188
189static enum hw_mode read_mode(void)
190{
192 uacpi_u64 raw_value;
193 struct acpi_fadt *fadt = &g_uacpi_rt_ctx.fadt;
194
195 if (!fadt->smi_cmd)
196 return HW_MODE_ACPI;
197
200 return HW_MODE_LEGACY;
201
202 return raw_value ? HW_MODE_ACPI : HW_MODE_LEGACY;
203}
204
206{
208 uacpi_u64 raw_value, stalled_time = 0;
209 struct acpi_fadt *fadt = &g_uacpi_rt_ctx.fadt;
210
211 if (uacpi_unlikely(!fadt->smi_cmd)) {
212 uacpi_error("SMI_CMD is not implemented by the firmware\n");
214 }
215
216 if (uacpi_unlikely(!fadt->acpi_enable && !fadt->acpi_disable)) {
217 uacpi_error("mode transition is not implemented by the hardware\n");
219 }
220
221 switch (mode) {
222 case HW_MODE_ACPI:
223 raw_value = fadt->acpi_enable;
224 break;
225 case HW_MODE_LEGACY:
226 raw_value = fadt->acpi_disable;
227 break;
228 default:
230 }
231
234 return ret;
235
236 // Allow up to 5 seconds for the hardware to enter the desired mode
237 while (stalled_time < (5 * 1000 * 1000)) {
238 if (read_mode() == mode)
239 return UACPI_STATUS_OK;
240
242 stalled_time += 100;
243 }
244
245 uacpi_error("hardware time out while changing modes\n");
247}
248
250{
252 const uacpi_char *mode_str;
253
255
257 return UACPI_STATUS_OK;
258
259 mode_str = mode == HW_MODE_LEGACY ? "legacy" : "acpi";
260
261 if (read_mode() == mode) {
262 uacpi_trace("%s mode already enabled\n", mode_str);
263 return UACPI_STATUS_OK;
264 }
265
266 ret = set_mode(mode);
269 "unable to enter %s mode: %s\n",
270 mode_str, uacpi_status_to_string(ret)
271 );
272 return ret;
273 }
274
275 uacpi_trace("entered %s mode\n", mode_str);
276 if (did_change != UACPI_NULL)
278
279 return ret;
280}
281
283{
285}
286
288{
290}
291
292static void enter_acpi_mode_initial(void)
293{
294 enter_mode(HW_MODE_ACPI, &g_uacpi_rt_ctx.was_in_legacy_mode);
295}
296#else
297static void enter_acpi_mode_initial(void) { }
298#endif
299
301{
302 return g_uacpi_rt_ctx.init_level;
303}
304
306{
308
310
311#ifdef UACPI_KERNEL_INITIALIZATION
312 ret = uacpi_kernel_initialize(UACPI_INIT_LEVEL_EARLY);
314 return ret;
315#endif
316
318 g_uacpi_rt_ctx.last_sleep_typ_a = UACPI_SLEEP_TYP_INVALID;
319 g_uacpi_rt_ctx.last_sleep_typ_b = UACPI_SLEEP_TYP_INVALID;
322 g_uacpi_rt_ctx.flags = flags;
323
325
326 if (g_uacpi_rt_ctx.loop_timeout_seconds == 0)
328 if (g_uacpi_rt_ctx.max_call_stack_depth == 0)
330
333 goto out_fatal_error;
334
337 goto out_fatal_error;
338
341 goto out_fatal_error;
342
345 goto out_fatal_error;
346
349 goto out_fatal_error;
350
353 goto out_fatal_error;
354
357 goto out_fatal_error;
358
360
363
364 return UACPI_STATUS_OK;
365
366out_fatal_error:
368 return ret;
369}
370
374};
375
377 struct acpi_sdt_hdr *tbl, uacpi_log_level lvl, uacpi_status ret
378)
379{
381 lvl,
382 "failed to load "UACPI_PRI_TBL_HDR": %s\n",
384 );
385}
386
388{
389 if (tbl->flags & UACPI_TABLE_LOADED)
390 return UACPI_FALSE;
391
392 return uacpi_signatures_match(tbl->hdr.signature, ACPI_SSDT_SIGNATURE) ||
394}
395
396static uacpi_u64 elapsed_ms(uacpi_u64 begin_ns, uacpi_u64 end_ns)
397{
398 return (end_ns - begin_ns) / (1000ull * 1000ull);
399}
400
402{
403 const uacpi_char *reason;
404
405 if (uacpi_unlikely(begin_ts == 0 && end_ts == 0)) {
406 reason = "uacpi_kernel_get_nanoseconds_since_boot() appears to be a stub";
407 goto out_bad_timesource;
408 }
409
410 if (uacpi_unlikely(begin_ts == end_ts)) {
411 reason = "poor time source precision detected";
412 goto out_bad_timesource;
413 }
414
415 if (uacpi_unlikely(end_ts < begin_ts)) {
416 reason = "time source backwards drift detected";
417 goto out_bad_timesource;
418 }
419
420 return UACPI_FALSE;
421
422out_bad_timesource:
423 uacpi_warn("%s, this may cause problems\n", reason);
424 return UACPI_TRUE;
425}
426
428{
429 struct uacpi_table tbl;
431 uacpi_u64 begin_ts, end_ts;
432 struct table_load_stats st = { 0 };
433 uacpi_size cur_index;
434
436
437#ifdef UACPI_KERNEL_INITIALIZATION
438 ret = uacpi_kernel_initialize(UACPI_INIT_LEVEL_SUBSYSTEM_INITIALIZED);
440 goto out_fatal_error;
441#endif
442
444
447 uacpi_error("unable to find DSDT: %s\n", uacpi_status_to_string(ret));
448 goto out_fatal_error;
449 }
450
454 st.failure_counter++;
455 }
456 st.load_counter++;
457 uacpi_table_unref(&tbl);
458
459 for (cur_index = 0;; cur_index = tbl.index + 1) {
460 ret = uacpi_table_match(cur_index, match_ssdt_or_psdt, &tbl);
461 if (ret != UACPI_STATUS_OK) {
463 goto out_fatal_error;
464
465 break;
466 }
467
471 st.failure_counter++;
472 }
473 st.load_counter++;
474 uacpi_table_unref(&tbl);
475 }
476
478 g_uacpi_rt_ctx.bad_timesource = warn_on_bad_timesource(begin_ts, end_ts);
479
480 if (uacpi_unlikely(st.failure_counter != 0 || g_uacpi_rt_ctx.bad_timesource)) {
482 "loaded %u AML blob%s (%u error%s)\n",
483 st.load_counter, st.load_counter > 1 ? "s" : "", st.failure_counter,
484 st.failure_counter == 1 ? "" : "s"
485 );
486 } else {
487 uacpi_u64 ops = g_uacpi_rt_ctx.opcodes_executed;
488 uacpi_u64 ops_per_sec = ops * UACPI_NANOSECONDS_PER_SEC;
489
490 ops_per_sec /= end_ts - begin_ts;
491
493 "successfully loaded %u AML blob%s, %"UACPI_PRIu64" ops in "
494 "%"UACPI_PRIu64"ms (avg %"UACPI_PRIu64"/s)\n",
495 st.load_counter, st.load_counter > 1 ? "s" : "",
496 UACPI_FMT64(ops), UACPI_FMT64(elapsed_ms(begin_ts, end_ts)),
497 UACPI_FMT64(ops_per_sec)
498 );
499 }
500
503 uacpi_error("event initialization failed: %s\n",
505 goto out_fatal_error;
506 }
507
509 return UACPI_STATUS_OK;
510
511out_fatal_error:
513 return ret;
514}
515
523};
524
526{
528
531 return;
532
533 ctx->ini_executed++;
535 ctx->ini_errors++;
536}
537
541)
542{
544
546 if (*value == 0xFFFFFFFF)
547 return ret;
548
549 ctx->sta_executed++;
551 ctx->sta_errors++;
552
553 return ret;
554}
555
558)
559{
560 struct ns_init_context *ctx = opaque;
563 uacpi_u32 sta_ret;
564
566
567 // We don't care about aliases
570
572 switch (type) {
575 ctx->devices++;
576 break;
578 ctx->thermal_zones++;
579 break;
580 default:
583 }
584
585 ret = sta_eval(ctx, node, &sta_ret);
588
589 if (!(sta_ret & ACPI_STA_RESULT_DEVICE_PRESENT)) {
590 if (!(sta_ret & ACPI_STA_RESULT_DEVICE_FUNCTIONING))
592
593 /*
594 * ACPI 6.5 specification:
595 * _STA may return bit 0 clear (not present) with bit [3] set (device
596 * is functional). This case is used to indicate a valid device for
597 * which no device driver should be loaded (for example, a bridge
598 * device.) Children of this device may be present and valid. OSPM
599 * should continue enumeration below a device whose _STA returns this
600 * bit combination.
601 */
603 }
604
605 ini_eval(ctx, node);
606
608}
609
611{
612 struct ns_init_context ctx = { 0 };
614 uacpi_u64 begin_ts, end_ts;
618
620
621#ifdef UACPI_KERNEL_INITIALIZATION
622 ret = uacpi_kernel_initialize(UACPI_INIT_LEVEL_NAMESPACE_LOADED);
624 goto out;
625#endif
626
627 /*
628 * Initialization order here is identical to ACPICA because ACPI
629 * specification doesn't really have any detailed steps that explain
630 * how to do it.
631 */
632
634
636
637 // Step 1 - Execute \_INI
638 ini_eval(&ctx, root);
639
640 // Step 2 - Execute \_SB._INI
641 ini_eval(
643 );
644
645 /*
646 * Step 3 - Run _REG methods for all globally installed
647 * address space handlers.
648 */
650 if (handlers) {
651 handler = handlers->head;
652
653 while (handler) {
656
657 handler = handler->next;
658 }
659 }
660
661 // Step 4 - Run all other _STA and _INI methods
665 );
666
668
669 if (uacpi_likely(!g_uacpi_rt_ctx.bad_timesource)) {
671 "namespace initialization done in %"UACPI_PRIu64"ms: "
672 "%zu devices, %zu thermal zones\n",
673 UACPI_FMT64(elapsed_ms(begin_ts, end_ts)),
674 ctx.devices, ctx.thermal_zones
675 );
676 } else {
678 "namespace initialization done: %zu devices, %zu thermal zones\n",
679 ctx.devices, ctx.thermal_zones
680 );
681 }
682
684 "_STA calls: %zu (%zu errors), _INI calls: %zu (%zu errors)\n",
685 ctx.sta_executed, ctx.sta_errors, ctx.ini_executed,
686 ctx.ini_errors
687 );
688
690#ifdef UACPI_KERNEL_INITIALIZATION
691 ret = uacpi_kernel_initialize(UACPI_INIT_LEVEL_NAMESPACE_INITIALIZED);
692out:
695#endif
696 return ret;
697}
698
701 const uacpi_object_array *args, uacpi_object **out_obj
702)
703{
708
710 return ret;
711
714 return ret;
715
716 if (path != UACPI_NULL) {
720 &node
721 );
723 goto out_read_unlock;
724 } else {
725 node = parent;
726 }
727
729 if (uacpi_unlikely(obj == UACPI_NULL)) {
731 goto out_read_unlock;
732 }
733
734 if (obj->type != UACPI_OBJECT_METHOD) {
735 uacpi_object *new_obj;
736
737 if (uacpi_unlikely(out_obj == UACPI_NULL))
738 goto out_read_unlock;
739
741 if (uacpi_unlikely(new_obj == UACPI_NULL)) {
743 goto out_read_unlock;
744 }
745
748 );
750 uacpi_object_unref(new_obj);
751 goto out_read_unlock;
752 }
753 *out_obj = new_obj;
754
755 out_read_unlock:
757 return ret;
758 }
759
760 method = obj->method;
763
764 // Upgrade to a write-lock since we're about to run a method
767 goto out_no_write_lock;
768
771
772out_no_write_lock:
774 return ret;
775}
776
779)
780{
782}
783
787)
788{
790}
791
794)
795{
797}
798
799#define TRACE_BAD_RET(path_fmt, type, ...) \
800 uacpi_warn( \
801 "unexpected '%s' object returned by method "path_fmt \
802 ", expected type mask: %08X\n", uacpi_object_type_to_string(type), \
803 __VA_ARGS__ \
804 )
805
806#define TRACE_NO_RET(path_fmt, ...) \
807 uacpi_warn( \
808 "no value returned from method "path_fmt", expected type mask: " \
809 "%08X\n", __VA_ARGS__ \
810 )
811
814 uacpi_object_type_bits expected_mask, uacpi_object_type actual_type
815)
816{
817 const uacpi_char *abs_path;
818 uacpi_bool dynamic_abs_path = UACPI_FALSE;
819
820 if (parent == UACPI_NULL || (path != UACPI_NULL && path[0] == '\\')) {
821 abs_path = path;
822 } else {
824 dynamic_abs_path = UACPI_TRUE;
825 }
826
827 if (dynamic_abs_path && path != UACPI_NULL) {
828 if (actual_type == UACPI_OBJECT_UNINITIALIZED)
829 TRACE_NO_RET("%s.%s", abs_path, path, expected_mask);
830 else
831 TRACE_BAD_RET("%s.%s", actual_type, abs_path, path, expected_mask);
832 } else {
833 if (actual_type == UACPI_OBJECT_UNINITIALIZED) {
834 TRACE_NO_RET("%s", abs_path, expected_mask);
835 } else {
836 TRACE_BAD_RET("%s", actual_type, abs_path, expected_mask);
837 }
838 }
839
840 if (dynamic_abs_path)
842}
843
847 uacpi_object **out_obj
848)
849{
853
854 if (uacpi_unlikely(out_obj == UACPI_NULL))
856
859 return ret;
860
861 if (obj != UACPI_NULL)
862 returned_type = obj->type;
863
864 if (ret_mask && (ret_mask & (1 << returned_type)) == 0) {
865 trace_invalid_return_type(parent, path, ret_mask, returned_type);
868 }
869
870 *out_obj = obj;
871 return UACPI_STATUS_OK;
872}
873
877)
878{
879 return uacpi_eval_typed(parent, path, UACPI_NULL, ret_mask, ret);
880}
881
884 const uacpi_object_array *args, uacpi_u64 *out_value
885)
886{
887 uacpi_object *int_obj;
889
892 );
894 return ret;
895
896 *out_value = int_obj->integer;
897 uacpi_object_unref(int_obj);
898
899 return UACPI_STATUS_OK;
900}
901
904)
905{
906 return uacpi_eval_integer(parent, path, UACPI_NULL, out_value);
907}
908
912)
913{
914 return uacpi_eval_typed(
915 parent, path, args,
917 ret
918 );
919}
920
923)
924{
925 return uacpi_eval_typed(
928 ret
929 );
930}
931
935)
936{
937 return uacpi_eval_typed(
939 );
940}
941
944)
945{
946 return uacpi_eval_typed(
948 );
949}
950
954)
955{
956 return uacpi_eval_typed(
958 );
959}
960
963)
964{
965 return uacpi_eval_typed(
967 );
968}
969
973)
974{
975 return uacpi_eval_typed(
977 );
978}
979
982)
983{
984 return uacpi_eval_typed(
986 );
987}
988
990{
992
993 *out_bitness = g_uacpi_rt_ctx.is_rev1 ? 32 : 64;
994 return UACPI_STATUS_OK;
995}
996
997#endif // !UACPI_BAREBONES_MODE
struct _root root
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1904
UINT(* handler)(MSIPACKAGE *)
Definition: action.c:7512
method
Definition: dragdrop.c:54
#define ACPI_STA_RESULT_DEVICE_PRESENT
Definition: acpi.h:987
#define ACPI_DSDT_SIGNATURE
Definition: acpi.h:23
#define ACPI_PSDT_SIGNATURE
Definition: acpi.h:25
#define ACPI_STA_RESULT_DEVICE_FUNCTIONING
Definition: acpi.h:990
#define ACPI_SSDT_SIGNATURE
Definition: acpi.h:24
#define UACPI_ENSURE_INIT_LEVEL_AT_LEAST(lvl)
Definition: context.h:127
#define UACPI_ENSURE_INIT_LEVEL_IS(lvl)
Definition: context.h:141
static uacpi_bool uacpi_check_flag(uacpi_u64 flag)
Definition: context.h:90
static uacpi_bool uacpi_is_hardware_reduced(void)
Definition: context.h:100
#define UACPI_SLEEP_TYP_INVALID
Definition: context.h:34
#define UACPI_UNUSED(x)
Definition: helpers.h:7
#define uacpi_trace(...)
Definition: log.h:18
#define uacpi_info(...)
Definition: log.h:19
#define uacpi_error(...)
Definition: log.h:21
#define uacpi_warn(...)
Definition: log.h:20
#define uacpi_log_lvl(lvl,...)
Definition: log.h:14
uacpi_status uacpi_namespace_write_unlock(void)
Definition: namespace.c:54
@ UACPI_PERMANENT_ONLY_YES
Definition: namespace.h:92
uacpi_status uacpi_namespace_read_unlock(void)
Definition: namespace.c:44
uacpi_object * uacpi_namespace_node_get_object(const uacpi_namespace_node *node)
Definition: namespace.c:646
uacpi_status uacpi_initialize_namespace(void)
Definition: namespace.c:159
uacpi_status uacpi_namespace_read_lock(void)
Definition: namespace.c:39
void uacpi_deinitialize_namespace(void)
Definition: namespace.c:208
@ UACPI_SHOULD_LOCK_NO
Definition: namespace.h:96
uacpi_status uacpi_namespace_write_lock(void)
Definition: namespace.c:49
@ UACPI_MAY_SEARCH_ABOVE_PARENT_NO
Definition: namespace.h:86
uacpi_status uacpi_namespace_node_resolve(uacpi_namespace_node *scope, const uacpi_char *path, enum uacpi_should_lock, enum uacpi_may_search_above_parent, enum uacpi_permanent_only, uacpi_namespace_node **out_node)
Definition: namespace.c:491
uacpi_status uacpi_initialize_registers(void)
Definition: registers.c:456
void uacpi_deinitialize_registers(void)
Definition: registers.c:465
#define uacpi_memzero(ptr, size)
Definition: stdlib.h:99
uacpi_object * uacpi_create_object(uacpi_object_type type)
Definition: types.c:327
uacpi_status uacpi_object_assign(uacpi_object *dst, uacpi_object *src, enum uacpi_assign_behavior)
Definition: types.c:1360
void uacpi_method_unref(uacpi_control_method *)
Definition: types.c:648
@ UACPI_ASSIGN_BEHAVIOR_DEEP_COPY
Definition: types.h:276
uacpi_log_level
Definition: log.h:7
@ UACPI_LOG_ERROR
Definition: log.h:35
@ UACPI_LOG_WARN
Definition: log.h:29
uacpi_bool uacpi_namespace_node_is_alias(uacpi_namespace_node *node)
Definition: namespace.c:331
uacpi_namespace_node * uacpi_namespace_get_predefined(uacpi_predefined_namespace)
Definition: namespace.c:272
uacpi_status uacpi_namespace_node_type(const uacpi_namespace_node *node, uacpi_object_type *out_type)
Definition: namespace.c:774
#define UACPI_MAX_DEPTH_ANY
Definition: namespace.h:102
const uacpi_char * uacpi_namespace_node_generate_absolute_path(const uacpi_namespace_node *node)
Definition: namespace.c:1034
@ UACPI_PREDEFINED_NAMESPACE_SB
Definition: namespace.h:20
@ UACPI_PREDEFINED_NAMESPACE_TZ
Definition: namespace.h:22
uacpi_namespace_node * uacpi_namespace_root(void)
Definition: namespace.c:267
uacpi_status uacpi_namespace_for_each_child(uacpi_namespace_node *parent, uacpi_iteration_callback descending_callback, uacpi_iteration_callback ascending_callback, uacpi_object_type_bits type_mask, uacpi_u32 max_depth, void *user)
Definition: namespace.c:948
#define uacpi_likely(expr)
Definition: compiler.h:59
#define uacpi_unlikely(expr)
Definition: compiler.h:58
#define UACPI_DEFAULT_LOG_LEVEL
Definition: config.h:16
#define UACPI_DEFAULT_MAX_CALL_STACK_DEPTH
Definition: config.h:35
#define UACPI_DEFAULT_LOOP_TIMEOUT_SECONDS
Definition: config.h:26
size_t uacpi_size
Definition: types.h:37
uint32_t uacpi_u32
Definition: types.h:21
bool uacpi_bool
Definition: types.h:31
#define UACPI_FALSE
Definition: types.h:30
uint64_t uacpi_u64
Definition: types.h:22
char uacpi_char
Definition: types.h:44
#define UACPI_NULL
Definition: types.h:33
uint8_t uacpi_u8
Definition: types.h:19
#define UACPI_FMT64(val)
Definition: types.h:62
#define UACPI_TRUE
Definition: types.h:29
#define UACPI_PRIu64
Definition: types.h:59
@ UACPI_REGISTER_FIELD_SCI_EN
Definition: registers.h:72
uacpi_status uacpi_read_register_field(uacpi_register_field, uacpi_u64 *)
Definition: registers.c:487
uacpi_status uacpi_write_register(uacpi_register, uacpi_u64)
Definition: registers.c:286
@ UACPI_REGISTER_SMI_CMD
Definition: registers.h:25
#define uacpi_unlikely_error(expr)
Definition: status.h:49
uacpi_status
Definition: status.h:10
@ UACPI_STATUS_INVALID_ARGUMENT
Definition: status.h:18
@ UACPI_STATUS_AML_OBJECT_ALREADY_EXISTS
Definition: status.h:36
@ UACPI_STATUS_AML_OUT_OF_BOUNDS_INDEX
Definition: status.h:40
@ UACPI_STATUS_INTERNAL_ERROR
Definition: status.h:21
@ UACPI_STATUS_NOT_FOUND
Definition: status.h:17
@ UACPI_STATUS_AML_INVALID_RESOURCE
Definition: status.h:42
@ UACPI_STATUS_UNIMPLEMENTED
Definition: status.h:19
@ UACPI_STATUS_NAMESPACE_NODE_DANGLING
Definition: status.h:24
@ UACPI_STATUS_OUT_OF_MEMORY
Definition: status.h:13
@ UACPI_STATUS_OVERRIDDEN
Definition: status.h:30
@ UACPI_STATUS_INVALID_TABLE_LENGTH
Definition: status.h:16
@ UACPI_STATUS_AML_INCOMPATIBLE_OBJECT_TYPE
Definition: status.h:38
@ UACPI_STATUS_INVALID_SIGNATURE
Definition: status.h:15
@ UACPI_STATUS_NO_RESOURCE_END_TAG
Definition: status.h:26
@ UACPI_STATUS_ALREADY_EXISTS
Definition: status.h:20
@ UACPI_STATUS_AML_UNDEFINED_REFERENCE
Definition: status.h:34
@ UACPI_STATUS_AML_LOOP_TIMEOUT
Definition: status.h:43
@ UACPI_STATUS_AML_BAD_ENCODING
Definition: status.h:39
@ UACPI_STATUS_AML_INVALID_OPCODE
Definition: status.h:37
@ UACPI_STATUS_MAPPING_FAILED
Definition: status.h:12
@ UACPI_STATUS_TYPE_MISMATCH
Definition: status.h:22
@ UACPI_STATUS_COMPILED_OUT
Definition: status.h:27
@ UACPI_STATUS_OK
Definition: status.h:11
@ UACPI_STATUS_AML_INVALID_NAMESTRING
Definition: status.h:35
@ UACPI_STATUS_TIMEOUT
Definition: status.h:29
@ UACPI_STATUS_HARDWARE_TIMEOUT
Definition: status.h:28
@ UACPI_STATUS_AML_CALL_STACK_DEPTH_LIMIT
Definition: status.h:44
@ UACPI_STATUS_DENIED
Definition: status.h:31
@ UACPI_STATUS_AML_SYNC_LEVEL_TOO_HIGH
Definition: status.h:41
@ UACPI_STATUS_INIT_LEVEL_MISMATCH
Definition: status.h:23
@ UACPI_STATUS_NO_HANDLER
Definition: status.h:25
@ UACPI_STATUS_BAD_CHECKSUM
Definition: status.h:14
uacpi_iteration_decision
Definition: types.h:28
@ UACPI_ITERATION_DECISION_NEXT_PEER
Definition: types.h:33
@ UACPI_ITERATION_DECISION_CONTINUE
Definition: types.h:29
uacpi_object_type_bits
Definition: types.h:128
@ UACPI_OBJECT_STRING_BIT
Definition: types.h:130
@ UACPI_OBJECT_BUFFER_BIT
Definition: types.h:131
@ UACPI_OBJECT_INTEGER_BIT
Definition: types.h:129
@ UACPI_OBJECT_PACKAGE_BIT
Definition: types.h:132
@ UACPI_OBJECT_ANY_BIT
Definition: types.h:146
uacpi_init_level
Definition: types.h:58
@ UACPI_INIT_LEVEL_EARLY
Definition: types.h:60
@ UACPI_INIT_LEVEL_SUBSYSTEM_INITIALIZED
Definition: types.h:66
@ UACPI_INIT_LEVEL_NAMESPACE_INITIALIZED
Definition: types.h:78
@ UACPI_INIT_LEVEL_NAMESPACE_LOADED
Definition: types.h:72
uacpi_object_type
Definition: types.h:104
@ UACPI_OBJECT_METHOD
Definition: types.h:113
@ UACPI_OBJECT_PROCESSOR
Definition: types.h:117
@ UACPI_OBJECT_DEVICE
Definition: types.h:111
@ UACPI_OBJECT_UNINITIALIZED
Definition: types.h:105
@ UACPI_OBJECT_THERMAL_ZONE
Definition: types.h:118
void uacpi_object_unref(uacpi_object *obj)
Definition: types.c:755
uacpi_status uacpi_initialize_events_early(void)
Definition: event.c:2125
uacpi_status uacpi_initialize_events(void)
Definition: event.c:2147
void uacpi_deinitialize_events(void)
Definition: event.c:2198
return ret
Definition: mutex.c:146
r parent
Definition: btrfs.c:3010
static xmlCharEncodingHandlerPtr * handlers
Definition: encoding.c:1317
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLenum mode
Definition: glext.h:6217
GLbitfield flags
Definition: glext.h:7161
void uacpi_deinitialize_notify(void)
Definition: notify.c:23
uacpi_status uacpi_initialize_notify(void)
Definition: notify.c:14
uacpi_status uacpi_initialize_opregion(void)
Definition: opregion.c:15
void uacpi_install_default_address_space_handlers(void)
uacpi_address_space_handlers * uacpi_node_get_address_space_handlers(uacpi_namespace_node *node)
Definition: opregion.c:170
uacpi_bool uacpi_address_space_handler_is_default(uacpi_address_space_handler *handler)
Definition: opregion.c:408
void uacpi_deinitialize_opregion(void)
Definition: opregion.c:20
void uacpi_deinitialize_interfaces(void)
Definition: osi.c:106
uacpi_status uacpi_initialize_interfaces(void)
Definition: osi.c:90
uacpi_bool uacpi_signatures_match(const void *const lhs, const void *const rhs)
Definition: tables.c:415
#define UACPI_PRI_TBL_HDR
Definition: tables.h:69
uacpi_status uacpi_table_load_with_cause(uacpi_size idx, enum uacpi_table_load_cause cause)
Definition: tables.c:1115
void uacpi_deinitialize_tables(void)
Definition: tables.c:316
uacpi_status uacpi_table_match(uacpi_size base_idx, uacpi_table_match_callback, uacpi_table *out_table)
Definition: tables.c:935
uacpi_status uacpi_initialize_tables(void)
Definition: tables.c:244
#define UACPI_TABLE_LOADED
Definition: tables.h:26
#define UACPI_FMT_TBL_HDR(hdr)
Definition: tables.h:70
#define UACPI_NANOSECONDS_PER_SEC
Definition: utilities.h:45
void uacpi_free_dynamic_string(const uacpi_char *str)
Definition: utilities.c:1135
uacpi_status uacpi_execute_control_method(uacpi_namespace_node *scope, uacpi_control_method *method, const uacpi_object_array *args, uacpi_object **ret)
Definition: interpreter.c:5934
@ UACPI_TABLE_LOAD_CAUSE_INIT
Definition: interpreter.h:12
void uacpi_kernel_free_event(uacpi_handle)
Definition: uacpiosl.c:60
void uacpi_kernel_stall(uacpi_u8 usec)
Definition: uacpiosl.c:42
uacpi_u64 uacpi_kernel_get_nanoseconds_since_boot(void)
Definition: uacpiosl.c:35
void uacpi_kernel_free_spinlock(uacpi_handle)
Definition: uacpiosl.c:92
uacpi_status uacpi_reg_all_opregions(uacpi_namespace_node *device_node, enum uacpi_address_space space)
Definition: opregion.c:585
static int did_change
Definition: io.c:51
uacpi_u32 uacpi_shareable_ref(uacpi_handle)
Definition: shareable.c:31
Definition: match.c:390
uacpi_size sta_errors
Definition: uacpi.c:520
uacpi_size devices
Definition: uacpi.c:521
uacpi_size thermal_zones
Definition: uacpi.c:522
uacpi_size sta_executed
Definition: uacpi.c:519
uacpi_size ini_executed
Definition: uacpi.c:517
uacpi_size ini_errors
Definition: uacpi.c:518
uacpi_u32 failure_counter
Definition: uacpi.c:373
uacpi_u32 load_counter
Definition: uacpi.c:372
uacpi_u8 flags
Definition: tables.h:29
struct acpi_sdt_hdr hdr
Definition: tables.h:21
uacpi_u64 integer
Definition: types.h:253
struct acpi_sdt_hdr * hdr
Definition: tables.h:27
uacpi_size index
Definition: tables.h:31
uacpi_status uacpi_table_unref(uacpi_table *)
Definition: tables.c:1158
uacpi_status uacpi_table_find_by_signature(const uacpi_char *signature, uacpi_table *out_table)
Definition: tables.c:975
uacpi_status uacpi_eval_simple_string(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
Definition: uacpi.c:942
uacpi_status uacpi_eval_simple(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
Definition: uacpi.c:777
uacpi_status uacpi_namespace_load(void)
Definition: uacpi.c:427
void uacpi_state_reset(void)
Definition: uacpi.c:123
static void ini_eval(struct ns_init_context *ctx, uacpi_namespace_node *node)
Definition: uacpi.c:525
static enum hw_mode read_mode(void)
Definition: uacpi.c:189
void uacpi_logger_initialize(void)
Definition: uacpi.c:27
void uacpi_context_set_max_call_stack_depth(uacpi_u32 depth)
Definition: uacpi.c:170
uacpi_status uacpi_eval_string(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **ret)
Definition: uacpi.c:932
hw_mode
Definition: uacpi.c:184
@ HW_MODE_LEGACY
Definition: uacpi.c:186
@ HW_MODE_ACPI
Definition: uacpi.c:185
uacpi_init_level uacpi_get_current_init_level(void)
Definition: uacpi.c:300
uacpi_status uacpi_eval_typed(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object_type_bits ret_mask, uacpi_object **out_obj)
Definition: uacpi.c:844
uacpi_status uacpi_eval_simple_buffer(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
Definition: uacpi.c:961
static uacpi_status enter_mode(enum hw_mode mode, uacpi_bool *did_change)
Definition: uacpi.c:249
uacpi_status uacpi_enter_acpi_mode(void)
Definition: uacpi.c:282
static uacpi_bool match_ssdt_or_psdt(struct uacpi_installed_table *tbl)
Definition: uacpi.c:387
static uacpi_u64 elapsed_ms(uacpi_u64 begin_ns, uacpi_u64 end_ns)
Definition: uacpi.c:396
#define TRACE_BAD_RET(path_fmt, type,...)
Definition: uacpi.c:799
static void enter_acpi_mode_initial(void)
Definition: uacpi.c:292
uacpi_status uacpi_eval_integer(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_u64 *out_value)
Definition: uacpi.c:882
static void trace_invalid_return_type(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object_type_bits expected_mask, uacpi_object_type actual_type)
Definition: uacpi.c:812
uacpi_status uacpi_namespace_initialize(void)
Definition: uacpi.c:610
static uacpi_iteration_decision do_sta_ini(void *opaque, uacpi_namespace_node *node, uacpi_u32 depth)
Definition: uacpi.c:556
uacpi_status uacpi_get_aml_bitness(uacpi_u8 *out_bitness)
Definition: uacpi.c:989
void uacpi_context_set_proactive_table_checksum(uacpi_bool setting)
Definition: uacpi.c:42
uacpi_status uacpi_initialize(uacpi_u64 flags)
Definition: uacpi.c:305
uacpi_status uacpi_eval(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **out_obj)
Definition: uacpi.c:699
uacpi_status uacpi_eval_buffer_or_string(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **ret)
Definition: uacpi.c:909
uacpi_status uacpi_leave_acpi_mode(void)
Definition: uacpi.c:287
static void trace_table_load_failure(struct acpi_sdt_hdr *tbl, uacpi_log_level lvl, uacpi_status ret)
Definition: uacpi.c:376
static uacpi_status set_mode(enum hw_mode mode)
Definition: uacpi.c:205
uacpi_status uacpi_execute(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args)
Definition: uacpi.c:784
static uacpi_bool warn_on_bad_timesource(uacpi_u64 begin_ts, uacpi_u64 end_ts)
Definition: uacpi.c:401
uacpi_status uacpi_eval_simple_integer(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_u64 *out_value)
Definition: uacpi.c:902
uacpi_status uacpi_execute_simple(uacpi_namespace_node *parent, const uacpi_char *path)
Definition: uacpi.c:792
static uacpi_status sta_eval(struct ns_init_context *ctx, uacpi_namespace_node *node, uacpi_u32 *value)
Definition: uacpi.c:538
uacpi_status uacpi_eval_buffer(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **ret)
Definition: uacpi.c:951
const uacpi_char * uacpi_status_to_string(uacpi_status st)
Definition: uacpi.c:50
uacpi_status uacpi_eval_simple_typed(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object_type_bits ret_mask, uacpi_object **ret)
Definition: uacpi.c:874
void uacpi_context_set_log_level(uacpi_log_level lvl)
Definition: uacpi.c:19
void uacpi_context_set_loop_timeout(uacpi_u32 seconds)
Definition: uacpi.c:162
struct uacpi_runtime_context g_uacpi_rt_ctx
Definition: uacpi.c:17
uacpi_status uacpi_eval_package(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **ret)
Definition: uacpi.c:970
#define TRACE_NO_RET(path_fmt,...)
Definition: uacpi.c:806
uacpi_status uacpi_eval_simple_buffer_or_string(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
Definition: uacpi.c:921
uacpi_status uacpi_eval_simple_package(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
Definition: uacpi.c:980
uacpi_u32 uacpi_context_get_loop_timeout(void)
Definition: uacpi.c:178
#define UACPI_PATCH
Definition: uacpi.h:10
#define UACPI_MINOR
Definition: uacpi.h:9
#define UACPI_FLAG_PROACTIVE_TBL_CSUM
Definition: uacpi.h:96
#define UACPI_FLAG_NO_ACPI_MODE
Definition: uacpi.h:82
#define UACPI_MAJOR
Definition: uacpi.h:8
Definition: dlist.c:348
Definition: pdh_main.c:96
uacpi_status uacpi_eval_sta(uacpi_namespace_node *, uacpi_u32 *flags)
Definition: utilities.c:568
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383