ReactOS 0.4.16-dev-1946-g52006dd
uacpi.c File Reference
Include dependency graph for uacpi.c:

Go to the source code of this file.

Classes

struct  table_load_stats
 
struct  ns_init_context
 

Macros

#define TRACE_BAD_RET(path_fmt, type, ...)
 
#define TRACE_NO_RET(path_fmt, ...)
 

Enumerations

enum  hw_mode { HW_MODE_ACPI = 0 , HW_MODE_LEGACY = 1 }
 

Functions

void uacpi_context_set_log_level (uacpi_log_level lvl)
 
void uacpi_logger_initialize (void)
 
void uacpi_context_set_proactive_table_checksum (uacpi_bool setting)
 
const uacpi_charuacpi_status_to_string (uacpi_status st)
 
void uacpi_state_reset (void)
 
void uacpi_context_set_loop_timeout (uacpi_u32 seconds)
 
void uacpi_context_set_max_call_stack_depth (uacpi_u32 depth)
 
uacpi_u32 uacpi_context_get_loop_timeout (void)
 
static enum hw_mode read_mode (void)
 
static uacpi_status set_mode (enum hw_mode mode)
 
static uacpi_status enter_mode (enum hw_mode mode, uacpi_bool *did_change)
 
uacpi_status uacpi_enter_acpi_mode (void)
 
uacpi_status uacpi_leave_acpi_mode (void)
 
static void enter_acpi_mode_initial (void)
 
uacpi_init_level uacpi_get_current_init_level (void)
 
uacpi_status uacpi_initialize (uacpi_u64 flags)
 
static void trace_table_load_failure (struct acpi_sdt_hdr *tbl, uacpi_log_level lvl, uacpi_status ret)
 
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)
 
static uacpi_bool warn_on_bad_timesource (uacpi_u64 begin_ts, uacpi_u64 end_ts)
 
uacpi_status uacpi_namespace_load (void)
 
static void ini_eval (struct ns_init_context *ctx, uacpi_namespace_node *node)
 
static uacpi_status sta_eval (struct ns_init_context *ctx, uacpi_namespace_node *node, uacpi_u32 *value)
 
static uacpi_iteration_decision do_sta_ini (void *opaque, uacpi_namespace_node *node, uacpi_u32 depth)
 
uacpi_status uacpi_namespace_initialize (void)
 
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_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)
 
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_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_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)
 

Variables

struct uacpi_runtime_context g_uacpi_rt_ctx = { 0 }
 

Macro Definition Documentation

◆ TRACE_BAD_RET

#define TRACE_BAD_RET (   path_fmt,
  type,
  ... 
)
Value:
"unexpected '%s' object returned by method "path_fmt \
", expected type mask: %08X\n", uacpi_object_type_to_string(type), \
__VA_ARGS__ \
)
#define uacpi_warn(...)
Definition: log.h:20
const uacpi_char * uacpi_object_type_to_string(uacpi_object_type)
Definition: types.c:51
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545

Definition at line 799 of file uacpi.c.

◆ TRACE_NO_RET

#define TRACE_NO_RET (   path_fmt,
  ... 
)
Value:
"no value returned from method "path_fmt", expected type mask: " \
"%08X\n", __VA_ARGS__ \
)

Definition at line 806 of file uacpi.c.

Enumeration Type Documentation

◆ hw_mode

Enumerator
HW_MODE_ACPI 
HW_MODE_LEGACY 

Definition at line 184 of file uacpi.c.

184 {
185 HW_MODE_ACPI = 0,
186 HW_MODE_LEGACY = 1,
187};
@ HW_MODE_LEGACY
Definition: uacpi.c:186
@ HW_MODE_ACPI
Definition: uacpi.c:185

Function Documentation

◆ do_sta_ini()

static uacpi_iteration_decision do_sta_ini ( void opaque,
uacpi_namespace_node node,
uacpi_u32  depth 
)
static

Definition at line 556 of file uacpi.c.

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}
#define ACPI_STA_RESULT_DEVICE_PRESENT
Definition: acpi.h:987
#define ACPI_STA_RESULT_DEVICE_FUNCTIONING
Definition: acpi.h:990
#define UACPI_UNUSED(x)
Definition: helpers.h:7
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
@ UACPI_PREDEFINED_NAMESPACE_TZ
Definition: namespace.h:22
uint32_t uacpi_u32
Definition: types.h:21
#define uacpi_unlikely_error(expr)
Definition: status.h:49
uacpi_status
Definition: status.h:10
@ UACPI_ITERATION_DECISION_NEXT_PEER
Definition: types.h:33
@ UACPI_ITERATION_DECISION_CONTINUE
Definition: types.h:29
uacpi_object_type
Definition: types.h:104
@ 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
return ret
Definition: mutex.c:146
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546
static void ini_eval(struct ns_init_context *ctx, uacpi_namespace_node *node)
Definition: uacpi.c:525
static uacpi_status sta_eval(struct ns_init_context *ctx, uacpi_namespace_node *node, uacpi_u32 *value)
Definition: uacpi.c:538
Definition: dlist.c:348

