diff --git a/drivers/random/rand32-timer.c b/drivers/random/rand32-timer.c index 43586ce485a..e80770343df 100644 --- a/drivers/random/rand32-timer.c +++ b/drivers/random/rand32-timer.c @@ -41,6 +41,7 @@ number generator. #include #include #include +#include #if defined(__GNUC__) diff --git a/include/atomic.h b/include/atomic.h new file mode 100644 index 00000000000..375a1532082 --- /dev/null +++ b/include/atomic.h @@ -0,0 +1,64 @@ +/* atomic operations */ + +/* + * Copyright (c) 1997-2015, Wind River Systems, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1) Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2) Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3) Neither the name of Wind River Systems nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __ATOMIC_H__ +#define __ATOMIC_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef int atomic_t; +typedef atomic_t atomic_val_t; + +extern atomic_val_t atomic_add(atomic_t *target, atomic_val_t value); +extern atomic_val_t atomic_and(atomic_t *target, atomic_val_t value); +extern atomic_val_t atomic_dec(atomic_t *target); +extern atomic_val_t atomic_inc(atomic_t *target); +extern atomic_val_t atomic_nand(atomic_t *target, atomic_val_t value); +extern atomic_val_t atomic_or(atomic_t *target, atomic_val_t value); +extern atomic_val_t atomic_sub(atomic_t *target, atomic_val_t value); +extern atomic_val_t atomic_xor(atomic_t *target, atomic_val_t value); +extern atomic_val_t atomic_clear(atomic_t *target); +extern atomic_val_t atomic_get(atomic_t *target); +extern atomic_val_t atomic_set(atomic_t *target, atomic_val_t value); +extern int atomic_cas(atomic_t *target, + atomic_val_t oldValue, atomic_val_t newValue); + + +#define ATOMIC_INIT(i) {(i)} + +#ifdef __cplusplus +} +#endif + +#endif /* __ATOMIC_H__ */ diff --git a/include/nanokernel.h b/include/nanokernel.h index 7ab13fbaad5..7145b1183d4 100644 --- a/include/nanokernel.h +++ b/include/nanokernel.h @@ -45,9 +45,6 @@ extern "C" { #endif -typedef int atomic_t; -typedef atomic_t atomic_val_t; - typedef struct s_CCS *nano_context_id_t; typedef void (*nano_fiber_entry_t)(int i1, int i2); @@ -197,24 +194,6 @@ extern uint32_t nano_tick_delta_32(int64_t *reftime); #endif /* CONFIG_NANOKERNEL */ -/* atomic operator APIs */ - -extern atomic_val_t atomic_add(atomic_t *target, atomic_val_t value); -extern atomic_val_t atomic_and(atomic_t *target, atomic_val_t value); -extern atomic_val_t atomic_dec(atomic_t *target); -extern atomic_val_t atomic_inc(atomic_t *target); -extern atomic_val_t atomic_nand(atomic_t *target, atomic_val_t value); -extern atomic_val_t atomic_or(atomic_t *target, atomic_val_t value); -extern atomic_val_t atomic_sub(atomic_t *target, atomic_val_t value); -extern atomic_val_t atomic_xor(atomic_t *target, atomic_val_t value); -extern atomic_val_t atomic_clear(atomic_t *target); -extern atomic_val_t atomic_get(atomic_t *target); -extern atomic_val_t atomic_set(atomic_t *target, atomic_val_t value); -extern int atomic_cas(atomic_t *target, - atomic_val_t oldValue, - atomic_val_t newValue); -#define ATOMIC_INIT(i) {(i)} - /* * Auto-initialization *