Change block device trait

This commit is contained in:
Yuke Peng
2023-11-22 22:05:08 +08:00
committed by Tate, Hongliang Tian
parent 5b274d6cbe
commit 1616f2d32c
8 changed files with 249 additions and 48 deletions

View File

@ -1,3 +1,10 @@
use core::mem::size_of;
use alloc::vec::Vec;
use aster_frame::{
println,
vm::{VmAllocOptions, VmIo},
};
use log::info;
pub fn init() {
@ -10,18 +17,39 @@ pub fn init() {
#[allow(unused)]
fn block_device_test() {
for (_, device) in aster_block::all_devices() {
let mut write_buffer = [0u8; 512];
let mut read_buffer = [0u8; 512];
info!("write_buffer address:{:x}", write_buffer.as_ptr() as usize);
info!("read_buffer address:{:x}", read_buffer.as_ptr() as usize);
for i in 0..512 {
for byte in write_buffer.iter_mut() {
*byte = i as u8;
}
device.write_block(i as usize, &write_buffer);
device.read_block(i as usize, &mut read_buffer);
assert_eq!(write_buffer, read_buffer);
let write_frame = VmAllocOptions::new(1).alloc_single().unwrap();
let read_frame = VmAllocOptions::new(1).alloc_single().unwrap();
info!("write_buffer address:{:x}", write_frame.start_paddr());
info!("read_buffer address:{:x}", read_frame.start_paddr());
// init write frame
for i in 0..=8 {
let slice: [u8; 512] = [i; 512];
write_frame.write_slice(i as usize * 512, &slice);
}
info!("block device test passed!");
// Test multiple Writer & Reader
let mut writers = Vec::with_capacity(8);
for i in 0..8 {
let writer = read_frame.writer().skip(i * 512).limit(512);
writers.push(writer);
}
let mut readers = Vec::with_capacity(8);
for i in 0..8 {
let reader = write_frame.reader().skip(i * 512).limit(512);
readers.push(reader);
}
device.write_block(0, readers.as_slice());
device.read_block(0, writers.as_slice());
let mut read_slice = [0u8; 512];
let mut write_slice = [0u8; 512];
for i in 0..8 {
read_frame.read_bytes(i * size_of::<[u8; 512]>(), &mut read_slice);
write_frame.read_bytes(i * size_of::<[u8; 512]>(), &mut write_slice);
assert_eq!(read_slice, write_slice);
}
println!("block device test passed!");
}
}