From e7571c539c182da1aa2ef9c80a193c541dcd22d5 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Thu, 15 Sep 2022 15:12:14 +0200 Subject: [PATCH] sculpt: use generic platform driver Ref genodelabs/genode#4578 --- .../recipes/pkg/drivers_managed-pc/archives | 2 + repos/gems/sculpt/drivers/pc | 63 ++++++++++++++----- repos/gems/src/app/driver_manager/main.cc | 24 +++---- repos/gems/src/app/sculpt_manager/main.cc | 9 +-- 4 files changed, 67 insertions(+), 31 deletions(-) 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();