Skip to content

Commit

Permalink
Merge pull request #948 from mkroening/cfg-if
Browse files Browse the repository at this point in the history
refactor: use cfg-if for arch module
  • Loading branch information
mkroening authored Oct 10, 2023
2 parents 55a689e + 92e5a33 commit 0564975
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 92 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ ahash = { version = "0.8", default-features = false }
align-address = "0.1"
bit_field = "0.10"
bitflags = "2.4"
cfg-if = "1"
crossbeam-utils = { version = "0.8", default-features = false }
dyn-clone = "1.0"
hashbrown = { version = "0.14", default-features = false }
Expand Down
16 changes: 16 additions & 0 deletions src/arch/aarch64/mod.rs
Original file line number Diff line number Diff line change
@@ -1,2 +1,18 @@
pub mod kernel;
pub mod mm;

/// Force strict CPU ordering, serializes load and store operations.
#[allow(dead_code)]
#[inline(always)]
pub(crate) fn memory_barrier() {
use core::arch::asm;
unsafe {
asm!("dmb ish", options(nostack, nomem, preserves_flags),);
}
}

pub fn init_drivers() {
// Initialize PCI Drivers
#[cfg(feature = "pci")]
crate::drivers::pci::init_drivers();
}
144 changes: 52 additions & 92 deletions src/arch/mod.rs
Original file line number Diff line number Diff line change
@@ -1,97 +1,57 @@
// Platform-specific implementations
#[cfg(target_arch = "aarch64")]
pub mod aarch64;
//! Architecture-specific architecture abstraction.

#[cfg(target_arch = "x86_64")]
pub mod x86_64;
cfg_if::cfg_if! {
if #[cfg(target_arch = "aarch64")] {
pub mod aarch64;
pub use self::aarch64::*;

// Export our platform-specific modules.
#[cfg(all(target_arch = "aarch64", target_os = "none"))]
pub use crate::arch::aarch64::kernel::boot_processor_init;
#[cfg(target_arch = "aarch64")]
pub use crate::arch::aarch64::kernel::core_local;
#[cfg(target_arch = "aarch64")]
pub use crate::arch::aarch64::kernel::interrupts;
#[cfg(target_arch = "aarch64")]
pub use crate::arch::aarch64::kernel::interrupts::wakeup_core;
#[cfg(all(target_arch = "aarch64", feature = "pci"))]
pub use crate::arch::aarch64::kernel::pci;
#[cfg(target_arch = "aarch64")]
pub use crate::arch::aarch64::kernel::processor;
#[cfg(target_arch = "aarch64")]
pub use crate::arch::aarch64::kernel::processor::set_oneshot_timer;
#[cfg(target_arch = "aarch64")]
pub use crate::arch::aarch64::kernel::scheduler;
#[cfg(target_arch = "aarch64")]
pub use crate::arch::aarch64::kernel::switch;
#[cfg(target_arch = "aarch64")]
pub use crate::arch::aarch64::kernel::systemtime::get_boot_time;
#[cfg(target_arch = "aarch64")]
pub use crate::arch::aarch64::kernel::{
application_processor_init, boot_application_processors, get_processor_count,
message_output_init, output_message_buf,
};
#[cfg(target_arch = "aarch64")]
pub use crate::arch::aarch64::*;
#[cfg(target_arch = "x86_64")]
pub use crate::arch::x86_64::kernel::apic::{set_oneshot_timer, wakeup_core};
#[cfg(all(target_arch = "x86_64", target_os = "none", feature = "smp"))]
pub use crate::arch::x86_64::kernel::application_processor_init;
#[cfg(target_arch = "x86_64")]
pub use crate::arch::x86_64::kernel::core_local;
#[cfg(target_arch = "x86_64")]
pub use crate::arch::x86_64::kernel::gdt::set_current_kernel_stack;
#[cfg(target_arch = "x86_64")]
pub use crate::arch::x86_64::kernel::interrupts;
#[cfg(all(target_arch = "x86_64", feature = "pci"))]
pub use crate::arch::x86_64::kernel::pci;
#[cfg(target_arch = "x86_64")]
pub use crate::arch::x86_64::kernel::processor;
#[cfg(target_arch = "x86_64")]
pub use crate::arch::x86_64::kernel::scheduler;
#[cfg(target_arch = "x86_64")]
pub use crate::arch::x86_64::kernel::switch;
#[cfg(target_arch = "x86_64")]
pub use crate::arch::x86_64::kernel::systemtime::get_boot_time;
#[cfg(all(target_arch = "x86_64", target_os = "none"))]
pub use crate::arch::x86_64::kernel::{boot_application_processors, boot_processor_init};
#[cfg(target_arch = "x86_64")]
pub use crate::arch::x86_64::kernel::{
get_processor_count, message_output_init, output_message_buf,
};
#[cfg(target_arch = "x86_64")]
pub use crate::arch::x86_64::*;
#[cfg(target_os = "none")]
pub use self::aarch64::kernel::boot_processor_init;
pub use self::aarch64::kernel::core_local;
pub use self::aarch64::kernel::interrupts;
pub use self::aarch64::kernel::interrupts::wakeup_core;
#[cfg(feature = "pci")]
pub use self::aarch64::kernel::pci;
pub use self::aarch64::kernel::processor;
pub use self::aarch64::kernel::processor::set_oneshot_timer;
pub use self::aarch64::kernel::scheduler;
pub use self::aarch64::kernel::switch;
pub use self::aarch64::kernel::systemtime::get_boot_time;
pub use self::aarch64::kernel::{
application_processor_init,
boot_application_processors,
get_processor_count,
message_output_init,
output_message_buf,
};
} else if #[cfg(target_arch = "x86_64")] {
pub mod x86_64;
pub use self::x86_64::*;

