mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-10 21:01:49 +00:00
parent
23ff3b1877
commit
6e9fa10e65
@ -28,10 +28,8 @@ install_config {
|
||||
<resource name="RAM" quantum="2M"/>
|
||||
<provides> <service name="ROM"/> <service name="Report"/> </provides>
|
||||
<config>
|
||||
<rom>
|
||||
<policy label="test-report_rom -> brightness"
|
||||
report="test-report_rom -> brightness"/>
|
||||
</rom>
|
||||
<policy label_prefix="test-report_rom ->" label_suffix="brightness"
|
||||
report="test-report_rom -> brightness"/>
|
||||
</config>
|
||||
</start>
|
||||
<start name="test-report_rom">
|
||||
|
@ -25,7 +25,6 @@
|
||||
|
||||
namespace Server {
|
||||
using Genode::env;
|
||||
using Genode::Xml_node;
|
||||
struct Main;
|
||||
}
|
||||
|
||||
@ -37,26 +36,9 @@ struct Server::Main
|
||||
Genode::Sliced_heap sliced_heap = { env()->ram_session(),
|
||||
env()->rm_session() };
|
||||
|
||||
Xml_node _rom_config_node() const
|
||||
{
|
||||
try {
|
||||
return Genode::config()->xml_node().sub_node("rom"); }
|
||||
catch (Xml_node::Nonexistent_sub_node) {
|
||||
PWRN("missing <rom> configuration");
|
||||
return Xml_node("<rom>");
|
||||
}
|
||||
}
|
||||
Rom::Registry rom_registry = { sliced_heap };
|
||||
|
||||
Rom::Registry rom_registry = { sliced_heap, _rom_config_node() };
|
||||
|
||||
bool _verbose_config()
|
||||
{
|
||||
char const *attr = "verbose";
|
||||
return Genode::config()->xml_node().has_attribute(attr)
|
||||
&& Genode::config()->xml_node().attribute(attr).has_value("yes");
|
||||
}
|
||||
|
||||
bool verbose = _verbose_config();
|
||||
bool verbose = Genode::config()->xml_node().attribute_value("verbose", false);
|
||||
|
||||
Report::Root report_root = { ep, sliced_heap, rom_registry, verbose };
|
||||
Rom ::Root rom_root = { ep, sliced_heap, rom_registry };
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
/* Genode includes */
|
||||
#include <report_rom/rom_registry.h>
|
||||
#include <os/session_policy.h>
|
||||
|
||||
namespace Rom { struct Registry; }
|
||||
|
||||
@ -26,8 +27,6 @@ struct Rom::Registry : Registry_for_reader, Registry_for_writer, Genode::Noncopy
|
||||
|
||||
Genode::Allocator &_md_alloc;
|
||||
|
||||
Xml_node _config;
|
||||
|
||||
Module_list _modules;
|
||||
|
||||
struct Read_write_policy : Module::Read_policy, Module::Write_policy
|
||||
@ -115,20 +114,26 @@ struct Rom::Registry : Registry_for_reader, Registry_for_writer, Genode::Noncopy
|
||||
*/
|
||||
Module::Name _report_name(Module::Name const &rom_label) const
|
||||
{
|
||||
using namespace Genode;
|
||||
|
||||
String<Rom::Module::Name::capacity()> report;
|
||||
|
||||
try {
|
||||
for (Xml_node node = _config.sub_node("policy");
|
||||
true; node = node.next("policy")) {
|
||||
Session_policy policy(rom_label);
|
||||
policy.attribute("report").value(&report);
|
||||
return Rom::Module::Name(report.string());
|
||||
} catch (Session_policy::No_policy_defined) {
|
||||
/* FIXME backwards compatibility, remove at next release */
|
||||
try {
|
||||
Xml_node rom_node = config()->xml_node().sub_node("rom");
|
||||
PWRN("parsing legacy <rom> policies");
|
||||
|
||||
if (!node.has_attribute("label")
|
||||
|| !node.has_attribute("report")
|
||||
|| !node.attribute("label").has_value(rom_label.string()))
|
||||
continue;
|
||||
|
||||
char report[Rom::Module::Name::capacity()];
|
||||
node.attribute("report").value(report, sizeof(report));
|
||||
return Rom::Module::Name(report);
|
||||
}
|
||||
} catch (Xml_node::Nonexistent_sub_node) { }
|
||||
Session_policy policy(rom_label, rom_node);
|
||||
policy.attribute("report").value(&report);
|
||||
return Rom::Module::Name(report.string());
|
||||
} catch (Xml_node::Nonexistent_sub_node) { /* no <rom> node */ }
|
||||
catch (Session_policy::No_policy_defined) { }
|
||||
}
|
||||
|
||||
PWRN("no valid policy for label \"%s\"", rom_label.string());
|
||||
throw Root::Invalid_args();
|
||||
@ -136,9 +141,9 @@ struct Rom::Registry : Registry_for_reader, Registry_for_writer, Genode::Noncopy
|
||||
|
||||
public:
|
||||
|
||||
Registry(Genode::Allocator &md_alloc, Xml_node config)
|
||||
Registry(Genode::Allocator &md_alloc)
|
||||
:
|
||||
_md_alloc(md_alloc), _config(config)
|
||||
_md_alloc(md_alloc)
|
||||
{ }
|
||||
|
||||
Module &lookup(Writer &writer, Module::Name const &name) override
|
||||
|
Loading…
x
Reference in New Issue
Block a user