#include <linux/spinlock.h>
#include <linux/export.h>
#include <asm/atomic.h>

static DEFINE_RAW_SPINLOCK(atomic_lock);

struct virtual_zone arm_dma_zone; /* initialized in arch/arm/mm/mmu.c::map_lowmem() */
EXPORT_SYMBOL(arm_dma_zone);

int comcerto_atomic_add(int i, atomic_t *v)
{
	unsigned long flags;
	int result;

	raw_spin_lock_irqsave(&atomic_lock, flags);
	v->counter += i;
	result = v->counter;
	raw_spin_unlock_irqrestore(&atomic_lock, flags);

	return result;
}
EXPORT_SYMBOL(comcerto_atomic_add);

int comcerto_atomic_cmpxchg(atomic_t *v, int old, int new)
{
	unsigned long flags;
	int result;

	raw_spin_lock_irqsave(&atomic_lock, flags);
	result = v->counter;
	if (likely(result == old))
		v->counter = new;
	raw_spin_unlock_irqrestore(&atomic_lock, flags);

	return result;
}
EXPORT_SYMBOL(comcerto_atomic_cmpxchg);

void comcerto_atomic_clear_mask(unsigned long mask, unsigned long *addr)
{
	unsigned long flags;

	raw_spin_lock_irqsave(&atomic_lock, flags);
	*addr &= ~mask;
	raw_spin_unlock_irqrestore(&atomic_lock, flags);
}
EXPORT_SYMBOL(comcerto_atomic_clear_mask);

