summaryrefslogtreecommitdiff
path: root/arch/m68k/include/asm/div64.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-04-03 09:44:58 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2009-04-03 09:44:58 -0700
commit5de1ccbe51e89c51a2fe5ab333b7c9c2e7294aff (patch)
tree588d68842d6a082828e3a17efa3de6177b712a97 /arch/m68k/include/asm/div64.h
parent223cdea4c4b5af5181b2da00ac85711d1e0c737c (diff)
parentb4d63e8e745b0000ba22f44ff34cd51e8b4d0389 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu: (41 commits) m68knommu: improve compile arch switch settings m68knommu: fix 5407 ColdFire UART vector setup m68knommu: fix 5307 ColdFire UART vector setup m68knommu: fix 5249 ColdFire UART vector setup m68knommu: fix 5249 ColdFire UART setup m68knommu: fix end of uart table marker m68knommu: switch to using generic_handle_irq() m68k: merge the mmu and non-mmu versions of tlbflush.h m68knommu: introduce basic clk infrastructure m68k: merge the mmu and non-mmu versions of module.h m68knommu: add missing interrupt line definition for UART 2 m68k: merge the mmu and non-mmu versions of mmu_context.h m68k: merge the mmu and non-mmu versions of current.h m68k: merge the mmu and non-mmu versions of div64.h m68k: merge the mmu and non-mmu versions of bugs.h m68k: merge the mmu and non-mmu versions of bug.h m68k: use the mmu version of cache.h for m68knommu as well m68k: use the mmu version of bootinfo.h for m68knommu as well m68k: merge the mmu and non-mmu versions of fb.h m68k: merge the mmu and non-mmu versions of segment.h ...
Diffstat (limited to 'arch/m68k/include/asm/div64.h')
-rw-r--r--arch/m68k/include/asm/div64.h37
1 files changed, 33 insertions, 4 deletions
diff --git a/arch/m68k/include/asm/div64.h b/arch/m68k/include/asm/div64.h
index d211d9f54276..edb66148a71d 100644
--- a/arch/m68k/include/asm/div64.h
+++ b/arch/m68k/include/asm/div64.h
@@ -1,5 +1,34 @@
-#ifdef __uClinux__
-#include "div64_no.h"
+#ifndef _M68K_DIV64_H
+#define _M68K_DIV64_H
+
+#ifdef CONFIG_MMU
+
+#include <linux/types.h>
+
+/* n = n / base; return rem; */
+
+#define do_div(n, base) ({ \
+ union { \
+ unsigned long n32[2]; \
+ unsigned long long n64; \
+ } __n; \
+ unsigned long __rem, __upper; \
+ \
+ __n.n64 = (n); \
+ if ((__upper = __n.n32[0])) { \
+ asm ("divul.l %2,%1:%0" \
+ : "=d" (__n.n32[0]), "=d" (__upper) \
+ : "d" (base), "0" (__n.n32[0])); \
+ } \
+ asm ("divu.l %2,%1:%0" \
+ : "=d" (__n.n32[1]), "=d" (__rem) \
+ : "d" (base), "1" (__upper), "0" (__n.n32[1])); \
+ (n) = __n.n64; \
+ __rem; \
+})
+
#else
-#include "div64_mm.h"
-#endif
+#include <asm-generic/div64.h>
+#endif /* CONFIG_MMU */
+
+#endif /* _M68K_DIV64_H */