diff --git a/repos/gems/run/driver_manager.run b/repos/gems/run/driver_manager.run
index 5a619f9854..d799f7be6b 100644
--- a/repos/gems/run/driver_manager.run
+++ b/repos/gems/run/driver_manager.run
@@ -53,9 +53,10 @@ install_config {
-
-
-
+
+
+
+
@@ -118,6 +119,10 @@ puts $fd {
}
close $fd
+set fd [open [run_dir]/genode/usb_policy "w"]
+puts $fd {}
+close $fd
+
#
# Override 'drivers.config' as supplied with the 'drivers_managed-pc' pkg
diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run
index b6b451a082..db3bd3175b 100644
--- a/repos/gems/run/sculpt.run
+++ b/repos/gems/run/sculpt.run
@@ -102,6 +102,7 @@ install_config {
+
@@ -235,6 +236,8 @@ install_config {
+
+
diff --git a/repos/gems/run/sculpt/usb.config b/repos/gems/run/sculpt/usb.config
new file mode 100644
index 0000000000..7d42895d9c
--- /dev/null
+++ b/repos/gems/run/sculpt/usb.config
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/repos/gems/src/app/driver_manager/main.cc b/repos/gems/src/app/driver_manager/main.cc
index f75d229e4c..170a98d727 100644
--- a/repos/gems/src/app/driver_manager/main.cc
+++ b/repos/gems/src/app/driver_manager/main.cc
@@ -316,6 +316,7 @@ struct Driver_manager::Main : Block_devices_generator
Attached_rom_dataspace _platform { _env, "platform_info" };
Attached_rom_dataspace _usb_devices { _env, "usb_devices" };
+ Attached_rom_dataspace _usb_policy { _env, "usb_policy" };
Attached_rom_dataspace _pci_devices { _env, "pci_devices" };
Attached_rom_dataspace _ahci_ports { _env, "ahci_ports" };
Attached_rom_dataspace _nvme_ns { _env, "nvme_ns" };
@@ -349,6 +350,9 @@ struct Driver_manager::Main : Block_devices_generator
Signal_handler _usb_devices_update_handler {
_env.ep(), *this, &Main::_handle_usb_devices_update };
+ Signal_handler _usb_policy_update_handler {
+ _env.ep(), *this, &Main::_handle_usb_devices_update };
+
void _handle_ahci_ports_update();
Signal_handler _ahci_ports_update_handler {
@@ -365,7 +369,7 @@ struct Driver_manager::Main : Block_devices_generator
};
void _generate_init_config (Reporter &) const;
- void _generate_usb_drv_config (Reporter &, Xml_node) const;
+ void _generate_usb_drv_config (Reporter &, Xml_node, Xml_node) const;
void _generate_block_devices (Reporter &) const;
Ahci_driver::Default_label _default_block_device() const;
@@ -383,11 +387,14 @@ struct Driver_manager::Main : Block_devices_generator
_pci_devices.sigh(_pci_devices_update_handler);
_usb_devices.sigh(_usb_devices_update_handler);
+ _usb_policy .sigh(_usb_policy_update_handler);
_ahci_ports .sigh(_ahci_ports_update_handler);
_nvme_ns .sigh(_nvme_ns_update_handler);
_generate_init_config(_init_config);
- _generate_usb_drv_config(_usb_drv_config, Xml_node(""));
+ _generate_usb_drv_config(_usb_drv_config,
+ Xml_node(""),
+ Xml_node(""));
_handle_pci_devices_update();
_handle_usb_devices_update();
@@ -494,8 +501,9 @@ void Driver_manager::Main::_handle_nvme_ns_update()
void Driver_manager::Main::_handle_usb_devices_update()
{
_usb_devices.update();
+ _usb_policy.update();
- _generate_usb_drv_config(_usb_drv_config, _usb_devices.xml());
+ _generate_usb_drv_config(_usb_drv_config, _usb_devices.xml(), _usb_policy.xml());
}
@@ -635,7 +643,8 @@ void Driver_manager::Main::_generate_block_devices(Reporter &block_devices) cons
void Driver_manager::Main::_generate_usb_drv_config(Reporter &usb_drv_config,
- Xml_node devices) const
+ Xml_node devices,
+ Xml_node policy) const
{
Reporter::Xml_generator xml(usb_drv_config, [&] () {
@@ -648,6 +657,9 @@ void Driver_manager::Main::_generate_usb_drv_config(Reporter &usb_drv_config,
xml.node("raw", [&] () {
xml.node("report", [&] () { xml.attribute("devices", true); });
+ /* incorporate user-managed policy */
+ xml.append(policy.content_base(), policy.content_size());
+
devices.for_each_sub_node("device", [&] (Xml_node device) {
typedef String<64> Label;