mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-30 15:59:56 +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;
|
Env & env;
|
||||||
Heap heap { env.ram(), env.rm() };
|
Heap heap { env.ram(), env.rm() };
|
||||||
Attached_rom_dataspace platform_info { env, "platform_info" };
|
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 } };
|
Expanding_reporter pci_reporter { env, "devices", "devices", { 32*1024 } };
|
||||||
Registry<Bridge> bridge_registry {}; /* contains host bridges */
|
Registry<Bridge> bridge_registry {}; /* contains host bridges */
|
||||||
|
|
||||||
@ -55,7 +52,6 @@ struct Main
|
|||||||
void parse_irq_override_rules(Xml_node & xml);
|
void parse_irq_override_rules(Xml_node & xml);
|
||||||
void parse_pci_config_spaces(Xml_node & xml, Xml_generator & generator);
|
void parse_pci_config_spaces(Xml_node & xml, Xml_generator & generator);
|
||||||
void parse_acpi_device_info(Xml_node const &xml, Xml_generator & generator);
|
void parse_acpi_device_info(Xml_node const &xml, Xml_generator & generator);
|
||||||
void sys_rom_update();
|
|
||||||
|
|
||||||
template <typename FN>
|
template <typename FN>
|
||||||
void for_bridge(Pci::bus_t bus, FN const & 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();
|
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();
|
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); }
|
void Component::construct(Genode::Env &env) { static Main main(env); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user