diff --git a/repos/gems/recipes/pkg/drivers_managed-pc/archives b/repos/gems/recipes/pkg/drivers_managed-pc/archives
index fb21a714eb..9dbf862bd2 100644
--- a/repos/gems/recipes/pkg/drivers_managed-pc/archives
+++ b/repos/gems/recipes/pkg/drivers_managed-pc/archives
@@ -1,4 +1,5 @@
_/src/platform_drv
+_/src/pci_decode
_/src/acpi_drv
_/src/ps2_drv
_/src/pc_usb_host_drv
@@ -17,3 +18,4 @@ _/src/driver_manager
_/src/rom_filter
_/src/rom_reporter
_/raw/drivers_managed-pc
+_/raw/pc-devices
diff --git a/repos/gems/sculpt/drivers/pc b/repos/gems/sculpt/drivers/pc
index 36e426d774..cb7f0e390c 100644
--- a/repos/gems/sculpt/drivers/pc
+++ b/repos/gems/sculpt/drivers/pc
@@ -39,8 +39,9 @@
-
-
+
+
+
@@ -48,7 +49,7 @@
-
+
@@ -95,17 +96,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
@@ -115,19 +147,18 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
diff --git a/repos/gems/src/app/driver_manager/main.cc b/repos/gems/src/app/driver_manager/main.cc
index fbac4c859c..0c9cff03f1 100644
--- a/repos/gems/src/app/driver_manager/main.cc
+++ b/repos/gems/src/app/driver_manager/main.cc
@@ -465,32 +465,34 @@ void Driver_manager::Main::_handle_pci_devices_update()
Boot_fb_driver::Mode const boot_fb_mode = _boot_fb_mode();
_pci_devices.xml().for_each_sub_node([&] (Xml_node device) {
+ device.with_optional_sub_node("pci-config", [&] (Xml_node pci) {
- uint16_t const vendor_id = (uint16_t)device.attribute_value("vendor_id", 0U);
- uint16_t const class_code = (uint16_t)(device.attribute_value("class_code", 0U) >> 8);
+ uint16_t const vendor_id = (uint16_t)pci.attribute_value("vendor_id", 0U);
+ uint16_t const class_code = (uint16_t)(pci.attribute_value("class", 0U) >> 8);
- enum {
+ enum {
VENDOR_VBOX = 0x80EEU,
VENDOR_INTEL = 0x8086U,
CLASS_VGA = 0x300U,
CLASS_AHCI = 0x106U,
CLASS_NVME = 0x108U,
- };
+ };
- if (class_code == CLASS_VGA)
+ if (class_code == CLASS_VGA)
has_vga = true;
- if (vendor_id == VENDOR_INTEL && class_code == CLASS_VGA)
+ if (vendor_id == VENDOR_INTEL && class_code == CLASS_VGA)
has_intel_graphics = true;
- if (vendor_id == VENDOR_INTEL && class_code == CLASS_AHCI)
+ if (vendor_id == VENDOR_INTEL && class_code == CLASS_AHCI)
has_ahci = true;
- if (vendor_id == VENDOR_VBOX)
- _use_ohci = false;
+ if (vendor_id == VENDOR_VBOX)
+ _use_ohci = false;
- if (class_code == CLASS_NVME)
- has_nvme = true;
+ if (class_code == CLASS_NVME)
+ has_nvme = true;
+ });
});
if (!_intel_fb_driver.constructed() && has_intel_graphics) {
diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc
index 4ead90948d..e6dc6bed44 100644
--- a/repos/gems/src/app/sculpt_manager/main.cc
+++ b/repos/gems/src/app/sculpt_manager/main.cc
@@ -176,10 +176,11 @@ struct Sculpt::Main : Input_event_handler,
_pci_info.modem_present = false;
_pci_devices.xml().for_each_sub_node("device", [&] (Xml_node device) {
-
- /* detect Intel Wireless card */
- if (device.attribute_value("class_code", 0UL) == 0x28000)
- _pci_info.wifi_present = true;
+ device.with_optional_sub_node("pci-config", [&] (Xml_node pci) {
+ /* detect Intel Wireless card */
+ if (pci.attribute_value("class", 0UL) == 0x28000)
+ _pci_info.wifi_present = true;
+ });
});
update_network_dialog();