1 /* 2 * delay.h - delay functions 3 * 4 * Copyright (c) 2004-2007 Analog Devices Inc. 5 * 6 * Licensed under the GPL-2 or later. 7 */ 8 9 #ifndef __ASM_DELAY_H__ 10 #define __ASM_DELAY_H__ 11 12 #include <mach/anomaly.h> 13 __delay(unsigned long loops)14static inline void __delay(unsigned long loops) 15 { 16 __asm__ __volatile__ ( 17 "LSETUP(1f, 1f) LC0 = %0;" 18 "1: NOP;" 19 : 20 : "a" (loops) 21 : "LT0", "LB0", "LC0" 22 ); 23 } 24 25 #include <linux/param.h> /* needed for HZ */ 26 27 /* 28 * close approximation borrowed from m68knommu to avoid 64-bit math 29 */ 30 31 #define HZSCALE (268435456 / (1000000/HZ)) 32 __to_delay(unsigned long scale)33static inline unsigned long __to_delay(unsigned long scale) 34 { 35 extern unsigned long loops_per_jiffy; 36 return (((scale * HZSCALE) >> 11) * (loops_per_jiffy >> 11)) >> 6; 37 } 38 udelay(unsigned long usecs)39static inline void udelay(unsigned long usecs) 40 { 41 __delay(__to_delay(usecs)); 42 } 43 ndelay(unsigned long nsecs)44static inline void ndelay(unsigned long nsecs) 45 { 46 __delay(__to_delay(1) * nsecs / 1000); 47 } 48 49 #define ndelay ndelay 50 51 #endif 52