ableos/ableos/src/kernel_state.rs

56 lines
1.3 KiB
Rust

use hashbrown::HashMap;
use spin::Lazy;
use crate::{
filesystem::StorageDevice,
handle::{Handle, HandleResource},
};
pub static KERNEL_STATE: Lazy<spin::Mutex<KernelInternalState>> =
Lazy::new(|| spin::Mutex::new(KernelInternalState::new()));
pub struct KernelInternalState {
pub hostname: String,
storage_devices: HashMap<Handle, Box<dyn StorageDevice>>,
should_shutdown: bool,
}
impl KernelInternalState {
pub fn new() -> Self {
Self {
should_shutdown: false,
storage_devices: HashMap::new(),
hostname: "".to_string(),
}
}
pub fn set_hostname(&mut self, hostname: String) {
self.hostname = hostname;
}
pub fn add_storage_device(&mut self, device: impl StorageDevice + Send + 'static) {
self.storage_devices
.insert(Handle::new(HandleResource::StorageDevice), Box::new(device));
}
pub fn get_storage_device(&self, handle: Handle) -> Option<&dyn StorageDevice> {
self.storage_devices.get(&handle).map(|d| &**d)
}
pub fn shutdown(&mut self) {
self.should_shutdown = true;
}
pub fn update_state(&mut self) {
if self.should_shutdown {
crate::arch::shutdown();
}
}
}
impl Default for KernelInternalState {
fn default() -> Self {
Self::new()
}
}