mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-25 18:33:24 +00:00
Change block device trait
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
5b274d6cbe
commit
1616f2d32c
@ -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!");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user