ReactOS 0.4.16-dev-1946-g52006dd
uacpi.h File Reference
#include <uacpi/types.h>
#include <uacpi/status.h>
#include <uacpi/kernel_api.h>
#include <uacpi/namespace.h>
Include dependency graph for uacpi.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define UACPI_MAJOR   2
 
#define UACPI_MINOR   1
 
#define UACPI_PATCH   1
 
#define UACPI_STUB_IF_REDUCED_HARDWARE(fn)   fn;
 
#define UACPI_ALWAYS_ERROR_FOR_REDUCED_HARDWARE(fn)   fn;
 
#define UACPI_ALWAYS_OK_FOR_REDUCED_HARDWARE(fn)   fn;
 
#define UACPI_FLAG_BAD_CSUM_FATAL   (1ull << 0)
 
#define UACPI_FLAG_BAD_TBL_SIGNATURE_FATAL   (1ull << 1)
 
#define UACPI_FLAG_BAD_XSDT   (1ull << 2)
 
#define UACPI_FLAG_NO_ACPI_MODE   (1ull << 3)
 
#define UACPI_FLAG_NO_OSI   (1ull << 4)
 
#define UACPI_FLAG_PROACTIVE_TBL_CSUM   (1ull << 5)
 

Functions

uacpi_status uacpi_setup_early_table_access (void *temporary_buffer, uacpi_size buffer_size)
 
uacpi_status uacpi_initialize (uacpi_u64 flags)
 
uacpi_status uacpi_namespace_load (void)
 
uacpi_status uacpi_namespace_initialize (void)
 
uacpi_init_level uacpi_get_current_init_level (void)
 
uacpi_status uacpi_eval (uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **ret)
 
uacpi_status uacpi_eval_simple (uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
 
uacpi_status uacpi_execute (uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args)
 
uacpi_status uacpi_execute_simple (uacpi_namespace_node *parent, const uacpi_char *path)
 
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 **ret)
 
uacpi_status uacpi_eval_simple_typed (uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object_type_bits ret_mask, uacpi_object **ret)
 
uacpi_status uacpi_eval_integer (uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_u64 *out_value)
 
uacpi_status uacpi_eval_simple_integer (uacpi_namespace_node *parent, const uacpi_char *path, uacpi_u64 *out_value)
 
uacpi_status uacpi_eval_buffer_or_string (uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **ret)
 
