L4Re Operating System Framework
Interface and Usage Documentation
Loading...
Searching...
No Matches
atomic.h
Go to the documentation of this file.
1
5/*
6 * (c) 2004-2009 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
7 * Alexander Warg <warg@os.inf.tu-dresden.de>
8 * economic rights: Technische Universität Dresden (Germany)
9 *
10 * This file is part of TUD:OS and distributed under the terms of the
11 * GNU General Public License 2.
12 * Please see the COPYING-GPL-2 file for details.
13 *
14 * As a special exception, you may use this file as part of a free software
15 * library without restriction. Specifically, if other files instantiate
16 * templates or use macros or inline functions from this file, or you compile
17 * this file and link it with other files to produce an executable, this
18 * file does not by itself cause the resulting executable to be covered by
19 * the GNU General Public License. This exception does not however
20 * invalidate any other reasons why the executable file might be covered by
21 * the GNU General Public License.
22 */
23#pragma once
24
25#include <l4/util/atomic.h>
26
27extern "C" void ____error_compare_and_swap_does_not_support_3_bytes____();
28extern "C" void ____error_compare_and_swap_does_not_support_more_than_4_bytes____();
29
30namespace L4
31{
32 template< typename X >
33 inline int compare_and_swap(X volatile *dst, X old_val, X new_val)
34 {
35 switch (sizeof(X))
36 {
37 case 1:
38 return l4util_cmpxchg8((l4_uint8_t volatile*)dst, old_val, new_val);
39 case 2:
40 return l4util_cmpxchg16((l4_uint16_t volatile *)dst, old_val, new_val);
41 case 3: ____error_compare_and_swap_does_not_support_3_bytes____();
42 case 4:
43 return l4util_cmpxchg32((l4_uint32_t volatile*)dst, old_val, new_val);
44 default:
45 ____error_compare_and_swap_does_not_support_more_than_4_bytes____();
46 }
47 return 0;
48 }
49}
unsigned char l4_uint8_t
Unsigned 8bit value.
Definition l4int.h:36
unsigned int l4_uint32_t
Unsigned 32bit value.
Definition l4int.h:40
unsigned short int l4_uint16_t
Unsigned 16bit value.
Definition l4int.h:38
int l4util_cmpxchg8(volatile l4_uint8_t *dest, l4_uint8_t cmp_val, l4_uint8_t new_val)
Atomic compare and exchange (8 bit version)
Definition atomic.h:373
int l4util_cmpxchg16(volatile l4_uint16_t *dest, l4_uint16_t cmp_val, l4_uint16_t new_val)
Atomic compare and exchange (16 bit version)
Definition atomic.h:365
int l4util_cmpxchg32(volatile l4_uint32_t *dest, l4_uint32_t cmp_val, l4_uint32_t new_val)
Atomic compare and exchange (32 bit version)
Definition atomic.h:357
atomic operations header and generic implementations
L4 low-level kernel interface.
Definition io_regblock.h:19