Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
sh
lib64
udelay.c
Go to the documentation of this file.
1
/*
2
* arch/sh/lib64/udelay.c
3
*
4
* Delay routines, using a pre-computed "loops_per_jiffy" value.
5
*
6
* Copyright (C) 2000, 2001 Paolo Alberelli
7
* Copyright (C) 2003, 2004 Paul Mundt
8
*
9
* This file is subject to the terms and conditions of the GNU General Public
10
* License. See the file "COPYING" in the main directory of this archive
11
* for more details.
12
*/
13
#include <linux/sched.h>
14
#include <asm/param.h>
15
16
/*
17
* Use only for very small delays (< 1 msec).
18
*
19
* The active part of our cycle counter is only 32-bits wide, and
20
* we're treating the difference between two marks as signed. On
21
* a 1GHz box, that's about 2 seconds.
22
*/
23
24
void
__delay
(
unsigned
long
loops)
25
{
26
long
long
dummy
;
27
__asm__
__volatile__(
"gettr tr0, %1\n\t"
28
"pta $+4, tr0\n\t"
29
"addi %0, -1, %0\n\t"
30
"bne %0, r63, tr0\n\t"
31
"ptabs %1, tr0\n\t"
:
"=r"
(loops),
32
"=r"
(dummy)
33
:
"0"
(loops));
34
}
35
36
void
__const_udelay
(
unsigned
long
xloops)
37
{
38
__delay
(xloops * (
HZ
*
cpu_data
[
raw_smp_processor_id
()].
loops_per_jiffy
));
39
}
40
41
void
__udelay
(
unsigned
long
usecs
)
42
{
43
__const_udelay
(usecs * 0x000010c6);
/* 2**32 / 1000000 */
44
}
45
46
void
__ndelay
(
unsigned
long
nsecs
)
47
{
48
__const_udelay
(nsecs * 0x00000005);
49
}
Generated on Thu Jan 10 2013 12:53:50 for Linux Kernel by
1.8.2