From 65012bfebbc03088f0740b086abb26d2ff6ebd8b Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 6 Oct 2017 15:41:46 +0200 Subject: score: Change Timestamp_Control to sbintime_t The timestamp are based on the uptime. There is no need for a 64-bit seconds part. The signed 32-bit seconds part of the sbintime_t limits the uptime to roughly 68 years. Close #2740. --- cpukit/score/src/kern_tc.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'cpukit/score/src/kern_tc.c') diff --git a/cpukit/score/src/kern_tc.c b/cpukit/score/src/kern_tc.c index f385e6d946..242983b464 100644 --- a/cpukit/score/src/kern_tc.c +++ b/cpukit/score/src/kern_tc.c @@ -66,6 +66,7 @@ __FBSDID("$FreeBSD r284178 2015-06-09T11:49:56Z$"); #endif /* __rtems__ */ #ifdef __rtems__ #include +#include #include ISR_LOCK_DEFINE(, _Timecounter_Lock, "Timecounter") #define _Timecounter_Release(lock_context) \ @@ -469,6 +470,24 @@ binuptime(struct bintime *bt) bintime_addx(bt, th->th_scale * tc_delta(th)); } while (gen == 0 || gen != tc_getgen(th)); } +#ifdef __rtems__ +sbintime_t +_Timecounter_Sbinuptime(void) +{ + struct timehands *th; + uint32_t gen; + sbintime_t sbt; + + do { + th = timehands; + gen = tc_getgen(th); + sbt = bttosbt(th->th_offset); + sbt += (th->th_scale * tc_delta(th)) >> 32; + } while (gen == 0 || gen != tc_getgen(th)); + + return (sbt); +} +#endif /* __rtems__ */ void nanouptime(struct timespec *tsp) -- cgit v1.2.3