Lines Matching refs:ctx

54 int apei_exec_ctx_init(struct apei_exec_context *ctx,  in apei_exec_ctx_init()  argument
60 if (!ctx) in apei_exec_ctx_init()
63 ctx->ins_table = ins_table; in apei_exec_ctx_init()
64 ctx->instructions = instructions; in apei_exec_ctx_init()
65 ctx->action_table = action_table; in apei_exec_ctx_init()
66 ctx->entries = entries; in apei_exec_ctx_init()
83 int apei_exec_read_register(struct apei_exec_context *ctx, in apei_exec_read_register() argument
92 ctx->value = val; in apei_exec_read_register()
97 int apei_exec_read_register_value(struct apei_exec_context *ctx, in apei_exec_read_register_value() argument
102 rc = apei_exec_read_register(ctx, entry); in apei_exec_read_register_value()
105 ctx->value = (ctx->value == entry->value); in apei_exec_read_register_value()
129 int apei_exec_write_register(struct apei_exec_context *ctx, in apei_exec_write_register() argument
132 return __apei_exec_write_register(entry, ctx->value); in apei_exec_write_register()
135 int apei_exec_write_register_value(struct apei_exec_context *ctx, in apei_exec_write_register_value() argument
140 ctx->value = entry->value; in apei_exec_write_register_value()
141 rc = apei_exec_write_register(ctx, entry); in apei_exec_write_register_value()
146 int apei_exec_noop(struct apei_exec_context *ctx, in apei_exec_noop() argument
156 int __apei_exec_run(struct apei_exec_context *ctx, u8 action, in __apei_exec_run() argument
164 ctx->ip = 0; in __apei_exec_run()
174 for (i = 0; i < ctx->entries; i++) { in __apei_exec_run()
175 entry = &ctx->action_table[i]; in __apei_exec_run()
178 if (ip == ctx->ip) { in __apei_exec_run()
179 if (entry->instruction >= ctx->instructions || in __apei_exec_run()
180 !ctx->ins_table[entry->instruction].run) { in __apei_exec_run()
186 run = ctx->ins_table[entry->instruction].run; in __apei_exec_run()
187 rc = run(ctx, entry); in __apei_exec_run()
191 ctx->ip++; in __apei_exec_run()
194 if (ctx->ip < ip) in __apei_exec_run()
201 typedef int (*apei_exec_entry_func_t)(struct apei_exec_context *ctx,
205 static int __init apei_exec_for_each_entry(struct apei_exec_context *ctx, in apei_exec_for_each_entry() argument
213 struct apei_exec_ins_type *ins_table = ctx->ins_table; in apei_exec_for_each_entry()
215 for (i = 0; i < ctx->entries; i++) { in apei_exec_for_each_entry()
216 entry = ctx->action_table + i; in apei_exec_for_each_entry()
220 if (ins >= ctx->instructions || !ins_table[ins].run) { in apei_exec_for_each_entry()
225 rc = func(ctx, entry, data); in apei_exec_for_each_entry()
233 static int __init pre_map_gar_callback(struct apei_exec_context *ctx, in pre_map_gar_callback() argument
239 if (ctx->ins_table[ins].flags & APEI_EXEC_INS_ACCESS_REGISTER) in pre_map_gar_callback()
246 int __init apei_exec_pre_map_gars(struct apei_exec_context *ctx) in apei_exec_pre_map_gars() argument
250 rc = apei_exec_for_each_entry(ctx, pre_map_gar_callback, in apei_exec_pre_map_gars()
254 memcpy(&ctx_unmap, ctx, sizeof(*ctx)); in apei_exec_pre_map_gars()
262 static int __init post_unmap_gar_callback(struct apei_exec_context *ctx, in post_unmap_gar_callback() argument
268 if (ctx->ins_table[ins].flags & APEI_EXEC_INS_ACCESS_REGISTER) in post_unmap_gar_callback()
275 int __init apei_exec_post_unmap_gars(struct apei_exec_context *ctx) in apei_exec_post_unmap_gars() argument
277 return apei_exec_for_each_entry(ctx, post_unmap_gar_callback, in apei_exec_post_unmap_gars()