177 return c + (
'a' -
'A');
279 value = 0xFFFFFFFFFFFFFFFF;
291 if (max_chars == 0 ||
c ==
'\0')
297#ifndef UACPI_BAREBONES_MODE
326 '0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
327 'A',
'B',
'C',
'D',
'E',
'F'
341 swapped.bytes[0] = orig.bytes[3];
342 swapped.bytes[1] = orig.bytes[2];
343 swapped.bytes[2] = orig.bytes[1];
344 swapped.bytes[3] = orig.bytes[0];
351 out_string[0] = (
uacpi_char)(0x40 + ((swapped.dword >> 26) & 0x1F));
352 out_string[1] = (
uacpi_char)(0x40 + ((swapped.dword >> 21) & 0x1F));
353 out_string[2] = (
uacpi_char)(0x40 + ((swapped.dword >> 16) & 0x1F));
361 out_string[3] = hex_to_ascii[(swapped.dword >> 12) & 0x0F];
362 out_string[4] = hex_to_ascii[(swapped.dword >> 8 ) & 0x0F];
363 out_string[5] = hex_to_ascii[(swapped.dword >> 4 ) & 0x0F];
364 out_string[6] = hex_to_ascii[(swapped.dword >> 0 ) & 0x0F];
366 out_string[7] =
'\0';
369#define PNP_ID_LENGTH 8
388 switch (hid_ret->
type) {
395 "%.4s._HID: empty/invalid EISA ID string (%zu bytes)\n",
407 id->size =
buf->size;
411 id->value[
buf->size - 1] =
'\0';
466 switch (cid_ret->
type) {
480 for (
i = 0;
i < num_ids; ++
i) {
489 "%.4s._CID: empty EISA ID string (sub-object %zu)\n",
498 "%.4s._CID: buffer size overflow (+ %zu)\n",
512 "%.4s._CID: invalid package sub-object %zu type: %s\n",
523 list->num_ids = num_ids;
529 for (
i = 0;
i < num_ids; ++
i) {
538 id->value = id_buffer;
541 id->value[
id->size - 1] =
'\0';
547 id->
value = id_buffer;
552 id_buffer +=
id->size;
596#define CLS_REPR_SIZE 7
644 class_codes[0], class_codes[1], class_codes[2]
676 "invalid %.4s._UID string size: %u\n",
709 *out_uid = id_string;
721 for (
i = 0;
ids[
i]; ++
i) {
739 for (
i = 0;
i < num_methods; ++
i,
template[2]++) {
745 out_values[
i] =
obj->integer;
750 out_values[
i] = 0xFF;
756 "failed to evaluate %s.%s: %s\n",
766#define NODE_INFO_EVAL_ADD_ID(name) \
767 if (uacpi_eval_##name(node, &name) == UACPI_STATUS_OK) { \
768 size += name->size; \
769 if (uacpi_unlikely(size < name->size)) { \
770 ret = UACPI_STATUS_AML_BAD_ENCODING; \
775#define NODE_INFO_COPY_ID(name, flag) \
776 if (name != UACPI_NULL) { \
777 flags |= UACPI_NS_NODE_INFO_HAS_##flag; \
778 info->name.value = cursor; \
779 info->name.size = name->size; \
780 uacpi_memcpy(cursor, name->value, name->size); \
781 cursor += name->size; \
783 uacpi_memzero(&info->name, sizeof(*name)); \
807 char dstate_method_template[5] = {
'_',
'S',
'1',
'D',
'\0' };
818 node, dstate_method_template,
sizeof(sxd), sxd
822 dstate_method_template[2] =
'0';
823 dstate_method_template[3] =
'W';
826 node, dstate_method_template,
sizeof(sxw), sxw
859 for (
i = 0;
i <
cid->num_ids; ++
i) {
998 arg->integer = model;
1034 table_pkg =
obj->package;
1049 for (
i = 0;
i < table_pkg->
count; ++
i) {
1053 uacpi_error(
"_PRT sub-object %zu is not a package: %s\n",
1055 goto out_bad_encoding;
1058 entry_pkg = entry_obj->
package;
1060 uacpi_error(
"invalid _PRT sub-package entry count %zu\n",
1062 goto out_bad_encoding;
1067 elem_obj = entry_pkg->
objects[0];
1069 uacpi_error(
"invalid _PRT sub-package %zu address type: %s\n",
1071 goto out_bad_encoding;
1075 elem_obj = entry_pkg->
objects[1];
1077 uacpi_error(
"invalid _PRT sub-package %zu pin type: %s\n",
1079 goto out_bad_encoding;
1083 elem_obj = entry_pkg->
objects[2];
1084 switch (elem_obj->
type) {
1090 uacpi_error(
"unable to lookup _PRT source %s: %s\n",
1092 goto out_bad_encoding;
1099 uacpi_error(
"invalid _PRT sub-package %zu source type: %s\n",
1101 goto out_bad_encoding;
1104 elem_obj = entry_pkg->
objects[3];
1106 uacpi_error(
"invalid _PRT sub-package %zu source index type: %s\n",
1108 goto out_bad_encoding;
static unsigned char bytes[4]
void user(int argc, const char *argv[])
#define ACPI_STA_RESULT_DEVICE_PRESENT
#define ACPI_STA_RESULT_DEVICE_FUNCTIONING
#define UACPI_ENSURE_INIT_LEVEL_AT_LEAST(lvl)
uacpi_object * uacpi_namespace_node_get_object(const uacpi_namespace_node *node)
uacpi_i32 uacpi_snprintf(uacpi_char *buffer, uacpi_size capacity, const uacpi_char *fmt,...)
#define uacpi_memzero(ptr, size)
uacpi_i32 uacpi_strcmp(const uacpi_char *lhs, const uacpi_char *rhs)
#define uacpi_free(mem, _)
uacpi_size uacpi_strlen(const uacpi_char *str)
uacpi_object * uacpi_create_object(uacpi_object_type type)
uacpi_iteration_decision(* uacpi_iteration_callback)(void *user, uacpi_namespace_node *node, uacpi_u32 node_depth)
#define UACPI_MAX_DEPTH_ANY
const uacpi_char * uacpi_namespace_node_generate_absolute_path(const uacpi_namespace_node *node)
uacpi_namespace_node * uacpi_namespace_root(void)
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)
#define uacpi_likely_success(expr)
#define uacpi_unlikely_error(expr)
@ UACPI_STATUS_INVALID_ARGUMENT
@ UACPI_STATUS_OUT_OF_MEMORY
@ UACPI_STATUS_AML_INCOMPATIBLE_OBJECT_TYPE
@ UACPI_STATUS_AML_BAD_ENCODING
const uacpi_char * uacpi_status_to_string(uacpi_status)
@ UACPI_ITERATION_DECISION_NEXT_PEER
@ UACPI_ITERATION_DECISION_CONTINUE
@ UACPI_OBJECT_STRING_BIT
@ UACPI_OBJECT_INTEGER_BIT
@ UACPI_OBJECT_PACKAGE_BIT
@ UACPI_OBJECT_DEVICE_BIT
const uacpi_char * uacpi_object_type_to_string(uacpi_object_type)
@ UACPI_INIT_LEVEL_NAMESPACE_LOADED
uacpi_status uacpi_object_resolve_as_aml_namepath(uacpi_object *, uacpi_namespace_node *scope, uacpi_namespace_node **out_node)
void uacpi_object_unref(uacpi_object *obj)
GLint GLint GLsizei GLsizei GLsizei depth
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
#define UACPI_PTR_ADD(ptr, value)
void * uacpi_kernel_alloc(uacpi_size size)
struct output_fragment * out_list
static const CLSID * objects[]
static HMODULE MODULEINFO DWORD cb
static unsigned __int64 next
uacpi_iteration_callback cb
const uacpi_char *const * target_hids
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(uacpi_namespace_node *parent, const uacpi_char *path, const uacpi_object_array *args, uacpi_object **ret)
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)
#define NODE_INFO_EVAL_ADD_ID(name)
static uacpi_bool is_char(uacpi_char c, enum char_type type)
static uacpi_bool peek_one(const uacpi_char **str, const uacpi_size *size, uacpi_char *out_char)
uacpi_status uacpi_eval_uid(uacpi_namespace_node *node, uacpi_id_string **out_uid)
uacpi_bool uacpi_device_matches_pnp_id(uacpi_namespace_node *node, const uacpi_char *const *ids)
uacpi_status uacpi_find_devices_at(uacpi_namespace_node *parent, const uacpi_char *const *hids, uacpi_iteration_callback cb, void *user)
static uacpi_bool matches_any(uacpi_id_string *id, const uacpi_char *const *ids)
uacpi_status uacpi_find_devices(const uacpi_char *hid, uacpi_iteration_callback cb, void *user)
static uacpi_bool consume_if_equals(const uacpi_char **str, uacpi_size *size, uacpi_char c)
static uacpi_u8 extract_package_byte_or_zero(uacpi_package *pkg, uacpi_size i)
uacpi_status uacpi_string_to_integer(const uacpi_char *str, uacpi_size max_chars, enum uacpi_base base, uacpi_u64 *out_value)
static uacpi_bool is_valid_name_byte(uacpi_u8 c)
static uacpi_bool consume_one(const uacpi_char **str, uacpi_size *size, uacpi_char *out_char)
uacpi_status uacpi_eval_sta(uacpi_namespace_node *node, uacpi_u32 *flags)
#define NODE_INFO_COPY_ID(name, flag)
void uacpi_free_id_string(uacpi_id_string *id)
uacpi_status uacpi_get_namespace_node_info(uacpi_namespace_node *node, uacpi_namespace_node_info **out_info)
uacpi_bool uacpi_is_valid_nameseg(uacpi_u8 *nameseg)
static uacpi_bool consume_if(const uacpi_char **str, uacpi_size *size, enum char_type type)
static const uacpi_u8 ascii_map[256]
uacpi_status uacpi_get_pci_routing_table(uacpi_namespace_node *parent, uacpi_pci_routing_table **out_table)
static uacpi_status uacpi_eval_dstate_method_template(uacpi_namespace_node *parent, uacpi_char *template, uacpi_u8 num_methods, uacpi_u8 *out_values)
uacpi_status uacpi_eval_cls(uacpi_namespace_node *node, uacpi_id_string **out_id)
void uacpi_eisa_id_to_string(uacpi_u32 id, uacpi_char *out_string)
void uacpi_free_pnp_id_list(uacpi_pnp_id_list *list)
static uacpi_iteration_decision find_one_device(void *opaque, uacpi_namespace_node *node, uacpi_u32 depth)
void uacpi_free_pci_routing_table(uacpi_pci_routing_table *table)
uacpi_status uacpi_eval_hid(uacpi_namespace_node *node, uacpi_id_string **out_id)
uacpi_status uacpi_eval_cid(uacpi_namespace_node *node, uacpi_pnp_id_list **out_list)
void uacpi_free_dynamic_string(const uacpi_char *str)
uacpi_status uacpi_set_interrupt_model(uacpi_interrupt_model model)
uacpi_status uacpi_eval_adr(uacpi_namespace_node *node, uacpi_u64 *out)
void uacpi_free_namespace_node_info(uacpi_namespace_node_info *info)
#define UACPI_NS_NODE_INFO_HAS_ADR
#define UACPI_NS_NODE_INFO_HAS_SXD
#define UACPI_NS_NODE_INFO_HAS_CID
#define UACPI_NS_NODE_INFO_HAS_SXW
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out