nvml_wrapper/struct_wrappers/
vgpu.rs1use std::{ffi::CStr, os::raw::c_char};
2
3use ffi::bindings::*;
4
5use crate::{
6 enum_wrappers::vgpu::{VgpuGuestInfoState, VgpuLicenseState},
7 error::NvmlError,
8};
9
10#[derive(Debug, Copy, Clone)]
11pub struct VgpuLicenseInfo {
12 pub is_licensed: bool,
13 pub expiry: VgpuLicenseExpiry,
14 pub state: VgpuLicenseState,
15}
16
17impl From<nvmlVgpuLicenseInfo_t> for VgpuLicenseInfo {
18 fn from(value: nvmlVgpuLicenseInfo_t) -> Self {
19 Self {
20 is_licensed: value.isLicensed != 0,
21 expiry: VgpuLicenseExpiry::from(value.licenseExpiry),
22 state: VgpuLicenseState::from(value.currentState),
23 }
24 }
25}
26
27#[derive(Debug, Copy, Clone)]
28pub struct VgpuLicenseExpiry {
29 pub year: u16,
30 pub month: u8,
31 pub day: u8,
32 pub hour: u8,
33 pub min: u8,
34 pub sec: u8,
35 pub status: u8,
36}
37
38impl From<nvmlVgpuLicenseExpiry_t> for VgpuLicenseExpiry {
39 fn from(value: nvmlVgpuLicenseExpiry_t) -> Self {
40 Self {
41 year: u16::try_from(value.year).unwrap_or(u16::MAX),
42 month: u8::try_from(value.month).unwrap_or(u8::MAX),
43 day: u8::try_from(value.day).unwrap_or(u8::MAX),
44 hour: u8::try_from(value.hour).unwrap_or(u8::MAX),
45 min: u8::try_from(value.min).unwrap_or(u8::MAX),
46 sec: u8::try_from(value.sec).unwrap_or(u8::MAX),
47 status: value.status,
48 }
49 }
50}
51
52#[derive(Debug)]
53pub struct VgpuMetadata {
54 pub version: u32,
55 pub revision: u32,
56 pub guest_info_state: VgpuGuestInfoState,
57 pub guest_driver_version: String,
58 pub host_driver_version: String,
59 pub vgpu_virtualization_caps: u32,
60 pub guest_vgpu_version: u32,
61}
62
63impl TryFrom<nvmlVgpuMetadata_t> for VgpuMetadata {
64 type Error = NvmlError;
65 fn try_from(value: nvmlVgpuMetadata_t) -> Result<Self, Self::Error> {
66 let convert_c_str = |c_str: &[c_char]| unsafe {
67 CStr::from_ptr(c_str.as_ptr())
68 .to_str()
69 .map(|v| v.to_string())
70 };
71
72 Ok(Self {
73 version: value.version,
74 revision: value.revision,
75 guest_driver_version: convert_c_str(&value.guestDriverVersion)?,
76 host_driver_version: convert_c_str(&value.hostDriverVersion)?,
77 vgpu_virtualization_caps: value.vgpuVirtualizationCaps,
78 guest_vgpu_version: value.guestVgpuVersion,
79 guest_info_state: value.guestInfoState.try_into()?,
80 })
81 }
82}
83
84#[derive(Debug, Copy, Clone)]
85pub struct VgpuPlacementId {
86 pub version: u32,
87 pub id: u32,
88}
89
90impl From<nvmlVgpuPlacementId_t> for VgpuPlacementId {
91 fn from(value: nvmlVgpuPlacementId_t) -> Self {
92 Self {
93 version: value.version,
94 id: value.placementId,
95 }
96 }
97}
98
99#[derive(Debug, Copy, Clone)]
100pub struct VgpuRuntimeState {
101 pub version: u32,
102 pub size: u64,
103}
104
105impl From<nvmlVgpuRuntimeState_t> for VgpuRuntimeState {
106 fn from(value: nvmlVgpuRuntimeState_t) -> Self {
107 Self {
108 version: value.version,
109 size: value.size,
110 }
111 }
112}
113
114#[derive(Debug, Clone, Copy)]
115pub struct Bar1Info {
116 pub version: u32,
117 pub size: u64,
118}
119
120impl From<nvmlVgpuTypeBar1Info_v1_t> for Bar1Info {
121 fn from(value: nvmlVgpuTypeBar1Info_v1_t) -> Self {
122 Self {
123 version: value.version,
124 size: value.bar1Size,
125 }
126 }
127}