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 }
}
pub struct DeviceInfo {
raw: FuriosaSmiDeviceInfo,
}
impl DeviceInfo {
pub fn arch(&self) -> Arch {
Arch::from(self.raw.arch)
}
pub fn core_num(&self) -> u32 {
self.raw.core_num
}
pub fn numa_node(&self) -> u32 {
self.raw.numa_node
}
pub fn name(&self) -> String {
c_char_slice_to_string(&self.raw.name)
}
pub fn serial(&self) -> String {
c_char_slice_to_string(&self.raw.serial)
}
pub fn uuid(&self) -> String {
c_char_slice_to_string(&self.raw.uuid)
}
pub fn bdf(&self) -> String {
c_char_slice_to_string(&self.raw.bdf)
}
pub fn major(&self) -> u16 {
self.raw.major
}
pub fn minor(&self) -> u16 {
self.raw.minor
}
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],
}
}