diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /arch/sparc64/lib/delay.c |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'arch/sparc64/lib/delay.c')
-rw-r--r-- | arch/sparc64/lib/delay.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/arch/sparc64/lib/delay.c b/arch/sparc64/lib/delay.c new file mode 100644 index 000000000000..f6b4c784d53e --- /dev/null +++ b/arch/sparc64/lib/delay.c | |||
@@ -0,0 +1,49 @@ | |||
1 | /* delay.c: Delay loops for sparc64 | ||
2 | * | ||
3 | * Copyright (C) 2004 David S. Miller <davem@redhat.com> | ||
4 | * | ||
5 | * Based heavily upon x86 variant which is: | ||
6 | * Copyright (C) 1993 Linus Torvalds | ||
7 | * Copyright (C) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz> | ||
8 | */ | ||
9 | |||
10 | #include <linux/delay.h> | ||
11 | |||
12 | void __delay(unsigned long loops) | ||
13 | { | ||
14 | __asm__ __volatile__( | ||
15 | " b,pt %%xcc, 1f\n" | ||
16 | " cmp %0, 0\n" | ||
17 | " .align 32\n" | ||
18 | "1:\n" | ||
19 | " bne,pt %%xcc, 1b\n" | ||
20 | " subcc %0, 1, %0\n" | ||
21 | : "=&r" (loops) | ||
22 | : "0" (loops) | ||
23 | : "cc"); | ||
24 | } | ||
25 | |||
26 | /* We used to multiply by HZ after shifting down by 32 bits | ||
27 | * but that runs into problems for higher values of HZ and | ||
28 | * slow cpus. | ||
29 | */ | ||
30 | void __const_udelay(unsigned long n) | ||
31 | { | ||
32 | n *= 4; | ||
33 | |||
34 | n *= (cpu_data(_smp_processor_id()).udelay_val * (HZ/4)); | ||
35 | n >>= 32; | ||
36 | |||
37 | __delay(n + 1); | ||
38 | } | ||
39 | |||
40 | void __udelay(unsigned long n) | ||
41 | { | ||
42 | __const_udelay(n * 0x10c7UL); | ||
43 | } | ||
44 | |||
45 | |||
46 | void __ndelay(unsigned long n) | ||
47 | { | ||
48 | __const_udelay(n * 0x5UL); | ||
49 | } | ||