hermit/arch/
mod.rs

1//! Architecture-specific architecture abstraction.
2
3cfg_if::cfg_if! {
4	if #[cfg(target_arch = "aarch64")] {
5		pub(crate) mod aarch64;
6		pub(crate) use self::aarch64::*;
7
8		#[cfg(target_os = "none")]
9		pub(crate) use self::aarch64::kernel::boot_processor_init;
10		pub(crate) use self::aarch64::kernel::core_local;
11		pub(crate) use self::aarch64::kernel::interrupts;
12		pub(crate) use self::aarch64::kernel::interrupts::wakeup_core;
13		#[cfg(feature = "pci")]
14		pub(crate) use self::aarch64::kernel::pci;
15		pub(crate) use self::aarch64::kernel::processor;
16		pub(crate) use self::aarch64::kernel::serial::SerialDevice;
17		pub(crate) use self::aarch64::kernel::processor::set_oneshot_timer;
18		pub(crate) use self::aarch64::kernel::scheduler;
19		#[cfg(not(feature = "common-os"))]
20		pub(crate) use self::aarch64::kernel::switch;
21		#[cfg(feature = "smp")]
22		pub(crate) use self::aarch64::kernel::application_processor_init;
23		pub(crate) use self::aarch64::kernel::{
24			get_processor_count,
25		};
26		pub use self::aarch64::mm::paging::{BasePageSize, PageSize};
27	} else if #[cfg(target_arch = "x86_64")] {
28		pub(crate) mod x86_64;
29		pub(crate) use self::x86_64::*;
30
31		pub(crate) use self::x86_64::kernel::apic::{
32			set_oneshot_timer,
33			wakeup_core,
34		};
35		#[cfg(all(target_os = "none", feature = "smp"))]
36		pub(crate) use self::x86_64::kernel::application_processor_init;
37		pub(crate) use self::x86_64::kernel::core_local;
38		pub(crate) use self::x86_64::kernel::gdt::set_current_kernel_stack;
39		pub(crate) use self::x86_64::kernel::interrupts;
40		#[cfg(feature = "pci")]
41		pub(crate) use self::x86_64::kernel::pci;
42		pub(crate) use self::x86_64::kernel::processor;
43		pub(crate) use self::x86_64::kernel::serial::SerialDevice;
44		pub(crate) use self::x86_64::kernel::scheduler;
45		pub(crate) use self::x86_64::kernel::switch;
46		#[cfg(target_os = "none")]
47		pub(crate) use self::x86_64::kernel::boot_processor_init;
48		pub(crate) use self::x86_64::kernel::{
49			get_processor_count,
50		};
51		pub use self::x86_64::mm::paging::{BasePageSize, PageSize};
52		#[cfg(feature = "common-os")]
53		pub use self::x86_64::mm::create_new_root_page_table;
54		#[cfg(feature = "common-os")]
55		pub use self::x86_64::kernel::{load_application, jump_to_user_land};
56	} else if #[cfg(target_arch = "riscv64")] {
57		pub(crate) mod riscv64;
58		pub(crate) use self::riscv64::*;
59
60		#[cfg(feature = "smp")]
61		pub(crate) use self::riscv64::kernel::application_processor_init;
62		#[cfg(feature = "pci")]
63		pub(crate) use self::riscv64::kernel::pci;
64		pub(crate) use self::riscv64::kernel::processor::{self, set_oneshot_timer, wakeup_core};
65		pub(crate) use self::riscv64::kernel::serial::SerialDevice;
66		pub(crate) use self::riscv64::kernel::{
67			boot_processor_init,
68			core_local,
69			get_processor_count,
70			interrupts,
71			scheduler,
72			switch,
73		};
74		pub use self::riscv64::mm::paging::{BasePageSize, PageSize};
75	}
76}