nios2: Miscellaneous header files
authorLey Foon Tan <lftan@altera.com>
Thu, 6 Nov 2014 07:20:09 +0000 (15:20 +0800)
committerLey Foon Tan <lftan@altera.com>
Mon, 8 Dec 2014 04:56:03 +0000 (12:56 +0800)
This patch introduces a few nios2-specific header files.

Signed-off-by: Ley Foon Tan <lftan@altera.com>
arch/nios2/include/asm/cmpxchg.h [new file with mode: 0644]
arch/nios2/include/asm/linkage.h [new file with mode: 0644]
arch/nios2/include/asm/mutex.h [new file with mode: 0644]
arch/nios2/include/uapi/asm/byteorder.h [new file with mode: 0644]
arch/nios2/include/uapi/asm/swab.h [new file with mode: 0644]

diff --git a/arch/nios2/include/asm/cmpxchg.h b/arch/nios2/include/asm/cmpxchg.h
new file mode 100644 (file)
index 0000000..8593871
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2004 Microtronix Datacom Ltd.
+ *
+ * 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_NIOS2_CMPXCHG_H
+#define _ASM_NIOS2_CMPXCHG_H
+
+#include <linux/irqflags.h>
+
+#define xchg(ptr, x)   \
+       ((__typeof__(*(ptr)))__xchg((unsigned long)(x), (ptr), sizeof(*(ptr))))
+
+struct __xchg_dummy { unsigned long a[100]; };
+#define __xg(x)                ((volatile struct __xchg_dummy *)(x))
+
+static inline unsigned long __xchg(unsigned long x, volatile void *ptr,
+                                       int size)
+{
+       unsigned long tmp, flags;
+
+       local_irq_save(flags);
+
+       switch (size) {
+       case 1:
+               __asm__ __volatile__(
+                       "ldb    %0, %2\n"
+                       "stb    %1, %2\n"
+                       : "=&r" (tmp)
+                       : "r" (x), "m" (*__xg(ptr))
+                       : "memory");
+               break;
+       case 2:
+               __asm__ __volatile__(
+                       "ldh    %0, %2\n"
+                       "sth    %1, %2\n"
+                       : "=&r" (tmp)
+                       : "r" (x), "m" (*__xg(ptr))
+                       : "memory");
+               break;
+       case 4:
+               __asm__ __volatile__(
+                       "ldw    %0, %2\n"
+                       "stw    %1, %2\n"
+                       : "=&r" (tmp)
+                       : "r" (x), "m" (*__xg(ptr))
+                       : "memory");
+               break;
+       }
+
+       local_irq_restore(flags);
+       return tmp;
+}
+
+#include <asm-generic/cmpxchg.h>
+#include <asm-generic/cmpxchg-local.h>
+
+#endif /* _ASM_NIOS2_CMPXCHG_H */
diff --git a/arch/nios2/include/asm/linkage.h b/arch/nios2/include/asm/linkage.h
new file mode 100644 (file)
index 0000000..e0c6dec
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2009 Thomas Chou <thomas@wytron.com.tw>
+ *
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
+ * NON INFRINGEMENT.  See the GNU General Public License for more
+ * details.
+ */
+
+#ifndef _ASM_NIOS2_LINKAGE_H
+#define _ASM_NIOS2_LINKAGE_H
+
+/* This file is required by include/linux/linkage.h */
+#define __ALIGN .align 4
+#define __ALIGN_STR ".align 4"
+
+#endif
Simple merge
Simple merge