Referenced by uacpi_namespace_initialize().

◆ elapsed_ms()

static uacpi_u64 elapsed_ms ( uacpi_u64  begin_ns,
uacpi_u64  end_ns 
)
static

Definition at line 396 of file uacpi.c.

397{
398 return (end_ns - begin_ns) / (1000ull * 1000ull);
399}

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

◆ enter_acpi_mode_initial()

static void enter_acpi_mode_initial ( void  )
static

Definition at line 292 of file uacpi.c.

293{
294 enter_mode(HW_MODE_ACPI, &g_uacpi_rt_ctx.was_in_legacy_mode);
295}
static uacpi_status enter_mode(enum hw_mode mode, uacpi_bool *did_change)
Definition: uacpi.c:249
struct uacpi_runtime_context g_uacpi_rt_ctx
Definition: uacpi.c:17

Referenced by uacpi_initialize().

◆ enter_mode()

static uacpi_status enter_mode ( enum hw_mode  mode,
uacpi_bool did_change 
)
static

Definition at line 249 of file uacpi.c.

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}
#define UACPI_ENSURE_INIT_LEVEL_AT_LEAST(lvl)
Definition: context.h:127
static uacpi_bool uacpi_is_hardware_reduced(void)
Definition: context.h:100
#define uacpi_trace(...)
Definition: log.h:18
char uacpi_char
Definition: types.h:44
#define UACPI_NULL
Definition: types.h:33
#define UACPI_TRUE
Definition: types.h:29
@ UACPI_STATUS_OK
Definition: status.h:11
@ UACPI_INIT_LEVEL_SUBSYSTEM_INITIALIZED
Definition: types.h:66
GLenum mode
Definition: glext.h:6217
static int did_change
Definition: io.c:51
static enum hw_mode read_mode(void)
Definition: uacpi.c:189
static uacpi_status set_mode(enum hw_mode mode)
Definition: uacpi.c:205
const uacpi_char * uacpi_status_to_string(uacpi_status st)
Definition: uacpi.c:50

Referenced by enter_acpi_mode_initial(), uacpi_enter_acpi_mode(), and uacpi_leave_acpi_mode().

◆ ini_eval()

static void ini_eval ( struct ns_init_context ctx,
uacpi_namespace_node node 
)
static

Definition at line 525 of file uacpi.c.

526{
528
531 return;
532
533 ctx->ini_executed++;
535 ctx->ini_errors++;
536}
@ UACPI_STATUS_NOT_FOUND
Definition: status.h:17
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

Referenced by do_sta_ini(), and uacpi_namespace_initialize().

◆ match_ssdt_or_psdt()

static uacpi_bool match_ssdt_or_psdt ( struct uacpi_installed_table tbl)
static

Definition at line 387 of file uacpi.c.

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}
#define ACPI_PSDT_SIGNATURE
Definition: acpi.h:25
#define ACPI_SSDT_SIGNATURE
Definition: acpi.h:24
#define UACPI_FALSE
Definition: types.h:30
uacpi_bool uacpi_signatures_match(const void *const lhs, const void *const rhs)
Definition: tables.c:415
#define UACPI_TABLE_LOADED
Definition: tables.h:26
uacpi_u8 flags
Definition: tables.h:29
struct acpi_sdt_hdr hdr
Definition: tables.h:21

Referenced by uacpi_namespace_load().

◆ read_mode()

static enum hw_mode read_mode ( void  )
static

Definition at line 189 of file uacpi.c.

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}
uint64_t uacpi_u64
Definition: types.h:22
@ UACPI_REGISTER_FIELD_SCI_EN
Definition: registers.h:72
uacpi_status uacpi_read_register_field(uacpi_register_field, uacpi_u64 *)
Definition: registers.c:487

Referenced by enter_mode(), and set_mode().

◆ set_mode()

static uacpi_status set_mode ( enum hw_mode  mode)
static

Definition at line 205 of file uacpi.c.

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}
#define uacpi_error(...)
Definition: log.h:21
#define uacpi_unlikely(expr)
Definition: compiler.h:58
uacpi_status uacpi_write_register(uacpi_register, uacpi_u64)
Definition: registers.c:286
@ UACPI_REGISTER_SMI_CMD
Definition: registers.h:25
@ UACPI_STATUS_INVALID_ARGUMENT
Definition: status.h:18
@ UACPI_STATUS_HARDWARE_TIMEOUT
Definition: status.h:28
void uacpi_kernel_stall(uacpi_u8 usec)
Definition: uacpiosl.c:42

