Implemented new syscalls for 32 and 64 bit atomic operations.

They are only used if the architecture doesn't support them directly.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4360 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
beveloper
2003-08-21 23:02:00 +00:00
parent fb16941a02
commit 50e0ce4bee
13 changed files with 453 additions and 138 deletions
@@ -12,6 +12,8 @@
#define _BIG_ENDIAN 1
#define _LITTLE_ENDIAN 0
#define ATOMIC64_FUNCS_ARE_SYSCALLS 1
struct iframe {
};
+1 -1
View File
@@ -1,6 +1,6 @@
/*
** Copyright 2003, Marcus Overhagen. All rights reserved.
** Distributed under the terms of the NewOS License.
** Distributed under the terms of the OpenBeOS license.
*/
#ifndef _KERNEL_ARCH_CPU_H
#define _KERNEL_ARCH_CPU_H
-65
View File
@@ -1,65 +0,0 @@
#ifndef _KERNEL_ATOMIC_H
#define _KERNEL_ATOMIC_H
#include <ktypes.h>
/**
* @file kernel/atomic.h
* @brief Prototypes for kernel and user versions of atomic
* functions.
*/
/**
* @defgroup Kernel_Atomic Atomic Operations
* @ingroup OpenBeOS_Kernel
* @{
*/
#ifdef __cplusplus
extern "C" {
#endif
/* atomic_add(), atomic_and(), atomic_or() must
* match the definitions in SupportDefs.h
*/
/**
* Atomic add (user version)
* @param val Pointer to an integer
* @param incr The increment to add (may be -ve)
* @note Returns value of val before addition
*/
int32 user_atomic_add(vint32 *val, int32 incr);
/**
* Atomic and (user version)
* @param val Pointer to an integer
* @param incr The increment to add (may be -ve)
* @note Returns value of val before addition
*/
int32 user_atomic_and(vint32 *val, int32 incr);
/**
* Atomic or (user version)
* @param val Pointer to an integer
* @param incr The increment to add (may be -ve)
* @note Returns value of val before addition
*/
int32 user_atomic_or(vint32 *val, int32 incr);
int32 user_atomic_set(vint32 *val, int32 set_to);
/* Compare the value of val with test_val. If they
* are equal then set the value of 'val' to
* 'set_to'
* @note This is the user version and should not be used within
* the kernel.
*/
int32 user_atomic_test_and_set(vint32 *val, int32 set_to, int32 test_val);
#ifdef __cplusplus
}
#endif
/** @} */
#endif /* _KERNEL_ATOMIC_H */