[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[microblaze-uclinux] [PATCH 41/60] microblaze_v4: atomic.h bitops.h byteorder.h
- To: linux-kernel@xxxxxxxxxxxxxxx
- Subject: [microblaze-uclinux] [PATCH 41/60] microblaze_v4: atomic.h bitops.h byteorder.h
- From: monstr@xxxxxxxxx
- Date: Thu, 26 Jun 2008 14:30:10 +0200
- Cc: arnd@xxxxxxxx, linux-arch@xxxxxxxxxxxxxxx, stephen.neuendorffer@xxxxxxxxxx, John.Linn@xxxxxxxxxx, john.williams@xxxxxxxxxxxxx, matthew@xxxxxx, will.newton@xxxxxxxxx, drepper@xxxxxxxxxx, microblaze-uclinux@xxxxxxxxxxxxxx, grant.likely@xxxxxxxxxxxx, linuxppc-dev@xxxxxxxxxx, vapier.adi@xxxxxxxxx, alan@xxxxxxxxxxxxxxxxxxx, hpa@xxxxxxxxx, Michal Simek <monstr@xxxxxxxxx>
- In-reply-to: <1214483429-32360-41-git-send-email-monstr@xxxxxxxxx>
- References: <1214483429-32360-1-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-2-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-3-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-4-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-5-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-6-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-7-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-8-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-9-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-10-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-11-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-12-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-13-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-14-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-15-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-16-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-17-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-18-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-19-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-20-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-21-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-22-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-23-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-24-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-25-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-26-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-27-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-28-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-29-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-30-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-31-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-32-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-33-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-34-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-35-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-36-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-37-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-38-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-39-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-40-git-send-email-monstr@xxxxxxxxx> <1214483429-32360-41-git-send-email-monstr@xxxxxxxxx>
- Reply-to: microblaze-uclinux@xxxxxxxxxxxxxx
- Sender: owner-microblaze-uclinux@xxxxxxxxxxxxxx
From: Michal Simek <monstr@xxxxxxxxx>
Signed-off-by: Michal Simek <monstr@xxxxxxxxx>
---
include/asm-microblaze/atomic.h | 106 ++++++++++++++++++++++++++++++++++++
include/asm-microblaze/bitops.h | 27 +++++++++
include/asm-microblaze/byteorder.h | 21 +++++++
3 files changed, 154 insertions(+), 0 deletions(-)
create mode 100644 include/asm-microblaze/atomic.h
create mode 100644 include/asm-microblaze/bitops.h
create mode 100644 include/asm-microblaze/byteorder.h
diff --git a/include/asm-microblaze/atomic.h b/include/asm-microblaze/atomic.h
new file mode 100644
index 0000000..754688a
--- /dev/null
+++ b/include/asm-microblaze/atomic.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2006 Atmark Techno, Inc.
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+
+#ifndef _ASM_MICROBLAZE_ATOMIC_H
+#define _ASM_MICROBLAZE_ATOMIC_H
+
+#include <linux/compiler.h> /* likely */
+#include <asm/system.h> /* local_irq_XXX and friends */
+
+typedef struct { volatile int counter; } atomic_t;
+
+#define ATOMIC_INIT(i) { (i) }
+#define atomic_read(v) ((v)->counter)
+#define atomic_set(v, i) (((v)->counter) = (i))
+
+#define atomic_inc(v) (atomic_add_return(1, (v)))
+#define atomic_dec(v) (atomic_sub_return(1, (v)))
+
+#define atomic_add(i, v) (atomic_add_return(i, (v)))
+#define atomic_sub(i, v) (atomic_sub_return(i, (v)))
+
+#define atomic_inc_return(v) (atomic_add_return(1, (v)))
+#define atomic_dec_return(v) (atomic_sub_return(1, (v)))
+
+#define atomic_inc_and_test(v) (atomic_add_return(1, (v)) == 0)
+#define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0)
+
+#define atomic_inc_not_zero(v) (atomic_add_unless((v), 1, 0))
+
+#define atomic_sub_and_test(i, v) (atomic_sub_return((i), (v)) == 0)
+
+static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
+{
+ int ret;
+ unsigned long flags;
+
+ local_irq_save(flags);
+ ret = v->counter;
+ if (likely(ret == old))
+ v->counter = new;
+ local_irq_restore(flags);
+
+ return ret;
+}
+
+static inline int atomic_add_unless(atomic_t *v, int a, int u)
+{
+ int c, old;
+
+ c = atomic_read(v);
+ while (c != u && (old = atomic_cmpxchg((v), c, c + a)) != c)
+ c = old;
+ return c != u;
+}
+
+static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr)
+{
+ unsigned long flags;
+
+ local_irq_save(flags);
+ *addr &= ~mask;
+ local_irq_restore(flags);
+}
+
+/**
+ * atomic_add_return - add and return
+ * @i: integer value to add
+ * @v: pointer of type atomic_t
+ *
+ * Atomically adds @i to @v and returns @i + @v
+ */
+static inline int atomic_add_return(int i, atomic_t *v)
+{
+ unsigned long flags;
+ int val;
+
+ local_irq_save(flags);
+ val = v->counter;
+ v->counter = val += i;
+ local_irq_restore(flags);
+
+ return val;
+}
+
+static inline int atomic_sub_return(int i, atomic_t *v)
+{
+ return atomic_add_return(-i, v);
+}
+
+#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0)
+#define atomic_xchg(v, new) (xchg(&((v)->counter), new))
+
+/* Atomic operations are already serializing */
+#define smp_mb__before_atomic_dec() barrier()
+#define smp_mb__after_atomic_dec() barrier()
+#define smp_mb__before_atomic_inc() barrier()
+#define smp_mb__after_atomic_inc() barrier()
+
+#include <asm-generic/atomic.h>
+
+#endif /* _ASM_MICROBLAZE_ATOMIC_H */
diff --git a/include/asm-microblaze/bitops.h b/include/asm-microblaze/bitops.h
new file mode 100644
index 0000000..98ffb61
--- /dev/null
+++ b/include/asm-microblaze/bitops.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2006 Atmark Techno, Inc.
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+
+#ifndef _ASM_MICROBLAZE_BITOPS_H
+#define _ASM_MICROBLAZE_BITOPS_H
+
+/*
+ * Copyright 1992, Linus Torvalds.
+ */
+
+#include <linux/autoconf.h>
+#include <asm/byteorder.h> /* swab32 */
+#include <asm/system.h> /* save_flags */
+
+/*
+ * clear_bit() doesn't provide any barrier for the compiler.
+ */
+#define smp_mb__before_clear_bit() barrier()
+#define smp_mb__after_clear_bit() barrier()
+#include <asm-generic/bitops.h>
+
+#endif /* _ASM_MICROBLAZE_BITOPS_H */
diff --git a/include/asm-microblaze/byteorder.h b/include/asm-microblaze/byteorder.h
new file mode 100644
index 0000000..dad9204
--- /dev/null
+++ b/include/asm-microblaze/byteorder.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2006 Atmark Techno, Inc.
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+
+#ifndef _ASM_MICROBLAZE_BYTEORDER_H
+#define _ASM_MICROBLAZE_BYTEORDER_H
+
+#include <asm/types.h>
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
+#define __BYTEORDER_HAS_U64__
+#define __SWAB_64_THRU_32__
+#endif
+
+#include <linux/byteorder/big_endian.h>
+
+#endif /* _ASM_MICROBLAZE_BYTEORDER_H */
--
1.5.4.GIT
___________________________
microblaze-uclinux mailing list
microblaze-uclinux@xxxxxxxxxxxxxx
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/