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 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 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 39static inline void udelay(unsigned long usecs) 40{ 41 __delay(__to_delay(usecs)); 42} 43 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