parent
23ff3b1877
commit
6e9fa10e65
|
@ -28,10 +28,8 @@ install_config {
|
||||||
<resource name="RAM" quantum="2M"/>
|
<resource name="RAM" quantum="2M"/>
|
||||||
<provides> <service name="ROM"/> <service name="Report"/> </provides>
|
<provides> <service name="ROM"/> <service name="Report"/> </provides>
|
||||||
<config>
|
<config>
|
||||||
<rom>
|
<policy label_prefix="test-report_rom ->" label_suffix="brightness"
|
||||||
<policy label="test-report_rom -> brightness"
|
report="test-report_rom -> brightness"/>
|
||||||
report="test-report_rom -> brightness"/>
|
|
||||||
</rom>
|
|
||||||
</config>
|
</config>
|
||||||
</start>
|
</start>
|
||||||
<start name="test-report_rom">
|
<start name="test-report_rom">
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
|
|
||||||
namespace Server {
|
namespace Server {
|
||||||
using Genode::env;
|
using Genode::env;
|
||||||
using Genode::Xml_node;
|
|
||||||
struct Main;
|
struct Main;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,26 +36,9 @@ struct Server::Main
|
||||||
Genode::Sliced_heap sliced_heap = { env()->ram_session(),
|
Genode::Sliced_heap sliced_heap = { env()->ram_session(),
|
||||||
env()->rm_session() };
|
env()->rm_session() };
|
||||||
|
|
||||||
Xml_node _rom_config_node() const
|
Rom::Registry rom_registry = { sliced_heap };
|
||||||
{
|
|
||||||
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_config_node() };
|
bool verbose = Genode::config()->xml_node().attribute_value("verbose", false);
|
||||||
|
|
||||||
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();
|
|
||||||
|
|
||||||
Report::Root report_root = { ep, sliced_heap, rom_registry, verbose };
|
Report::Root report_root = { ep, sliced_heap, rom_registry, verbose };
|
||||||
Rom ::Root rom_root = { ep, sliced_heap, rom_registry };
|
Rom ::Root rom_root = { ep, sliced_heap, rom_registry };
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <report_rom/rom_registry.h>
|
#include <report_rom/rom_registry.h>
|
||||||
|
#include <os/session_policy.h>
|
||||||
|
|
||||||
namespace Rom { struct Registry; }
|
namespace Rom { struct Registry; }
|
||||||
|
|
||||||
|
@ -26,8 +27,6 @@ struct Rom::Registry : Registry_for_reader, Registry_for_writer, Genode::Noncopy
|
||||||
|
|
||||||
Genode::Allocator &_md_alloc;
|
Genode::Allocator &_md_alloc;
|
||||||
|
|
||||||
Xml_node _config;
|
|
||||||
|
|
||||||
Module_list _modules;
|
Module_list _modules;
|
||||||
|
|
||||||
struct Read_write_policy : Module::Read_policy, Module::Write_policy
|
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
|
Module::Name _report_name(Module::Name const &rom_label) const
|
||||||
{
|
{
|
||||||
|
using namespace Genode;
|
||||||
|
|
||||||
|
String<Rom::Module::Name::capacity()> report;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (Xml_node node = _config.sub_node("policy");
|
Session_policy policy(rom_label);
|
||||||
true; node = node.next("policy")) {
|
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")
|
Session_policy policy(rom_label, rom_node);
|
||||||
|| !node.has_attribute("report")
|
policy.attribute("report").value(&report);
|
||||||
|| !node.attribute("label").has_value(rom_label.string()))
|
return Rom::Module::Name(report.string());
|
||||||
continue;
|
} catch (Xml_node::Nonexistent_sub_node) { /* no <rom> node */ }
|
||||||
|
catch (Session_policy::No_policy_defined) { }
|
||||||
char report[Rom::Module::Name::capacity()];
|
}
|
||||||
node.attribute("report").value(report, sizeof(report));
|
|
||||||
return Rom::Module::Name(report);
|
|
||||||
}
|
|
||||||
} catch (Xml_node::Nonexistent_sub_node) { }
|
|
||||||
|
|
||||||
PWRN("no valid policy for label \"%s\"", rom_label.string());
|
PWRN("no valid policy for label \"%s\"", rom_label.string());
|
||||||
throw Root::Invalid_args();
|
throw Root::Invalid_args();
|
||||||
|
@ -136,9 +141,9 @@ struct Rom::Registry : Registry_for_reader, Registry_for_writer, Genode::Noncopy
|
||||||
|
|
||||||
public:
|
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
|
Module &lookup(Writer &writer, Module::Name const &name) override
|
||||||
|
|
Loading…
Reference in New Issue