12#ifndef UACPI_BAREBONES_MODE
14#define UACPI_REV_VALUE 2
15#define UACPI_OS_VALUE "Microsoft Windows NT"
17#define MAKE_PREDEFINED(c0, c1, c2, c3) \
19 .name.text = { c0, c1, c2, c3 }, \
20 .flags = UACPI_NAMESPACE_NODE_PREDEFINED \
118 obj->method->args = 1;
277 uacpi_warn(
"requested invalid predefined namespace %d\n",
ns);
311 uacpi_warn(
"attempting to install a dangling namespace node %.4s\n",
356 uacpi_warn(
"attempting to uninstall a dangling namespace node %.4s\n",
385 "refusing to uninstall node %.4s with a child (%.4s)\n",
386 node->name.text,
node->child->name.text
433 "trying to uninstall a node %.4s (%p) not linked to any peer\n",
477 if (bytes_left < 1 || *
cursor ==
'.') {
487 *in_out_size = bytes_left;
525 if (prev_char ==
'^') {
541 cur_node = cur_node->
parent;
559 if (prev_char !=
'^')
563 while (bytes_left != 0) {
572 if (bytes_left != 0 && single_nameseg)
598 goto out_read_unlock;
603 goto out_read_unlock;
608 uacpi_warn(
"denying access to temporary namespace node '%.4s'\n",
611 goto out_read_unlock;
615 *out_node = cur_node;
770 *out_type =
obj->type;
881 cb = walking_up ? ascending_callback : descending_callback;
955 parent, descending_callback, ascending_callback, type_mask, max_depth,
1019 while (
node->parent) {
1031 return node->parent;
1059 offset = bytes_needed - 1;
void user(int argc, const char *argv[])
uacpi_status uacpi_rw_lock_deinit(struct uacpi_rw_lock *lock)
uacpi_status uacpi_rw_lock_init(struct uacpi_rw_lock *lock)
uacpi_status uacpi_rw_unlock_read(struct uacpi_rw_lock *lock)
uacpi_status uacpi_rw_unlock_write(struct uacpi_rw_lock *lock)
uacpi_status uacpi_rw_lock_read(struct uacpi_rw_lock *lock)
uacpi_status uacpi_rw_lock_write(struct uacpi_rw_lock *lock)
#define UACPI_ENSURE_INIT_LEVEL_AT_LEAST(lvl)
static uacpi_bool uacpi_check_flag(uacpi_u64 flag)
struct uacpi_runtime_context g_uacpi_rt_ctx
#define UACPI_NAMESPACE_NODE_FLAG_TEMPORARY
@ UACPI_PERMANENT_ONLY_YES
#define UACPI_NAMESPACE_NODE_FLAG_DANGLING
#define UACPI_NAMESPACE_NODE_FLAG_ALIAS
#define UACPI_NAMESPACE_NODE_PREDEFINED
uacpi_may_search_above_parent
@ UACPI_MAY_SEARCH_ABOVE_PARENT_NO
@ UACPI_MAY_SEARCH_ABOVE_PARENT_YES
#define uacpi_kernel_alloc_zeroed
#define uacpi_free(mem, _)
uacpi_size uacpi_strlen(const uacpi_char *str)
struct uacpi_object * uacpi_create_internal_reference(enum uacpi_reference_kind kind, uacpi_object *child)
uacpi_object * uacpi_create_object(uacpi_object_type type)
@ UACPI_REFERENCE_KIND_NAMED
void uacpi_mutex_unref(uacpi_mutex *)
uacpi_object * uacpi_unwrap_internal_reference(uacpi_object *object)
uacpi_iteration_decision(* uacpi_iteration_callback)(void *user, uacpi_namespace_node *node, uacpi_u32 node_depth)
#define UACPI_MAX_DEPTH_ANY
uacpi_predefined_namespace
@ UACPI_PREDEFINED_NAMESPACE_GPE
@ UACPI_PREDEFINED_NAMESPACE_PR
@ UACPI_PREDEFINED_NAMESPACE_REV
@ UACPI_PREDEFINED_NAMESPACE_MAX
@ UACPI_PREDEFINED_NAMESPACE_ROOT
@ UACPI_PREDEFINED_NAMESPACE_OSI
@ UACPI_PREDEFINED_NAMESPACE_SB
@ UACPI_PREDEFINED_NAMESPACE_SI
@ UACPI_PREDEFINED_NAMESPACE_GL
@ UACPI_PREDEFINED_NAMESPACE_TZ
@ UACPI_PREDEFINED_NAMESPACE_OS
#define uacpi_likely_success(expr)
#define uacpi_unlikely_error(expr)
@ UACPI_STATUS_INVALID_ARGUMENT
@ UACPI_STATUS_INTERNAL_ERROR
@ UACPI_STATUS_NAMESPACE_NODE_DANGLING
@ UACPI_STATUS_OUT_OF_MEMORY
void uacpi_object_ref(uacpi_object *obj)
uacpi_bool uacpi_object_is_one_of(uacpi_object *, uacpi_object_type_bits type_mask)
@ UACPI_ITERATION_DECISION_BREAK
@ UACPI_ITERATION_DECISION_NEXT_PEER
@ UACPI_ITERATION_DECISION_CONTINUE
@ UACPI_INIT_LEVEL_SUBSYSTEM_INITIALIZED
@ UACPI_OBJECT_UNINITIALIZED
@ UACPI_OBJECT_OPERATION_REGION
uacpi_bool uacpi_object_is(uacpi_object *, uacpi_object_type)
void uacpi_object_unref(uacpi_object *obj)
static uacpi_object * make_object_for_predefined(enum uacpi_predefined_namespace ns)
uacpi_bool uacpi_namespace_node_is_alias(uacpi_namespace_node *node)
void uacpi_namespace_node_unref(uacpi_namespace_node *node)
uacpi_status uacpi_namespace_write_unlock(void)
static uacpi_status object_mutate_refcount(uacpi_object *obj, void(*cb)(uacpi_object *))
uacpi_namespace_node * uacpi_namespace_node_parent(uacpi_namespace_node *node)
uacpi_status uacpi_namespace_node_is(const uacpi_namespace_node *node, uacpi_object_type type, uacpi_bool *out)
static uacpi_object_name segment_to_name(const uacpi_char **string, uacpi_size *in_out_size)
uacpi_object * uacpi_namespace_node_get_object_typed(const uacpi_namespace_node *node, uacpi_object_type_bits type_mask)
uacpi_status uacpi_namespace_for_each_child_simple(uacpi_namespace_node *parent, uacpi_iteration_callback callback, void *user)
uacpi_namespace_node * uacpi_namespace_node_find_sub_node(uacpi_namespace_node *parent, uacpi_object_name name)
uacpi_status uacpi_namespace_node_type_unlocked(const uacpi_namespace_node *node, uacpi_object_type *out_type)
uacpi_status uacpi_namespace_node_type(const uacpi_namespace_node *node, uacpi_object_type *out_type)
void uacpi_free_absolute_path(const uacpi_char *path)
uacpi_status uacpi_namespace_read_unlock(void)
uacpi_bool uacpi_namespace_node_is_dangling(uacpi_namespace_node *node)
const uacpi_char * uacpi_namespace_node_generate_absolute_path(const uacpi_namespace_node *node)
uacpi_namespace_node * uacpi_namespace_get_predefined(enum uacpi_predefined_namespace ns)
#define MAKE_PREDEFINED(c0, c1, c2, c3)
static void free_namespace_node(uacpi_handle handle)
uacpi_status uacpi_namespace_node_reacquire_object(uacpi_object *obj)
uacpi_object * uacpi_namespace_node_get_object(const uacpi_namespace_node *node)
uacpi_status uacpi_initialize_namespace(void)
uacpi_bool uacpi_namespace_node_is_temporary(uacpi_namespace_node *node)
uacpi_namespace_node * uacpi_namespace_node_alloc(uacpi_object_name name)
uacpi_status uacpi_namespace_read_lock(void)
uacpi_size uacpi_namespace_node_depth(const uacpi_namespace_node *node)
static struct uacpi_rw_lock namespace_lock
uacpi_status uacpi_namespace_node_release_object(uacpi_object *obj)
uacpi_status uacpi_namespace_node_is_one_of(const uacpi_namespace_node *node, uacpi_object_type_bits type_mask, uacpi_bool *out)
void uacpi_deinitialize_namespace(void)
uacpi_status uacpi_namespace_node_resolve(uacpi_namespace_node *parent, const uacpi_char *path, enum uacpi_should_lock should_lock, enum uacpi_may_search_above_parent may_search_above_parent, enum uacpi_permanent_only permanent_only, uacpi_namespace_node **out_node)
uacpi_status uacpi_namespace_node_acquire_object(const uacpi_namespace_node *node, uacpi_object **out_obj)
uacpi_status uacpi_namespace_node_install(uacpi_namespace_node *parent, uacpi_namespace_node *node)
uacpi_bool uacpi_namespace_node_is_predefined(uacpi_namespace_node *node)
uacpi_status uacpi_namespace_node_uninstall(uacpi_namespace_node *node)
uacpi_status uacpi_namespace_node_is_one_of_unlocked(const uacpi_namespace_node *node, uacpi_object_type_bits type_mask, uacpi_bool *out)
uacpi_namespace_node * uacpi_namespace_root(void)
uacpi_status uacpi_namespace_node_resolve_from_aml_namepath(uacpi_namespace_node *scope, const uacpi_char *path, uacpi_namespace_node **out_node)
uacpi_status uacpi_namespace_node_next(uacpi_namespace_node *parent, uacpi_namespace_node **iter)
uacpi_status uacpi_namespace_node_next_typed(uacpi_namespace_node *parent, uacpi_namespace_node **iter, uacpi_object_type_bits type_mask)
uacpi_status uacpi_namespace_write_lock(void)
uacpi_status uacpi_namespace_do_for_each_child(uacpi_namespace_node *node, uacpi_iteration_callback descending_callback, uacpi_iteration_callback ascending_callback, uacpi_object_type_bits type_mask, uacpi_u32 max_depth, enum uacpi_should_lock should_lock, enum uacpi_permanent_only permanent_only, void *user)
uacpi_object_name uacpi_namespace_node_name(const uacpi_namespace_node *node)
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)
static void namespace_node_detach_object(uacpi_namespace_node *node)
uacpi_status uacpi_namespace_node_acquire_object_typed(const uacpi_namespace_node *node, uacpi_object_type_bits type_mask, uacpi_object **out_obj)
uacpi_status uacpi_namespace_node_find(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_namespace_node **out_node)
static uacpi_namespace_node predefined_namespaces[UACPI_PREDEFINED_NAMESPACE_MAX+1]
GLint GLint GLsizei GLsizei GLsizei depth
GLuint GLuint GLsizei GLenum type
void uacpi_opregion_uninstall_handler(uacpi_namespace_node *node)
void uacpi_free_dynamic_string(const uacpi_char *str)
uacpi_status uacpi_osi(uacpi_handle handle, uacpi_object *retval)
void * uacpi_kernel_alloc(uacpi_size size)
struct task_struct * current
static IPrintDialogCallback callback
static HMODULE MODULEINFO DWORD cb
static unsigned __int64 next
void uacpi_shareable_init(uacpi_handle)
void uacpi_shareable_unref_and_delete_if_last(uacpi_handle, void(*do_free)(uacpi_handle))
uacpi_u32 uacpi_shareable_ref(uacpi_handle)
static uacpi_bool is_one_of(uacpi_char c, const uacpi_char *list)
struct uacpi_namespace_node * parent
struct uacpi_namespace_node * next
#define UACPI_FLAG_NO_OSI
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out