ReactOS 0.4.17-dev-1190-g4c812f4
interpreter.h File Reference
#include <uacpi/types.h>
#include <uacpi/status.h>
#include <uacpi/internal/namespace.h>
Include dependency graph for interpreter.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Enumerations

enum  uacpi_table_load_cause { UACPI_TABLE_LOAD_CAUSE_LOAD_OP , UACPI_TABLE_LOAD_CAUSE_LOAD_TABLE_OP , UACPI_TABLE_LOAD_CAUSE_INIT , UACPI_TABLE_LOAD_CAUSE_HOST }
 

Functions

uacpi_status uacpi_execute_table (void *, enum uacpi_table_load_cause cause)
 
uacpi_status uacpi_osi (uacpi_handle handle, uacpi_object *retval)
 
uacpi_status uacpi_execute_control_method (uacpi_namespace_node *scope, uacpi_control_method *method, const uacpi_object_array *args, uacpi_object **ret)
 

Enumeration Type Documentation

◆ uacpi_table_load_cause

Enumerator
UACPI_TABLE_LOAD_CAUSE_LOAD_OP 
UACPI_TABLE_LOAD_CAUSE_LOAD_TABLE_OP 
UACPI_TABLE_LOAD_CAUSE_INIT 
UACPI_TABLE_LOAD_CAUSE_HOST 

Definition at line 9 of file interpreter.h.

9 {
14};
@ UACPI_TABLE_LOAD_CAUSE_HOST
Definition: interpreter.h:13
@ UACPI_TABLE_LOAD_CAUSE_INIT
Definition: interpreter.h:12
@ UACPI_TABLE_LOAD_CAUSE_LOAD_OP
Definition: interpreter.h:10
@ UACPI_TABLE_LOAD_CAUSE_LOAD_TABLE_OP
Definition: interpreter.h:11

Function Documentation

◆ uacpi_execute_control_method()

uacpi_status uacpi_execute_control_method ( uacpi_namespace_node *  scope,
uacpi_control_method *  method,
const uacpi_object_array *  args,
uacpi_object **  ret 
)

Definition at line 6479 of file interpreter.c.

6483{
6485 struct execution_context *ctx;
6486
6487 ctx = uacpi_kernel_alloc_zeroed(sizeof(*ctx));
6490
6491 if (out_obj != UACPI_NULL) {
6493 if (uacpi_unlikely(ctx->ret == UACPI_NULL)) {
6495 goto out;
6496 }
6497 }
6498
6501 goto out;
6502
6503 for (;;) {
6505 if (ctx->cur_frame == UACPI_NULL)
6506 break;
6507
6508 if (maybe_end_block(ctx))
6509 continue;
6510
6511 if (!call_frame_has_code(ctx->cur_frame)) {
6513 continue;
6514 }
6515
6516 ret = get_op(ctx);
6518 goto handle_method_abort;
6519
6521 }
6522
6523 ret = exec_op(ctx);
6525 goto handle_method_abort;
6526
6527 continue;
6528
6529 handle_method_abort:
6530 uacpi_error("aborting %s due to previous error: %s",
6531 ctx->cur_frame->method->named_objects_persist ?
6532 "table load" : "method invocation",
6535
6536 /*
6537 * Having a frame here implies that we just aborted a dynamic table
6538 * load. Signal to the caller that it failed by setting the return
6539 * value to false.
6540 */
6541 if (ctx->cur_frame) {
6542 struct item *it;
6543
6544 it = item_array_last(&ctx->cur_op_ctx->items);
6545 if (it != UACPI_NULL && it->obj != UACPI_NULL)
6546 it->obj->integer = 0;
6547 }
6548 }
6549
6550out:
6551 if (ctx->ret != UACPI_NULL) {
6552 uacpi_object *ret_obj = UACPI_NULL;
6553
6554 if (ctx->ret->type != UACPI_OBJECT_UNINITIALIZED) {
6555 ret_obj = ctx->ret;
6556 uacpi_object_ref(ret_obj);
6557 }
6558
6559 *out_obj = ret_obj;
6560 }
6561
6563 return ret;
6564}
method
Definition: dragdrop.c:54
#define uacpi_error(...)
Definition: log.h:36
#define uacpi_kernel_alloc_zeroed
Definition: stdlib.h:127
uacpi_object * uacpi_create_object(uacpi_object_type type)
Definition: types.c:328
#define uacpi_unlikely(expr)
Definition: compiler.h:88
#define UACPI_NULL
Definition: types.h:33
#define uacpi_unlikely_error(expr)
Definition: status.h:50
uacpi_status
Definition: status.h:10
@ UACPI_STATUS_OUT_OF_MEMORY
Definition: status.h:13
@ UACPI_STATUS_OK
Definition: status.h:11
const uacpi_char * uacpi_status_to_string(uacpi_status)
Definition: uacpi.c:61
void uacpi_object_ref(uacpi_object *obj)
Definition: types.c:733
@ UACPI_OBJECT_UNINITIALIZED
Definition: types.h:111
static uacpi_status prepare_method_call(struct execution_context *ctx, uacpi_namespace_node *node, uacpi_control_method *method, enum method_call_type type, const uacpi_object_array *args)
Definition: interpreter.c:5534
static uacpi_bool maybe_end_block(struct execution_context *ctx)
Definition: interpreter.c:4664
static void stack_unwind(struct execution_context *ctx)
Definition: interpreter.c:6385
static uacpi_status exec_op(struct execution_context *ctx)
Definition: interpreter.c:5623
static uacpi_status get_op(struct execution_context *ctx)
Definition: interpreter.c:696
static void execution_context_release(struct execution_context *ctx)
Definition: interpreter.c:6461
static void trace_op(const struct uacpi_op_spec *op, enum op_trace_action_type action)
Definition: interpreter.c:4580
@ OP_TRACE_ACTION_BEGIN
Definition: interpreter.c:4569
@ METHOD_CALL_NATIVE
Definition: interpreter.c:5529
static uacpi_bool call_frame_has_code(struct call_frame *frame)
Definition: interpreter.c:301
static void ctx_reload_post_ret(struct execution_context *ctx)
Definition: interpreter.c:6340
static uacpi_bool ctx_has_non_preempted_op(struct execution_context *ctx)
Definition: interpreter.c:4563
return ret
Definition: mutex.c:147
Definition: match.c:390
uacpi_object * obj
Definition: interpreter.c:41
uacpi_u64 integer
Definition: types.h:263
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

