4.115
Last change
on this file since 28779c7 was
d50acdbb,
checked in by Sebastian Huber <sebastian.huber@…>, on 03/10/14 at 07:25:32
|
score: Add local context to SMP lock API
Add a local context structure to the SMP lock API for acquire and
release pairs. This context can be used to store the ISR level and
profiling information. It may be later used to enable more
sophisticated lock algorithms, e.g. MCS locks.
There is only one lock that cannot be used with a local context. This
is the per-CPU lock since here we would have to transfer the local
context through a context switch which is very complicated.
|
-
Property mode set to
100644
|
File size:
1.0 KB
|
Line | |
---|
1 | /** |
---|
2 | * @file |
---|
3 | * |
---|
4 | * @brief Returns a Current TOD with Nanosecond Granularity |
---|
5 | * @ingroup ScoreTODConstants |
---|
6 | */ |
---|
7 | |
---|
8 | /* |
---|
9 | * COPYRIGHT (c) 1989-2008. |
---|
10 | * On-Line Applications Research Corporation (OAR). |
---|
11 | * |
---|
12 | * The license and distribution terms for this file may be |
---|
13 | * found in the file LICENSE in this distribution or at |
---|
14 | * http://www.rtems.com/license/LICENSE. |
---|
15 | */ |
---|
16 | |
---|
17 | #if HAVE_CONFIG_H |
---|
18 | #include "config.h" |
---|
19 | #endif |
---|
20 | |
---|
21 | #include <rtems/score/todimpl.h> |
---|
22 | #include <rtems/score/isrlevel.h> |
---|
23 | |
---|
24 | Timestamp_Control *_TOD_Get_with_nanoseconds( |
---|
25 | Timestamp_Control *snapshot, |
---|
26 | const Timestamp_Control *clock |
---|
27 | ) |
---|
28 | { |
---|
29 | TOD_Control *tod = &_TOD; |
---|
30 | ISR_lock_Context lock_context; |
---|
31 | Timestamp_Control offset; |
---|
32 | Timestamp_Control now; |
---|
33 | uint32_t nanoseconds; |
---|
34 | |
---|
35 | _TOD_Acquire( tod, &lock_context ); |
---|
36 | nanoseconds = ( *tod->nanoseconds_since_last_tick )(); |
---|
37 | now = *clock; |
---|
38 | _TOD_Release( tod, &lock_context ); |
---|
39 | |
---|
40 | _Timestamp_Set( &offset, 0, nanoseconds ); |
---|
41 | _Timestamp_Add_to( &now, &offset ); |
---|
42 | |
---|
43 | *snapshot = now; |
---|
44 | |
---|
45 | return snapshot; |
---|
46 | } |
---|
Note: See
TracBrowser
for help on using the repository browser.