Referenced by enter_mode(), and FT_Set_Renderer().

◆ sta_eval()

static uacpi_status sta_eval ( struct ns_init_context ctx,
uacpi_namespace_node node,
uacpi_u32 value 
)
static

Definition at line 538 of file uacpi.c.

542{
544
546 if (*value == 0xFFFFFFFF)
547 return ret;
548
549 ctx->sta_executed++;
551 ctx->sta_errors++;
552
553 return ret;
554}
Definition: pdh_main.c:96
uacpi_status uacpi_eval_sta(uacpi_namespace_node *, uacpi_u32 *flags)
Definition: utilities.c:568

Referenced by do_sta_ini().

◆ trace_invalid_return_type()

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 
)
static

Definition at line 812 of file uacpi.c.

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}
const uacpi_char * uacpi_namespace_node_generate_absolute_path(const uacpi_namespace_node *node)
Definition: namespace.c:1034
bool uacpi_bool
Definition: types.h:31
r parent
Definition: btrfs.c:3010
void uacpi_free_dynamic_string(const uacpi_char *str)
Definition: utilities.c:1135
#define TRACE_BAD_RET(path_fmt, type,...)
Definition: uacpi.c:799
#define TRACE_NO_RET(path_fmt,...)
Definition: uacpi.c:806

Referenced by uacpi_eval_typed().

◆ trace_table_load_failure()

static void trace_table_load_failure ( struct acpi_sdt_hdr *  tbl,
uacpi_log_level  lvl,
uacpi_status  ret 
)
static

Definition at line 376 of file uacpi.c.

379{
381 lvl,
382 "failed to load "UACPI_PRI_TBL_HDR": %s\n",
384 );
385}
#define uacpi_log_lvl(lvl,...)
Definition: log.h:14
#define UACPI_PRI_TBL_HDR
Definition: tables.h:69
#define UACPI_FMT_TBL_HDR(hdr)
Definition: tables.h:70

Referenced by uacpi_namespace_load().

◆ uacpi_context_get_loop_timeout()

uacpi_u32 uacpi_context_get_loop_timeout ( void  )

Definition at line 178 of file uacpi.c.

179{
180 return g_uacpi_rt_ctx.loop_timeout_seconds;
181}

◆ uacpi_context_set_log_level()

void uacpi_context_set_log_level ( uacpi_log_level  lvl)

Definition at line 19 of file uacpi.c.

20{
21 if (lvl == 0)
23
24 g_uacpi_rt_ctx.log_level = lvl;
25}
#define UACPI_DEFAULT_LOG_LEVEL
Definition: config.h:16

Referenced by uacpi_logger_initialize().

◆ uacpi_context_set_loop_timeout()

void uacpi_context_set_loop_timeout ( uacpi_u32  seconds)

Definition at line 162 of file uacpi.c.

163{
164 if (seconds == 0)
166
167 g_uacpi_rt_ctx.loop_timeout_seconds = seconds;
168}
#define UACPI_DEFAULT_LOOP_TIMEOUT_SECONDS
Definition: config.h:26

Referenced by uacpi_initialize().

◆ uacpi_context_set_max_call_stack_depth()

void uacpi_context_set_max_call_stack_depth ( uacpi_u32  depth)

Definition at line 170 of file uacpi.c.

171{
172 if (depth == 0)
174
175 g_uacpi_rt_ctx.max_call_stack_depth = depth;
176}
#define UACPI_DEFAULT_MAX_CALL_STACK_DEPTH
Definition: config.h:35

Referenced by uacpi_initialize().

◆ uacpi_context_set_proactive_table_checksum()

void uacpi_context_set_proactive_table_checksum ( uacpi_bool  setting)

Definition at line 42 of file uacpi.c.

43{
44 if (setting)
46 else
47 g_uacpi_rt_ctx.flags &= ~UACPI_FLAG_PROACTIVE_TBL_CSUM;
48}
#define UACPI_FLAG_PROACTIVE_TBL_CSUM
Definition: uacpi.h:96

◆ uacpi_enter_acpi_mode()

uacpi_status uacpi_enter_acpi_mode ( void  )

Definition at line 282 of file uacpi.c.

283{
285}

◆ uacpi_eval()

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

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
@ UACPI_STATUS_OUT_OF_MEMORY
Definition: status.h:13
@ UACPI_OBJECT_METHOD
Definition: types.h:113
void uacpi_object_unref(uacpi_object *obj)
Definition: types.c:755
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

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_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_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 **  out_obj 
)

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
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}

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
@ 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_leave_acpi_mode()

