diff --git a/src/system/boot/platform/openfirmware/real_time_clock.cpp b/src/system/boot/platform/openfirmware/real_time_clock.cpp index 2fb0aab5df..3ea8bf522e 100644 --- a/src/system/boot/platform/openfirmware/real_time_clock.cpp +++ b/src/system/boot/platform/openfirmware/real_time_clock.cpp @@ -15,7 +15,7 @@ #include -int gRTC = OF_FAILED; +static int sHandle = OF_FAILED; status_t @@ -30,8 +30,8 @@ init_real_time_clock(void) return B_ERROR; } - gRTC = of_open(gKernelArgs.platform_args.rtc_path); - if (gRTC == OF_FAILED) { + sHandle = of_open(gKernelArgs.platform_args.rtc_path); + if (sHandle == OF_FAILED) { printf("%s(): Could not open RTC device!\n", __func__); return B_ERROR; } @@ -39,3 +39,19 @@ init_real_time_clock(void) return B_OK; } + +bigtime_t +real_time_clock_usecs(void) +{ + if (sHandle == OF_FAILED) + return OF_FAILED; + int second, minute, hour, day, month, year; + if (of_call_method(sHandle, "get-time", 0, 6, &year, &month, &day, + &hour, &minute, &second) == OF_FAILED) + return OF_FAILED; + int days = day; + // TODO: Apply algorithm from kernel + // to assure monotonically increasing date. + return (((days * 24 + hour) * 60ULL + minute) * 60ULL + second) + * 1000000ULL; +} diff --git a/src/system/boot/platform/openfirmware/real_time_clock.h b/src/system/boot/platform/openfirmware/real_time_clock.h index e0bbfc55df..8262be4234 100644 --- a/src/system/boot/platform/openfirmware/real_time_clock.h +++ b/src/system/boot/platform/openfirmware/real_time_clock.h @@ -14,9 +14,8 @@ extern "C" { #endif -extern int gRTC; - status_t init_real_time_clock(void); +bigtime_t real_time_clock_usecs(void); #ifdef __cplusplus } // extern "C" diff --git a/src/system/boot/platform/openfirmware/support.cpp b/src/system/boot/platform/openfirmware/support.cpp index 806f3a869c..2333b8eb24 100644 --- a/src/system/boot/platform/openfirmware/support.cpp +++ b/src/system/boot/platform/openfirmware/support.cpp @@ -1,6 +1,5 @@ /* * Copyright 2005, Ingo Weinhold . - * Copyright 2010, Andreas Färber * All rights reserved. Distributed under the terms of the MIT License. */ @@ -9,27 +8,10 @@ #include -#include "real_time_clock.h" - bigtime_t system_time(void) { - int milliseconds = of_milliseconds(); - if (milliseconds == OF_FAILED) - milliseconds = 0; - bigtime_t result = milliseconds; - int second, minute, hour, day, month, year; - if (gRTC != OF_FAILED) { - if (of_call_method(gRTC, "get-time", 0, 6, &year, &month, &day, - &hour, &minute, &second) != OF_FAILED) { - result %= 1000; - int days = day; - // TODO: Apply algorithm from kernel - // to assure monotonically increasing date. - result += (((days * 24 + hour) * 60ULL + minute) * 60ULL + second) - * 1000ULL; - } - } - return result * 1000; + int result = of_milliseconds(); + return (result == OF_FAILED ? 0 : bigtime_t(result) * 1000); }