use alloc::sync::Arc; use mammoth::zion::ZError; use crate::{ ahci::{AhciController, Command}, AsyncDenaliServerHandler, ReadManyRequest, ReadRequest, ReadResponse, }; pub struct DenaliServerImpl { ahci_controller: Arc, } impl DenaliServerImpl { pub fn new(controller: Arc) -> Self { DenaliServerImpl { ahci_controller: controller, } } } impl AsyncDenaliServerHandler for DenaliServerImpl { async fn read(&self, req: ReadRequest) -> Result { let mut command = Command::read(req.block.lba, req.block.size as u16)?; self.ahci_controller .issue_command(req.device_id as usize, &command) .await?; Ok(ReadResponse { device_id: req.device_id, size: req.block.size, memory: command.release_mem_cap(), }) } async fn read_many(&self, _req: ReadManyRequest) -> Result { Err(ZError::UNIMPLEMENTED) } }