uacpi_status uacpi_eval_simple_buffer_or_string (uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
 
uacpi_status uacpi_eval_string (uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **ret)
 
uacpi_status uacpi_eval_simple_string (uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
 
uacpi_status uacpi_eval_buffer (uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **ret)
 
uacpi_status uacpi_eval_simple_buffer (uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
 
uacpi_status uacpi_eval_package (uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **ret)
 
uacpi_status uacpi_eval_simple_package (uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
 
uacpi_status uacpi_get_aml_bitness (uacpi_u8 *out_bitness)
 
 UACPI_ALWAYS_OK_FOR_REDUCED_HARDWARE (uacpi_status uacpi_enter_acpi_mode(void)) UACPI_ALWAYS_ERROR_FOR_REDUCED_HARDWARE(uacpi_status uacpi_leave_acpi_mode(void)) uacpi_status uacpi_acquire_global_lock(uacpi_u16 timeout
 
uacpi_status uacpi_release_global_lock (uacpi_u32 seq)
 
void uacpi_state_reset (void)
 

Variables

uacpi_u32out_seq
 

Macro Definition Documentation

◆ UACPI_ALWAYS_ERROR_FOR_REDUCED_HARDWARE

#define UACPI_ALWAYS_ERROR_FOR_REDUCED_HARDWARE (   fn )    fn;

Definition at line 27 of file uacpi.h.

◆ UACPI_ALWAYS_OK_FOR_REDUCED_HARDWARE

#define UACPI_ALWAYS_OK_FOR_REDUCED_HARDWARE (   fn )    fn;

Definition at line 28 of file uacpi.h.

◆ UACPI_FLAG_BAD_CSUM_FATAL

#define UACPI_FLAG_BAD_CSUM_FATAL   (1ull << 0)

Definition at line 64 of file uacpi.h.

◆ UACPI_FLAG_BAD_TBL_SIGNATURE_FATAL

#define UACPI_FLAG_BAD_TBL_SIGNATURE_FATAL   (1ull << 1)

Definition at line 70 of file uacpi.h.

◆ UACPI_FLAG_BAD_XSDT

#define UACPI_FLAG_BAD_XSDT   (1ull << 2)

Definition at line 75 of file uacpi.h.

◆ UACPI_FLAG_NO_ACPI_MODE

#define UACPI_FLAG_NO_ACPI_MODE   (1ull << 3)

Definition at line 82 of file uacpi.h.

◆ UACPI_FLAG_NO_OSI

#define UACPI_FLAG_NO_OSI   (1ull << 4)

Definition at line 89 of file uacpi.h.

◆ UACPI_FLAG_PROACTIVE_TBL_CSUM

#define UACPI_FLAG_PROACTIVE_TBL_CSUM   (1ull << 5)

Definition at line 96 of file uacpi.h.

◆ UACPI_MAJOR

#define UACPI_MAJOR   2

Definition at line 8 of file uacpi.h.

◆ UACPI_MINOR

#define UACPI_MINOR   1

Definition at line 9 of file uacpi.h.

◆ UACPI_PATCH

#define UACPI_PATCH   1

Definition at line 10 of file uacpi.h.

◆ UACPI_STUB_IF_REDUCED_HARDWARE

#define UACPI_STUB_IF_REDUCED_HARDWARE (   fn)    fn;

Definition at line 26 of file uacpi.h.

Function Documentation

◆ UACPI_ALWAYS_OK_FOR_REDUCED_HARDWARE()

UACPI_ALWAYS_OK_FOR_REDUCED_HARDWARE ( uacpi_status   uacpi_enter_acpi_modevoid)

◆ uacpi_eval()

uacpi_status uacpi_eval ( uacpi_namespace_node parent,
const uacpi_char path,
const uacpi_object_array args,
uacpi_object **  ret 
)

Definition at line 699 of file uacpi.c.

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}
method
Definition: dragdrop.c:54
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_namespace_read_lock(void)
Definition: namespace.c:39
@ 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_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
#define uacpi_unlikely(expr)
Definition: compiler.h:58
#define UACPI_NULL
Definition: types.h:33
#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_OUT_OF_MEMORY
Definition: status.h:13
@ UACPI_OBJECT_METHOD
Definition: types.h:113
@ UACPI_OBJECT_UNINITIALIZED
Definition: types.h:105
void uacpi_object_unref(uacpi_object *obj)
Definition: types.c:755
return ret
Definition: mutex.c:146
r parent
Definition: btrfs.c:3010
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_u32 uacpi_shareable_ref(uacpi_handle)
Definition: shareable.c:31
Definition: match.c:390
Definition: dlist.c:348

Referenced by eval_sleep_helper(), ini_eval(), uacpi_eval_simple(), uacpi_eval_typed(), uacpi_execute(), uacpi_execute_simple(), uacpi_set_interrupt_model(), and uacpi_set_resources().

◆ uacpi_eval_buffer()

uacpi_status uacpi_eval_buffer ( uacpi_namespace_node parent,
const uacpi_char path,
const uacpi_object_array args,
uacpi_object **  ret 
)

Definition at line 951 of file uacpi.c.

955{
956 return uacpi_eval_typed(
958 );
959}
@ UACPI_OBJECT_BUFFER_BIT
Definition: types.h:131
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_eval_buffer_or_string()

uacpi_status uacpi_eval_buffer_or_string ( uacpi_namespace_node parent,
const uacpi_char path,
const uacpi_object_array args,
uacpi_object **  ret 
)

Definition at line 909 of file uacpi.c.

913{
914 return uacpi_eval_typed(
915 parent, path, args,
917 ret
918 );
919}
@ UACPI_OBJECT_STRING_BIT
Definition: types.h:130

◆ uacpi_eval_integer()

uacpi_status uacpi_eval_integer ( uacpi_namespace_node parent,
const uacpi_char path,
const uacpi_object_array args,
uacpi_u64 out_value 
)

Definition at line 882 of file uacpi.c.

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}
@ UACPI_STATUS_OK
Definition: status.h:11
@ UACPI_OBJECT_INTEGER_BIT
Definition: types.h:129
uacpi_u64 integer
Definition: types.h:253

Referenced by uacpi_eval_adr(), uacpi_eval_simple_integer(), and uacpi_eval_sta().

◆ uacpi_eval_package()

uacpi_status uacpi_eval_package ( uacpi_namespace_node parent,
const uacpi_char path,
const uacpi_object_array args,
uacpi_object **  ret 
)

Definition at line 970 of file uacpi.c.

974{
975 return uacpi_eval_typed(
977 );
978}
@ UACPI_OBJECT_PACKAGE_BIT
Definition: types.h:132

◆ uacpi_eval_simple()

uacpi_status uacpi_eval_simple ( uacpi_namespace_node parent,
const uacpi_char path,
uacpi_object **  ret 
)

Definition at line 777 of file uacpi.c.

780{
782}
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_eval_simple_buffer()

uacpi_status uacpi_eval_simple_buffer ( uacpi_namespace_node parent,
const uacpi_char path,
uacpi_object **  ret 
)

Definition at line 961 of file uacpi.c.

964{
965 return uacpi_eval_typed(
967 );
968}

Referenced by eval_resource_helper().

◆ uacpi_eval_simple_buffer_or_string()

uacpi_status uacpi_eval_simple_buffer_or_string ( uacpi_namespace_node parent,
const uacpi_char path,
uacpi_object **  ret 
)

Definition at line 921 of file uacpi.c.

◆ uacpi_eval_simple_integer()

uacpi_status uacpi_eval_simple_integer ( uacpi_namespace_node parent,
const uacpi_char path,
uacpi_u64 out_value 
)

Definition at line 902 of file uacpi.c.

905{
906 return uacpi_eval_integer(parent, path, UACPI_NULL, out_value);
907}
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

Referenced by pci_region_attach().

◆ uacpi_eval_simple_package()

uacpi_status uacpi_eval_simple_package ( uacpi_namespace_node parent,
const uacpi_char path,
uacpi_object **  ret 
)

Definition at line 980 of file uacpi.c.

983{
984 return uacpi_eval_typed(
986 );
987}

◆ uacpi_eval_simple_string()

uacpi_status uacpi_eval_simple_string ( uacpi_namespace_node parent,
const uacpi_char path,
uacpi_object **  ret 
)

Definition at line 942 of file uacpi.c.

945{
946 return uacpi_eval_typed(
948 );
949}

◆ uacpi_eval_simple_typed()

uacpi_status uacpi_eval_simple_typed ( uacpi_namespace_node parent,
const uacpi_char path,
uacpi_object_type_bits  ret_mask,
uacpi_object **  ret 
)

Definition at line 874 of file uacpi.c.

878{
879 return uacpi_eval_typed(parent, path, UACPI_NULL, ret_mask, ret);
880}

◆ uacpi_eval_string()

uacpi_status uacpi_eval_string ( uacpi_namespace_node parent,
const uacpi_char path,
const uacpi_object_array args,
uacpi_object **  ret 
)

Definition at line 932 of file uacpi.c.

936{
937 return uacpi_eval_typed(
939 );
940}

◆ uacpi_eval_typed()

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 **  ret 
)

Definition at line 844 of file uacpi.c.

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}
@ UACPI_STATUS_TYPE_MISMATCH
Definition: status.h:22
uacpi_object_type
Definition: types.h:104
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

Referenced by get_slp_type_for_state(), uacpi_eval_buffer(), uacpi_eval_buffer_or_string(), uacpi_eval_cid(), uacpi_eval_cls(), uacpi_eval_dstate_method_template(), uacpi_eval_hid(), uacpi_eval_integer(), uacpi_eval_package(), uacpi_eval_simple_buffer(), uacpi_eval_simple_buffer_or_string(), uacpi_eval_simple_package(), uacpi_eval_simple_string(), uacpi_eval_simple_typed(), uacpi_eval_string(), uacpi_eval_uid(), and uacpi_get_pci_routing_table().

◆ uacpi_execute()

uacpi_status uacpi_execute ( uacpi_namespace_node parent,
const uacpi_char path,
const uacpi_object_array args 
)

Definition at line 784 of file uacpi.c.

788{
790}

◆ uacpi_execute_simple()

uacpi_status uacpi_execute_simple ( uacpi_namespace_node parent,
const uacpi_char path 
)

Definition at line 792 of file uacpi.c.

795{
797}

◆ uacpi_get_aml_bitness()

uacpi_status uacpi_get_aml_bitness ( uacpi_u8 out_bitness)

Definition at line 989 of file uacpi.c.

990{
992
993 *out_bitness = g_uacpi_rt_ctx.is_rev1 ? 32 : 64;
994 return UACPI_STATUS_OK;
995}
#define UACPI_ENSURE_INIT_LEVEL_AT_LEAST(lvl)
Definition: context.h:127
@ UACPI_INIT_LEVEL_SUBSYSTEM_INITIALIZED
Definition: types.h:66
struct uacpi_runtime_context g_uacpi_rt_ctx
Definition: uacpi.c:17

Referenced by uacpi_object_create_integer_safe().

◆ uacpi_get_current_init_level()

uacpi_init_level uacpi_get_current_init_level ( void  )

Definition at line 300 of file uacpi.c.

301{
302 return g_uacpi_rt_ctx.init_level;
303}

Referenced by uacpi_initialize_opregion_node().

◆ uacpi_initialize()

uacpi_status uacpi_initialize ( uacpi_u64  flags)

Definition at line 305 of file uacpi.c.

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}
#define UACPI_ENSURE_INIT_LEVEL_IS(lvl)
Definition: context.h:141
static uacpi_bool uacpi_check_flag(uacpi_u64 flag)
Definition: context.h:90
#define UACPI_SLEEP_TYP_INVALID
Definition: context.h:34
uacpi_status uacpi_initialize_namespace(void)
Definition: namespace.c:159
uacpi_status uacpi_initialize_registers(void)
Definition: registers.c:456
#define UACPI_DEFAULT_MAX_CALL_STACK_DEPTH
Definition: config.h:35
#define UACPI_DEFAULT_LOOP_TIMEOUT_SECONDS
Definition: config.h:26
@ UACPI_INIT_LEVEL_EARLY
Definition: types.h:60
uacpi_status uacpi_initialize_events_early(void)
Definition: event.c:2125
GLbitfield flags
Definition: glext.h:7161
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_status uacpi_initialize_interfaces(void)
Definition: osi.c:90
uacpi_status uacpi_initialize_tables(void)
Definition: tables.c:244
void uacpi_state_reset(void)
Definition: uacpi.c:123
void uacpi_logger_initialize(void)
Definition: uacpi.c:27
void uacpi_context_set_max_call_stack_depth(uacpi_u32 depth)
Definition: uacpi.c:170
static void enter_acpi_mode_initial(void)
Definition: uacpi.c:292
void uacpi_context_set_loop_timeout(uacpi_u32 seconds)
Definition: uacpi.c:162
#define UACPI_FLAG_NO_ACPI_MODE
Definition: uacpi.h:82

