diff --git a/src/kernel/libroot/os/time.c b/src/kernel/libroot/os/time.c index d27d8a9e00..500c5af4b0 100644 --- a/src/kernel/libroot/os/time.c +++ b/src/kernel/libroot/os/time.c @@ -7,11 +7,35 @@ #include #include "syscalls.h" +static area_id sCloneRtcArea; +static volatile bigtime_t *sBootTime = NULL; + + +status_t +setup_rtc_area() +{ + area_id rtcArea = find_area("rtc_region"); + if (rtcArea < 0) { + printf("setup_rtc_area: error finding rtc_region %s\n", + strerror(rtcArea)); + } + sCloneRtcArea = clone_area("cloned_rtc_region", (void**)&sBootTime, + B_ANY_ADDRESS, B_READ_AREA, rtcArea); + if (sCloneRtcArea < 0) { + printf("setup_rtc_area: error cloning rtc_region\n"); + return sCloneRtcArea; + } + + return B_OK; +} + uint32 real_time_clock(void) { - // ToDo: real_time_clock() + if (!sBootTime) + setup_rtc_area(); + //return (*sBootTime + system_time()) / 1000000; return 0; } @@ -26,7 +50,9 @@ set_real_time_clock(uint32 secs) bigtime_t real_time_clock_usecs(void) { - // ToDo: real_time_clock_usecs() + if (!sBootTime) + setup_rtc_area(); + //return *sBootTime + system_time(); return 0; }