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
|
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):
|
class FWSWindowsSpoke(NormalSpoke):
|
||||||
"""Dual-boot Windows gaming : écrit /tmp/fws-windows (enabled/disk/size/iso)."""
|
"""Dual-boot Windows gaming : écrit /tmp/fws-windows (enabled/disk/size/iso)."""
|
||||||
|
|
||||||
@@ -134,6 +141,8 @@ class FWSWindowsSpoke(NormalSpoke):
|
|||||||
self._disks = []
|
self._disks = []
|
||||||
# Réserve de queue alignée sur le swap d'hibernation du déployeur [M7].
|
# Réserve de queue alignée sur le swap d'hibernation du déployeur [M7].
|
||||||
self._reserve = _hib_reserve_gib()
|
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
|
# ------------------------------------------------------------------ cycle
|
||||||
def initialize(self):
|
def initialize(self):
|
||||||
@@ -147,6 +156,7 @@ class FWSWindowsSpoke(NormalSpoke):
|
|||||||
self._btn = self.builder.get_object("btn_iso")
|
self._btn = self.builder.get_object("btn_iso")
|
||||||
self._warn = self.builder.get_object("iso_warn")
|
self._warn = self.builder.get_object("iso_warn")
|
||||||
self._note = self.builder.get_object("note_platform")
|
self._note = self.builder.get_object("note_platform")
|
||||||
|
self._vmd_chk = self.builder.get_object("chk_vmd")
|
||||||
|
|
||||||
# Peuple le combo des disques (une fois).
|
# Peuple le combo des disques (une fois).
|
||||||
self._disks = _list_disks()
|
self._disks = _list_disks()
|
||||||
@@ -181,6 +191,8 @@ class FWSWindowsSpoke(NormalSpoke):
|
|||||||
self._spin.set_value(self._size)
|
self._spin.set_value(self._size)
|
||||||
self._entry.set_text(self._iso)
|
self._entry.set_text(self._iso)
|
||||||
self._box.set_sensitive(self._enabled and self._uefi)
|
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()
|
self._validate()
|
||||||
|
|
||||||
def apply(self):
|
def apply(self):
|
||||||
@@ -189,11 +201,14 @@ class FWSWindowsSpoke(NormalSpoke):
|
|||||||
self._disk = self._combo.get_active_id() or ""
|
self._disk = self._combo.get_active_id() or ""
|
||||||
self._size = int(self._spin.get_value())
|
self._size = int(self._spin.get_value())
|
||||||
self._iso = self._entry.get_text().strip()
|
self._iso = self._entry.get_text().strip()
|
||||||
|
self._vmd = self._vmd_chk.get_active()
|
||||||
self._save_state()
|
self._save_state()
|
||||||
|
|
||||||
# --------------------------------------------------------------- handlers
|
# --------------------------------------------------------------- handlers
|
||||||
def _on_toggle(self, _btn):
|
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()
|
self._validate()
|
||||||
|
|
||||||
def _on_disk_changed(self, _combo):
|
def _on_disk_changed(self, _combo):
|
||||||
@@ -280,6 +295,8 @@ class FWSWindowsSpoke(NormalSpoke):
|
|||||||
self._size = int(val)
|
self._size = int(val)
|
||||||
elif key == "iso":
|
elif key == "iso":
|
||||||
self._iso = val
|
self._iso = val
|
||||||
|
elif key == "intel_vmd":
|
||||||
|
self._vmd = val == "1"
|
||||||
|
|
||||||
def _save_state(self):
|
def _save_state(self):
|
||||||
lines = [
|
lines = [
|
||||||
@@ -288,6 +305,7 @@ class FWSWindowsSpoke(NormalSpoke):
|
|||||||
"disk=%s" % self._disk,
|
"disk=%s" % self._disk,
|
||||||
"size_gib=%d" % self._size,
|
"size_gib=%d" % self._size,
|
||||||
"iso=%s" % self._iso,
|
"iso=%s" % self._iso,
|
||||||
|
"intel_vmd=%d" % (1 if self._vmd else 0),
|
||||||
]
|
]
|
||||||
try:
|
try:
|
||||||
with open(_STATE_FILE, "w") as fh:
|
with open(_STATE_FILE, "w") as fh:
|
||||||
|
|||||||
Reference in New Issue
Block a user