blob: bf6607fa7b940fb895997355cd68b5db4bb194d3 [file] [log] [blame]
/*
* ======== Atomic.c ========
*/
#include <xdc/std.h>
#include "bsp.h"
#include "mrfi.h"
#include "package/internal/Atomic.xdc.h"
/*
* ======== Atomic_set ========
*/
Int Atomic_set(Int *pold, Int nval)
{
Int state;
Int old;
BSP_ENTER_CRITICAL_SECTION(state);
old = *pold;
*pold = nval;
BSP_EXIT_CRITICAL_SECTION(state);
return (old);
}
/*
* ======== Atomic_inc ========
*/
Int Atomic_inc(Int *pold)
{
Int state;
Int old;
BSP_ENTER_CRITICAL_SECTION(state);
old = *pold;
*pold = *pold + 1;
BSP_EXIT_CRITICAL_SECTION(state);
return (old);
}
/*
* ======== Atomic_dec ========
*/
Int Atomic_dec(Int *pold)
{
Int state;
Int old;
BSP_ENTER_CRITICAL_SECTION(state);
old = *pold;
*pold = *pold - 1;
BSP_EXIT_CRITICAL_SECTION(state);
return (old);
}
/*
* ======== Atomic_clear ========
*/
Int Atomic_clear(Int *pold)
{
Int state;
Int old;
BSP_ENTER_CRITICAL_SECTION(state);
old = *pold;
*pold = 0;
BSP_EXIT_CRITICAL_SECTION(state);
return (old);
}
/*
* ======== Atomic_set8 ========
*/
Int8 Atomic_set8(Int8 *pold, Int8 nval)
{
Int state;
Int8 old;
BSP_ENTER_CRITICAL_SECTION(state);
old = *pold;
*pold = nval;
BSP_EXIT_CRITICAL_SECTION(state);
return (old);
}
/*
* ======== Atomic_inc8 ========
*/
Int8 Atomic_inc8(Int8 *pold)
{
Int state;
Int8 old;
BSP_ENTER_CRITICAL_SECTION(state);
old = *pold;
*pold = *pold + 1;
BSP_EXIT_CRITICAL_SECTION(state);
return (old);
}
/*
* ======== Atomic_dec8 ========
*/
Int8 Atomic_dec8(Int8 *pold)
{
Int state;
Int8 old;
BSP_ENTER_CRITICAL_SECTION(state);
old = *pold;
*pold = *pold - 1;
BSP_EXIT_CRITICAL_SECTION(state);
return (old);
}
/*
* ======== Atomic_clear8 ========
*/
Int8 Atomic_clear8(Int8 *pold)
{
Int state;
Int8 old;
BSP_ENTER_CRITICAL_SECTION(state);
old = *pold;
*pold = 0;
BSP_EXIT_CRITICAL_SECTION(state);
return (old);
}