From d050af8279b3b8c614757a65e5a055e9d290acc5 Mon Sep 17 00:00:00 2001 From: nocode Date: Thu, 9 Jul 2026 15:57:33 +0200 Subject: [PATCH] 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 --- .../pyanaconda/ui/gui/spokes/fws_windows.py | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/configs/baseline/airootfs/usr/lib/python3.14/site-packages/pyanaconda/ui/gui/spokes/fws_windows.py b/configs/baseline/airootfs/usr/lib/python3.14/site-packages/pyanaconda/ui/gui/spokes/fws_windows.py index 08f3d7f..51a3593 100644 --- a/configs/baseline/airootfs/usr/lib/python3.14/site-packages/pyanaconda/ui/gui/spokes/fws_windows.py +++ b/configs/baseline/airootfs/usr/lib/python3.14/site-packages/pyanaconda/ui/gui/spokes/fws_windows.py @@ -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: