summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/score/cpu/sparc/Makefile.am1
-rw-r--r--cpukit/score/cpu/sparc/preinstall.am4
-rw-r--r--cpukit/score/cpu/sparc/rtems/score/cpu.h39
-rw-r--r--cpukit/score/cpu/sparc/rtems/score/sparcimpl.h90
-rw-r--r--cpukit/score/cpu/sparc/sparc-counter.c2
5 files changed, 98 insertions, 38 deletions
diff --git a/cpukit/score/cpu/sparc/Makefile.am b/cpukit/score/cpu/sparc/Makefile.am
index 11b5d11d7f..2de5fcad73 100644
--- a/cpukit/score/cpu/sparc/Makefile.am
+++ b/cpukit/score/cpu/sparc/Makefile.am
@@ -6,6 +6,7 @@ include_rtems_HEADERS = rtems/asm.h
include_rtems_scoredir = $(includedir)/rtems/score
include_rtems_score_HEADERS = rtems/score/sparc.h
include_rtems_score_HEADERS += rtems/score/cpu.h
+include_rtems_score_HEADERS += rtems/score/sparcimpl.h
include_rtems_score_HEADERS += rtems/score/types.h
include_rtems_score_HEADERS += rtems/score/cpuatomic.h
diff --git a/cpukit/score/cpu/sparc/preinstall.am b/cpukit/score/cpu/sparc/preinstall.am
index a2bb01bfd2..c2df31c6c5 100644
--- a/cpukit/score/cpu/sparc/preinstall.am
+++ b/cpukit/score/cpu/sparc/preinstall.am
@@ -35,6 +35,10 @@ $(PROJECT_INCLUDE)/rtems/score/cpu.h: rtems/score/cpu.h $(PROJECT_INCLUDE)/rtems
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/cpu.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/cpu.h
+$(PROJECT_INCLUDE)/rtems/score/sparcimpl.h: rtems/score/sparcimpl.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/sparcimpl.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/sparcimpl.h
+
$(PROJECT_INCLUDE)/rtems/score/types.h: rtems/score/types.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/types.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/types.h
diff --git a/cpukit/score/cpu/sparc/rtems/score/cpu.h b/cpukit/score/cpu/sparc/rtems/score/cpu.h
index c87618db85..5823544a80 100644
--- a/cpukit/score/cpu/sparc/rtems/score/cpu.h
+++ b/cpukit/score/cpu/sparc/rtems/score/cpu.h
@@ -1306,7 +1306,7 @@ typedef uint32_t CPU_Counter_ticks;
typedef CPU_Counter_ticks ( *SPARC_Counter_read )( void );
-typedef CPU_Counter_ticks (*SPARC_Counter_difference)(
+typedef CPU_Counter_ticks ( *SPARC_Counter_difference )(
CPU_Counter_ticks second,
CPU_Counter_ticks first
);
@@ -1324,42 +1324,7 @@ typedef struct {
volatile const CPU_Counter_ticks *counter_address;
} SPARC_Counter;
-extern SPARC_Counter _SPARC_Counter;
-
-CPU_Counter_ticks _SPARC_Counter_read_address( void );
-
-CPU_Counter_ticks _SPARC_Counter_read_asr23( void );
-
-CPU_Counter_ticks _SPARC_Counter_difference_normal(
- CPU_Counter_ticks second,
- CPU_Counter_ticks first
-);
-
-CPU_Counter_ticks _SPARC_Counter_difference_clock_period(
- CPU_Counter_ticks second,
- CPU_Counter_ticks first
-);
-
-/*
- * Returns always a value of one regardless of the parameters. This prevents
- * an infinite loop in rtems_counter_delay_ticks(). Its only a reasonably safe
- * default.
- */
-CPU_Counter_ticks _SPARC_Counter_difference_one(
- CPU_Counter_ticks second,
- CPU_Counter_ticks first
-);
-
-static inline void _SPARC_Counter_initialize(
- SPARC_Counter_read counter_read,
- SPARC_Counter_difference counter_difference,
- volatile const CPU_Counter_ticks *counter_address
-)
-{
- _SPARC_Counter.counter_read = counter_read;
- _SPARC_Counter.counter_difference = counter_difference;
- _SPARC_Counter.counter_address = counter_address;
-}
+extern const SPARC_Counter _SPARC_Counter;
static inline CPU_Counter_ticks _CPU_Counter_read( void )
{
diff --git a/cpukit/score/cpu/sparc/rtems/score/sparcimpl.h b/cpukit/score/cpu/sparc/rtems/score/sparcimpl.h
new file mode 100644
index 0000000000..9f9999b063
--- /dev/null
+++ b/cpukit/score/cpu/sparc/rtems/score/sparcimpl.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * 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.
+ */
+
+#ifndef _RTEMS_SCORE_SPARCIMPL_H
+#define _RTEMS_SCORE_SPARCIMPL_H
+
+#include <rtems/score/cpu.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * Provides a mutable alias to _SPARC_Counter for use in
+ * _SPARC_Counter_initialize(). The _SPARC_Counter and _SPARC_Counter_mutable
+ * are defined via the SPARC_COUNTER_DEFINITION define.
+ */
+extern SPARC_Counter _SPARC_Counter_mutable;
+
+CPU_Counter_ticks _SPARC_Counter_read_address( void );
+
+CPU_Counter_ticks _SPARC_Counter_read_asr23( void );
+
+CPU_Counter_ticks _SPARC_Counter_difference_normal(
+ CPU_Counter_ticks second,
+ CPU_Counter_ticks first
+);
+
+CPU_Counter_ticks _SPARC_Counter_difference_clock_period(
+ CPU_Counter_ticks second,
+ CPU_Counter_ticks first
+);
+
+/*
+ * Returns always a value of one regardless of the parameters. This prevents
+ * an infinite loop in rtems_counter_delay_ticks(). Its only a reasonably safe
+ * default.
+ */
+CPU_Counter_ticks _SPARC_Counter_difference_one(
+ CPU_Counter_ticks second,
+ CPU_Counter_ticks first
+);
+
+static inline void _SPARC_Counter_initialize(
+ SPARC_Counter_read counter_read,
+ SPARC_Counter_difference counter_difference,
+ volatile const CPU_Counter_ticks *counter_address
+)
+{
+ _SPARC_Counter_mutable.counter_read = counter_read;
+ _SPARC_Counter_mutable.counter_difference = counter_difference;
+ _SPARC_Counter_mutable.counter_address = counter_address;
+}
+
+/*
+ * Defines the _SPARC_Counter and _SPARC_Counter_mutable global variables.
+ * Place this define in the global file scope of the CPU counter support file
+ * of the BSP.
+ */
+#define SPARC_COUNTER_DEFINITION \
+ __asm__ ( \
+ "\t.global\t_SPARC_Counter\n" \
+ "\t.global\t_SPARC_Counter_mutable\n" \
+ "\t.section\t.data._SPARC_Counter,\"aw\",@progbits\n" \
+ "\t.align\t4\n" \
+ "\t.type\t_SPARC_Counter, #object\n" \
+ "\t.size\t_SPARC_Counter, 12\n" \
+ "_SPARC_Counter:\n" \
+ "_SPARC_Counter_mutable:\n" \
+ "\t.long\t_SPARC_Counter_read_address\n" \
+ "\t.long\t_SPARC_Counter_difference_one\n" \
+ "\t.long\t_SPARC_Counter\n" \
+ )
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _RTEMS_SCORE_SPARCIMPL_H */
diff --git a/cpukit/score/cpu/sparc/sparc-counter.c b/cpukit/score/cpu/sparc/sparc-counter.c
index 658a47c37e..9bc4061e9e 100644
--- a/cpukit/score/cpu/sparc/sparc-counter.c
+++ b/cpukit/score/cpu/sparc/sparc-counter.c
@@ -16,7 +16,7 @@
#include "config.h"
#endif
-#include <rtems/score/cpu.h>
+#include <rtems/score/sparcimpl.h>
#include <rtems/config.h>
CPU_Counter_ticks _SPARC_Counter_difference_normal(