diff --git a/repos/gems/recipes/src/sculpt_manager/used_apis b/repos/gems/recipes/src/sculpt_manager/used_apis
index 274e0f2552..f39cc0fc50 100644
--- a/repos/gems/recipes/src/sculpt_manager/used_apis
+++ b/repos/gems/recipes/src/sculpt_manager/used_apis
@@ -18,3 +18,4 @@ capture_session
gpu_session
pin_state_session
pin_control_session
+i2c_session
diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run
index 243e0b32c5..4f97fb3726 100644
--- a/repos/gems/run/sculpt.run
+++ b/repos/gems/run/sculpt.run
@@ -182,10 +182,17 @@ proc driver_routes { } {
}
set result(mnt_reform2) {
+
+
+
+
+
+
+
}
set result(imx8q_evk) {
@@ -446,6 +453,7 @@ install_config {
+
diff --git a/repos/gems/src/app/sculpt_manager/driver/fb.h b/repos/gems/src/app/sculpt_manager/driver/fb.h
index f6360b65ac..688a678744 100644
--- a/repos/gems/src/app/sculpt_manager/driver/fb.h
+++ b/repos/gems/src/app/sculpt_manager/driver/fb.h
@@ -99,6 +99,7 @@ struct Sculpt::Fb_driver : private Noncopyable
xml.node("route", [&] {
gen_parent_route (xml);
gen_parent_route(xml);
+ gen_parent_route(xml);
gen_capture_route(xml);
gen_parent_rom_route(xml, "fb_drv");
gen_parent_rom_route(xml, "config", "config -> fb_drv");
diff --git a/repos/gems/src/app/sculpt_manager/drivers.cc b/repos/gems/src/app/sculpt_manager/drivers.cc
index d8f857a154..58cd1e3b98 100644
--- a/repos/gems/src/app/sculpt_manager/drivers.cc
+++ b/repos/gems/src/app/sculpt_manager/drivers.cc
@@ -16,6 +16,7 @@
#include
#include
#include
+#include
#include
#include
#include
diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc
index a6644aeaba..5d3cad48e0 100644
--- a/repos/gems/src/app/sculpt_manager/main.cc
+++ b/repos/gems/src/app/sculpt_manager/main.cc
@@ -21,6 +21,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -86,6 +87,8 @@ struct Sculpt::Main : Input_event_handler,
Build_info const _build_info =
Build_info::from_xml(Attached_rom_dataspace(_env, "build_info").xml());
+ bool const _mnt_reform = (_build_info.board == "mnt_reform2");
+
Registry _child_states { };
void _with_child(auto const &name, auto const &fn)
@@ -277,11 +280,28 @@ struct Sculpt::Main : Input_event_handler,
** Device discovery **
**********************/
+ Board_info::Soc _soc {
+ .fb = _mnt_reform,
+ .touch = false,
+ .wifi = false, /* initialized via PCI */
+ .usb = _mnt_reform,
+ .mmc = _mnt_reform,
+ .modem = false,
+ .nic = _mnt_reform,
+ };
+
Drivers _drivers { _env, _child_states, *this, *this };
Drivers::Resumed _resumed = _drivers.resumed();
- Board_info::Options _driver_options { };
+ Board_info::Options _driver_options {
+ .display = _mnt_reform,
+ .usb_net = false,
+ .nic = false,
+ .wifi = false,
+ .suppress {},
+ .suspending = false,
+ };
/**
* Drivers::Action
@@ -1626,6 +1646,7 @@ struct Sculpt::Main : Input_event_handler,
Main(Env &env) : _env(env)
{
+ _drivers.update_soc(_soc);
_gui.input()->sigh(_input_handler);
_gui.mode_sigh(_gui_mode_handler);
_handle_gui_mode();
@@ -2263,6 +2284,7 @@ void Sculpt::Main::_generate_runtime_config(Xml_generator &xml) const
gen_parent_service(xml);
gen_parent_service(xml);
gen_parent_service(xml);
+ gen_parent_service(xml);
gen_parent_service(xml);
});
diff --git a/repos/gems/src/app/sculpt_manager/model/route.h b/repos/gems/src/app/sculpt_manager/model/route.h
index 2ba5203c18..3bcc3cd602 100644
--- a/repos/gems/src/app/sculpt_manager/model/route.h
+++ b/repos/gems/src/app/sculpt_manager/model/route.h
@@ -41,6 +41,7 @@ struct Sculpt::Route : List_model::Element
case Service::Type::GUI: return "gui";
case Service::Type::GPU: return "gpu";
case Service::Type::RM: return "rm";
+ case Service::Type::I2C: return "i2c";
case Service::Type::IO_MEM: return "io_mem";
case Service::Type::IO_PORT: return "io_port";
case Service::Type::IRQ: return "irq";
@@ -76,6 +77,7 @@ struct Sculpt::Route : List_model::Element
case Service::Type::GUI: return "GUI";
case Service::Type::GPU: return "GPU";
case Service::Type::RM: return "Region maps";
+ case Service::Type::I2C: return "I2C";
case Service::Type::IO_MEM: return "Direct memory-mapped I/O";
case Service::Type::IO_PORT: return "Direct port I/O";
case Service::Type::IRQ: return "Direct device interrupts";
diff --git a/repos/gems/src/app/sculpt_manager/model/service.h b/repos/gems/src/app/sculpt_manager/model/service.h
index 31e1c7df1a..39d316e5e9 100644
--- a/repos/gems/src/app/sculpt_manager/model/service.h
+++ b/repos/gems/src/app/sculpt_manager/model/service.h
@@ -27,7 +27,7 @@ struct Sculpt::Service
enum class Type {
AUDIO_IN, AUDIO_OUT, BLOCK, EVENT, CAPTURE, FILE_SYSTEM, NIC, GUI, GPU,
- RM, IO_MEM, IO_PORT, IRQ, REPORT, ROM, TERMINAL, TRACE, USB, RTC,
+ RM, IO_MEM, IO_PORT, IRQ, REPORT, ROM, TERMINAL, TRACE, USB, RTC, I2C,
PLATFORM, PIN_STATE, PIN_CONTROL, VM, PD, UPLINK, PLAY, RECORD, UNDEFINED };
enum class Match_label { EXACT, LAST };
@@ -55,6 +55,7 @@ struct Sculpt::Service
case Type::GUI: return "Gui";
case Type::GPU: return "Gpu";
case Type::RM: return "RM";
+ case Type::I2C: return "I2C";
case Type::IO_MEM: return "IO_MEM";
case Type::IO_PORT: return "IO_PORT";
case Type::IRQ: return "IRQ";