#[cfg(target_os = "linux")]
mod linux;
#[cfg(target_os = "linux")]
pub use linux::Firmware;
use super::Version;
use bitflags::bitflags;
use std::fmt::Debug;
#[derive(Copy, Clone, Debug, PartialEq)]
#[non_exhaustive]
#[repr(u8)]
pub enum State {
Uninitialized,
Initialized,
}
impl std::fmt::Display for State {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let state = match self {
State::Uninitialized => "uninitialized",
State::Initialized => "initialized",
};
write!(f, "{}", state)
}
}
bitflags! {
#[derive(Default)]
pub struct Flags: u32 {
const OWNED = 1 << 0;
const ENCRYPTED_STATE = 1 << 8;
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Identifier(Vec<u8>);
impl From<Identifier> for Vec<u8> {
fn from(id: Identifier) -> Vec<u8> {
id.0
}
}
impl std::fmt::Display for Identifier {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
for b in self.0.iter() {
write!(f, "{:02X}", b)?;
}
Ok(())
}
}
#[derive(Clone, Debug, PartialEq)]
pub struct TcbStatus {
pub platform_version: TcbVersion,
pub reported_version: TcbVersion,
}
#[derive(Clone, Debug, PartialEq)]
pub struct Status {
pub build: Build,
pub state: State,
pub is_rmp_init: bool,
pub mask_chip_id: bool,
pub guests: u32,
pub tcb: TcbStatus,
}
#[repr(C)]
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord)]
pub struct Build {
pub version: Version,
pub build: u32,
}
impl std::fmt::Display for Build {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}.{}", self.version, self.build)
}
}
#[derive(Clone, Debug, Default, PartialEq)]
#[repr(C)]
pub struct TcbVersion {
pub bootloader: u8,
pub tee: u8,
_reserved: [u8; 4],
pub snp: u8,
pub microcode: u8,
}