sel4/arch/arm/
mod.rs

1//
2// Copyright 2023, Colias Group, LLC
3//
4// SPDX-License-Identifier: MIT
5//
6
7use crate::{const_helpers::u32_into_usize, sys};
8
9mod arch;
10mod invocations;
11mod object;
12mod vm_attributes;
13mod vspace;
14
15pub(crate) mod fault;
16
17pub(crate) mod top_level {
18    pub use super::{
19        arch::top_level::*,
20        object::{ObjectBlueprintArch, ObjectBlueprintArm, ObjectTypeArch, ObjectTypeArm},
21        vm_attributes::VmAttributes,
22        vspace::{FrameObjectType, TranslationTableObjectType},
23        NUM_FAST_MESSAGE_REGISTERS,
24    };
25}
26
27pub(crate) use vspace::vspace_levels;
28
29/// The number of message registers which are passed in architectural registers.
30pub const NUM_FAST_MESSAGE_REGISTERS: usize = u32_into_usize(sys::seL4_FastMessageRegisters);
31
32pub(crate) mod cap_type_arch {
33    use crate::{declare_cap_type_for_object_of_fixed_size, sel4_cfg};
34
35    #[sel4_cfg(ARM_HYPERVISOR_SUPPORT)]
36    declare_cap_type_for_object_of_fixed_size! {
37        /// Corresponds to `seL4_ARM_VCPU`.
38        VCpu { ObjectTypeArch, ObjectBlueprintArch }
39    }
40
41    declare_cap_type_for_object_of_fixed_size! {
42        /// Corresponds to `seL4_ARM_Page` with `size_bits = 12`.
43        SmallPage { ObjectTypeArch, ObjectBlueprintArch }
44    }
45
46    declare_cap_type_for_object_of_fixed_size! {
47        /// Corresponds to `seL4_ARM_Page` with `size_bits = 21`.
48        LargePage { ObjectTypeArch, ObjectBlueprintArch }
49    }
50
51    #[sel4_cfg(ARCH_AARCH64)]
52    declare_cap_type_for_object_of_fixed_size! {
53        /// Corresponds to `seL4_ARM_Page` with `size_bits = 30`.
54        HugePage { ObjectTypeSeL4Arch, ObjectBlueprintSeL4Arch }
55    }
56
57    #[sel4_cfg(ARCH_AARCH32)]
58    declare_cap_type_for_object_of_fixed_size! {
59        /// Corresponds to `seL4_ARM_Page` with `size_bits = 16`.
60        Section { ObjectTypeSeL4Arch, ObjectBlueprintSeL4Arch }
61    }
62
63    #[sel4_cfg(ARCH_AARCH64)]
64    declare_cap_type_for_object_of_fixed_size! {
65        /// Corresponds to `seL4_ARM_VSpace`.
66        VSpace { ObjectTypeSeL4Arch, ObjectBlueprintSeL4Arch }
67    }
68
69    #[sel4_cfg(ARCH_AARCH32)]
70    declare_cap_type_for_object_of_fixed_size! {
71        /// Corresponds to `seL4_ARM_PD`.
72        PD { ObjectTypeSeL4Arch, ObjectBlueprintSeL4Arch }
73    }
74
75    declare_cap_type_for_object_of_fixed_size! {
76        /// Corresponds to `seL4_ARM_PageTable`.
77        PT { ObjectTypeArch, ObjectBlueprintArch }
78    }
79
80    /// Alias for [`cap_type::SmallPage`](SmallPage).
81    pub type Granule = SmallPage;
82
83    #[sel4_cfg(ARCH_AARCH32)]
84    /// Alias for [`cap_type::PD`](PD).
85    pub type VSpace = PD;
86}
87
88pub(crate) mod cap_arch {
89    use crate::{declare_cap_alias, sel4_cfg};
90
91    #[sel4_cfg(ARM_HYPERVISOR_SUPPORT)]
92    declare_cap_alias!(VCpu);
93
94    declare_cap_alias!(SmallPage);
95    declare_cap_alias!(LargePage);
96
97    #[sel4_cfg(ARCH_AARCH64)]
98    declare_cap_alias!(HugePage);
99
100    #[sel4_cfg(ARCH_AARCH32)]
101    declare_cap_alias!(PD);
102
103    declare_cap_alias!(PT);
104}