33 if (!version_printed) {
36 "starting uACPI, version %d.%d.%d\n",
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";
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";
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";
119 return "<invalid status>";
125#ifndef UACPI_BAREBONES_MODE
135#ifndef UACPI_BAREBONES_MODE
137#ifndef UACPI_REDUCED_HARDWARE
144#ifndef UACPI_REDUCED_HARDWARE
155#if defined(UACPI_KERNEL_INITIALIZATION) && !defined(UACPI_BAREBONES_MODE)
156 uacpi_kernel_deinitialize();
160#ifndef UACPI_BAREBONES_MODE
183#ifndef UACPI_REDUCED_HARDWARE
212 uacpi_error(
"SMI_CMD is not implemented by the firmware\n");
217 uacpi_error(
"mode transition is not implemented by the hardware\n");
223 raw_value = fadt->acpi_enable;
226 raw_value = fadt->acpi_disable;
237 while (stalled_time < (5 * 1000 * 1000)) {
245 uacpi_error(
"hardware time out while changing modes\n");
262 uacpi_trace(
"%s mode already enabled\n", mode_str);
269 "unable to enter %s mode: %s\n",
311#ifdef UACPI_KERNEL_INITIALIZATION
333 goto out_fatal_error;
337 goto out_fatal_error;
341 goto out_fatal_error;
345 goto out_fatal_error;
349 goto out_fatal_error;
353 goto out_fatal_error;
357 goto out_fatal_error;
398 return (end_ns - begin_ns) / (1000ull * 1000ull);
406 reason =
"uacpi_kernel_get_nanoseconds_since_boot() appears to be a stub";
407 goto out_bad_timesource;
411 reason =
"poor time source precision detected";
412 goto out_bad_timesource;
416 reason =
"time source backwards drift detected";
417 goto out_bad_timesource;
437#ifdef UACPI_KERNEL_INITIALIZATION
440 goto out_fatal_error;
448 goto out_fatal_error;
459 for (cur_index = 0;; cur_index = tbl.
index + 1) {
463 goto out_fatal_error;
482 "loaded %u AML blob%s (%u error%s)\n",
490 ops_per_sec /= end_ts - begin_ts;
493 "successfully loaded %u AML blob%s, %"UACPI_PRIu64" ops in "
505 goto out_fatal_error;
546 if (*
value == 0xFFFFFFFF)
578 ctx->thermal_zones++;
621#ifdef UACPI_KERNEL_INITIALIZATION
672 "%zu devices, %zu thermal zones\n",
674 ctx.devices,
ctx.thermal_zones
678 "namespace initialization done: %zu devices, %zu thermal zones\n",
679 ctx.devices,
ctx.thermal_zones
684 "_STA calls: %zu (%zu errors), _INI calls: %zu (%zu errors)\n",
685 ctx.sta_executed,
ctx.sta_errors,
ctx.ini_executed,
690#ifdef UACPI_KERNEL_INITIALIZATION
723 goto out_read_unlock;
731 goto out_read_unlock;
738 goto out_read_unlock;
743 goto out_read_unlock;
751 goto out_read_unlock;
767 goto out_no_write_lock;
799#define TRACE_BAD_RET(path_fmt, type, ...) \
801 "unexpected '%s' object returned by method "path_fmt \
802 ", expected type mask: %08X\n", uacpi_object_type_to_string(type), \
806#define TRACE_NO_RET(path_fmt, ...) \
808 "no value returned from method "path_fmt", expected type mask: " \
809 "%08X\n", __VA_ARGS__ \
840 if (dynamic_abs_path)
862 returned_type =
obj->type;
864 if (ret_mask && (ret_mask & (1 << returned_type)) == 0) {
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
UINT(* handler)(MSIPACKAGE *)
#define ACPI_STA_RESULT_DEVICE_PRESENT
#define ACPI_DSDT_SIGNATURE
#define ACPI_PSDT_SIGNATURE
#define ACPI_STA_RESULT_DEVICE_FUNCTIONING
#define ACPI_SSDT_SIGNATURE
#define UACPI_ENSURE_INIT_LEVEL_AT_LEAST(lvl)
#define UACPI_ENSURE_INIT_LEVEL_IS(lvl)
static uacpi_bool uacpi_check_flag(uacpi_u64 flag)
static uacpi_bool uacpi_is_hardware_reduced(void)
#define UACPI_SLEEP_TYP_INVALID
#define uacpi_log_lvl(lvl,...)
uacpi_status uacpi_namespace_write_unlock(void)
@ UACPI_PERMANENT_ONLY_YES
uacpi_status uacpi_namespace_read_unlock(void)
uacpi_object * uacpi_namespace_node_get_object(const uacpi_namespace_node *node)
uacpi_status uacpi_initialize_namespace(void)
uacpi_status uacpi_namespace_read_lock(void)
void uacpi_deinitialize_namespace(void)
uacpi_status uacpi_namespace_write_lock(void)
@ UACPI_MAY_SEARCH_ABOVE_PARENT_NO
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)
uacpi_status uacpi_initialize_registers(void)
void uacpi_deinitialize_registers(void)
#define uacpi_memzero(ptr, size)
uacpi_object * uacpi_create_object(uacpi_object_type type)
uacpi_status uacpi_object_assign(uacpi_object *dst, uacpi_object *src, enum uacpi_assign_behavior)
void uacpi_method_unref(uacpi_control_method *)
@ UACPI_ASSIGN_BEHAVIOR_DEEP_COPY
uacpi_bool uacpi_namespace_node_is_alias(uacpi_namespace_node *node)
uacpi_namespace_node * uacpi_namespace_get_predefined(uacpi_predefined_namespace)
uacpi_status uacpi_namespace_node_type(const uacpi_namespace_node *node, uacpi_object_type *out_type)
#define UACPI_MAX_DEPTH_ANY
const uacpi_char * uacpi_namespace_node_generate_absolute_path(const uacpi_namespace_node *node)
@ UACPI_PREDEFINED_NAMESPACE_SB
@ UACPI_PREDEFINED_NAMESPACE_TZ
uacpi_namespace_node * uacpi_namespace_root(void)
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)
@ UACPI_REGISTER_FIELD_SCI_EN
uacpi_status uacpi_read_register_field(uacpi_register_field, uacpi_u64 *)
uacpi_status uacpi_write_register(uacpi_register, uacpi_u64)
#define uacpi_unlikely_error(expr)
@ UACPI_STATUS_INVALID_ARGUMENT
@ UACPI_STATUS_AML_OBJECT_ALREADY_EXISTS
@ UACPI_STATUS_AML_OUT_OF_BOUNDS_INDEX
@ UACPI_STATUS_INTERNAL_ERROR
@ UACPI_STATUS_AML_INVALID_RESOURCE
@ UACPI_STATUS_UNIMPLEMENTED
@ UACPI_STATUS_NAMESPACE_NODE_DANGLING
@ UACPI_STATUS_OUT_OF_MEMORY
@ UACPI_STATUS_OVERRIDDEN
@ UACPI_STATUS_INVALID_TABLE_LENGTH
@ UACPI_STATUS_AML_INCOMPATIBLE_OBJECT_TYPE
@ UACPI_STATUS_INVALID_SIGNATURE
@ UACPI_STATUS_NO_RESOURCE_END_TAG
@ UACPI_STATUS_ALREADY_EXISTS
@ UACPI_STATUS_AML_UNDEFINED_REFERENCE
@ UACPI_STATUS_AML_LOOP_TIMEOUT
@ UACPI_STATUS_AML_BAD_ENCODING
@ UACPI_STATUS_AML_INVALID_OPCODE
@ UACPI_STATUS_MAPPING_FAILED
@ UACPI_STATUS_TYPE_MISMATCH
@ UACPI_STATUS_COMPILED_OUT
@ UACPI_STATUS_AML_INVALID_NAMESTRING
@ UACPI_STATUS_HARDWARE_TIMEOUT
@ UACPI_STATUS_AML_CALL_STACK_DEPTH_LIMIT
@ UACPI_STATUS_AML_SYNC_LEVEL_TOO_HIGH
@ UACPI_STATUS_INIT_LEVEL_MISMATCH
@ UACPI_STATUS_NO_HANDLER
@ UACPI_STATUS_BAD_CHECKSUM
@ UACPI_ITERATION_DECISION_NEXT_PEER
@ UACPI_ITERATION_DECISION_CONTINUE
@ UACPI_OBJECT_STRING_BIT
@ UACPI_OBJECT_BUFFER_BIT
@ UACPI_OBJECT_INTEGER_BIT
@ UACPI_OBJECT_PACKAGE_BIT
@ UACPI_INIT_LEVEL_SUBSYSTEM_INITIALIZED
@ UACPI_INIT_LEVEL_NAMESPACE_INITIALIZED
@ UACPI_INIT_LEVEL_NAMESPACE_LOADED
@ UACPI_OBJECT_UNINITIALIZED
@ UACPI_OBJECT_THERMAL_ZONE
void uacpi_object_unref(uacpi_object *obj)
uacpi_status uacpi_initialize_events_early(void)
uacpi_status uacpi_initialize_events(void)
void uacpi_deinitialize_events(void)
static xmlCharEncodingHandlerPtr * handlers
GLint GLint GLsizei GLsizei GLsizei depth
GLuint GLuint GLsizei GLenum type
void uacpi_deinitialize_notify(void)
uacpi_status uacpi_initialize_notify(void)
uacpi_status uacpi_initialize_opregion(void)
void uacpi_install_default_address_space_handlers(void)
uacpi_address_space_handlers * uacpi_node_get_address_space_handlers(uacpi_namespace_node *node)
uacpi_bool uacpi_address_space_handler_is_default(uacpi_address_space_handler *handler)
void uacpi_deinitialize_opregion(void)
void uacpi_deinitialize_interfaces(void)
uacpi_status uacpi_initialize_interfaces(void)
uacpi_bool uacpi_signatures_match(const void *const lhs, const void *const rhs)
#define UACPI_PRI_TBL_HDR
uacpi_status uacpi_table_load_with_cause(uacpi_size idx, enum uacpi_table_load_cause cause)
void uacpi_deinitialize_tables(void)
uacpi_status uacpi_table_match(uacpi_size base_idx, uacpi_table_match_callback, uacpi_table *out_table)
uacpi_status uacpi_initialize_tables(void)
#define UACPI_TABLE_LOADED
#define UACPI_FMT_TBL_HDR(hdr)
#define UACPI_NANOSECONDS_PER_SEC
void uacpi_free_dynamic_string(const uacpi_char *str)
uacpi_status uacpi_execute_control_method(uacpi_namespace_node *scope, uacpi_control_method *method, const uacpi_object_array *args, uacpi_object **ret)
@ UACPI_TABLE_LOAD_CAUSE_INIT
void uacpi_kernel_free_event(uacpi_handle)
void uacpi_kernel_stall(uacpi_u8 usec)
uacpi_u64 uacpi_kernel_get_nanoseconds_since_boot(void)
void uacpi_kernel_free_spinlock(uacpi_handle)
uacpi_status uacpi_reg_all_opregions(uacpi_namespace_node *device_node, enum uacpi_address_space space)
uacpi_u32 uacpi_shareable_ref(uacpi_handle)
uacpi_u32 failure_counter
struct acpi_sdt_hdr * hdr
uacpi_status uacpi_table_unref(uacpi_table *)
uacpi_status uacpi_table_find_by_signature(const uacpi_char *signature, uacpi_table *out_table)
uacpi_status uacpi_eval_simple_string(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
uacpi_status uacpi_eval_simple(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
uacpi_status uacpi_namespace_load(void)
void uacpi_state_reset(void)
static void ini_eval(struct ns_init_context *ctx, uacpi_namespace_node *node)
static enum hw_mode read_mode(void)
void uacpi_logger_initialize(void)
void uacpi_context_set_max_call_stack_depth(uacpi_u32 depth)
uacpi_status uacpi_eval_string(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **ret)
uacpi_init_level uacpi_get_current_init_level(void)
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)
uacpi_status uacpi_eval_simple_buffer(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
static uacpi_status enter_mode(enum hw_mode mode, uacpi_bool *did_change)
uacpi_status uacpi_enter_acpi_mode(void)
static uacpi_bool match_ssdt_or_psdt(struct uacpi_installed_table *tbl)
static uacpi_u64 elapsed_ms(uacpi_u64 begin_ns, uacpi_u64 end_ns)
#define TRACE_BAD_RET(path_fmt, type,...)
static void enter_acpi_mode_initial(void)
uacpi_status uacpi_eval_integer(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_u64 *out_value)
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)
uacpi_status uacpi_namespace_initialize(void)
static uacpi_iteration_decision do_sta_ini(void *opaque, uacpi_namespace_node *node, uacpi_u32 depth)
uacpi_status uacpi_get_aml_bitness(uacpi_u8 *out_bitness)
void uacpi_context_set_proactive_table_checksum(uacpi_bool setting)
uacpi_status uacpi_initialize(uacpi_u64 flags)
uacpi_status uacpi_eval(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **out_obj)
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_leave_acpi_mode(void)
static void trace_table_load_failure(struct acpi_sdt_hdr *tbl, uacpi_log_level lvl, uacpi_status ret)
static uacpi_status set_mode(enum hw_mode mode)
uacpi_status uacpi_execute(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args)
static uacpi_bool warn_on_bad_timesource(uacpi_u64 begin_ts, uacpi_u64 end_ts)
uacpi_status uacpi_eval_simple_integer(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_u64 *out_value)
uacpi_status uacpi_execute_simple(uacpi_namespace_node *parent, const uacpi_char *path)
static uacpi_status sta_eval(struct ns_init_context *ctx, uacpi_namespace_node *node, uacpi_u32 *value)
uacpi_status uacpi_eval_buffer(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **ret)
const uacpi_char * uacpi_status_to_string(uacpi_status st)
uacpi_status uacpi_eval_simple_typed(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object_type_bits ret_mask, uacpi_object **ret)
void uacpi_context_set_log_level(uacpi_log_level lvl)
void uacpi_context_set_loop_timeout(uacpi_u32 seconds)
struct uacpi_runtime_context g_uacpi_rt_ctx
uacpi_status uacpi_eval_package(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **ret)
#define TRACE_NO_RET(path_fmt,...)
uacpi_status uacpi_eval_simple_buffer_or_string(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
uacpi_status uacpi_eval_simple_package(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_object **ret)
uacpi_u32 uacpi_context_get_loop_timeout(void)
#define UACPI_FLAG_PROACTIVE_TBL_CSUM
#define UACPI_FLAG_NO_ACPI_MODE
uacpi_status uacpi_eval_sta(uacpi_namespace_node *, uacpi_u32 *flags)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out