test-smi-rs 0.1.2

APIs for managing and monitoring FuriosaAI NPUs
Documentation
#![allow(non_upper_case_globals)]

use std::fmt::{self, Display, Formatter};

use crate::core_status::CoreStatus::{Available, Occupied};
use crate::generated::binding::*;

#[derive(Debug)]
/// Represents a core status
pub enum CoreStatus {
    /// When a core is available.
    Available = FuriosaSmiCoreStatus_FURIOSA_SMI_CORE_STATUS_AVAILABLE as isize,

    /// When a core is occupied.
    Occupied = FuriosaSmiCoreStatus_FURIOSA_SMI_CORE_STATUS_OCCUPIED as isize,
}

impl CoreStatus {
    pub(crate) fn from(raw: FuriosaSmiCoreStatus) -> CoreStatus {
        match raw {
            FuriosaSmiCoreStatus_FURIOSA_SMI_CORE_STATUS_AVAILABLE => Available,
            FuriosaSmiCoreStatus_FURIOSA_SMI_CORE_STATUS_OCCUPIED => Occupied,
            _ => panic!("unknown core status"),
        }
    }
}

impl Display for CoreStatus {
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        match self {
            CoreStatus::Available => write!(f, "available"),
            CoreStatus::Occupied => write!(f, "occupied"),
        }
    }
}

pub(crate) fn default_core_status() -> FuriosaSmiCoreStatuses {
    FuriosaSmiCoreStatuses {
        count: 0,
        core_status: [0; FURIOSA_SMI_MAX_CORE_STATUS_SIZE as usize],
    }
}