blob: 2c11b9770e8b351c3756864237ff27b9be721e41 [file] [log] [blame]
Jeff Dike060e3522005-05-20 13:59:08 -07001#include <linux/module.h>
2#include <linux/kernel.h>
3#include <linux/delay.h>
4#include <asm/param.h>
Bodo Stroesser5fd861b2005-05-05 16:15:37 -07005
Linus Torvalds1da177e2005-04-16 15:20:36 -07006void __delay(unsigned long time)
7{
8 /* Stolen from the i386 __loop_delay */
9 int d0;
10 __asm__ __volatile__(
11 "\tjmp 1f\n"
12 ".align 16\n"
13 "1:\tjmp 2f\n"
14 ".align 16\n"
15 "2:\tdecl %0\n\tjns 2b"
16 :"=&a" (d0)
17 :"0" (time));
18}
19
Bodo Stroesser5fd861b2005-05-05 16:15:37 -070020void __udelay(unsigned long usecs)
21{
22 int i, n;
23
24 n = (loops_per_jiffy * HZ * usecs) / MILLION;
Jeff Dike060e3522005-05-20 13:59:08 -070025 for(i=0;i<n;i++)
26 cpu_relax();
Bodo Stroesser5fd861b2005-05-05 16:15:37 -070027}
28
Jeff Dike060e3522005-05-20 13:59:08 -070029EXPORT_SYMBOL(__udelay);
30
Bodo Stroesser5fd861b2005-05-05 16:15:37 -070031void __const_udelay(unsigned long usecs)
32{
33 int i, n;
34
35 n = (loops_per_jiffy * HZ * usecs) / MILLION;
Jeff Dike060e3522005-05-20 13:59:08 -070036 for(i=0;i<n;i++)
37 cpu_relax();
Bodo Stroesser5fd861b2005-05-05 16:15:37 -070038}
Jeff Dike060e3522005-05-20 13:59:08 -070039
40EXPORT_SYMBOL(__const_udelay);