psl1ght
A free SDK for Sony's PS3 console
Loading...
Searching...
No Matches
atomic.h File Reference

Atomic Operations. More...

#include <ppu-types.h>

Go to the source code of this file.

Data Structures

struct  atomic_t
 
struct  atomic64_t
 

Macros

#define sysAtomicAddNegative(a, v)   (sysAtomicAddReturn((a), (v)) < 0)
 
#define sysAtomicIncAndTest(v)   (sysAtomicIncReturn(v) == 0)
 
#define xchg(ptr, x)
 
#define cmpxchg(ptr, o, n)
 
#define sysAtomicCompareAndSwap(v, o, n)   (cmpxchg(&((v)->counter), (o), (n)))
 
#define sysAtomicSwap(v, newv)   (xchg(&((v)->counter), newv))
 
#define sysAtomicIncNotZero(v)   sysAtomicAddUnless((v), 1, 0)
 
#define sysAtomicSubAndTest(a, v)   (sysAtomicSubReturn((a), (v)) == 0)
 
#define sysAtomicDecAndTest(v)   (sysAtomicDecReturn((v)) == 0)
 
#define sysAtomic64AddNegative(a, v)   (sysAtomic64AddReturn((a), (v)) < 0)
 
#define sysAtomic64IncAndTest(v)   (sysAtomic64IncReturn(v) == 0)
 
#define sysAtomic64SubAndTest(a, v)   (sysAtomic64SubReturn((a), (v)) == 0)
 
#define sysAtomic64DecAndTest(v)   (sysAtomic64DecReturn((v)) == 0)
 
#define sysAtomic64CompareAndSwap(v, o, n)   (cmpxchg(&((v)->counter), (o), (n)))
 
#define sysAtomic64Swap(v, newv)   (xchg(&((v)->counter), newv))
 
#define sysAtomic64IncNotZero(v)   sysAtomic64AddUnless((v), 1, 0)
 

Functions

static u32 sysAtomicRead (const atomic_t *v)
 
static void sysAtomicSet (atomic_t *v, int i)
 
static void sysAtomicAdd (u32 a, atomic_t *v)
 
static u32 sysAtomicAddReturn (u32 a, atomic_t *v)
 
static void sysAtomicSub (u32 a, atomic_t *v)
 
static u32 sysAtomicSubReturn (u32 a, atomic_t *v)
 
static void sysAtomicInc (atomic_t *v)
 
static u32 sysAtomicIncReturn (atomic_t *v)
 
static void sysAtomicDec (atomic_t *v)
 
static u32 sysAtomicDecReturn (atomic_t *v)
 
static u32 __xchg_u32 (volatile void *p, u32 val)
 
static u32 __xchg_u64 (volatile void *p, u32 val)
 
void __xchg_called_with_bad_pointer (void)
 
static u32 __xchg (volatile void *ptr, u32 x, unsigned int size)
 
static u64 __cmpxchg_u32 (volatile unsigned int *p, u64 oldv, u64 newv)
 
static u64 __cmpxchg_u64 (volatile u64 *p, u64 oldv, u64 newv)
 
void __cmpxchg_called_with_bad_pointer (void)
 
static u64 __cmpxchg (volatile void *ptr, u64 oldv, u64 newv, unsigned int size)
 
static u32 sysAtomicAddUnless (atomic_t *v, u32 a, u32 u)
 
static u32 sysAtomicDecIfPositive (atomic_t *v)
 
static u64 sysAtomic64Read (const atomic64_t *v)
 
static void sysAtomic64Set (atomic64_t *v, u64 i)
 
static void sysAtomic64Add (u64 a, atomic64_t *v)
 
static u64 sysAtomic64AddReturn (u64 a, atomic64_t *v)
 
static void sysAtomic64Sub (u64 a, atomic64_t *v)
 
static u64 sysAtomic64SubReturn (u64 a, atomic64_t *v)
 
static void sysAtomic64Inc (atomic64_t *v)
 
static u64 sysAtomic64IncReturn (atomic64_t *v)
 
static void sysAtomic64Dec (atomic64_t *v)
 
static u64 sysAtomic64DecReturn (atomic64_t *v)
 
static u64 sysAtomic64DecIfPositive (atomic64_t *v)
 
static u32 sysAtomic64AddUnless (atomic64_t *v, u64 a, u64 u)
 

Detailed Description

Atomic Operations.

Definition in file atomic.h.

Macro Definition Documentation

◆ cmpxchg

#define cmpxchg (   ptr,
  o,
 
)
Value:
({ \
__typeof__(*(ptr)) _o_ = (o); \
__typeof__(*(ptr)) _n_ = (n); \
(__typeof__(*(ptr))) __cmpxchg((ptr), (u64)_o_, \
(u64)_n_, sizeof(*(ptr))); \
})
static u64 __cmpxchg(volatile void *ptr, u64 oldv, u64 newv, unsigned int size)
Definition atomic.h:279

