test_smi_rs/
device_info.rs

1use crate::generated::binding::*;
2use crate::types::Arch;
3use crate::util::c_char_slice_to_string;
4use crate::version::*;
5
6pub(crate) fn new_device_info(raw: FuriosaSmiDeviceInfo) -> DeviceInfo {
7    DeviceInfo { raw }
8}
9
10/// A struct for device information
11pub struct DeviceInfo {
12    raw: FuriosaSmiDeviceInfo,
13}
14
15impl DeviceInfo {
16    /// Get a architecture of device
17    pub fn arch(&self) -> Arch {
18        Arch::from(self.raw.arch)
19    }
20
21    /// Get a number of cores
22    pub fn core_num(&self) -> u32 {
23        self.raw.core_num
24    }
25
26    /// Get a numa node of device
27    pub fn numa_node(&self) -> u32 {
28        self.raw.numa_node
29    }
30
31    /// Get a name of device
32    pub fn name(&self) -> String {
33        c_char_slice_to_string(&self.raw.name)
34    }
35
36    /// Get a serial of device
37    pub fn serial(&self) -> String {
38        c_char_slice_to_string(&self.raw.serial)
39    }
40
41    /// Get a uuid of device
42    pub fn uuid(&self) -> String {
43        c_char_slice_to_string(&self.raw.uuid)
44    }
45
46    /// Get a bdf of device
47    pub fn bdf(&self) -> String {
48        c_char_slice_to_string(&self.raw.bdf)
49    }
50
51    /// Get a major part of pci device
52    pub fn major(&self) -> u16 {
53        self.raw.major
54    }
55
56    /// Get a minor part of pci device
57    pub fn minor(&self) -> u16 {
58        self.raw.minor
59    }
60
61    /// Get a firmware version of device
62    pub fn firmware_version(&self) -> VersionInfo {
63        new_version_info(self.raw.firmware_version)
64    }
65}
66
67pub(crate) fn default_device_info() -> FuriosaSmiDeviceInfo {
68    FuriosaSmiDeviceInfo {
69        index: 0,
70        arch: 0,
71        core_num: 0,
72        numa_node: 0,
73        name: [0; FURIOSA_SMI_MAX_CSTR_SIZE as usize],
74        serial: [0; FURIOSA_SMI_MAX_CSTR_SIZE as usize],
75        uuid: [0; FURIOSA_SMI_MAX_CSTR_SIZE as usize],
76        bdf: [0; FURIOSA_SMI_MAX_CSTR_SIZE as usize],
77        major: 0,
78        minor: 0,
79        firmware_version: default_version_info(),
80        pert_version: default_version_info(),
81    }
82}
83
84pub(crate) fn default_version_info() -> FuriosaSmiVersion {
85    FuriosaSmiVersion {
86        major: 0,
87        minor: 0,
88        patch: 0,
89        metadata: [0; FURIOSA_SMI_MAX_CSTR_SIZE as usize],
90    }
91}