From 76ac1ee3bba2a20ded7ea12394af0a633be25ff9 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 23 Dec 2015 07:29:47 +0100 Subject: score: Fix simple timecounter support Update #2502. --- cpukit/score/include/rtems/score/timecounter.h | 27 ++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) (limited to 'cpukit/score/include/rtems/score/timecounter.h') diff --git a/cpukit/score/include/rtems/score/timecounter.h b/cpukit/score/include/rtems/score/timecounter.h index 0d17cc7ce3..33de269ec8 100644 --- a/cpukit/score/include/rtems/score/timecounter.h +++ b/cpukit/score/include/rtems/score/timecounter.h @@ -26,6 +26,8 @@ #include #include +#include + #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ @@ -160,6 +162,21 @@ void _Timecounter_Install( struct timecounter *tc ); */ void _Timecounter_Tick( void ); +/** + * @brief Lock to protect the timecounter mechanic. + */ +ISR_LOCK_DECLARE( extern, _Timecounter_Lock ) + +/** + * @brief Acquires the timecounter lock. + * + * @param[in] lock_context The lock context. + * + * See _Timecounter_Tick_simple(). + */ +#define _Timecounter_Acquire( lock_context ) \ + _ISR_lock_ISR_disable_and_acquire( &_Timecounter_Lock, lock_context ) + /** * @brief Performs a simple timecounter tick. * @@ -169,8 +186,14 @@ void _Timecounter_Tick( void ); * @param[in] delta The time in timecounter ticks elapsed since the last call * to _Timecounter_Tick_simple(). * @param[in] offset The current value of the timecounter. - */ -void _Timecounter_Tick_simple( uint32_t delta, uint32_t offset ); + * @param[in] lock_context The lock context of the corresponding + * _Timecounter_Acquire(). + */ +void _Timecounter_Tick_simple( + uint32_t delta, + uint32_t offset, + ISR_lock_Context *lock_context +); /** * @brief The wall clock time in seconds. -- cgit v1.2.3