use std::io;
use super::{Config, Driver};
use crate::backend::Backend;
use crate::backend::ops::ext::ExtBackend;
pub trait DriverExt: Sized {
fn new(cfg: Config) -> io::Result<Self>;
fn init_thread(cpu_id: u16) -> io::Result<()>;
fn allowed_cpus() -> io::Result<Vec<u16>>;
}
impl DriverExt for Driver {
fn new(cfg: Config) -> io::Result<Self> {
cfg.validate()?;
let (state, slots) = <Backend as ExtBackend>::create(&cfg)?;
Driver::from_state(
state,
slots,
cfg.ready_slots,
cfg.timer_slots,
cfg.recv.entries as usize,
)
}
fn init_thread(cpu_id: u16) -> io::Result<()> {
<Backend as ExtBackend>::init_thread(cpu_id)
}
fn allowed_cpus() -> io::Result<Vec<u16>> {
<Backend as ExtBackend>::allowed_cpus()
}
}