summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/coretodadjust.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@oarcorp.com>2014-07-23 15:35:35 -0500
committerJoel Sherrill <joel.sherrill@oarcorp.com>2014-07-23 16:53:24 -0500
commit875fff0ae3d7676bbd8816caf1b32e33142d2e73 (patch)
treede7a2c0e7f8dcdef75aac8a9e913de873aa097b6 /cpukit/score/src/coretodadjust.c
parentadjtime.c: Use timestamp math and simplify (diff)
downloadrtems-875fff0ae3d7676bbd8816caf1b32e33142d2e73.tar.bz2
Add _TOD_Adjust to SCORE TOD Handler.
This lays the proper structure for doing future work on time adjustment algorithms. Any TOD adjustments should be requested at the API level and performed at the SCORE level. Additionally updated a test.
Diffstat (limited to 'cpukit/score/src/coretodadjust.c')
-rw-r--r--cpukit/score/src/coretodadjust.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/cpukit/score/src/coretodadjust.c b/cpukit/score/src/coretodadjust.c
new file mode 100644
index 0000000000..09cf01ad7c
--- /dev/null
+++ b/cpukit/score/src/coretodadjust.c
@@ -0,0 +1,51 @@
+/**
+ * @file
+ *
+ * @brief Adjust the Time of Time
+ * @ingroup ScoreTOD
+ */
+
+/*
+ * COPYRIGHT (c) 1989-2014.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/score/threaddispatch.h>
+#include <rtems/score/todimpl.h>
+
+void _TOD_Adjust(
+ const Timestamp_Control delta
+)
+{
+ Timestamp_Control tod;
+ Timestamp_Control *tod_ptr;
+
+ /*
+ * Currently, RTEMS does the adjustment in one movement.
+ * Given interest, requirements, and sponsorship, a future
+ * enhancement would be to adjust the time in smaller increments
+ * at each clock tick. Until then, there is no outstanding
+ * adjustment.
+ */
+
+ /*
+ * This prevents context switches while we are adjusting the TOD
+ */
+ _Thread_Disable_dispatch();
+
+ tod_ptr = _TOD_Get_with_nanoseconds( &tod, &_TOD.now );
+
+ _Timestamp_Add_to( tod_ptr, &delta );
+
+ _TOD_Set_with_timestamp( tod_ptr );
+
+ _Thread_Enable_dispatch();
+}