summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cpukit/libcsupport/Makefile.am1
-rw-r--r--cpukit/libcsupport/include/machine/_kernel_time.h2
-rw-r--r--cpukit/libcsupport/include/machine/_timecounter.h53
-rw-r--r--cpukit/libcsupport/preinstall.am4
-rw-r--r--cpukit/score/include/rtems/score/timecounter.h3
-rw-r--r--cpukit/score/src/kern_tc.c3
6 files changed, 64 insertions, 2 deletions
diff --git a/cpukit/libcsupport/Makefile.am b/cpukit/libcsupport/Makefile.am
index dbba6b1d8b..756526ae8e 100644
--- a/cpukit/libcsupport/Makefile.am
+++ b/cpukit/libcsupport/Makefile.am
@@ -29,6 +29,7 @@ include_machine_HEADERS += include/machine/_kernel_cpuset.h
include_machine_HEADERS += include/machine/_kernel_param.h
include_machine_HEADERS += include/machine/_kernel_time.h
include_machine_HEADERS += include/machine/_kernel_types.h
+include_machine_HEADERS += include/machine/_timecounter.h
## General stuff
ERROR_C_FILES = src/error.c src/__assert.c
diff --git a/cpukit/libcsupport/include/machine/_kernel_time.h b/cpukit/libcsupport/include/machine/_kernel_time.h
index 51fa719442..8200b6a73e 100644
--- a/cpukit/libcsupport/include/machine/_kernel_time.h
+++ b/cpukit/libcsupport/include/machine/_kernel_time.h
@@ -28,6 +28,8 @@
#error "must be included via <sys/time.h> in kernel space"
#endif
+#include <machine/_timecounter.h>
+
/* Operations on timespecs */
#define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0)
#define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec)
diff --git a/cpukit/libcsupport/include/machine/_timecounter.h b/cpukit/libcsupport/include/machine/_timecounter.h
new file mode 100644
index 0000000000..fb974f13c1
--- /dev/null
+++ b/cpukit/libcsupport/include/machine/_timecounter.h
@@ -0,0 +1,53 @@
+/*-
+ * Copyright (c) 2016 embedded brains GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _SYS_TIME_H_
+#error "<sys/time.h> must be included first"
+#endif /* !_SYS_TIME_H_ */
+
+#ifndef _MACHINE__TIMECOUNTER_H_
+#define _MACHINE__TIMECOUNTER_H_
+
+__BEGIN_DECLS
+extern volatile time_t _Timecounter_Time_second;
+extern volatile int32_t _Timecounter_Time_uptime;
+extern struct bintime _Timecounter_Boottimebin;
+
+void _Timecounter_Binuptime(struct bintime *);
+void _Timecounter_Nanouptime(struct timespec *);
+void _Timecounter_Microuptime(struct timeval *);
+void _Timecounter_Bintime(struct bintime *);
+void _Timecounter_Nanotime(struct timespec *);
+void _Timecounter_Microtime(struct timeval *);
+void _Timecounter_Getbinuptime(struct bintime *);
+void _Timecounter_Getnanouptime(struct timespec *);
+void _Timecounter_Getmicrouptime(struct timeval *);
+void _Timecounter_Getbintime(struct bintime *);
+void _Timecounter_Getnanotime(struct timespec *);
+void _Timecounter_Getmicrotime(struct timeval *);
+__END_DECLS
+
+#endif /* _MACHINE__TIMECOUNTER_H_ */
diff --git a/cpukit/libcsupport/preinstall.am b/cpukit/libcsupport/preinstall.am
index 074e6c1a29..01a128e2ff 100644
--- a/cpukit/libcsupport/preinstall.am
+++ b/cpukit/libcsupport/preinstall.am
@@ -95,3 +95,7 @@ $(PROJECT_INCLUDE)/machine/_kernel_types.h: include/machine/_kernel_types.h $(PR
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/machine/_kernel_types.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/machine/_kernel_types.h
+$(PROJECT_INCLUDE)/machine/_timecounter.h: include/machine/_timecounter.h $(PROJECT_INCLUDE)/machine/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/machine/_timecounter.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/machine/_timecounter.h
+
diff --git a/cpukit/score/include/rtems/score/timecounter.h b/cpukit/score/include/rtems/score/timecounter.h
index 1c318e2a78..79444de482 100644
--- a/cpukit/score/include/rtems/score/timecounter.h
+++ b/cpukit/score/include/rtems/score/timecounter.h
@@ -25,6 +25,7 @@
#include <sys/time.h>
#include <sys/timetc.h>
+#include <machine/_timecounter.h>
#include <rtems/score/isrlock.h>
@@ -227,7 +228,7 @@ extern volatile time_t _Timecounter_Time_second;
* For compatibility with the FreeBSD network stack the initial value is one
* second.
*/
-extern volatile time_t _Timecounter_Time_uptime;
+extern volatile int32_t _Timecounter_Time_uptime;
/**
* @brief The current timecounter.
diff --git a/cpukit/score/src/kern_tc.c b/cpukit/score/src/kern_tc.c
index 55aa0ae255..99c6664fcb 100644
--- a/cpukit/score/src/kern_tc.c
+++ b/cpukit/score/src/kern_tc.c
@@ -203,10 +203,11 @@ int tc_min_ticktock_freq = 1;
#ifndef __rtems__
volatile time_t time_second = 1;
+volatile time_t time_uptime = 1;
#else /* __rtems__ */
volatile time_t time_second = TOD_SECONDS_1970_THROUGH_1988;
+volatile int32_t time_uptime = 1;
#endif /* __rtems__ */
-volatile time_t time_uptime = 1;
#ifndef __rtems__
static int sysctl_kern_boottime(SYSCTL_HANDLER_ARGS);