From 53041f4cd834e92e67bc16fadc896106d854660a Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 23 Mar 2021 11:32:55 +0100 Subject: [PATCH] usb_host: support to disable usb controller types The commits adds the same configuration values as supported up to now by the monolithic usb driver. In contrast to the original, by default all drivers are started. Disabling a controller type is used by Sculpt, e.g. for OHCI if running Sculpt inside Virtualbox. --- .../dde_linux/src/drivers/usb_host/platform.h | 11 +++++++++ .../src/drivers/usb_host/spec/x86/platform.cc | 24 ++++++++++++------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/repos/dde_linux/src/drivers/usb_host/platform.h b/repos/dde_linux/src/drivers/usb_host/platform.h index b62a3e7178..7ceb46b338 100644 --- a/repos/dde_linux/src/drivers/usb_host/platform.h +++ b/repos/dde_linux/src/drivers/usb_host/platform.h @@ -26,6 +26,12 @@ struct Services { Genode::Env &env; + /* Controller types */ + bool uhci = true; /* 1.0 */ + bool ohci = true; + bool ehci = true; /* 2.0 */ + bool xhci = true; /* 3.0 */ + /* report generation */ bool raw_report_device_list = false; @@ -39,6 +45,11 @@ struct Services Genode::Xml_node node_report = config_node.sub_node("report"); raw_report_device_list = node_report.attribute_value("devices", false); } catch (...) { } + + uhci = config_node.attribute_value("uhci", uhci); + ohci = config_node.attribute_value("ohci", ohci); + ehci = config_node.attribute_value("ehci", ehci); + xhci = config_node.attribute_value("xhci", xhci); } }; diff --git a/repos/dde_linux/src/drivers/usb_host/spec/x86/platform.cc b/repos/dde_linux/src/drivers/usb_host/spec/x86/platform.cc index 6e97390b27..be425fac6a 100644 --- a/repos/dde_linux/src/drivers/usb_host/spec/x86/platform.cc +++ b/repos/dde_linux/src/drivers/usb_host/spec/x86/platform.cc @@ -220,15 +220,23 @@ extern "C" void module_xhci_pci_init(); void platform_hcd_init(Genode::Env &, Services *s) { - module_xhci_hcd_init(); - module_xhci_pci_init(); + if (s->xhci) { + module_xhci_hcd_init(); + module_xhci_pci_init(); + } - /* ehci_hcd should always be loaded before uhci_hcd and ohci_hcd, not after */ - module_ehci_hcd_init(); - module_ehci_pci_init(); + if (s->ehci) { + /* ehci_hcd should always be loaded before uhci_hcd and ohci_hcd, not after */ + module_ehci_hcd_init(); + module_ehci_pci_init(); + } - module_ohci_hcd_mod_init(); - module_ohci_pci_init(); + if (s->ohci) { + module_ohci_hcd_mod_init(); + module_ohci_pci_init(); + } - module_uhci_hcd_init(); + if (s->uhci) { + module_uhci_hcd_init(); + } }