Skip to main content

machina_core/
machine.rs

1/// Machine model trait and configuration.
2use std::path::PathBuf;
3
4// TODO: use GPA in Machine trait methods (e.g. ram_base)
5// use crate::address::GPA;
6
7pub struct MachineOpts {
8    pub ram_size: u64,
9    pub cpu_count: u32,
10    pub kernel: Option<PathBuf>,
11    pub bios: Option<PathBuf>,
12    pub append: Option<String>,
13    pub nographic: bool,
14    pub drive: Option<PathBuf>,
15}
16
17pub trait Machine: Send + Sync {
18    fn name(&self) -> &str;
19    fn init(
20        &mut self,
21        opts: &MachineOpts,
22    ) -> Result<(), Box<dyn std::error::Error>>;
23    fn reset(&mut self);
24    fn pause(&mut self);
25    fn resume(&mut self);
26    fn shutdown(&mut self);
27    fn boot(&mut self) -> Result<(), Box<dyn std::error::Error>>;
28    fn cpu_count(&self) -> usize;
29    fn ram_size(&self) -> u64;
30}