1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
11pub enum UserReturnIrqPolicy {
12 Inherit,
14 Enable,
16 Disable,
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq)]
22pub struct UserEntryOptions {
23 pub irq_policy: UserReturnIrqPolicy,
24}
25
26impl Default for UserEntryOptions {
27 fn default() -> Self {
28 Self {
29 irq_policy: UserReturnIrqPolicy::Inherit,
30 }
31 }
32}
33
34pub fn configure_user_entry(trapframe: &mut Trapframe, options: UserEntryOptions) {
39 #[cfg(target_arch = "riscv64")]
40 {
41 riscv64::configure_user_entry(trapframe, options)
42 }
43 #[cfg(target_arch = "aarch64")]
44 {
45 aarch64::configure_user_entry(trapframe, options)
46 }
47}
48
49pub mod user_context;
50
51pub use user_context::{
52 init_from_fdt as init_user_context_from_fdt, user_fpu_enabled, user_vector_enabled,
53};
54
55#[cfg(target_arch = "riscv64")]
56pub mod riscv64;
57#[cfg(target_arch = "riscv64")]
58pub use riscv64::*;
59
60#[cfg(target_arch = "aarch64")]
61pub mod aarch64;
62#[cfg(target_arch = "aarch64")]
63pub use aarch64::*;
64
65#[cfg(target_arch = "riscv64")]
67pub use riscv64::context::KernelContext;
68
69#[cfg(target_arch = "aarch64")]
70pub use aarch64::context::KernelContext;
71
72#[cfg(target_arch = "riscv64")]
74pub use riscv64::fpu;
75
76#[cfg(target_arch = "aarch64")]
77pub use aarch64::fpu;