1#![no_std]
4#![cfg_attr(doc, feature(doc_cfg))]
5
6extern crate alloc;
7
8use alloc::boxed::Box;
9
10#[cfg(feature = "bcm2835-sdhci")]
11pub mod bcm2835sdhci;
12
13#[cfg(feature = "ramdisk")]
14pub mod ramdisk;
15
16#[cfg(feature = "ramdisk-static")]
17pub mod ramdisk_static;
18
19#[cfg(feature = "ahci")]
20pub mod ahci;
21pub mod partition;
22#[cfg(feature = "sdmmc")]
23pub mod sdmmc;
24
25#[doc(no_inline)]
26pub use ax_driver_base::{BaseDriverOps, DevError, DevResult, DeviceType};
27
28pub trait BlockDriverOps: BaseDriverOps {
30 fn num_blocks(&self) -> u64;
34 fn block_size(&self) -> usize;
36
37 fn read_block(&mut self, block_id: u64, buf: &mut [u8]) -> DevResult;
42
43 fn write_block(&mut self, block_id: u64, buf: &[u8]) -> DevResult;
48
49 fn flush(&mut self) -> DevResult;
51}
52
53impl<T: BlockDriverOps + ?Sized> BlockDriverOps for Box<T> {
54 fn num_blocks(&self) -> u64 {
55 (**self).num_blocks()
56 }
57
58 fn block_size(&self) -> usize {
59 (**self).block_size()
60 }
61
62 fn read_block(&mut self, block_id: u64, buf: &mut [u8]) -> DevResult {
63 (**self).read_block(block_id, buf)
64 }
65
66 fn write_block(&mut self, block_id: u64, buf: &[u8]) -> DevResult {
67 (**self).write_block(block_id, buf)
68 }
69
70 fn flush(&mut self) -> DevResult {
71 (**self).flush()
72 }
73}