mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-21 02:01:38 +00:00
pci_decode: do not handle signals after decoding
Remove signal handler and ACPI report ROM from Main class to prevent to react on report changes. Fix genodelabs/genode#4779
This commit is contained in:
parent
8698e693d5
commit
ec700e88f7
@ -31,9 +31,6 @@ struct Main
|
||||
Env & env;
|
||||
Heap heap { env.ram(), env.rm() };
|
||||
Attached_rom_dataspace platform_info { env, "platform_info" };
|
||||
Attached_rom_dataspace sys_rom { env, "system" };
|
||||
Signal_handler<Main> sys_rom_handler { env.ep(), *this,
|
||||
&Main::sys_rom_update };
|
||||
Expanding_reporter pci_reporter { env, "devices", "devices", { 32*1024 } };
|
||||
Registry<Bridge> bridge_registry {}; /* contains host bridges */
|
||||
|
||||
@ -55,7 +52,6 @@ struct Main
|
||||
void parse_irq_override_rules(Xml_node & xml);
|
||||
void parse_pci_config_spaces(Xml_node & xml, Xml_generator & generator);
|
||||
void parse_acpi_device_info(Xml_node const &xml, Xml_generator & generator);
|
||||
void sys_rom_update();
|
||||
|
||||
template <typename FN>
|
||||
void for_bridge(Pci::bus_t bus, FN const & fn)
|
||||
@ -371,12 +367,29 @@ void Main::parse_pci_config_spaces(Xml_node & xml, Xml_generator & generator)
|
||||
}
|
||||
|
||||
|
||||
void Main::sys_rom_update()
|
||||
Main::Main(Env & env) : env(env)
|
||||
{
|
||||
platform_info.xml().with_optional_sub_node("kernel", [&] (Xml_node xml)
|
||||
{
|
||||
apic_capable = xml.attribute_value("acpi", false);
|
||||
msi_capable = xml.attribute_value("msi", false);
|
||||
});
|
||||
|
||||
Attached_rom_dataspace sys_rom(env, "system");
|
||||
sys_rom.update();
|
||||
|
||||
if (!sys_rom.valid())
|
||||
return;
|
||||
/*
|
||||
* Wait until the system ROM is available
|
||||
*/
|
||||
if (!sys_rom.valid()) {
|
||||
struct Io_dummy { void fn() {}; } io_dummy;
|
||||
Io_signal_handler<Io_dummy> handler(env.ep(), io_dummy, &Io_dummy::fn);
|
||||
sys_rom.sigh(handler);
|
||||
while (!sys_rom.valid()) {
|
||||
env.ep().wait_and_dispatch_one_io_signal();
|
||||
sys_rom.update();
|
||||
}
|
||||
}
|
||||
|
||||
Xml_node xml = sys_rom.xml();
|
||||
|
||||
@ -403,17 +416,4 @@ void Main::sys_rom_update()
|
||||
}
|
||||
|
||||
|
||||
Main::Main(Env & env) : env(env)
|
||||
{
|
||||
sys_rom.sigh(sys_rom_handler);
|
||||
platform_info.xml().with_optional_sub_node("kernel", [&] (Xml_node xml)
|
||||
{
|
||||
apic_capable = xml.attribute_value("acpi", false);
|
||||
msi_capable = xml.attribute_value("msi", false);
|
||||
});
|
||||
|
||||
sys_rom_update();
|
||||
}
|
||||
|
||||
|
||||
void Component::construct(Genode::Env &env) { static Main main(env); }
|
||||
|
Loading…
x
Reference in New Issue
Block a user