test-smi-rs 0.1.2

APIs for managing and monitoring FuriosaAI NPUs
Documentation
use crate::generated::binding::*;
use crate::types::Arch;
use crate::util::c_char_slice_to_string;
use crate::version::*;

pub(crate) fn new_device_info(raw: FuriosaSmiDeviceInfo) -> DeviceInfo {
    DeviceInfo { raw }
}

/// A struct for device information
pub struct DeviceInfo {
    raw: FuriosaSmiDeviceInfo,
}

impl DeviceInfo {
    /// Get a architecture of device
    pub fn arch(&self) -> Arch {
        Arch::from(self.raw.arch)
    }

    /// Get a number of cores
    pub fn core_num(&self) -> u32 {
        self.raw.core_num
    }

    /// Get a numa node of device
    pub fn numa_node(&self) -> u32 {
        self.raw.numa_node
    }

    /// Get a name of device
    pub fn name(&self) -> String {
        c_char_slice_to_string(&self.raw.name)
    }

    /// Get a serial of device
    pub fn serial(&self) -> String {
        c_char_slice_to_string(&self.raw.serial)
    }

    /// Get a uuid of device
    pub fn uuid(&self) -> String {
        c_char_slice_to_string(&self.raw.uuid)
    }

    /// Get a bdf of device
    pub fn bdf(&self) -> String {
        c_char_slice_to_string(&self.raw.bdf)
    }

    /// Get a major part of pci device
    pub fn major(&self) -> u16 {
        self.raw.major
    }

    /// Get a minor part of pci device
    pub fn minor(&self) -> u16 {
        self.raw.minor
    }

    /// Get a firmware version of device
    pub fn firmware_version(&self) -> VersionInfo {
        new_version_info(self.raw.firmware_version)
    }
}

pub(crate) fn default_device_info() -> FuriosaSmiDeviceInfo {
    FuriosaSmiDeviceInfo {
        index: 0,
        arch: 0,
        core_num: 0,
        numa_node: 0,
        name: [0; FURIOSA_SMI_MAX_CSTR_SIZE as usize],
        serial: [0; FURIOSA_SMI_MAX_CSTR_SIZE as usize],
        uuid: [0; FURIOSA_SMI_MAX_CSTR_SIZE as usize],
        bdf: [0; FURIOSA_SMI_MAX_CSTR_SIZE as usize],
        major: 0,
        minor: 0,
        firmware_version: default_version_info(),
        pert_version: default_version_info(),
    }
}

pub(crate) fn default_version_info() -> FuriosaSmiVersion {
    FuriosaSmiVersion {
        major: 0,
        minor: 0,
        patch: 0,
        metadata: [0; FURIOSA_SMI_MAX_CSTR_SIZE as usize],
    }
}