Referenced by ACPIInitUACPI().

◆ uacpi_namespace_initialize()

uacpi_status uacpi_namespace_initialize ( void  )

Definition at line 610 of file uacpi.c.

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}
struct _root root
UINT(* handler)(MSIPACKAGE *)
Definition: action.c:7512
#define uacpi_trace(...)
Definition: log.h:18
#define uacpi_info(...)
Definition: log.h:19
uacpi_namespace_node * uacpi_namespace_get_predefined(uacpi_predefined_namespace)
Definition: namespace.c:272
#define UACPI_MAX_DEPTH_ANY
Definition: namespace.h:102
@ UACPI_PREDEFINED_NAMESPACE_SB
Definition: namespace.h:20
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
uint64_t uacpi_u64
Definition: types.h:22
#define UACPI_FMT64(val)
Definition: types.h:62
#define UACPI_PRIu64
Definition: types.h:59
@ UACPI_OBJECT_ANY_BIT
Definition: types.h:146
@ UACPI_INIT_LEVEL_NAMESPACE_INITIALIZED
Definition: types.h:78
@ UACPI_INIT_LEVEL_NAMESPACE_LOADED
Definition: types.h:72
static xmlCharEncodingHandlerPtr * handlers
Definition: encoding.c:1317
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
uacpi_u64 uacpi_kernel_get_nanoseconds_since_boot(void)
Definition: uacpiosl.c:35
uacpi_status uacpi_reg_all_opregions(uacpi_namespace_node *device_node, enum uacpi_address_space space)
Definition: opregion.c:585
static void ini_eval(struct ns_init_context *ctx, uacpi_namespace_node *node)
Definition: uacpi.c:525
static uacpi_u64 elapsed_ms(uacpi_u64 begin_ns, uacpi_u64 end_ns)
Definition: uacpi.c:396
static uacpi_iteration_decision do_sta_ini(void *opaque, uacpi_namespace_node *node, uacpi_u32 depth)
Definition: uacpi.c:556
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

