Skip to content

Commit abfdba5

Browse files
committed
Start custom FAT implementation bysed on mini_fat crate
1 parent 3b6aa00 commit abfdba5

File tree

8 files changed

+161
-242
lines changed

8 files changed

+161
-242
lines changed

Cargo.lock

Lines changed: 1 addition & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ codegen-units = 1
6262
debug = false
6363
overflow-checks = false
6464

65+
[profile.second-stage]
66+
inherits = "release"
67+
opt-level = "s"
68+
codegen-units = 1
69+
debug = false
70+
6571
[profile.test.package.test_kernel_higher_half]
6672
rustflags = [
6773
"-C",

bios/second_stage/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,5 @@ edition = "2021"
77
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
88

99
[dependencies]
10-
fatfs = { git = "https://github.com/rafalh/rust-fatfs.git", default-features = false }
1110
mbr-nostd = "0.1.0"
1211
byteorder = { version = "1.4.3", default-features = false }

bios/second_stage/src/dap.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use core::arch::{asm, global_asm};
1+
use core::arch::asm;
22

33
#[derive(Debug, Clone, Copy)]
44
#[repr(packed)]

bios/second_stage/src/disk.rs

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
use crate::{dap, screen, second_stage_end};
22
use core::{fmt::Write as _, slice};
33

4+
#[derive(Clone)]
45
pub struct DiskAccess {
56
pub disk_number: u16,
67
pub base_offset: u64,
78
pub current_offset: u64,
89
}
910

10-
impl fatfs::IoBase for DiskAccess {
11-
type Error = ();
12-
}
13-
14-
impl fatfs::Read for DiskAccess {
15-
fn read(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error> {
11+
impl Read for DiskAccess {
12+
fn read_exact(&mut self, buf: &mut [u8]) {
1613
writeln!(screen::Writer, "read {} bytes", buf.len()).unwrap();
1714

1815
let end_addr = self.base_offset + self.current_offset + u64::try_from(buf.len()).unwrap();
@@ -34,35 +31,37 @@ impl fatfs::Read for DiskAccess {
3431
buf.copy_from_slice(data);
3532

3633
self.current_offset = end_addr;
37-
Ok(buf.len())
3834
}
3935
}
4036

41-
impl fatfs::Seek for DiskAccess {
42-
fn seek(&mut self, pos: fatfs::SeekFrom) -> Result<u64, Self::Error> {
37+
impl Seek for DiskAccess {
38+
fn seek(&mut self, pos: SeekFrom) -> u64 {
4339
writeln!(screen::Writer, "seek to {pos:?}").unwrap();
4440
match pos {
45-
fatfs::SeekFrom::Start(offset) => {
41+
SeekFrom::Start(offset) => {
4642
self.current_offset = offset;
47-
Ok(self.current_offset)
43+
self.current_offset
4844
}
49-
fatfs::SeekFrom::Current(offset) => {
45+
SeekFrom::Current(offset) => {
5046
self.current_offset = (i64::try_from(self.current_offset).unwrap() + offset)
5147
.try_into()
5248
.unwrap();
53-
Ok(self.current_offset)
49+
self.current_offset
5450
}
55-
fatfs::SeekFrom::End(_) => Err(()),
5651
}
5752
}
5853
}
5954

60-
impl fatfs::Write for DiskAccess {
61-
fn write(&mut self, buf: &[u8]) -> Result<usize, Self::Error> {
62-
unimplemented!()
63-
}
55+
pub trait Read {
56+
fn read_exact(&mut self, buf: &mut [u8]);
57+
}
6458

65-
fn flush(&mut self) -> Result<(), Self::Error> {
66-
unimplemented!()
67-
}
59+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
60+
pub enum SeekFrom {
61+
Start(u64),
62+
Current(i64),
63+
}
64+
65+
pub trait Seek {
66+
fn seek(&mut self, pos: SeekFrom) -> u64;
6867
}

0 commit comments

Comments
 (0)