mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-18 21:27:56 +00:00
parent
fae3c12366
commit
24181f2bf6
@ -1,7 +1,8 @@
|
||||
_/src/platform_drv
|
||||
_/src/acpi_drv
|
||||
_/src/ps2_drv
|
||||
_/src/usb_drv
|
||||
_/src/usb_host_drv
|
||||
_/src/usb_hid_drv
|
||||
_/src/usb_block_drv
|
||||
_/src/vesa_drv
|
||||
_/src/intel_fb_drv
|
||||
|
@ -15,6 +15,8 @@
|
||||
<service name="Event"/>
|
||||
</parent-provides>
|
||||
|
||||
<report child_caps="true" child_ram="true" init_caps="true" init_ram="true" delay_ms="5000"/>
|
||||
|
||||
<default-route>
|
||||
<any-service> <parent/> <any-child/> </any-service>
|
||||
</default-route>
|
||||
@ -44,6 +46,7 @@
|
||||
<policy label="rom_reporter -> acpi" report="acpi_drv -> acpi"/>
|
||||
<policy label="rom_reporter -> pci_devices" report="platform_drv -> pci"/>
|
||||
<policy label="rom_reporter -> usb_devices" report="usb_drv -> devices"/>
|
||||
<policy label="usb_hid_drv -> report" report="usb_drv -> devices"/>
|
||||
</config>
|
||||
</start>
|
||||
|
||||
@ -121,15 +124,13 @@
|
||||
</start>
|
||||
|
||||
<start name="usb_drv" caps="200" priority="-1">
|
||||
<binary name="x86_pc_usb_host_drv"/>
|
||||
<resource name="RAM" quantum="16M"/>
|
||||
<provides> <service name="Usb"/> </provides>
|
||||
<route>
|
||||
<service name="Platform"> <child name="platform_drv"/> </service>
|
||||
<service name="Event"> <child name="event_filter" label="usb"/> </service>
|
||||
<service name="ROM" label="config">
|
||||
<child name="report_rom"/> </service>
|
||||
<service name="ROM" label="capslock"> <parent label="capslock"/> </service>
|
||||
<service name="ROM" label="numlock"> <parent label="numlock"/> </service>
|
||||
<service name="Report" label="devices"> <child name="report_rom"/> </service>
|
||||
<service name="Report" label="config"> <parent label="usb_active_config"/> </service>
|
||||
<service name="ROM"> <parent/> </service>
|
||||
@ -141,6 +142,24 @@
|
||||
</route>
|
||||
</start>
|
||||
|
||||
<start name="usb_hid_drv" caps="140" priority="-1">
|
||||
<resource name="RAM" quantum="11M"/>
|
||||
<config use_report="yes" capslock_led="rom" numlock_led="rom"/>
|
||||
<route>
|
||||
<service name="ROM" label="report"> <child name="report_rom"/> </service>
|
||||
<service name="ROM" label="capslock"> <parent label="capslock"/> </service>
|
||||
<service name="ROM" label="numlock"> <parent label="numlock"/> </service>
|
||||
<service name="ROM"> <parent/> </service>
|
||||
<service name="PD"> <parent/> </service>
|
||||
<service name="RM"> <parent/> </service>
|
||||
<service name="CPU"> <parent/> </service>
|
||||
<service name="LOG"> <parent/> </service>
|
||||
<service name="Timer"> <parent/> </service>
|
||||
<service name="Event"> <child name="event_filter" label="usb"/> </service>
|
||||
<service name="Usb"> <child name="usb_drv"/> </service>
|
||||
</route>
|
||||
</start>
|
||||
|
||||
<start name="ps2_drv" priority="0">
|
||||
<resource name="RAM" quantum="1M"/>
|
||||
<config capslock_led="rom" numlock_led="rom"/>
|
||||
|
@ -231,8 +231,8 @@ install_config {
|
||||
</route>
|
||||
</start>
|
||||
|
||||
<start name="drivers" caps="3100" priority="-1" managing_system="yes">
|
||||
<resource name="RAM" quantum="96M"/>
|
||||
<start name="drivers" caps="3150" priority="-1" managing_system="yes">
|
||||
<resource name="RAM" quantum="128M"/>
|
||||
<binary name="init"/>
|
||||
<route>
|
||||
<service name="LOG"> <child name="log"/> </service>
|
||||
|
@ -659,45 +659,49 @@ void Driver_manager::Main::_generate_usb_drv_config(Reporter &usb_drv_config,
|
||||
xml.attribute("xhci", true);
|
||||
xml.attribute("capslock_led", "rom");
|
||||
xml.attribute("numlock_led", "rom");
|
||||
xml.node("hid", [&] () { });
|
||||
xml.node("raw", [&] () {
|
||||
xml.node("report", [&] () { xml.attribute("devices", true); });
|
||||
|
||||
/* incorporate user-managed policy */
|
||||
policy.with_raw_content([&] (char const *start, size_t length) {
|
||||
xml.append(start, length); });
|
||||
xml.node("report", [&] () { xml.attribute("devices", true); });
|
||||
|
||||
devices.for_each_sub_node("device", [&] (Xml_node device) {
|
||||
/* incorporate user-managed policy */
|
||||
policy.with_raw_content([&] (char const *start, size_t length) {
|
||||
xml.append(start, length); });
|
||||
|
||||
typedef String<64> Label;
|
||||
typedef String<32> Id;
|
||||
/* usb hid drv gets all hid devices */
|
||||
xml.node("policy", [&] () {
|
||||
xml.attribute("label_prefix", "usb_hid_drv");
|
||||
xml.attribute("class", "0x3");
|
||||
});
|
||||
|
||||
Label const label = device.attribute_value("label", Label());
|
||||
Id const vendor_id = device.attribute_value("vendor_id", Id());
|
||||
Id const product_id = device.attribute_value("product_id", Id());
|
||||
devices.for_each_sub_node("device", [&] (Xml_node device) {
|
||||
|
||||
/*
|
||||
* Limit USB sessions to storage and vendor specific in order to avoid
|
||||
* conflicts with the USB driver's built-in HID drivers.
|
||||
*/
|
||||
unsigned long const class_code = device.attribute_value("class", 0UL);
|
||||
typedef String<64> Label;
|
||||
typedef String<32> Id;
|
||||
|
||||
enum { USB_CLASS_MASS_STORAGE = 8, USB_CLASS_VENDOR_SPECIFIC = 0xff };
|
||||
Label const label = device.attribute_value("label", Label());
|
||||
Id const vendor_id = device.attribute_value("vendor_id", Id());
|
||||
Id const product_id = device.attribute_value("product_id", Id());
|
||||
|
||||
bool const expose_as_usb_raw = (class_code == USB_CLASS_MASS_STORAGE) ||
|
||||
(class_code == USB_CLASS_VENDOR_SPECIFIC);
|
||||
if (!expose_as_usb_raw)
|
||||
return;
|
||||
/*
|
||||
* Limit USB sessions to storage and vendor specific in order to avoid
|
||||
* conflicts with the USB driver's built-in HID drivers.
|
||||
*/
|
||||
unsigned long const class_code = device.attribute_value("class", 0UL);
|
||||
|
||||
xml.node("policy", [&] () {
|
||||
xml.attribute("label_suffix", label);
|
||||
xml.attribute("vendor_id", vendor_id);
|
||||
xml.attribute("product_id", product_id);
|
||||
enum { USB_CLASS_MASS_STORAGE = 8, USB_CLASS_VENDOR_SPECIFIC = 0xff };
|
||||
|
||||
/* annotate policy to make storage devices easy to spot */
|
||||
if (class_code == USB_CLASS_MASS_STORAGE)
|
||||
xml.attribute("class", "storage");
|
||||
});
|
||||
bool const expose_as_usb_raw = (class_code == USB_CLASS_MASS_STORAGE) ||
|
||||
(class_code == USB_CLASS_VENDOR_SPECIFIC);
|
||||
if (!expose_as_usb_raw)
|
||||
return;
|
||||
|
||||
xml.node("policy", [&] () {
|
||||
xml.attribute("label_suffix", label);
|
||||
xml.attribute("vendor_id", vendor_id);
|
||||
xml.attribute("product_id", product_id);
|
||||
|
||||
/* annotate policy to make storage devices easy to spot */
|
||||
if (class_code == USB_CLASS_MASS_STORAGE)
|
||||
xml.attribute("class", "storage");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -51,8 +51,7 @@ struct Sculpt::Storage_devices
|
||||
{
|
||||
usb_storage_devices.update_from_xml(policy, node);
|
||||
|
||||
if (node.has_type("raw"))
|
||||
_usb_active_config_valid = true;
|
||||
_usb_active_config_valid = true;
|
||||
|
||||
usb_present = false;
|
||||
usb_storage_devices.for_each([&] (Storage_device const &) {
|
||||
|
@ -36,10 +36,8 @@ void Sculpt::Storage::handle_storage_devices_update()
|
||||
_usb_active_config_rom.update();
|
||||
Usb_storage_device_update_policy policy(_env, _alloc, _storage_device_update_handler);
|
||||
Xml_node const config = _usb_active_config_rom.xml();
|
||||
Xml_node const raw = config.has_sub_node("raw")
|
||||
? config.sub_node("raw") : Xml_node("<raw/>");
|
||||
|
||||
_storage_devices.update_usb_storage_devices_from_xml(policy, raw);
|
||||
_storage_devices.update_usb_storage_devices_from_xml(policy, config);
|
||||
|
||||
if (policy.device_added_or_vanished)
|
||||
reconfigure_runtime = true;
|
||||
|
Loading…
Reference in New Issue
Block a user