Lines Matching defs:disp_ctx
119 sdei_dispatch_context_t *disp_ctx;
124 disp_ctx = &state->dispatch_stack[state->stack_top];
127 return disp_ctx;
161 sdei_dispatch_context_t *disp_ctx;
169 disp_ctx = push_dispatch();
170 assert(disp_ctx != NULL);
171 disp_ctx->map = map;
174 memcpy(disp_ctx->x, tgt_gpregs, sizeof(disp_ctx->x));
175 disp_ctx->spsr_el3 = read_ctx_reg(tgt_el3, CTX_SPSR_EL3);
176 disp_ctx->elr_el3 = read_ctx_reg(tgt_el3, CTX_ELR_EL3);
178 return disp_ctx;
181 static void restore_event_ctx(const sdei_dispatch_context_t *disp_ctx, void *tgt_ctx)
190 CASSERT(sizeof(disp_ctx->x) == (SDEI_SAVED_GPREGS * sizeof(uint64_t)),
194 memcpy(tgt_gpregs, disp_ctx->x, sizeof(disp_ctx->x));
195 write_ctx_reg(tgt_el3, CTX_SPSR_EL3, disp_ctx->spsr_el3);
196 write_ctx_reg(tgt_el3, CTX_ELR_EL3, disp_ctx->elr_el3);
204 disp_ctx->disable_cve_2018_3639);
245 static void sdei_set_elr_spsr(sdei_entry_t *se, sdei_dispatch_context_t *disp_ctx)
251 u_register_t interrupted_pstate = disp_ctx->spsr_el3;
315 sdei_dispatch_context_t *disp_ctx;
318 disp_ctx = save_event_ctx(map, ctx);
330 SMC_SET_GP(ctx, CTX_GPREG_X2, disp_ctx->elr_el3);
331 SMC_SET_GP(ctx, CTX_GPREG_X3, disp_ctx->spsr_el3);
334 sdei_set_elr_spsr(se, disp_ctx);
341 disp_ctx->disable_cve_2018_3639 = read_ctx_reg(tgt_cve_2018_3639,
348 disp_ctx->dispatch_jmp = dispatch_jmp;
413 const sdei_dispatch_context_t *disp_ctx;
513 disp_ctx = get_outstanding_dispatch();
520 if (disp_ctx != NULL)
521 assert(is_event_normal(disp_ctx->map));
528 assert(disp_ctx == NULL);
597 sdei_dispatch_context_t *disp_ctx;
620 disp_ctx = get_outstanding_dispatch();
621 if (disp_ctx != NULL) {
626 if (is_event_critical(disp_ctx->map))
672 sdei_dispatch_context_t *disp_ctx;
680 disp_ctx = get_outstanding_dispatch();
681 if (disp_ctx == NULL)
688 map = disp_ctx->map;
716 restore_event_ctx(disp_ctx, ctx);
736 write_elr_el2(disp_ctx->elr_el3);
737 write_spsr_el2(disp_ctx->spsr_el3);
740 write_elr_el1(disp_ctx->elr_el3);
741 write_spsr_el1(disp_ctx->spsr_el3);
746 end_sdei_synchronous_dispatch(disp_ctx->dispatch_jmp);
753 sdei_dispatch_context_t *disp_ctx;
759 disp_ctx = get_outstanding_dispatch();
760 if (disp_ctx == NULL)
763 assert(disp_ctx->map != NULL);
765 if (!can_sdei_state_trans(get_event_entry(disp_ctx->map), DO_CONTEXT))
773 return (int64_t) disp_ctx->x[param];