ReactOS 0.4.16-dev-1946-g52006dd
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 5934 of file interpreter.c.

5938{
5940 struct execution_context *ctx;
5941
5942 ctx = uacpi_kernel_alloc_zeroed(sizeof(*ctx));
5945
5946 if (out_obj != UACPI_NULL) {
5948 if (uacpi_unlikely(ctx->ret == UACPI_NULL)) {
5950 goto out;
5951 }
5952 }
5953
5956 goto out;
5957
5958 for (;;) {
5960 if (ctx->cur_frame == UACPI_NULL)
5961 break;
5962
5963 if (maybe_end_block(ctx))
5964 continue;
5965
5966 if (!call_frame_has_code(ctx->cur_frame)) {
5968 continue;
5969 }
5970
5971 ret = get_op(ctx);
5973 goto handle_method_abort;
5974
5976 }
5977
5978 ret = exec_op(ctx);
5980 goto handle_method_abort;
5981
5982 continue;
5983
5984 handle_method_abort:
5985 uacpi_error("aborting %s due to previous error: %s\n",
5986 ctx->cur_frame->method->named_objects_persist ?
5987 "table load" : "method invocation",
5990
5991 /*
5992 * Having a frame here implies that we just aborted a dynamic table
5993 * load. Signal to the caller that it failed by setting the return
5994 * value to false.
5995 */
5996 if (ctx->cur_frame) {
5997 struct item *it;
5998
5999 it = item_array_last(&ctx->cur_op_ctx->items);
6000 if (it != UACPI_NULL && it->obj != UACPI_NULL)
6001 it->obj->integer = 0;
6002 }
6003 }
6004
6005out:
6006 if (ctx->ret != UACPI_NULL) {
6007 uacpi_object *ret_obj = UACPI_NULL;
6008
6009 if (ctx->ret->type != UACPI_OBJECT_UNINITIALIZED) {
6010 ret_obj = ctx->ret;
6011 uacpi_object_ref(ret_obj);
6012 }
6013
6014 *out_obj = ret_obj;
6015 }
6016
6018 return ret;
6019}
method
Definition: dragdrop.c:54
#define uacpi_error(...)
Definition: log.h:21
#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:58
#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:50
void uacpi_object_ref(uacpi_object *obj)
Definition: types.c:727
@ UACPI_OBJECT_UNINITIALIZED
Definition: types.h:105
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:5108
static uacpi_bool maybe_end_block(struct execution_context *ctx)
Definition: interpreter.c:4234
static void stack_unwind(struct execution_context *ctx)
Definition: interpreter.c:5876
static uacpi_status exec_op(struct execution_context *ctx)
Definition: interpreter.c:5197
static uacpi_status get_op(struct execution_context *ctx)
Definition: interpreter.c:683
static void execution_context_release(struct execution_context *ctx)
Definition: interpreter.c:5916
static void trace_op(const struct uacpi_op_spec *op, enum op_trace_action_type action)
Definition: interpreter.c:4149
@ OP_TRACE_ACTION_BEGIN
Definition: interpreter.c:4138
@ METHOD_CALL_NATIVE
Definition: interpreter.c:5103
static uacpi_bool call_frame_has_code(struct call_frame *frame)
Definition: interpreter.c:298
static void ctx_reload_post_ret(struct execution_context *ctx)
Definition: interpreter.c:5837
static uacpi_bool ctx_has_non_preempted_op(struct execution_context *ctx)
Definition: interpreter.c:4132
return ret
Definition: mutex.c:146
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 1549 of file interpreter.c.

1550{
1552
1555 return ret;
1556
1557 ret = do_load_table(uacpi_namespace_root(), tbl, cause);
1558
1560 return ret;
1561}
uacpi_status uacpi_namespace_write_unlock(void)
Definition: namespace.c:54
uacpi_status uacpi_namespace_write_lock(void)
Definition: namespace.c:49
uacpi_namespace_node * uacpi_namespace_root(void)
Definition: namespace.c:267
static uacpi_status do_load_table(uacpi_namespace_node *parent, struct acpi_sdt_hdr *tbl, enum uacpi_table_load_cause cause)
Definition: interpreter.c:1282

Referenced by uacpi_table_load_with_cause().

◆ uacpi_osi()

uacpi_status uacpi_osi ( uacpi_handle  handle,
uacpi_object retval 
)

Definition at line 6021 of file interpreter.c.

6022{
6023 struct execution_context *ctx = handle;
6024 uacpi_bool is_supported;
6027
6028 arg = uacpi_unwrap_internal_reference(ctx->cur_frame->args[0]);
6029 if (arg->type != UACPI_OBJECT_STRING) {
6030 uacpi_error("_OSI: invalid argument type %s, expected a String\n",
6033 }
6034
6035 if (retval == UACPI_NULL)
6036 return UACPI_STATUS_OK;
6037
6039
6040 ret = uacpi_handle_osi(arg->buffer->text, &is_supported);
6042 return ret;
6043
6044 retval->integer = is_supported ? ones() : 0;
6045
6046 uacpi_trace("_OSI(%s) => reporting as %ssupported\n",
6047 arg->buffer->text, is_supported ? "" : "un");
6048 return UACPI_STATUS_OK;
6049}
#define uacpi_trace(...)
Definition: log.h:18
uacpi_object * uacpi_unwrap_internal_reference(uacpi_object *object)
Definition: types.c:1468
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:107
@ UACPI_OBJECT_INTEGER
Definition: types.h:106
static uacpi_u64 ones(void)
Definition: interpreter.c:1878
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().