test-smi-rs 0.1.2

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

pub(crate) fn new_device_file(raw: FuriosaSmiDeviceFile) -> DeviceFile {
    DeviceFile { raw }
}

/// A struct for device file
pub struct DeviceFile {
    raw: FuriosaSmiDeviceFile,
}

impl DeviceFile {
    /// Get a list of core for device file
    pub fn cores(&self) -> Vec<u32> {
        (self.raw.core_start..=self.raw.core_end).collect()
    }

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

pub(crate) fn default_device_file() -> FuriosaSmiDeviceFile {
    FuriosaSmiDeviceFile {
        core_start: 0,
        core_end: 0,
        path: [0; FURIOSA_SMI_MAX_PATH_SIZE as usize],
    }
}

pub(crate) fn default_device_files() -> FuriosaSmiDeviceFiles {
    FuriosaSmiDeviceFiles {
        count: 0,
        device_files: [default_device_file(); FURIOSA_SMI_MAX_DEVICE_HANDLE_SIZE as usize],
    }
}