pub mod parameters;
use parameters::*;
#[non_exhaustive]
#[repr(u64)]
#[derive(Clone, Copy, Debug, Eq, PartialEq, num_enum::TryFromPrimitive, Hash)]
pub enum HypercallAddress {
Exit = 0x1010,
SerialWriteByte = 0x1020,
SerialWriteBuffer = 0x1030,
SerialReadByte = 0x1040,
SerialReadBuffer = 0x1050,
FileWrite = 0x1100,
FileOpen = 0x1110,
FileClose = 0x1120,
FileRead = 0x1130,
FileLseek = 0x1140,
FileUnlink = 0x1150,
Getdents = 0x1160,
FileStat = 0x1170,
FileFstat = 0x1180,
Mkdir = 0x1190,
SharedMemOpen = 0x1200,
SharedMemClose = 0x1210,
}
into_hypercall_addresses! {
impl From<Hypercall> for HypercallAddress {
match {
Exit,
FileClose,
FileLseek,
FileOpen,
FileRead,
FileUnlink,
FileWrite,
Getdents,
Mkdir,
FileStat,
FileFstat,
SerialReadBuffer,
SerialReadByte,
SerialWriteBuffer,
SerialWriteByte,
}
}
}
#[non_exhaustive]
#[derive(Debug)]
pub enum Hypercall<'a> {
Exit(i32),
FileClose(&'a mut CloseParams),
FileLseek(&'a mut LseekParams),
FileOpen(&'a mut OpenParams),
FileRead(&'a mut ReadParams),
FileWrite(&'a mut WriteParams),
FileUnlink(&'a mut UnlinkParams),
Getdents(&'a mut GetdentParams),
FileStat(&'a mut StatParams),
FileFstat(&'a mut FstatParams),
Mkdir(&'a mut MkdirParams),
SerialWriteByte(u8),
SerialWriteBuffer(&'a SerialWriteBufferParams),
SerialReadByte,
SerialReadBuffer(&'a SerialReadBufferParams),
}
impl<'a> Hypercall<'a> {
pub fn port(self) -> u16 {
HypercallAddress::from(self) as u16
}
}