Referenced by async_run_gpe_handler(), do_load_table(), run_reg(), and uacpi_eval().

◆ uacpi_execute_table()

uacpi_status uacpi_execute_table ( void *  tbl,
enum uacpi_table_load_cause  cause 
)

Definition at line 1672 of file interpreter.c.

1673{
1675
1678 return ret;
1679
1680 ret = do_load_table(uacpi_namespace_root(), tbl, cause);
1681
1683 return ret;
1684}
uacpi_status uacpi_namespace_write_unlock(void)
Definition: namespace.c:51
uacpi_status uacpi_namespace_write_lock(void)
Definition: namespace.c:46
uacpi_namespace_node * uacpi_namespace_root(void)
Definition: namespace.c:264
static uacpi_status do_load_table(uacpi_namespace_node *parent, struct acpi_sdt_hdr *tbl, enum uacpi_table_load_cause cause)
Definition: interpreter.c:1364

Referenced by uacpi_table_load_with_cause().

◆ uacpi_osi()

uacpi_status uacpi_osi ( uacpi_handle  handle,
uacpi_object *  retval 
)

Definition at line 6566 of file interpreter.c.

6567{
6568 struct execution_context *ctx = handle;
6569 uacpi_bool is_supported;
6572
6573 arg = uacpi_unwrap_internal_reference(ctx->cur_frame->args[0]);
6574 if (arg->type != UACPI_OBJECT_STRING) {
6575 uacpi_error("_OSI: invalid argument type %s, expected a String",
6578 }
6579
6580 if (retval == UACPI_NULL)
6581 return UACPI_STATUS_OK;
6582
6584
6585 ret = uacpi_handle_osi(arg->buffer->text, &is_supported);
6587 return ret;
6588
6589 retval->integer = is_supported ? ones() : 0;
6590
6591 uacpi_trace("_OSI(%s) => reporting as %ssupported",
6592 arg->buffer->text, is_supported ? "" : "un");
6593 return UACPI_STATUS_OK;
6594}
#define uacpi_trace(...)
Definition: log.h:33
uacpi_object * uacpi_unwrap_internal_reference(uacpi_object *object)
Definition: types.c:1471
bool uacpi_bool
Definition: types.h:31
@ UACPI_STATUS_AML_INCOMPATIBLE_OBJECT_TYPE
Definition: status.h:38
const uacpi_char * uacpi_object_type_to_string(uacpi_object_type)
Definition: types.c:52
@ UACPI_OBJECT_STRING
Definition: types.h:113
@ UACPI_OBJECT_INTEGER
Definition: types.h:112
static uacpi_u64 ones(void)
Definition: interpreter.c:2020
uacpi_status uacpi_handle_osi(const uacpi_char *string, uacpi_bool *out_value)
Definition: osi.c:362
int retval
Definition: wcstombs.cpp:91
void * arg
Definition: msvc.h:10

Referenced by make_object_for_predefined().