feat(fws_windows): add intel vmd device detection and support
Add support for detecting Intel VMD (Volume Management Device) controllers and enable/disable the VMD checkbox based on detection. Changes: - Add _intel_vmd_present() function to detect VMD controllers via lspci - Initialize _vmd attribute based on controller detection - Add VMD checkbox widget binding and state management - Update checkbox sensitivity when enabling/disabling dual-boot - Persist VMD state in configuration file - Load VMD state from saved configuration
This commit is contained in:
+19
-1
@@ -109,6 +109,13 @@ def _hib_reserve_gib():
|
||||
return swap + 6 # + ESP (1 GiO) + MSR + marge
|
||||
|
||||
|
||||
def _intel_vmd_present():
|
||||
"""True si un contrôleur Intel VMD (Volume Management Device) est présent →
|
||||
le Windows déployé aura besoin du pilote iaStorVD pour voir/booter les NVMe.
|
||||
Sur AMD ou machine sans VMD : False (case décochée, no-op)."""
|
||||
return "volume management device" in _capture("lspci", ["-nn"]).lower()
|
||||
|
||||
|
||||
class FWSWindowsSpoke(NormalSpoke):
|
||||
"""Dual-boot Windows gaming : écrit /tmp/fws-windows (enabled/disk/size/iso)."""
|
||||
|
||||
@@ -134,6 +141,8 @@ class FWSWindowsSpoke(NormalSpoke):
|
||||
self._disks = []
|
||||
# Réserve de queue alignée sur le swap d'hibernation du déployeur [M7].
|
||||
self._reserve = _hib_reserve_gib()
|
||||
# Support Intel VMD/RST : auto-coché si un contrôleur VMD est détecté.
|
||||
self._vmd = _intel_vmd_present()
|
||||
|
||||
# ------------------------------------------------------------------ cycle
|
||||
def initialize(self):
|
||||
@@ -147,6 +156,7 @@ class FWSWindowsSpoke(NormalSpoke):
|
||||
self._btn = self.builder.get_object("btn_iso")
|
||||
self._warn = self.builder.get_object("iso_warn")
|
||||
self._note = self.builder.get_object("note_platform")
|
||||
self._vmd_chk = self.builder.get_object("chk_vmd")
|
||||
|
||||
# Peuple le combo des disques (une fois).
|
||||
self._disks = _list_disks()
|
||||
@@ -181,6 +191,8 @@ class FWSWindowsSpoke(NormalSpoke):
|
||||
self._spin.set_value(self._size)
|
||||
self._entry.set_text(self._iso)
|
||||
self._box.set_sensitive(self._enabled and self._uefi)
|
||||
self._vmd_chk.set_active(self._vmd)
|
||||
self._vmd_chk.set_sensitive(self._enabled and self._uefi)
|
||||
self._validate()
|
||||
|
||||
def apply(self):
|
||||
@@ -189,11 +201,14 @@ class FWSWindowsSpoke(NormalSpoke):
|
||||
self._disk = self._combo.get_active_id() or ""
|
||||
self._size = int(self._spin.get_value())
|
||||
self._iso = self._entry.get_text().strip()
|
||||
self._vmd = self._vmd_chk.get_active()
|
||||
self._save_state()
|
||||
|
||||
# --------------------------------------------------------------- handlers
|
||||
def _on_toggle(self, _btn):
|
||||
self._box.set_sensitive(self._chk.get_active())
|
||||
active = self._chk.get_active()
|
||||
self._box.set_sensitive(active)
|
||||
self._vmd_chk.set_sensitive(active)
|
||||
self._validate()
|
||||
|
||||
def _on_disk_changed(self, _combo):
|
||||
@@ -280,6 +295,8 @@ class FWSWindowsSpoke(NormalSpoke):
|
||||
self._size = int(val)
|
||||
elif key == "iso":
|
||||
self._iso = val
|
||||
elif key == "intel_vmd":
|
||||
self._vmd = val == "1"
|
||||
|
||||
def _save_state(self):
|
||||
lines = [
|
||||
@@ -288,6 +305,7 @@ class FWSWindowsSpoke(NormalSpoke):
|
||||
"disk=%s" % self._disk,
|
||||
"size_gib=%d" % self._size,
|
||||
"iso=%s" % self._iso,
|
||||
"intel_vmd=%d" % (1 if self._vmd else 0),
|
||||
]
|
||||
try:
|
||||
with open(_STATE_FILE, "w") as fh:
|
||||
|
||||
Reference in New Issue
Block a user