ReactOS 0.4.17-dev-683-g0dafdc5
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 6150 of file interpreter.c.

6154{
6156 struct execution_context *ctx;
6157
6158 ctx = uacpi_kernel_alloc_zeroed(sizeof(*ctx));
6161
6162 if (out_obj != UACPI_NULL) {
6164 if (uacpi_unlikely(ctx->ret == UACPI_NULL)) {
6166 goto out;
6167 }
6168 }
6169
6172 goto out;
6173
6174 for (;;) {
6176 if (ctx->cur_frame == UACPI_NULL)
6177 break;
6178
6179 if (maybe_end_block(ctx))
6180 continue;
6181
6182 if (!call_frame_has_code(ctx->cur_frame)) {
6184 continue;
6185 }
6186
6187 ret = get_op(ctx);
6189 goto handle_method_abort;
6190
6192 }
6193
6194 ret = exec_op(ctx);
6196 goto handle_method_abort;
6197
6198 continue;
6199
6200 handle_method_abort:
6201 uacpi_error("aborting %s due to previous error: %s",
6202 ctx->cur_frame->method->named_objects_persist ?
6203 "table load" : "method invocation",
6206
6207 /*
6208 * Having a frame here implies that we just aborted a dynamic table
6209 * load. Signal to the caller that it failed by setting the return
6210 * value to false.
6211 */
6212 if (ctx->cur_frame) {
6213 struct item *it;
6214
6215 it = item_array_last(&ctx->cur_op_ctx->items);
6216 if (it != UACPI_NULL && it->obj != UACPI_NULL)
6217 it->obj->integer = 0;
6218 }
6219 }
6220
6221out:
6222 if (ctx->ret != UACPI_NULL) {
6223 uacpi_object *ret_obj = UACPI_NULL;
6224
6225 if (ctx->ret->type != UACPI_OBJECT_UNINITIALIZED) {
6226 ret_obj = ctx->ret;
6227 uacpi_object_ref(ret_obj);
6228 }
6229
6230 *out_obj = ret_obj;
6231 }
6232
6234 return ret;
6235}
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:327
#define uacpi_unlikely(expr)
Definition: compiler.h:88
#define UACPI_NULL
Definition: types.h:33
#define uacpi_unlikely_error(expr)
Definition: status.h:49
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:60
void uacpi_object_ref(uacpi_object *obj)
Definition: types.c:734
@ 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:5246
static uacpi_bool maybe_end_block(struct execution_context *ctx)
Definition: interpreter.c:4368
static void stack_unwind(struct execution_context *ctx)
Definition: interpreter.c:6056
static uacpi_status exec_op(struct execution_context *ctx)
Definition: interpreter.c:5335
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:6132
static void trace_op(const struct uacpi_op_spec *op, enum op_trace_action_type action)
Definition: interpreter.c:4283
@ OP_TRACE_ACTION_BEGIN
Definition: interpreter.c:4272
@ METHOD_CALL_NATIVE
Definition: interpreter.c:5241
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:6011
static uacpi_bool ctx_has_non_preempted_op(struct execution_context *ctx)
Definition: interpreter.c:4266
return ret
Definition: mutex.c:147
Definition: match.c:390
uacpi_object * obj
Definition: interpreter.c:41
uacpi_u64 integer
Definition: types.h:253
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(), region_run_reg(), and uacpi_eval().

◆ uacpi_execute_table()

uacpi_status uacpi_execute_table ( void tbl,
enum uacpi_table_load_cause  cause 
)

Definition at line 1612 of file interpreter.c.

1613{
1615
1618 return ret;
1619
1620 ret = do_load_table(uacpi_namespace_root(), tbl, cause);
1621
1623 return ret;
1624}
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:1304

Referenced by uacpi_table_load_with_cause().

◆ uacpi_osi()

uacpi_status uacpi_osi ( uacpi_handle  handle,
uacpi_object retval 
)

Definition at line 6237 of file interpreter.c.

6238{
6239 struct execution_context *ctx = handle;
6240 uacpi_bool is_supported;
6243
6244 arg = uacpi_unwrap_internal_reference(ctx->cur_frame->args[0]);
6245 if (arg->type != UACPI_OBJECT_STRING) {
6246 uacpi_error("_OSI: invalid argument type %s, expected a String",
6249 }
6250
6251 if (retval == UACPI_NULL)
6252 return UACPI_STATUS_OK;
6253
6255
6256 ret = uacpi_handle_osi(arg->buffer->text, &is_supported);
6258 return ret;
6259
6260 retval->integer = is_supported ? ones() : 0;
6261
6262 uacpi_trace("_OSI(%s) => reporting as %ssupported",
6263 arg->buffer->text, is_supported ? "" : "un");
6264 return UACPI_STATUS_OK;
6265}
#define uacpi_trace(...)
Definition: log.h:33
uacpi_object * uacpi_unwrap_internal_reference(uacpi_object *object)
Definition: types.c:1486
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:51
@ UACPI_OBJECT_STRING
Definition: types.h:113
@ UACPI_OBJECT_INTEGER
Definition: types.h:112
static uacpi_u64 ones(void)
Definition: interpreter.c:1943
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().