uacpi_status uacpi_leave_acpi_mode ( void  )

Definition at line 287 of file uacpi.c.

288{
290}

Referenced by uacpi_state_reset().

◆ uacpi_logger_initialize()

void uacpi_logger_initialize ( void  )

Definition at line 27 of file uacpi.c.

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}
#define uacpi_info(...)
Definition: log.h:19
void uacpi_context_set_log_level(uacpi_log_level lvl)
Definition: uacpi.c:19
#define UACPI_PATCH
Definition: uacpi.h:10
#define UACPI_MINOR
Definition: uacpi.h:9
#define UACPI_MAJOR
Definition: uacpi.h:8

Referenced by uacpi_initialize(), and uacpi_setup_early_table_access().

◆ 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_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
#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 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
@ UACPI_LOG_ERROR
Definition: log.h:35
@ UACPI_LOG_WARN
Definition: log.h:29
size_t uacpi_size
Definition: types.h:37
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

◆ 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().

◆ uacpi_status_to_string()

const uacpi_char * uacpi_status_to_string ( uacpi_status  st)

Definition at line 50 of file uacpi.c.

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}
@ 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_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_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_COMPILED_OUT
Definition: status.h:27
@ UACPI_STATUS_AML_INVALID_NAMESTRING
Definition: status.h:35
@ UACPI_STATUS_TIMEOUT
Definition: status.h:29
@ 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

Referenced by ACPIInitUACPI(), async_restore_gpe(), async_run_gpe_handler(), dispatch_gpe(), do_initialize_gpe_block(), enter_mode(), eval_sleep_helper(), get_slp_type_for_state(), initialize_gpes(), report_table_id_find_error(), trace_named_object_lookup_or_creation_failure(), trace_table_load_failure(), uacpi_eval_dstate_method_template(), uacpi_execute_control_method(), uacpi_get_pci_routing_table(), uacpi_initialize_events(), uacpi_namespace_load(), uacpi_notify_all(), and uacpi_trace_region_error().

◆ warn_on_bad_timesource()

static uacpi_bool warn_on_bad_timesource ( uacpi_u64  begin_ts,
uacpi_u64  end_ts 
)
static

Definition at line 401 of file uacpi.c.

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}
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1904

Referenced by uacpi_namespace_load().

Variable Documentation

◆ g_uacpi_rt_ctx

struct uacpi_runtime_context g_uacpi_rt_ctx = { 0 }

Definition at line 17 of file uacpi.c.

Referenced by access_field_unit(), begin_block_execution(), buffer_field_get_read_type(), debug_store_no_recurse(), do_binary_math(), do_notify(), enter_acpi_mode_initial(), enter_sleep_state_hw_full(), enter_sleep_state_hw_reduced(), extract_handlers(), fadt_relative(), find_or_create_gpe_interrupt_ctx(), get_op(), handle_global_lock(), initialize_fadt(), initialize_from_rsdp(), initialize_gpes(), make_object_for_predefined(), ones(), prepare_for_wake_from_sleep_state_hw_full(), prepare_for_wake_from_sleep_state_hw_reduced(), prepare_method_call(), read_mode(), set_mode(), sizeof_int(), split_event_blocks(), truncate_number_if_needed(), uacpi_acquire_aml_mutex(), uacpi_acquire_global_lock(), uacpi_acquire_global_lock_from_firmware(), uacpi_check_flag(), uacpi_context_get_loop_timeout(), uacpi_context_set_log_level(), uacpi_context_set_loop_timeout(), uacpi_context_set_max_call_stack_depth(), uacpi_context_set_proactive_table_checksum(), uacpi_deinitialize_events(), uacpi_deinitialize_namespace(), uacpi_enter_sleep_state(), uacpi_field_unit_get_read_type(), uacpi_get_aml_bitness(), uacpi_get_current_init_level(), uacpi_initialize(), uacpi_initialize_events(), uacpi_initialize_tables(), uacpi_install_address_space_handler_with_flags(), uacpi_install_notify_handler(), uacpi_is_hardware_reduced(), uacpi_logger_initialize(), uacpi_namespace_initialize(), uacpi_namespace_load(), uacpi_node_get_address_space_handlers(), uacpi_notify_all(), uacpi_prepare_for_sleep_state(), uacpi_reboot(), uacpi_release_aml_mutex(), uacpi_release_global_lock(), uacpi_release_global_lock_to_firmware(), uacpi_set_waking_vector(), uacpi_should_log(), uacpi_state_reset(), uacpi_table_fadt(), uacpi_uninstall_notify_handler(), uninstall_gpe_block(), verify_and_install_table(), wake_from_sleep_state_hw_full(), and wake_from_sleep_state_hw_reduced().