OpenCores
URL https://opencores.org/ocsvn/or1k_old/or1k_old/trunk

Subversion Repositories or1k_old

[/] [or1k_old/] [trunk/] [rc203soc/] [sw/] [uClinux/] [include/] [asm-sparc/] [atomic.h] - Diff between revs 1765 and 1782

Only display areas with differences | Details | Blame | View Log

Rev 1765 Rev 1782
/* atomic.h: These really suck for now.
/* atomic.h: These really suck for now.
 *
 *
 * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
 * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
 */
 */
 
 
#ifndef __ARCH_SPARC_ATOMIC__
#ifndef __ARCH_SPARC_ATOMIC__
#define __ARCH_SPARC_ATOMIC__
#define __ARCH_SPARC_ATOMIC__
 
 
#ifdef __SMP__
#ifdef __SMP__
#include <asm/smp.h>
#include <asm/smp.h>
#include <asm/smp_lock.h>
#include <asm/smp_lock.h>
#endif
#endif
 
 
typedef int atomic_t;
typedef int atomic_t;
 
 
static __inline__ void atomic_add(atomic_t i, atomic_t *v)
static __inline__ void atomic_add(atomic_t i, atomic_t *v)
{
{
        unsigned long flags;
        unsigned long flags;
 
 
        save_flags(flags); cli();
        save_flags(flags); cli();
        *v += i;
        *v += i;
        restore_flags(flags);
        restore_flags(flags);
}
}
 
 
static __inline__ void atomic_sub(atomic_t i, atomic_t *v)
static __inline__ void atomic_sub(atomic_t i, atomic_t *v)
{
{
        unsigned long flags;
        unsigned long flags;
 
 
        save_flags(flags); cli();
        save_flags(flags); cli();
        *v -= i;
        *v -= i;
        restore_flags(flags);
        restore_flags(flags);
}
}
 
 
static __inline__ int atomic_sub_and_test(atomic_t i, atomic_t *v)
static __inline__ int atomic_sub_and_test(atomic_t i, atomic_t *v)
{
{
        unsigned long flags, result;
        unsigned long flags, result;
 
 
        save_flags(flags); cli();
        save_flags(flags); cli();
        *v -= i;
        *v -= i;
        result = (*v == 0);
        result = (*v == 0);
        restore_flags(flags);
        restore_flags(flags);
        return result;
        return result;
}
}
 
 
static __inline__ void atomic_inc(atomic_t *v)
static __inline__ void atomic_inc(atomic_t *v)
{
{
        atomic_add(1, v);
        atomic_add(1, v);
}
}
 
 
static __inline__ void atomic_dec(atomic_t *v)
static __inline__ void atomic_dec(atomic_t *v)
{
{
        atomic_sub(1, v);
        atomic_sub(1, v);
}
}
 
 
static __inline__ int atomic_dec_and_test(atomic_t *v)
static __inline__ int atomic_dec_and_test(atomic_t *v)
{
{
        return atomic_sub_and_test(1, v);
        return atomic_sub_and_test(1, v);
}
}
 
 
#endif /* !(__ARCH_SPARC_ATOMIC__) */
#endif /* !(__ARCH_SPARC_ATOMIC__) */
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.