sel4/arch/riscv/
user_context.rs
1use crate::{newtype_methods, sys, Word};
8
9#[derive(Debug, Clone, PartialEq, Eq, Default)]
11pub struct UserContext(sys::seL4_UserContext);
12
13impl UserContext {
14 newtype_methods!(pub sys::seL4_UserContext);
15
16 pub fn pc(&self) -> &Word {
17 &self.0.pc
18 }
19
20 pub fn pc_mut(&mut self) -> &mut Word {
21 &mut self.0.pc
22 }
23
24 pub fn sp(&self) -> &Word {
25 &self.0.sp
26 }
27
28 pub fn sp_mut(&mut self) -> &mut Word {
29 &mut self.0.sp
30 }
31
32 pub fn gpr_a(&self, ix: usize) -> &Word {
33 match ix {
34 0 => &self.inner().a0,
35 1 => &self.inner().a1,
36 2 => &self.inner().a2,
37 3 => &self.inner().a3,
38 4 => &self.inner().a4,
39 5 => &self.inner().a5,
40 6 => &self.inner().a6,
41 7 => &self.inner().a7,
42 _ => panic!(),
43 }
44 }
45
46 pub fn gpr_a_mut(&mut self, ix: usize) -> &mut Word {
47 match ix {
48 0 => &mut self.inner_mut().a0,
49 1 => &mut self.inner_mut().a1,
50 2 => &mut self.inner_mut().a2,
51 3 => &mut self.inner_mut().a3,
52 4 => &mut self.inner_mut().a4,
53 5 => &mut self.inner_mut().a5,
54 6 => &mut self.inner_mut().a6,
55 7 => &mut self.inner_mut().a7,
56 _ => panic!(),
57 }
58 }
59
60 pub fn c_param(&self, ix: usize) -> &Word {
61 self.gpr_a(ix)
62 }
63
64 pub fn c_param_mut(&mut self, ix: usize) -> &mut Word {
65 self.gpr_a_mut(ix)
66 }
67}