Definition at line 292 of file atomic.h.

◆ sysAtomic64AddNegative

#define sysAtomic64AddNegative (   a,
 
)    (sysAtomic64AddReturn((a), (v)) < 0)

Definition at line 405 of file atomic.h.

◆ sysAtomic64CompareAndSwap

#define sysAtomic64CompareAndSwap (   v,
  o,
 
)    (cmpxchg(&((v)->counter), (o), (n)))

Definition at line 532 of file atomic.h.

◆ sysAtomic64DecAndTest

#define sysAtomic64DecAndTest (   v)    (sysAtomic64DecReturn((v)) == 0)

Definition at line 508 of file atomic.h.

◆ sysAtomic64IncAndTest

#define sysAtomic64IncAndTest (   v)    (sysAtomic64IncReturn(v) == 0)

Definition at line 475 of file atomic.h.

◆ sysAtomic64IncNotZero

#define sysAtomic64IncNotZero (   v)    sysAtomic64AddUnless((v), 1, 0)

Definition at line 564 of file atomic.h.

◆ sysAtomic64SubAndTest

#define sysAtomic64SubAndTest (   a,
 
)    (sysAtomic64SubReturn((a), (v)) == 0)

Definition at line 507 of file atomic.h.

◆ sysAtomic64Swap

#define sysAtomic64Swap (   v,
  newv 
)    (xchg(&((v)->counter), newv))

Definition at line 533 of file atomic.h.

◆ sysAtomicAddNegative

#define sysAtomicAddNegative (   a,
 
)    (sysAtomicAddReturn((a), (v)) < 0)

Definition at line 68 of file atomic.h.

◆ sysAtomicCompareAndSwap

#define sysAtomicCompareAndSwap (   v,
  o,
 
)    (cmpxchg(&((v)->counter), (o), (n)))

Definition at line 300 of file atomic.h.

◆ sysAtomicDecAndTest

#define sysAtomicDecAndTest (   v)    (sysAtomicDecReturn((v)) == 0)

Definition at line 335 of file atomic.h.

◆ sysAtomicIncAndTest

#define sysAtomicIncAndTest (   v)    (sysAtomicIncReturn(v) == 0)

Definition at line 138 of file atomic.h.

◆ sysAtomicIncNotZero

#define sysAtomicIncNotZero (   v)    sysAtomicAddUnless((v), 1, 0)

Definition at line 332 of file atomic.h.

◆ sysAtomicSubAndTest

#define sysAtomicSubAndTest (   a,
 
)    (sysAtomicSubReturn((a), (v)) == 0)

Definition at line 334 of file atomic.h.

◆ sysAtomicSwap

#define sysAtomicSwap (   v,
  newv 
)    (xchg(&((v)->counter), newv))

Definition at line 301 of file atomic.h.

◆ xchg

#define xchg (   ptr,
 
)
Value:
({ \
__typeof__(*(ptr)) _x_ = (x); \
(__typeof__(*(ptr))) __xchg((ptr), (u32)_x_, sizeof(*(ptr))); \
})
static u32 __xchg(volatile void *ptr, u32 x, unsigned int size)
Definition atomic.h:212

Definition at line 224 of file atomic.h.

Function Documentation

◆ __cmpxchg()

static u64 __cmpxchg ( volatile void *  ptr,
u64  oldv,
u64  newv,
unsigned int  size 
)
inlinestatic

Definition at line 279 of file atomic.h.

◆ __cmpxchg_called_with_bad_pointer()

void __cmpxchg_called_with_bad_pointer ( void  )
extern

◆ __cmpxchg_u32()

static u64 __cmpxchg_u32 ( volatile unsigned int *  p,
u64  oldv,
u64  newv 
)
inlinestatic

Definition at line 235 of file atomic.h.

◆ __cmpxchg_u64()

static u64 __cmpxchg_u64 ( volatile u64 *  p,
u64  oldv,
u64  newv 
)
inlinestatic

Definition at line 255 of file atomic.h.

◆ __xchg()

static u32 __xchg ( volatile void *  ptr,
u32  x,
unsigned int  size 
)
inlinestatic

Definition at line 212 of file atomic.h.

◆ __xchg_called_with_bad_pointer()

void __xchg_called_with_bad_pointer ( void  )
extern

◆ __xchg_u32()

static u32 __xchg_u32 ( volatile void *  p,
u32  val 
)
inlinestatic

Definition at line 176 of file atomic.h.

◆ __xchg_u64()