/// Force strict CPU ordering, serializes load and store operations.
#[allow(dead_code)]
#[cfg(target_arch = "aarch64")]
#[inline(always)]
pub(crate) fn memory_barrier() {
use core::arch::asm;
unsafe {
asm!("dmb ish", options(nostack, nomem, preserves_flags),);
pub use self::x86_64::kernel::apic::{
set_oneshot_timer,
wakeup_core,
};
#[cfg(all(target_os = "none", feature = "smp"))]
pub use self::x86_64::kernel::application_processor_init;
pub use self::x86_64::kernel::core_local;
pub use self::x86_64::kernel::gdt::set_current_kernel_stack;
pub use self::x86_64::kernel::interrupts;
#[cfg(feature = "pci")]
pub use self::x86_64::kernel::pci;
pub use self::x86_64::kernel::processor;
pub use self::x86_64::kernel::scheduler;
pub use self::x86_64::kernel::switch;
pub use self::x86_64::kernel::systemtime::get_boot_time;
#[cfg(target_os = "none")]
pub use self::x86_64::kernel::{
boot_application_processors,
boot_processor_init,
};
pub use self::x86_64::kernel::{
get_processor_count,
message_output_init,
output_message_buf,
};
}
}

/// Force strict CPU ordering, serializes load and store operations.
#[allow(dead_code)]
#[cfg(target_arch = "x86_64")]
#[inline(always)]
pub(crate) fn memory_barrier() {
use core::arch::asm;
unsafe {
asm!("mfence", options(nostack, nomem, preserves_flags),);
}
}

pub fn init_drivers() {
// Initialize PCI Drivers for x86_64
#[cfg(feature = "pci")]
crate::drivers::pci::init_drivers();
#[cfg(all(
target_arch = "x86_64",
not(feature = "pci"),
any(feature = "tcp", feature = "udp")
))]
crate::arch::x86_64::kernel::mmio::init_drivers();
}
18 changes: 18 additions & 0 deletions src/arch/x86_64/mod.rs
Original file line number Diff line number Diff line change
@@ -1,2 +1,20 @@
pub mod kernel;
pub mod mm;

/// Force strict CPU ordering, serializes load and store operations.
#[allow(dead_code)]
#[inline(always)]
pub(crate) fn memory_barrier() {
use core::arch::asm;
unsafe {
asm!("mfence", options(nostack, nomem, preserves_flags),);
}
}

pub fn init_drivers() {
// Initialize PCI Drivers
#[cfg(feature = "pci")]
crate::drivers::pci::init_drivers();
#[cfg(all(not(feature = "pci"), any(feature = "tcp", feature = "udp")))]
crate::arch::x86_64::kernel::mmio::init_drivers();
}

0 comments on commit 0564975

Please sign in to comment.