◆ uacpi_namespace_load()

uacpi_status uacpi_namespace_load ( void  )

Definition at line 427 of file uacpi.c.

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}
#define ACPI_DSDT_SIGNATURE
Definition: acpi.h:23
#define uacpi_error(...)
Definition: log.h:21
@ UACPI_LOG_ERROR
Definition: log.h:35
@ UACPI_LOG_WARN
Definition: log.h:29
size_t uacpi_size
Definition: types.h:37
@ UACPI_STATUS_NOT_FOUND
Definition: status.h:17
uacpi_status uacpi_initialize_events(void)
Definition: event.c:2147
uacpi_status uacpi_table_load_with_cause(uacpi_size idx, enum uacpi_table_load_cause cause)
Definition: tables.c:1115
uacpi_status uacpi_table_match(uacpi_size base_idx, uacpi_table_match_callback, uacpi_table *out_table)
Definition: tables.c:935
#define UACPI_NANOSECONDS_PER_SEC
Definition: utilities.h:45
@ UACPI_TABLE_LOAD_CAUSE_INIT
Definition: interpreter.h:12
uacpi_u32 failure_counter
Definition: uacpi.c:373
uacpi_u32 load_counter
Definition: uacpi.c:372
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
static uacpi_bool match_ssdt_or_psdt(struct uacpi_installed_table *tbl)
Definition: uacpi.c:387
static void trace_table_load_failure(struct acpi_sdt_hdr *tbl, uacpi_log_level lvl, uacpi_status ret)
Definition: uacpi.c:376
static uacpi_bool warn_on_bad_timesource(uacpi_u64 begin_ts, uacpi_u64 end_ts)
Definition: uacpi.c:401
const uacpi_char * uacpi_status_to_string(uacpi_status st)
Definition: uacpi.c:50

