source: rtems/cpukit/score/include/rtems/score/atomic.h @ b5f1b24

5
Last change on this file since b5f1b24 was 8d296cd5, checked in by Sebastian Huber <sebastian.huber@…>, on 09/26/15 at 11:03:16

score: Use uintptr_t for atomic pointer operations

Do not obfuscate the standard API.

  • Property mode set to 100644
File size: 4.6 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup ScoreAtomic
5 *
6 * @brief Atomic Operations API
7 */
8
9/*
10 * COPYRIGHT (c) 2012-2013 Deng Hengyi.
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.org/license/LICENSE.
15 */
16
17#ifndef _RTEMS_SCORE_ATOMIC_H
18#define _RTEMS_SCORE_ATOMIC_H
19
20#include <rtems/score/cpuatomic.h>
21
22/**
23 * @defgroup ScoreAtomic Atomic Operations
24 *
25 * @ingroup Score
26 *
27 * @brief Support for atomic operations.
28 *
29 * Atomic operations can be used to implement low-level synchronization
30 * primitives on SMP systems, like spin locks.  All atomic operations are
31 * defined in terms of C11 (ISO/IEC 9899:2011) or C++11 (ISO/IEC 14882:2011).
32 * For documentation use the standard documents.
33 *
34 * @{
35 */
36
37typedef CPU_atomic_Uint Atomic_Uint;
38
39typedef CPU_atomic_Ulong Atomic_Ulong;
40
41typedef CPU_atomic_Uintptr Atomic_Uintptr;
42
43typedef CPU_atomic_Flag Atomic_Flag;
44
45typedef CPU_atomic_Order Atomic_Order;
46
47#define ATOMIC_ORDER_RELAXED CPU_ATOMIC_ORDER_RELAXED
48
49#define ATOMIC_ORDER_ACQUIRE CPU_ATOMIC_ORDER_ACQUIRE
50
51#define ATOMIC_ORDER_RELEASE CPU_ATOMIC_ORDER_RELEASE
52
53#define ATOMIC_ORDER_ACQ_REL CPU_ATOMIC_ORDER_ACQ_REL
54
55#define ATOMIC_ORDER_SEQ_CST CPU_ATOMIC_ORDER_SEQ_CST
56
57#define ATOMIC_INITIALIZER_UINT( value ) CPU_ATOMIC_INITIALIZER_UINT( value )
58
59#define ATOMIC_INITIALIZER_ULONG( value ) CPU_ATOMIC_INITIALIZER_ULONG( value )
60
61#define ATOMIC_INITIALIZER_UINTPTR( value ) CPU_ATOMIC_INITIALIZER_UINTPTR( value )
62
63#define ATOMIC_INITIALIZER_FLAG CPU_ATOMIC_INITIALIZER_FLAG
64
65#define _Atomic_Fence( order ) _CPU_atomic_Fence( order )
66
67#define _Atomic_Init_uint( obj, desired ) \
68  _CPU_atomic_Init_uint( obj, desired )
69
70#define _Atomic_Init_ulong( obj, desired ) \
71  _CPU_atomic_Init_ulong( obj, desired )
72
73#define _Atomic_Init_uintptr( obj, desired ) \
74  _CPU_atomic_Init_uintptr( obj, desired )
75
76#define _Atomic_Load_uint( obj, order ) \
77  _CPU_atomic_Load_uint( obj, order )
78
79#define _Atomic_Load_ulong( obj, order ) \
80  _CPU_atomic_Load_ulong( obj, order )
81
82#define _Atomic_Load_uintptr( obj, order ) \
83  _CPU_atomic_Load_uintptr( obj, order )
84
85#define _Atomic_Store_uint( obj, desr, order ) \
86  _CPU_atomic_Store_uint( obj, desr, order )
87
88#define _Atomic_Store_ulong( obj, desr, order ) \
89  _CPU_atomic_Store_ulong( obj, desr, order )
90
91#define _Atomic_Store_uintptr( obj, desr, order ) \
92  _CPU_atomic_Store_uintptr( obj, desr, order )
93
94#define _Atomic_Fetch_add_uint( obj, arg, order ) \
95  _CPU_atomic_Fetch_add_uint( obj, arg, order )
96
97#define _Atomic_Fetch_add_ulong( obj, arg, order ) \
98  _CPU_atomic_Fetch_add_ulong( obj, arg, order )
99
100#define _Atomic_Fetch_add_uintptr( obj, arg, order ) \
101  _CPU_atomic_Fetch_add_uintptr( obj, arg, order )
102
103#define _Atomic_Fetch_sub_uint( obj, arg, order ) \
104  _CPU_atomic_Fetch_sub_uint( obj, arg, order )
105
106#define _Atomic_Fetch_sub_ulong( obj, arg, order ) \
107  _CPU_atomic_Fetch_sub_ulong( obj, arg, order )
108
109#define _Atomic_Fetch_sub_uintptr( obj, arg, order ) \
110  _CPU_atomic_Fetch_sub_uintptr( obj, arg, order )
111
112#define _Atomic_Fetch_or_uint( obj, arg, order ) \
113  _CPU_atomic_Fetch_or_uint( obj, arg, order )
114
115#define _Atomic_Fetch_or_ulong( obj, arg, order ) \
116  _CPU_atomic_Fetch_or_ulong( obj, arg, order )
117
118#define _Atomic_Fetch_or_uintptr( obj, arg, order ) \
119  _CPU_atomic_Fetch_or_uintptr( obj, arg, order )
120
121#define _Atomic_Fetch_and_uint( obj, arg, order ) \
122  _CPU_atomic_Fetch_and_uint( obj, arg, order )
123
124#define _Atomic_Fetch_and_ulong( obj, arg, order ) \
125  _CPU_atomic_Fetch_and_ulong( obj, arg, order )
126
127#define _Atomic_Fetch_and_uintptr( obj, arg, order ) \
128  _CPU_atomic_Fetch_and_uintptr( obj, arg, order )
129
130#define _Atomic_Exchange_uint( obj, desr, order ) \
131  _CPU_atomic_Exchange_uint( obj, desr, order )
132
133#define _Atomic_Exchange_ulong( obj, desr, order ) \
134  _CPU_atomic_Exchange_ulong( obj, desr, order )
135
136#define _Atomic_Exchange_uintptr( obj, desr, order ) \
137  _CPU_atomic_Exchange_uintptr( obj, desr, order )
138
139#define _Atomic_Compare_exchange_uint( obj, expected, desired, succ, fail ) \
140  _CPU_atomic_Compare_exchange_uint( obj, expected, desired, succ, fail )
141
142#define _Atomic_Compare_exchange_ulong( obj, expected, desired, succ, fail ) \
143  _CPU_atomic_Compare_exchange_ulong( obj, expected, desired, succ, fail )
144
145#define _Atomic_Compare_exchange_uintptr( obj, expected, desired, succ, fail ) \
146  _CPU_atomic_Compare_exchange_uintptr( obj, expected, desired, succ, fail )
147
148#define _Atomic_Flag_clear( obj, order ) \
149  _CPU_atomic_Flag_clear( obj, order )
150
151#define _Atomic_Flag_test_and_set( obj, order ) \
152  _CPU_atomic_Flag_test_and_set( obj, order )
153
154/** @} */
155
156#endif /* _RTEMS_SCORE_ATOMIC_H */
Note: See TracBrowser for help on using the repository browser.