404

[ Avaa Bypassed ]




Upload:

Command:

botdev@18.225.254.37: ~ $
/*
 * Copyright (C) 2014 Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
 *
 * This file is licensed under the terms of the GNU General Public License
 * version 2.  This program is licensed "as is" without any warranty of any
 * kind, whether express or implied.
 */

#ifndef __ASM_OPENRISC_ATOMIC_H
#define __ASM_OPENRISC_ATOMIC_H

#include <linux/types.h>

/* Atomically perform op with v->counter and i */
#define ATOMIC_OP(op)							\
static inline void atomic_##op(int i, atomic_t *v)			\
{									\
	int tmp;							\
									\
	__asm__ __volatile__(						\
		"1:	l.lwa	%0,0(%1)	\n"			\
		"	l." #op " %0,%0,%2	\n"			\
		"	l.swa	0(%1),%0	\n"			\
		"	l.bnf	1b		\n"			\
		"	 l.nop			\n"			\
		: "=&r"(tmp)						\
		: "r"(&v->counter), "r"(i)				\
		: "cc", "memory");					\
}

/* Atomically perform op with v->counter and i, return the result */
#define ATOMIC_OP_RETURN(op)						\
static inline int atomic_##op##_return(int i, atomic_t *v)		\
{									\
	int tmp;							\
									\
	__asm__ __volatile__(						\
		"1:	l.lwa	%0,0(%1)	\n"			\
		"	l." #op " %0,%0,%2	\n"			\
		"	l.swa	0(%1),%0	\n"			\
		"	l.bnf	1b		\n"			\
		"	 l.nop			\n"			\
		: "=&r"(tmp)						\
		: "r"(&v->counter), "r"(i)				\
		: "cc", "memory");					\
									\
	return tmp;							\
}

/* Atomically perform op with v->counter and i, return orig v->counter */
#define ATOMIC_FETCH_OP(op)						\
static inline int atomic_fetch_##op(int i, atomic_t *v)			\
{									\
	int tmp, old;							\
									\
	__asm__ __volatile__(						\
		"1:	l.lwa	%0,0(%2)	\n"			\
		"	l." #op " %1,%0,%3	\n"			\
		"	l.swa	0(%2),%1	\n"			\
		"	l.bnf	1b		\n"			\
		"	 l.nop			\n"			\
		: "=&r"(old), "=&r"(tmp)				\
		: "r"(&v->counter), "r"(i)				\
		: "cc", "memory");					\
									\
	return old;							\
}

ATOMIC_OP_RETURN(add)
ATOMIC_OP_RETURN(sub)

ATOMIC_FETCH_OP(add)
ATOMIC_FETCH_OP(sub)
ATOMIC_FETCH_OP(and)
ATOMIC_FETCH_OP(or)
ATOMIC_FETCH_OP(xor)

ATOMIC_OP(and)
ATOMIC_OP(or)
ATOMIC_OP(xor)

#undef ATOMIC_FETCH_OP
#undef ATOMIC_OP_RETURN
#undef ATOMIC_OP

#define atomic_add_return	atomic_add_return
#define atomic_sub_return	atomic_sub_return
#define atomic_fetch_add	atomic_fetch_add
#define atomic_fetch_sub	atomic_fetch_sub
#define atomic_fetch_and	atomic_fetch_and
#define atomic_fetch_or		atomic_fetch_or
#define atomic_fetch_xor	atomic_fetch_xor
#define atomic_and	atomic_and
#define atomic_or	atomic_or
#define atomic_xor	atomic_xor

/*
 * Atomically add a to v->counter as long as v is not already u.
 * Returns the original value at v->counter.
 *
 * This is often used through atomic_inc_not_zero()
 */
static inline int __atomic_add_unless(atomic_t *v, int a, int u)
{
	int old, tmp;

	__asm__ __volatile__(
		"1:	l.lwa %0, 0(%2)		\n"
		"	l.sfeq %0, %4		\n"
		"	l.bf 2f			\n"
		"	 l.add %1, %0, %3	\n"
		"	l.swa 0(%2), %1		\n"
		"	l.bnf 1b		\n"
		"	 l.nop			\n"
		"2:				\n"
		: "=&r"(old), "=&r" (tmp)
		: "r"(&v->counter), "r"(a), "r"(u)
		: "cc", "memory");

	return old;
}
#define __atomic_add_unless	__atomic_add_unless

#include <asm-generic/atomic.h>

#endif /* __ASM_OPENRISC_ATOMIC_H */

Filemanager

Name Type Size Permission Actions
bitops Folder 0755
Kbuild File 997 B 0644
asm-offsets.h File 35 B 0644
atomic.h File 3.02 KB 0644
barrier.h File 203 B 0644
bitops.h File 1.5 KB 0644
cache.h File 888 B 0644
cacheflush.h File 3.37 KB 0644
cmpxchg.h File 3.92 KB 0644
cpuinfo.h File 970 B 0644
delay.h File 670 B 0644
dma-mapping.h File 968 B 0644
elf.h File 2.02 KB 0644
fixmap.h File 2.74 KB 0644
futex.h File 2.24 KB 0644
io.h File 1.31 KB 0644
irq.h File 835 B 0644
irqflags.h File 866 B 0644
linkage.h File 764 B 0644
mmu.h File 728 B 0644
mmu_context.h File 1.3 KB 0644
page.h File 2.54 KB 0644
pgalloc.h File 2.57 KB 0644
pgtable.h File 13.96 KB 0644
processor.h File 2.7 KB 0644
ptrace.h File 3.33 KB 0644
serial.h File 1.11 KB 0644
smp.h File 822 B 0644
spinlock.h File 985 B 0644
spinlock_types.h File 188 B 0644
spr.h File 1.17 KB 0644
spr_defs.h File 22.91 KB 0644
string.h File 324 B 0644
syscall.h File 1.91 KB 0644
syscalls.h File 1.04 KB 0644
thread_info.h File 3.85 KB 0644
time.h File 627 B 0644
timex.h File 914 B 0644
tlb.h File 1.01 KB 0644
tlbflush.h File 2.05 KB 0644
uaccess.h File 7.98 KB 0644
unaligned.h File 1.7 KB 0644
unwinder.h File 557 B 0644