OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [arch/] [alpha/] [lib/] [udelay.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
#include <linux/config.h>
2
#include <linux/sched.h> /* for udelay's use of smp_processor_id */
3
#include <asm/param.h>
4
#include <asm/smp.h>
5
#include <linux/delay.h>
6
 
7
/*
8
 * Copyright (C) 1993, 2000 Linus Torvalds
9
 *
10
 * Delay routines, using a pre-computed "loops_per_jiffy" value.
11
 */
12
 
13
/*
14
 * Use only for very small delays (< 1 msec).
15
 *
16
 * The active part of our cycle counter is only 32-bits wide, and
17
 * we're treating the difference between two marks as signed.  On
18
 * a 1GHz box, that's about 2 seconds.
19
 */
20
 
21
void
22
__delay(int loops)
23
{
24
        int tmp;
25
        __asm__ __volatile__(
26
                "       rpcc %0\n"
27
                "       addl %1,%0,%1\n"
28
                "1:     rpcc %0\n"
29
                "       subl %1,%0,%0\n"
30
                "       bgt %0,1b"
31
                : "=&r" (tmp), "=r" (loops) : "1"(loops));
32
}
33
 
34
#ifdef CONFIG_SMP
35
#define LPJ     cpu_data[smp_processor_id()].loops_per_jiffy
36
#else
37
#define LPJ     loops_per_jiffy
38
#endif
39
 
40
void
41
ndelay(unsigned long nsecs)
42
{
43
        nsecs *= (((unsigned long)HZ << 32) / 1000000000) * LPJ;
44
        __delay((long)nsecs >> 32);
45
}
46
 
47
void
48
udelay(unsigned long usecs)
49
{
50
        usecs *= (((unsigned long)HZ << 32) / 1000000) * LPJ;
51
        __delay((long)usecs >> 32);
52
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.