PageRenderTime 15ms CodeModel.GetById 7ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/sparc64/lib/delay.c

https://bitbucket.org/evzijst/gittest
C | 49 lines | 29 code | 8 blank | 12 comment | 0 complexity | b6f9c723a1d9610baae063ad2eaa0791 MD5 | raw file
 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
12void __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 */
30void __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
40void __udelay(unsigned long n)
41{
42	__const_udelay(n * 0x10c7UL);
43}
44
45
46void __ndelay(unsigned long n)
47{
48	__const_udelay(n * 0x5UL);
49}