static u32 __xchg_u64 ( volatile void *  p,
u32  val 
)
inlinestatic

Definition at line 191 of file atomic.h.

◆ sysAtomic64Add()

static void sysAtomic64Add ( u64  a,
atomic64_t v 
)
inlinestatic

Definition at line 375 of file atomic.h.

◆ sysAtomic64AddReturn()

static u64 sysAtomic64AddReturn ( u64  a,
atomic64_t v 
)
inlinestatic

Definition at line 389 of file atomic.h.

◆ sysAtomic64AddUnless()

static u32 sysAtomic64AddUnless ( atomic64_t v,
u64  a,
u64  u 
)
inlinestatic

atomic64_add_unless - add unless the number is a given value @v: pointer of type atomic64_t : the amount to add to v... @u: ...unless v is equal to u.

Atomically adds to @v, so u64 as it was not @u. Returns non-zero if @v was not @u, and zero otherwise.

Definition at line 544 of file atomic.h.

◆ sysAtomic64Dec()

static void sysAtomic64Dec ( atomic64_t v)
inlinestatic

Definition at line 477 of file atomic.h.

◆ sysAtomic64DecIfPositive()

static u64 sysAtomic64DecIfPositive ( atomic64_t v)
inlinestatic

Definition at line 514 of file atomic.h.

◆ sysAtomic64DecReturn()

static u64 sysAtomic64DecReturn ( atomic64_t v)
inlinestatic

Definition at line 491 of file atomic.h.

◆ sysAtomic64Inc()

static void sysAtomic64Inc ( atomic64_t v)
inlinestatic

Definition at line 437 of file atomic.h.

◆ sysAtomic64IncReturn()

static u64 sysAtomic64IncReturn ( atomic64_t v)
inlinestatic

Definition at line 451 of file atomic.h.

◆ sysAtomic64Read()

static u64 sysAtomic64Read ( const atomic64_t v)
inlinestatic

Definition at line 361 of file atomic.h.

◆ sysAtomic64Set()

static void sysAtomic64Set ( atomic64_t v,
u64  i 
)
inlinestatic

Definition at line 370 of file atomic.h.

◆ sysAtomic64Sub()

static void sysAtomic64Sub ( u64  a,
atomic64_t v 
)
inlinestatic

Definition at line 407 of file atomic.h.

◆ sysAtomic64SubReturn()

static u64 sysAtomic64SubReturn ( u64  a,
atomic64_t v 
)
inlinestatic

Definition at line 421 of file atomic.h.

◆ sysAtomicAdd()

static void sysAtomicAdd ( u32  a,
atomic_t v 
)
inlinestatic

Definition at line 38 of file atomic.h.

◆ sysAtomicAddReturn()

static u32 sysAtomicAddReturn ( u32  a,
atomic_t v 
)
inlinestatic

Definition at line 52 of file atomic.h.

◆ sysAtomicAddUnless()

static u32 sysAtomicAddUnless ( atomic_t v,
u32  a,
u32  u 
)
inlinestatic

atomic_add_unless - add unless the number is a given value @v: pointer of type atomic_t : the amount to add to v... @u: ...unless v is equal to u.

Atomically adds to @v, so long as it was not @u. Returns non-zero if @v was not @u, and zero otherwise.

Definition at line 312 of file atomic.h.

◆ sysAtomicDec()

static void sysAtomicDec ( atomic_t v)
inlinestatic

Definition at line 140 of file atomic.h.

◆ sysAtomicDecIfPositive()

static u32 sysAtomicDecIfPositive ( atomic_t v)
inlinestatic

Definition at line 342 of file atomic.h.

◆ sysAtomicDecReturn()

static u32 sysAtomicDecReturn ( atomic_t v)
inlinestatic

Definition at line 154 of file atomic.h.

◆ sysAtomicInc()

static void sysAtomicInc ( atomic_t v)
inlinestatic

Definition at line 100 of file atomic.h.

◆ sysAtomicIncReturn()

static u32 sysAtomicIncReturn ( atomic_t v)
inlinestatic

Definition at line 114 of file atomic.h.

◆ sysAtomicRead()

static u32 sysAtomicRead ( const atomic_t v)
inlinestatic

Definition at line 24 of file atomic.h.

◆ sysAtomicSet()

static void sysAtomicSet ( atomic_t v,
int  i 
)
inlinestatic

Definition at line 33 of file atomic.h.

◆ sysAtomicSub()

static void sysAtomicSub ( u32  a,
atomic_t v 
)
inlinestatic

Definition at line 70 of file atomic.h.

◆ sysAtomicSubReturn()

static u32 sysAtomicSubReturn ( u32  a,
atomic_t v 
)
inlinestatic

Definition at line 84 of file atomic.h.