diff --git a/ports/src/vancouver/main.cc b/ports/src/vancouver/main.cc index 4a30b5d74..3202d1233 100644 --- a/ports/src/vancouver/main.cc +++ b/ports/src/vancouver/main.cc @@ -49,6 +49,7 @@ #include #include #include +#include /* NOVA includes that come with Genode */ #include @@ -56,6 +57,7 @@ /* NOVA userland includes */ #include #include +#include #include /* local includes */ @@ -1012,6 +1014,7 @@ class Machine : public StaticReceiver bool _alloc_fb_mem; /* For detecting FB alloc message */ Nic::Session *_nic; + Rtc::Session *_rtc; public: @@ -1269,9 +1272,26 @@ class Machine : public StaticReceiver bool receive(MessageTime &msg) { - // XXX: Use RTC time - msg.wallclocktime = 0; - msg.timestamp = 0; + Genode::Lock::Guard guard(*utcb_lock()); + utcb_backup = *Genode::Thread_base::myself()->utcb(); + + if (!_rtc) { + try { + _rtc = new Rtc::Connection; + } catch (...) { + Logging::printf("No RTC present, returning dummy time.\n"); + msg.wallclocktime = msg.timestamp = 0; + + *Genode::Thread_base::myself()->utcb() = utcb_backup; + + return true; + } + } + msg.wallclocktime = _rtc->get_current_time(); + Logging::printf("Got time %llx\n", msg.wallclocktime); + msg.timestamp = _motherboard.clock()->clock(TimerProtocol::WALLCLOCK_FREQUENCY); + + *Genode::Thread_base::myself()->utcb() = utcb_backup; return true; }