◆ uacpi_release_global_lock()

uacpi_status uacpi_release_global_lock ( uacpi_u32  seq)

Definition at line 178 of file mutex.c.

179{
181
182 if (uacpi_unlikely(!g_uacpi_rt_ctx.global_lock_acquired ||
183 seq != g_uacpi_rt_ctx.global_lock_seq_num))
185
186 g_uacpi_rt_ctx.global_lock_acquired = UACPI_FALSE;
188 uacpi_release_native_mutex(g_uacpi_rt_ctx.global_lock_mutex->handle);
189
190 return UACPI_STATUS_OK;
191}
static uacpi_status uacpi_release_native_mutex(uacpi_handle mtx)
Definition: mutex.h:25
struct uacpi_runtime_context g_uacpi_rt_ctx
Definition: uacpi.c:17
#define UACPI_FALSE
Definition: types.h:30
static void uacpi_release_global_lock_to_firmware(void)
Definition: mutex.c:105

◆ uacpi_setup_early_table_access()

uacpi_status uacpi_setup_early_table_access ( void temporary_buffer,
uacpi_size  buffer_size 
)

Definition at line 199 of file tables.c.

202{
204
205#ifndef UACPI_BAREBONES_MODE
207#endif
208 if (uacpi_unlikely(early_table_access))
210
213
215
216 tables.dynamic_storage = temporary_buffer;
217 tables.dynamic_capacity = buffer_size / sizeof(struct uacpi_installed_table);
218 early_table_access = UACPI_TRUE;
219
223
224 return ret;
225}
void uacpi_logger_initialize(void)
Definition: uacpi.c:27
#define UACPI_TRUE
Definition: types.h:29
@ UACPI_STATUS_INIT_LEVEL_MISMATCH
Definition: status.h:23
void uacpi_deinitialize_tables(void)
Definition: tables.c:316
static uacpi_status initialize_from_rsdp(void)
Definition: tables.c:159
struct nls_table * tables
Definition: nls_base.c:22
wchar_t const *const size_t const buffer_size
Definition: stat.cpp:95

◆ uacpi_state_reset()

void uacpi_state_reset ( void  )

Definition at line 123 of file uacpi.c.

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}
void uacpi_deinitialize_namespace(void)
Definition: namespace.c:208
void uacpi_deinitialize_registers(void)
Definition: registers.c:465
#define uacpi_memzero(ptr, size)
Definition: stdlib.h:99
void uacpi_deinitialize_events(void)
Definition: event.c:2198
void uacpi_deinitialize_notify(void)
Definition: notify.c:23
void uacpi_deinitialize_opregion(void)
Definition: opregion.c:20
void uacpi_deinitialize_interfaces(void)
Definition: osi.c:106
void uacpi_deinitialize_tables(void)
Definition: tables.c:316
void uacpi_kernel_free_event(uacpi_handle)
Definition: uacpiosl.c:60
void uacpi_kernel_free_spinlock(uacpi_handle)
Definition: uacpiosl.c:92
uacpi_status uacpi_leave_acpi_mode(void)
Definition: uacpi.c:287

Referenced by uacpi_initialize(), uacpi_namespace_initialize(), and uacpi_namespace_load().

Variable Documentation

◆ out_seq

uacpi_u32* out_seq

Definition at line 251 of file uacpi.h.

Referenced by uacpi_acquire_global_lock().