test-smi-rs 0.1.2

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

use crate::generated::binding::*;
use std::fmt;
use std::fmt::Formatter;

#[derive(Debug)]
/// Represents a architecture type of device
pub enum Arch {
    /// Warboy architecture
    Warboy = FuriosaSmiArch_FURIOSA_SMI_ARCH_WARBOY as isize,
    /// RNGD architecture
    Rngd = FuriosaSmiArch_FURIOSA_SMI_ARCH_RNGD as isize,
    /// RNGD-Max architecture
    RngdMax = FuriosaSmiArch_FURIOSA_SMI_ARCH_RNGD_MAX as isize,
    /// RNGD-S architecture
    RngdS = FuriosaSmiArch_FURIOSA_SMI_ARCH_RNGD_S as isize,
}

impl Arch {
    pub(crate) fn from(raw: FuriosaSmiArch) -> Arch {
        match raw {
            FuriosaSmiArch_FURIOSA_SMI_ARCH_WARBOY => Arch::Warboy,
            FuriosaSmiArch_FURIOSA_SMI_ARCH_RNGD => Arch::Rngd,
            FuriosaSmiArch_FURIOSA_SMI_ARCH_RNGD_MAX => Arch::RngdMax,
            FuriosaSmiArch_FURIOSA_SMI_ARCH_RNGD_S => Arch::RngdS,
            _ => panic!("unknown arch"),
        }
    }
}

impl fmt::Display for Arch {
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        let s = match self {
            Arch::Warboy => "warboy",
            Arch::Rngd => "rngd",
            Arch::RngdS => "rngd_s",
            Arch::RngdMax => "rngd_max",
        };
        write!(f, "{}", s)
    }
}

/// Represents a device link type
pub enum LinkType {
    /// Unknown link type
    Unknown =
        FuriosaSmiDeviceToDeviceLinkType_FURIOSA_SMI_DEVICE_TO_DEVICE_LINK_TYPE_UNKNOWN as isize,
    /// Link type under same machine
    Interconnect =
        FuriosaSmiDeviceToDeviceLinkType_FURIOSA_SMI_DEVICE_TO_DEVICE_LINK_TYPE_INTERCONNECT
            as isize,
    /// Link type under same cpu
    Cpu = FuriosaSmiDeviceToDeviceLinkType_FURIOSA_SMI_DEVICE_TO_DEVICE_LINK_TYPE_CPU as isize,
    /// Link type under same switch
    Bridge =
        FuriosaSmiDeviceToDeviceLinkType_FURIOSA_SMI_DEVICE_TO_DEVICE_LINK_TYPE_BRIDGE as isize,
    /// Link type under same socket
    Noc = FuriosaSmiDeviceToDeviceLinkType_FURIOSA_SMI_DEVICE_TO_DEVICE_LINK_TYPE_NOC as isize,
}

impl LinkType {
    pub(crate) fn from(raw: FuriosaSmiDeviceToDeviceLinkType) -> LinkType {
        match raw {
            FuriosaSmiDeviceToDeviceLinkType_FURIOSA_SMI_DEVICE_TO_DEVICE_LINK_TYPE_UNKNOWN => {
                LinkType::Unknown
            }
            FuriosaSmiDeviceToDeviceLinkType_FURIOSA_SMI_DEVICE_TO_DEVICE_LINK_TYPE_INTERCONNECT => {
                LinkType::Interconnect
            }
            FuriosaSmiDeviceToDeviceLinkType_FURIOSA_SMI_DEVICE_TO_DEVICE_LINK_TYPE_CPU => {
                LinkType::Cpu
            }
            FuriosaSmiDeviceToDeviceLinkType_FURIOSA_SMI_DEVICE_TO_DEVICE_LINK_TYPE_BRIDGE => {
                LinkType::Bridge
            }
            FuriosaSmiDeviceToDeviceLinkType_FURIOSA_SMI_DEVICE_TO_DEVICE_LINK_TYPE_NOC => {
                LinkType::Noc
            }
            _ => panic!("unknown linktype"),
        }
    }
}

impl fmt::Display for LinkType {
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        let s = match self {
            LinkType::Unknown => "Unknown",
            LinkType::Interconnect => "Interconnect",
            LinkType::Cpu => "Cpu",
            LinkType::Bridge => "Bridge",
            LinkType::Noc => "Noc",
        };
        write!(f, "{}", s)
    }
}