mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-25 02:13:24 +00:00
56 lines
1.7 KiB
Rust
56 lines
1.7 KiB
Rust
use core::mem::size_of;
|
|
|
|
use alloc::vec::Vec;
|
|
use aster_frame::{
|
|
println,
|
|
vm::{VmAllocOptions, VmIo},
|
|
};
|
|
use log::info;
|
|
|
|
pub fn init() {
|
|
// print all the input device to make sure input crate will compile
|
|
for (name, _) in aster_input::all_devices() {
|
|
info!("Found Input device, name:{}", name);
|
|
}
|
|
}
|
|
|
|
#[allow(unused)]
|
|
fn block_device_test() {
|
|
for (_, device) in aster_block::all_devices() {
|
|
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);
|
|
}
|
|
|
|
// 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!");
|
|
}
|
|
}
|