summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/kern_tc.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-10-06 15:41:46 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-10-09 08:30:07 +0200
commit65012bfebbc03088f0740b086abb26d2ff6ebd8b (patch)
tree8d69e59128a0e9ee8ad111485f2594aa914c3285 /cpukit/score/src/kern_tc.c
parentscore: Use struct timespec for TOD (diff)
downloadrtems-65012bfebbc03088f0740b086abb26d2ff6ebd8b.tar.bz2
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.
Diffstat (limited to 'cpukit/score/src/kern_tc.c')
-rw-r--r--cpukit/score/src/kern_tc.c19
1 files changed, 19 insertions, 0 deletions
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 <limits.h>
+#include <string.h>
#include <rtems.h>
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)