Commit | Line | Data |
---|---|---|
1394f032 | 1 | /* |
9e83b98a MF |
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__ | |
1394f032 | 11 | |
639f6571 | 12 | #include <mach/anomaly.h> |
1394f032 | 13 | |
9e83b98a MF |
14 | static inline void __delay(unsigned long loops) |
15 | { | |
c8e67412 | 16 | __asm__ __volatile__ ( |
9e83b98a MF |
17 | "LSETUP(1f, 1f) LC0 = %0;" |
18 | "1: NOP;" | |
19 | : | |
20 | : "a" (loops) | |
21 | : "LT0", "LB0", "LC0" | |
22 | ); | |
1394f032 BW |
23 | } |
24 | ||
25 | #include <linux/param.h> /* needed for HZ */ | |
26 | ||
27 | /* | |
4e653e04 | 28 | * close approximation borrowed from m68knommu to avoid 64-bit math |
1394f032 | 29 | */ |
4e653e04 MH |
30 | |
31 | #define HZSCALE (268435456 / (1000000/HZ)) | |
32 | ||
6388d14e | 33 | static inline unsigned long __to_delay(unsigned long scale) |
1394f032 BW |
34 | { |
35 | extern unsigned long loops_per_jiffy; | |
6388d14e BS |
36 | return (((scale * HZSCALE) >> 11) * (loops_per_jiffy >> 11)) >> 6; |
37 | } | |
38 | ||
39 | static inline void udelay(unsigned long usecs) | |
40 | { | |
41 | __delay(__to_delay(usecs)); | |
1394f032 BW |
42 | } |
43 | ||
6388d14e BS |
44 | static inline void ndelay(unsigned long nsecs) |
45 | { | |
46 | __delay(__to_delay(1) * nsecs / 1000); | |
47 | } | |
48 | ||
49 | #define ndelay ndelay | |
50 | ||
9e83b98a | 51 | #endif |