cobalt_os/sys/storage/fs/
mod.rs1use crate::debug;
2
3use self::dev_handle::{BlockDeviceIO, DeviceHandle};
4
5pub mod block_device;
6pub mod block;
7pub mod bitmap;
8pub mod dev_handle;
9pub mod superblock;
10pub mod file_table;
11
12use lazy_static::lazy_static;
13use spin::Mutex;
14
15pub type BlockAddr = u32;
16
17
18pub const BLOCK_SIZE: usize = 512;
26pub const DISK_SIZE: usize = 128 * 1024 * 1024;
27pub const KERNEL_SIZE: usize = (32 << 20) / BLOCK_SIZE; pub const SUPER_BLOCK_ADDR: BlockAddr = KERNEL_SIZE as BlockAddr;
29pub const SUPER_BLOCK_SIZE: usize = 2;
30pub const BITMAP_ADDR: BlockAddr = SUPER_BLOCK_ADDR + SUPER_BLOCK_SIZE as u32;
31pub const BITMAP_SIZE: usize = 1024;
32pub const FILETABLE_ADDR: BlockAddr = BITMAP_ADDR + BITMAP_SIZE as u32;
33pub const FILETABLE_SIZE: usize = 1024;
34pub const DATA_ADDR: BlockAddr = FILETABLE_ADDR + FILETABLE_SIZE as u32;
35pub const DATA_SIZE: usize = (DISK_SIZE - DATA_ADDR as usize) - FILETABLE_SIZE;
36
37lazy_static! {
38 pub static ref HANDLE: Mutex<Option<DeviceHandle>> = Mutex::new(None);
39}
40
41pub fn mount_device(handle: DeviceHandle) {
42 let mut handle = handle;
43 debug!("Mounted Handle With Size Of {} Blocks", handle.sector_count());
44 assert!(handle.sector_count() <= DISK_SIZE as u32);
45 *HANDLE.lock() = Some(handle);
46 superblock::SuperBlock::mount();
47}
48
49pub fn is_mounted() -> bool {
50 return HANDLE.lock().is_some()
51}
52
53pub fn device<'a>() -> &'a Mutex<Option<DeviceHandle>> {
54 return &HANDLE
55}
56
57
58