esp_wifi/preempt_builtin/
preempt_riscv.rs
1use esp_wifi_sys::c_types;
2
3use super::*;
4pub use crate::hal::interrupt::TrapFrame;
5
6pub(crate) fn new_task_context(
7 task: extern "C" fn(*mut c_types::c_void),
8 param: *mut c_types::c_void,
9 stack_top: *mut (),
10) -> TrapFrame {
11 let stack_top = stack_top as usize;
12 let stack_top = stack_top - (stack_top % 16);
13
14 TrapFrame {
15 pc: task as usize,
16 a0: param as usize,
17 sp: stack_top,
18 ..Default::default()
19 }
20}
21
22pub(crate) fn restore_task_context(ctx: &mut Context, trap_frame: &mut TrapFrame) {
23 trap_frame.ra = ctx.trap_frame.ra;
24 trap_frame.sp = ctx.trap_frame.sp;
25 trap_frame.a0 = ctx.trap_frame.a0;
26 trap_frame.a1 = ctx.trap_frame.a1;
27 trap_frame.a2 = ctx.trap_frame.a2;
28 trap_frame.a3 = ctx.trap_frame.a3;
29 trap_frame.a4 = ctx.trap_frame.a4;
30 trap_frame.a5 = ctx.trap_frame.a5;
31 trap_frame.a6 = ctx.trap_frame.a6;
32 trap_frame.a7 = ctx.trap_frame.a7;
33 trap_frame.t0 = ctx.trap_frame.t0;
34 trap_frame.t1 = ctx.trap_frame.t1;
35 trap_frame.t2 = ctx.trap_frame.t2;
36 trap_frame.t3 = ctx.trap_frame.t3;
37 trap_frame.t4 = ctx.trap_frame.t4;
38 trap_frame.t5 = ctx.trap_frame.t5;
39 trap_frame.t6 = ctx.trap_frame.t6;
40 trap_frame.s0 = ctx.trap_frame.s0;
41 trap_frame.s1 = ctx.trap_frame.s1;
42 trap_frame.s2 = ctx.trap_frame.s2;
43 trap_frame.s3 = ctx.trap_frame.s3;
44 trap_frame.s4 = ctx.trap_frame.s4;
45 trap_frame.s5 = ctx.trap_frame.s5;
46 trap_frame.s6 = ctx.trap_frame.s6;
47 trap_frame.s7 = ctx.trap_frame.s7;
48 trap_frame.s8 = ctx.trap_frame.s8;
49 trap_frame.s9 = ctx.trap_frame.s9;
50 trap_frame.s10 = ctx.trap_frame.s10;
51 trap_frame.s11 = ctx.trap_frame.s11;
52 trap_frame.gp = ctx.trap_frame.gp;
53 trap_frame.tp = ctx.trap_frame.tp;
54 trap_frame.pc = ctx.trap_frame.pc;
55}
56
57pub(crate) fn save_task_context(ctx: &mut Context, trap_frame: &TrapFrame) {
58 ctx.trap_frame.ra = trap_frame.ra;
59 ctx.trap_frame.sp = trap_frame.sp;
60 ctx.trap_frame.a0 = trap_frame.a0;
61 ctx.trap_frame.a1 = trap_frame.a1;
62 ctx.trap_frame.a2 = trap_frame.a2;
63 ctx.trap_frame.a3 = trap_frame.a3;
64 ctx.trap_frame.a4 = trap_frame.a4;
65 ctx.trap_frame.a5 = trap_frame.a5;
66 ctx.trap_frame.a6 = trap_frame.a6;
67 ctx.trap_frame.a7 = trap_frame.a7;
68 ctx.trap_frame.t0 = trap_frame.t0;
69 ctx.trap_frame.t1 = trap_frame.t1;
70 ctx.trap_frame.t2 = trap_frame.t2;
71 ctx.trap_frame.t3 = trap_frame.t3;
72 ctx.trap_frame.t4 = trap_frame.t4;
73 ctx.trap_frame.t5 = trap_frame.t5;
74 ctx.trap_frame.t6 = trap_frame.t6;
75 ctx.trap_frame.s0 = trap_frame.s0;
76 ctx.trap_frame.s1 = trap_frame.s1;
77 ctx.trap_frame.s2 = trap_frame.s2;
78 ctx.trap_frame.s3 = trap_frame.s3;
79 ctx.trap_frame.s4 = trap_frame.s4;
80 ctx.trap_frame.s5 = trap_frame.s5;
81 ctx.trap_frame.s6 = trap_frame.s6;
82 ctx.trap_frame.s7 = trap_frame.s7;
83 ctx.trap_frame.s8 = trap_frame.s8;
84 ctx.trap_frame.s9 = trap_frame.s9;
85 ctx.trap_frame.s10 = trap_frame.s10;
86 ctx.trap_frame.s11 = trap_frame.s11;
87 ctx.trap_frame.gp = trap_frame.gp;
88 ctx.trap_frame.tp = trap_frame.tp;
89 ctx.trap_frame.pc = trap_frame.pc;
90}