17 return "SystemMemory";
23 return "EmbeddedControl";
29 return "PciBarTarget";
33 return "GeneralPurposeIO";
35 return "GenericSerialBus";
39 return "PlatformRtMechanism";
45 return "<vendor specific>";
49#ifndef UACPI_BAREBONES_MODE
55 return "Uninitialized";
73 return "Buffer Index";
79 return "Operation Region";
81 return "Power Resource";
85 return "Thermal Zone";
87 return "Buffer Field";
91 return "<Invalid type>";
112 buf->size = initial_size;
140 pkg->
count = num_elements;
143 for (
i = 0;
i < num_elements; ++
i) {
250 obj->op_region = op_region;
264 obj->field_unit = field_unit;
278 obj->processor = processor;
306 obj->thermal_zone = thermal_zone;
394 "unable to free nested package @%p: not enough memory\n",
425 next_obj =
obj->inner_object;
454 struct free_queue
queue = { 0 };
461 while (free_queue_size(&
queue) != 0) {
462 pkg = *free_queue_last(&
queue);
463 free_queue_pop(&
queue);
481 free_queue_clear(&
queue);
561 "BUG: attempting to free an opregion@%p with a handler attached\n",
566 switch (op_region->
space) {
600 uacpi_free(thermal_zone,
sizeof(*thermal_zone));
610 switch (field_unit->
kind) {
715 uacpi_warn(
"object refcount bug, marking chain @%p as bugged\n",
obj);
745 next_obj =
obj->inner_object;
795 dst->buffer =
src->buffer;
801 src->buffer->data,
src->buffer->size);
815 struct pkg_copy_reqs *reqs,
821 req = pkg_copy_reqs_alloc(reqs);
833 struct pkg_copy_reqs *reqs
844 dst_package =
dst->package;
846 for (
i = 0;
i <
src->count; ++
i) {
859 ret = pkg_copy_reqs_push(reqs, dst_obj, src_obj->
package);
878 struct pkg_copy_reqs reqs = { 0 };
880 pkg_copy_reqs_push(&reqs,
dst,
src->package);
882 while (pkg_copy_reqs_size(&reqs) != 0) {
885 req = *pkg_copy_reqs_last(&reqs);
886 pkg_copy_reqs_pop(&reqs);
893 pkg_copy_reqs_clear(&reqs);
902 dst->mutex->sync_level =
src->mutex->sync_level;
935 dst->package =
src->package;
955 while (refs_to_add--)
971 while (refs_to_remove--)
982 return (1u <<
obj->type);
997#define TYPE_CHECK_USER_OBJ_RET(obj, type_bits, ret) \
999 if (uacpi_unlikely(obj == UACPI_NULL || \
1000 !uacpi_object_is_one_of(obj, type_bits))) \
1004#define TYPE_CHECK_USER_OBJ(obj, type_bits) \
1005 TYPE_CHECK_USER_OBJ_RET(obj, type_bits, UACPI_STATUS_INVALID_ARGUMENT)
1007#define ENSURE_VALID_USER_OBJ_RET(obj, ret) \
1009 if (uacpi_unlikely(obj == UACPI_NULL)) \
1013#define ENSURE_VALID_USER_OBJ(obj) \
1014 ENSURE_VALID_USER_OBJ_RET(obj, UACPI_STATUS_INVALID_ARGUMENT)
1091 scope,
obj->buffer->text, &
node
1111 in.const_bytes[
in.length - 1] != 0x00))
1115 &tmp_obj, dst_buf_size,
in.const_bytes,
in.length
1158 if (bitness == 32 &&
value > 0xFFFFFFFF) {
1162 value &= 0xFFFFFFFF;
1233 out->objects =
obj->package->objects;
1234 out->count =
obj->package->count;
1284 *
out =
obj->inner_object;
1296 out->id =
obj->processor->id;
1297 out->block_address =
obj->processor->block_address;
1298 out->block_length =
obj->processor->block_length;
1308 out->system_level =
obj->power_resource.system_level;
1309 out->resource_order =
obj->power_resource.resource_order;
1331 for (
i = 0;
i <
in.count; ++
i) {
1368 switch (
dst->type) {
1387 switch (
src->type) {
1397 dst->buffer_field =
src->buffer_field;
1401 dst->buffer_index =
src->buffer_index;
1405 dst->integer =
src->integer;
1408 dst->method =
src->method;
1418 dst->op_region =
src->op_region;
1425 dst->field_unit =
src->field_unit;
1432 dst->processor =
src->processor;
1436 dst->device =
src->device;
1440 dst->thermal_zone =
src->thermal_zone;
1476 object =
object->inner_object;
#define UACPI_THREAD_ID_NONE
_In_ fcb _In_ chunk _In_ uint64_t _In_ uint64_t _In_ bool prealloc
UINT(* handler)(MSIPACKAGE *)
void uacpi_namespace_node_unref(uacpi_namespace_node *node)
#define uacpi_kernel_alloc_zeroed
#define uacpi_free(mem, _)
void uacpi_memcpy_zerout(void *dst, const void *src, uacpi_size dst_size, uacpi_size src_size)
uacpi_size uacpi_strlen(const uacpi_char *str)
@ UACPI_PREALLOC_OBJECTS_YES
@ UACPI_PREALLOC_OBJECTS_NO
@ UACPI_REFERENCE_KIND_ARG
@ UACPI_REFERENCE_KIND_REFOF
@ UACPI_REFERENCE_KIND_PKG_INDEX
@ UACPI_FIELD_UNIT_KIND_NORMAL
@ UACPI_FIELD_UNIT_KIND_BANK
@ UACPI_FIELD_UNIT_KIND_INDEX
@ UACPI_ASSIGN_BEHAVIOR_DEEP_COPY
@ UACPI_ASSIGN_BEHAVIOR_SHALLOW_COPY
uacpi_status uacpi_namespace_node_resolve_from_aml_namepath(uacpi_namespace_node *scope, const uacpi_char *path, uacpi_namespace_node **out_node)
#define uacpi_likely_success(expr)
#define uacpi_unlikely_error(expr)
@ UACPI_STATUS_INVALID_ARGUMENT
@ UACPI_STATUS_UNIMPLEMENTED
@ UACPI_STATUS_OUT_OF_MEMORY
@ UACPI_OBJECT_STRING_BIT
@ UACPI_OBJECT_REFERENCE_BIT
@ UACPI_OBJECT_PROCESSOR_BIT
@ UACPI_OBJECT_BUFFER_BIT
@ UACPI_OBJECT_POWER_RESOURCE_BIT
@ UACPI_OBJECT_INTEGER_BIT
@ UACPI_OBJECT_PACKAGE_BIT
@ UACPI_OVERFLOW_TRUNCATE
@ UACPI_OVERFLOW_DISALLOW
@ UACPI_OBJECT_MAX_TYPE_VALUE
@ UACPI_OBJECT_POWER_RESOURCE
@ UACPI_OBJECT_UNINITIALIZED
@ UACPI_OBJECT_BUFFER_FIELD
@ UACPI_OBJECT_OPERATION_REGION
@ UACPI_OBJECT_FIELD_UNIT
@ UACPI_OBJECT_THERMAL_ZONE
@ UACPI_OBJECT_BUFFER_INDEX
@ UACPI_ADDRESS_SPACE_IPMI
@ UACPI_ADDRESS_SPACE_PRM
@ UACPI_ADDRESS_SPACE_SYSTEM_MEMORY
@ UACPI_ADDRESS_SPACE_GENERAL_PURPOSE_IO
@ UACPI_ADDRESS_SPACE_FFIXEDHW
@ UACPI_ADDRESS_SPACE_PCI_CONFIG
@ UACPI_ADDRESS_SPACE_TABLE_DATA
@ UACPI_ADDRESS_SPACE_EMBEDDED_CONTROLLER
@ UACPI_ADDRESS_SPACE_SYSTEM_CMOS
@ UACPI_ADDRESS_SPACE_GENERIC_SERIAL_BUS
@ UACPI_ADDRESS_SPACE_SYSTEM_IO
@ UACPI_ADDRESS_SPACE_SMBUS
@ UACPI_ADDRESS_SPACE_PCC
@ UACPI_ADDRESS_SPACE_PCI_BAR_TARGET
static void make_chain_bugged(uacpi_object *obj)
static uacpi_bool package_alloc(uacpi_object *obj, uacpi_size initial_size, enum uacpi_prealloc_objects prealloc)
static void free_event(uacpi_handle handle)
struct uacpi_object * uacpi_create_internal_reference(enum uacpi_reference_kind kind, uacpi_object *child)
static void free_object(uacpi_object *obj)
uacpi_bool uacpi_object_is_one_of(uacpi_object *obj, uacpi_object_type_bits type_mask)
uacpi_object_type_bits uacpi_object_get_type_bit(uacpi_object *obj)
uacpi_object * uacpi_create_object(uacpi_object_type type)
void uacpi_object_ref(uacpi_object *obj)
uacpi_object_type uacpi_object_get_type(uacpi_object *obj)
static object_ctor object_constructor_table[UACPI_OBJECT_MAX_TYPE_VALUE+1]
static uacpi_status assign_event(uacpi_object *dst, uacpi_object *src, enum uacpi_assign_behavior behavior)
uacpi_status uacpi_object_assign_package(uacpi_object *obj, uacpi_object_array in)
uacpi_status uacpi_object_assign_reference(uacpi_object *obj, uacpi_object *child)
static void free_address_space_handler(uacpi_handle handle)
static uacpi_status assign_package(uacpi_object *dst, uacpi_object *src, enum uacpi_assign_behavior behavior)
uacpi_status uacpi_object_resolve_as_aml_namepath(uacpi_object *obj, uacpi_namespace_node *scope, uacpi_namespace_node **out_node)
static void free_buffer(uacpi_handle handle)
static uacpi_bool free_queue_push(struct free_queue *queue, uacpi_package *pkg)
#define TYPE_CHECK_USER_OBJ(obj, type_bits)
static void free_thermal_zone(uacpi_handle handle)
uacpi_status uacpi_object_get_string_or_buffer(uacpi_object *obj, uacpi_data_view *out)
#define ENSURE_VALID_USER_OBJ(obj)
static void free_device_notify_handlers(uacpi_device_notify_handler *handler)
static void free_plain_no_recurse(uacpi_object *obj, struct free_queue *queue)
static void unref_object_no_recurse(uacpi_object *obj, struct free_queue *queue)
static uacpi_status uacpi_object_do_assign_buffer(uacpi_object *obj, uacpi_data_view in, uacpi_object_type type)
uacpi_status uacpi_object_get_integer(uacpi_object *obj, uacpi_u64 *out)
static uacpi_bool buffer_alloc(uacpi_object *obj, uacpi_size initial_size)
uacpi_bool(* object_ctor)(uacpi_object *obj)
void uacpi_object_detach_child(uacpi_object *parent)
static uacpi_status uacpi_object_do_get_string_or_buffer(uacpi_object *obj, uacpi_data_view *out, uacpi_u32 mask)
static void free_handlers(uacpi_handle handle)
static uacpi_status deep_copy_package(uacpi_object *dst, uacpi_object *src)
static uacpi_status deep_copy_package_no_recurse(uacpi_object *dst, uacpi_package *src, struct pkg_copy_reqs *reqs)
uacpi_status uacpi_object_get_processor_info(uacpi_object *obj, uacpi_processor_info *out)
uacpi_object * uacpi_object_create_package(uacpi_object_array in)
uacpi_bool uacpi_package_fill(uacpi_package *pkg, uacpi_size num_elements, enum uacpi_prealloc_objects prealloc_objects)
uacpi_status uacpi_object_get_buffer(uacpi_object *obj, uacpi_data_view *out)
uacpi_status uacpi_object_assign_string(uacpi_object *obj, uacpi_data_view in)
static uacpi_status buffer_alloc_and_store(uacpi_object *obj, uacpi_size buf_size, const void *src, uacpi_size src_size)
#define ENSURE_VALID_USER_OBJ_RET(obj, ret)
static uacpi_bool field_unit_alloc(uacpi_object *obj)
static uacpi_bool thermal_zone_alloc(uacpi_object *obj)
uacpi_object * uacpi_object_create_integer(uacpi_u64 value)
static uacpi_bool event_alloc(uacpi_object *obj)
const uacpi_char * uacpi_object_type_to_string(uacpi_object_type type)
static void unref_chain_no_recurse(uacpi_object *obj, struct free_queue *queue)
uacpi_status uacpi_object_assign_integer(uacpi_object *obj, uacpi_u64 value)
static uacpi_bool device_alloc(uacpi_object *obj)
const uacpi_char * uacpi_address_space_to_string(enum uacpi_address_space space)
static uacpi_object * uacpi_object_do_create_string_or_buffer(uacpi_data_view view, uacpi_object_type type)
static uacpi_status assign_buffer(uacpi_object *dst, uacpi_object *src, enum uacpi_assign_behavior behavior)
static void free_mutex(uacpi_handle handle)
static void unref_plain_no_recurse(uacpi_object *obj, struct free_queue *queue)
static void free_device(uacpi_handle handle)
static uacpi_bool processor_alloc(uacpi_object *obj)
void uacpi_mutex_unref(uacpi_mutex *mutex)
static void free_method(uacpi_handle handle)
static uacpi_status assign_mutex(uacpi_object *dst, uacpi_object *src, enum uacpi_assign_behavior behavior)
uacpi_status uacpi_object_assign(uacpi_object *dst, uacpi_object *src, enum uacpi_assign_behavior behavior)
uacpi_object * uacpi_object_create_reference(uacpi_object *child)
uacpi_status uacpi_object_get_package(uacpi_object *obj, uacpi_object_array *out)
uacpi_object * uacpi_object_create_buffer(uacpi_data_view view)
static uacpi_bool empty_package_alloc(uacpi_object *object)
uacpi_object * uacpi_object_create_string(uacpi_data_view view)
static void free_field_unit(uacpi_handle handle)
static void free_chain(uacpi_object *obj)
uacpi_mutex * uacpi_create_mutex(void)
void uacpi_object_attach_child(uacpi_object *parent, uacpi_object *child)
static void free_op_region(uacpi_handle handle)
static uacpi_bool method_alloc(uacpi_object *obj)
uacpi_status uacpi_object_create_integer_safe(uacpi_u64 value, uacpi_overflow_behavior behavior, uacpi_object **out_obj)
uacpi_status uacpi_object_get_power_resource_info(uacpi_object *obj, uacpi_power_resource_info *out)
uacpi_bool uacpi_object_is_aml_namepath(uacpi_object *obj)
uacpi_status uacpi_object_assign_buffer(uacpi_object *obj, uacpi_data_view in)
uacpi_status uacpi_object_get_string(uacpi_object *obj, uacpi_data_view *out)
static uacpi_bool mutex_alloc(uacpi_object *obj)
static uacpi_bool op_region_alloc(uacpi_object *obj)
void uacpi_method_unref(uacpi_control_method *method)
void uacpi_buffer_to_view(uacpi_buffer *buf, uacpi_data_view *out_view)
void uacpi_address_space_handler_unref(uacpi_address_space_handler *handler)
uacpi_object * uacpi_object_create_uninitialized(void)
static void free_address_space_handlers(uacpi_address_space_handler *handler)
uacpi_bool uacpi_object_is(uacpi_object *obj, uacpi_object_type type)
#define TYPE_CHECK_USER_OBJ_RET(obj, type_bits, ret)
static uacpi_bool empty_buffer_or_string_alloc(uacpi_object *object)
uacpi_object * uacpi_object_create_cstring(const uacpi_char *str)
static void free_package(uacpi_handle handle)
uacpi_object * uacpi_unwrap_internal_reference(uacpi_object *object)
uacpi_status uacpi_object_get_dereferenced(uacpi_object *obj, uacpi_object **out)
static void free_processor(uacpi_handle handle)
static void free_object_storage(uacpi_object *obj)
void uacpi_object_unref(uacpi_object *obj)
#define DYNAMIC_ARRAY_WITH_INLINE_STORAGE_IMPL(name, type, prefix)
#define DYNAMIC_ARRAY_WITH_INLINE_STORAGE(name, type, inline_capacity)
static xmlCharEncodingHandlerPtr * handlers
GLuint GLuint GLsizei GLenum type
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
void uacpi_kernel_free_event(uacpi_handle)
void * uacpi_kernel_alloc(uacpi_size size)
uacpi_handle uacpi_kernel_create_mutex(void)
void uacpi_kernel_free_mutex(uacpi_handle)
uacpi_handle uacpi_kernel_create_event(void)
void uacpi_make_shareable_bugged(uacpi_handle)
void uacpi_shareable_init(uacpi_handle)
void uacpi_shareable_unref_and_delete_if_last(uacpi_handle, void(*do_free)(uacpi_handle))
uacpi_bool uacpi_bugged_shareable(uacpi_handle)
uacpi_u32 uacpi_shareable_ref(uacpi_handle)
uacpi_u32 uacpi_shareable_refcount(uacpi_handle)
uacpi_u32 uacpi_shareable_unref(uacpi_handle)
struct uacpi_field_unit * bank_selection
uacpi_namespace_node * region
uacpi_namespace_node * bank_region
uacpi_object * connection
struct uacpi_field_unit * index
struct uacpi_field_unit * data
uacpi_object * inner_object
uacpi_u8 * internal_buffer
uacpi_address_space_handler * handler
uacpi_status uacpi_table_unref(uacpi_table *)
uacpi_status uacpi_get_aml_bitness(uacpi_u8 *out_bitness)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out