| Jeff Dike | 060e352 | 2005-05-20 13:59:08 -0700 | [diff] [blame] | 1 | #include <linux/module.h> | 
|  | 2 | #include <linux/kernel.h> | 
|  | 3 | #include <linux/delay.h> | 
|  | 4 | #include <asm/param.h> | 
| Bodo Stroesser | 5fd861b | 2005-05-05 16:15:37 -0700 | [diff] [blame] | 5 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 6 | void __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 Stroesser | 5fd861b | 2005-05-05 16:15:37 -0700 | [diff] [blame] | 20 | void __udelay(unsigned long usecs) | 
|  | 21 | { | 
|  | 22 | int i, n; | 
|  | 23 |  | 
|  | 24 | n = (loops_per_jiffy * HZ * usecs) / MILLION; | 
| Jeff Dike | 060e352 | 2005-05-20 13:59:08 -0700 | [diff] [blame] | 25 | for(i=0;i<n;i++) | 
|  | 26 | cpu_relax(); | 
| Bodo Stroesser | 5fd861b | 2005-05-05 16:15:37 -0700 | [diff] [blame] | 27 | } | 
|  | 28 |  | 
| Jeff Dike | 060e352 | 2005-05-20 13:59:08 -0700 | [diff] [blame] | 29 | EXPORT_SYMBOL(__udelay); |