summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Cox <alan@lxorguk.ukuu.org.uk>2003-02-18 00:40:59 -0800
committerAndy Grover <agrover@groveronline.com>2003-02-18 00:40:59 -0800
commitc0630ba10df3a20ab916557c76f1cf8245ed65aa (patch)
treef42bb130d16a40884cac9a2457f86e2bd395d397
parent8b18caf447a6ad543d7aea6a7877d7516d8c381a (diff)
[PATCH] ndelay() for x86
The implementation is not ideal. Thats something to tidy up.
-rw-r--r--arch/i386/kernel/i386_ksyms.c1
-rw-r--r--arch/i386/lib/delay.c5
-rw-r--r--include/asm-i386/delay.h6
3 files changed, 12 insertions, 0 deletions
diff --git a/arch/i386/kernel/i386_ksyms.c b/arch/i386/kernel/i386_ksyms.c
index 90f14e4c3b31..93244d036138 100644
--- a/arch/i386/kernel/i386_ksyms.c
+++ b/arch/i386/kernel/i386_ksyms.c
@@ -104,6 +104,7 @@ EXPORT_SYMBOL_NOVERS(__up_wakeup);
/* Networking helper routines. */
EXPORT_SYMBOL(csum_partial_copy_generic);
/* Delay loops */
+EXPORT_SYMBOL(__ndelay);
EXPORT_SYMBOL(__udelay);
EXPORT_SYMBOL(__delay);
EXPORT_SYMBOL(__const_udelay);
diff --git a/arch/i386/lib/delay.c b/arch/i386/lib/delay.c
index 55eae89750e7..a678560d383f 100644
--- a/arch/i386/lib/delay.c
+++ b/arch/i386/lib/delay.c
@@ -41,3 +41,8 @@ void __udelay(unsigned long usecs)
{
__const_udelay(usecs * 0x000010c6); /* 2**32 / 1000000 */
}
+
+void __ndelay(unsigned long nsecs)
+{
+ __const_udelay(nsecs * 0x00005); /* 2**32 / 1000000000 (rounded up) */
+}
diff --git a/include/asm-i386/delay.h b/include/asm-i386/delay.h
index c7d218492964..72930c7109bb 100644
--- a/include/asm-i386/delay.h
+++ b/include/asm-i386/delay.h
@@ -8,13 +8,19 @@
*/
extern void __bad_udelay(void);
+extern void __bad_ndelay(void);
extern void __udelay(unsigned long usecs);
+extern void __ndelay(unsigned long nsecs);
extern void __const_udelay(unsigned long usecs);
extern void __delay(unsigned long loops);
#define udelay(n) (__builtin_constant_p(n) ? \
((n) > 20000 ? __bad_udelay() : __const_udelay((n) * 0x10c6ul)) : \
__udelay(n))
+
+#define ndelay(n) (__builtin_constant_p(n) ? \
+ ((n) > 20000 ? __bad_ndelay() : __const_udelay((n) * 5ul)) : \
+ __ndelay(n))
#endif /* defined(_I386_DELAY_H) */