aboutsummaryrefslogtreecommitdiffstats
path: root/udelay.c
diff options
context:
space:
mode:
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2003-02-27 07:43:11 +0000
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2003-02-27 07:43:11 +0000
commit322f82cc38870e7f3274bb0b5767e3778a300a30 (patch)
tree6aa6ad5d6eb7e6473154637a1b83428d819b3bdd /udelay.c
parent2e6d22f756642857bd0595e05f776c77b7c0ff34 (diff)
downloadlcd4linux-322f82cc38870e7f3274bb0b5767e3778a300a30.tar.gz
[lcd4linux @ 2003-02-27 07:43:10 by reinelt]
asm/msr.h: included hard-coded definition of rdtscl() if msr.h cannot be found. autoconf/automake/autoanything: switched back to 1.4. Hope it works again. git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@185 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
Diffstat (limited to 'udelay.c')
-rw-r--r--udelay.c59
1 files changed, 26 insertions, 33 deletions
diff --git a/udelay.c b/udelay.c
index 6077dd0..2ba21f3 100644
--- a/udelay.c
+++ b/udelay.c
@@ -1,4 +1,4 @@
-/* $Id: udelay.c,v 1.9 2002/08/21 06:09:53 reinelt Exp $
+/* $Id: udelay.c,v 1.10 2003/02/27 07:43:11 reinelt Exp $
*
* short delays
*
@@ -20,6 +20,12 @@
*
*
* $Log: udelay.c,v $
+ * Revision 1.10 2003/02/27 07:43:11 reinelt
+ *
+ * asm/msr.h: included hard-coded definition of rdtscl() if msr.h cannot be found.
+ *
+ * autoconf/automake/autoanything: switched back to 1.4. Hope it works again.
+ *
* Revision 1.9 2002/08/21 06:09:53 reinelt
* some T6963 fixes, ndelay wrap
*
@@ -100,10 +106,15 @@
#include <errno.h>
#include <string.h>
#include <sys/time.h>
+
#ifdef HAVE_ASM_MSR_H
#include <asm/msr.h>
+#else
+#warning asm/msr.h not found.
+#warning using hard-coded definition.
+#define rdtscl(low) \
+ __asm__ __volatile__("rdtsc" : "=a" (low) : : "edx")
#endif
-
#endif
@@ -206,12 +217,8 @@ static void getCPUinfo (int *hasTSC, double *MHz)
}
-
void udelay_init (void)
{
-
-#ifdef HAVE_ASM_MSR_H
-
int tsc;
double mhz;
@@ -224,21 +231,11 @@ void udelay_init (void)
ticks_per_usec=0;
debug ("using gettimeofday() delay loop");
}
-
-#else
-
- debug ("lcd4linux has been compiled without asm/msr.h");
- debug ("using gettimeofday() delay loop");
-
-#endif
-
}
void ndelay (unsigned long nsec)
{
-#ifdef HAVE_ASM_MSR_H
-
if (ticks_per_usec) {
unsigned int t1, t2;
@@ -255,26 +252,22 @@ void ndelay (unsigned long nsec)
}
} while ((t2-t1)<nsec);
- } else
-
-#endif
-
- {
-
- struct timeval now, end;
+ } else {
- gettimeofday (&end, NULL);
- end.tv_usec+=(nsec+999)/1000;
- while (end.tv_usec>1000000) {
- end.tv_usec-=1000000;
- end.tv_sec++;
- }
+ struct timeval now, end;
- do {
- rep_nop();
- gettimeofday(&now, NULL);
- } while (now.tv_sec==end.tv_sec?now.tv_usec<end.tv_usec:now.tv_sec<end.tv_sec);
+ gettimeofday (&end, NULL);
+ end.tv_usec+=(nsec+999)/1000;
+ while (end.tv_usec>1000000) {
+ end.tv_usec-=1000000;
+ end.tv_sec++;
}
+
+ do {
+ rep_nop();
+ gettimeofday(&now, NULL);
+ } while (now.tv_sec==end.tv_sec?now.tv_usec<end.tv_usec:now.tv_sec<end.tv_sec);
+ }
}
#endif