32 lines
796 B
Rust
32 lines
796 B
Rust
//! Implementation of [`TaskContext`]
|
|
use crate::trap::trap_return;
|
|
|
|
#[repr(C)]
|
|
/// task context structure containing some registers
|
|
pub struct TaskContext {
|
|
/// return address ( e.g. __restore ) of __switch ASM function
|
|
ra: usize,
|
|
/// kernel stack pointer of app
|
|
sp: usize,
|
|
/// callee saved registers: s 0..11
|
|
s: [usize; 12],
|
|
}
|
|
|
|
impl TaskContext {
|
|
/// init task context
|
|
pub fn zero_init() -> Self {
|
|
Self {
|
|
ra: 0,
|
|
sp: 0,
|
|
s: [0; 12],
|
|
}
|
|
}
|
|
/// set Task Context{__restore ASM funciton: trap_return, sp: kstack_ptr, s: s_0..12}
|
|
pub fn goto_trap_return(kstack_ptr: usize) -> Self {
|
|
Self {
|
|
ra: trap_return as usize,
|
|
sp: kstack_ptr,
|
|
s: [0; 12],
|
|
}
|
|
}
|
|
}
|