From dbf5d92605a9db10e3e3cb154d03a515c5d5c5af Mon Sep 17 00:00:00 2001 From: reinelt Date: Sun, 8 May 2005 04:32:45 +0000 Subject: [lcd4linux @ 2005-05-08 04:32:43 by reinelt] CodingStyle added and applied git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@547 3ae390bd-cb1e-0410-b409-cd5a39f66f1f --- udelay.c | 235 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 117 insertions(+), 118 deletions(-) (limited to 'udelay.c') diff --git a/udelay.c b/udelay.c index 75ae1cf..e26bc08 100644 --- a/udelay.c +++ b/udelay.c @@ -1,4 +1,4 @@ -/* $Id: udelay.c,v 1.19 2005/01/18 06:30:24 reinelt Exp $ +/* $Id: udelay.c,v 1.20 2005/05/08 04:32:45 reinelt Exp $ * * short delays * @@ -23,6 +23,9 @@ * * * $Log: udelay.c,v $ + * Revision 1.20 2005/05/08 04:32:45 reinelt + * CodingStyle added and applied + * * Revision 1.19 2005/01/18 06:30:24 reinelt * added (C) to all copyright statements * @@ -158,162 +161,158 @@ unsigned long loops_per_usec; -void ndelay (const unsigned long nsec) +void ndelay(const unsigned long nsec) { - unsigned long loop=(nsec*loops_per_usec+999)/1000; - - __asm__ (".align 16\n" - "1:\tdecl %0\n" - "\tjne 1b" - : /* no result */ - :"a" (loop)); + unsigned long loop = (nsec * loops_per_usec + 999) / 1000; + + __asm__(".align 16\n" "1:\tdecl %0\n" "\tjne 1b": /* no result */ + :"a"(loop)); } /* adopted from /usr/src/linux/init/main.c */ -void udelay_calibrate (void) +void udelay_calibrate(void) { - clock_t tick; - unsigned long bit; - - loops_per_usec=1; - while (loops_per_usec<<=1) { - tick=clock(); - while (clock()==tick); - tick=clock(); - ndelay(1000000000/CLOCKS_PER_SEC); - if (clock()>tick) - break; - } - - loops_per_usec>>=1; - bit=loops_per_usec; - while (bit>>=1) { - loops_per_usec|=bit; - tick=clock(); - while (clock()==tick); - tick=clock(); - ndelay(1000000000/CLOCKS_PER_SEC); - if (clock()>tick) - loops_per_usec&=~bit; - } + clock_t tick; + unsigned long bit; + + loops_per_usec = 1; + while (loops_per_usec <<= 1) { + tick = clock(); + while (clock() == tick); + tick = clock(); + ndelay(1000000000 / CLOCKS_PER_SEC); + if (clock() > tick) + break; + } + + loops_per_usec >>= 1; + bit = loops_per_usec; + while (bit >>= 1) { + loops_per_usec |= bit; + tick = clock(); + while (clock() == tick); + tick = clock(); + ndelay(1000000000 / CLOCKS_PER_SEC); + if (clock() > tick) + loops_per_usec &= ~bit; + } } #else -static unsigned int ticks_per_usec=0; +static unsigned int ticks_per_usec = 0; -static void getCPUinfo (int *hasTSC, double *MHz) +static void getCPUinfo(int *hasTSC, double *MHz) { - int fd; - char buffer[4096], *p; - - *hasTSC=0; - *MHz=-1; - - fd=open("/proc/cpuinfo", O_RDONLY); - if (fd==-1) { - error ("udelay: open(/proc/cpuinfo) failed: %s", strerror(errno)); - return; - } - if (read (fd, &buffer, sizeof(buffer)-1)==-1) { - error ("udelay: read(/proc/cpuinfo) failed: %s", strerror(errno)); - close (fd); - return; - } - close (fd); - - p=strstr(buffer, "flags"); - if (p==NULL) { - info ("udelay: /proc/cpuinfo has no 'flags' line"); - } else { - p=strstr(p, "tsc"); - if (p==NULL) { - info ("udelay: CPU does not support Time Stamp Counter"); + int fd; + char buffer[4096], *p; + + *hasTSC = 0; + *MHz = -1; + + fd = open("/proc/cpuinfo", O_RDONLY); + if (fd == -1) { + error("udelay: open(/proc/cpuinfo) failed: %s", strerror(errno)); + return; + } + if (read(fd, &buffer, sizeof(buffer) - 1) == -1) { + error("udelay: read(/proc/cpuinfo) failed: %s", strerror(errno)); + close(fd); + return; + } + close(fd); + + p = strstr(buffer, "flags"); + if (p == NULL) { + info("udelay: /proc/cpuinfo has no 'flags' line"); } else { - info ("udelay: CPU supports Time Stamp Counter"); - *hasTSC=1; + p = strstr(p, "tsc"); + if (p == NULL) { + info("udelay: CPU does not support Time Stamp Counter"); + } else { + info("udelay: CPU supports Time Stamp Counter"); + *hasTSC = 1; + } } - } - - p=strstr(buffer, "cpu MHz"); - if (p==NULL) { - info ("udelay: /proc/cpuinfo has no 'cpu MHz' line"); - } else { - if (sscanf(p+7, " : %lf", MHz)!=1) { - error ("udelay: parse(/proc/cpuinfo) failed: unknown 'cpu MHz' format"); - *MHz=-1; + + p = strstr(buffer, "cpu MHz"); + if (p == NULL) { + info("udelay: /proc/cpuinfo has no 'cpu MHz' line"); } else { - info ("udelay: CPU runs at %f MHz", *MHz); + if (sscanf(p + 7, " : %lf", MHz) != 1) { + error("udelay: parse(/proc/cpuinfo) failed: unknown 'cpu MHz' format"); + *MHz = -1; + } else { + info("udelay: CPU runs at %f MHz", *MHz); + } } - } } -void udelay_init (void) +void udelay_init(void) { #ifdef HAVE_ASM_MSR_H - - int tsc; - double mhz; - - getCPUinfo (&tsc, &mhz); - - if (tsc && mhz>0.0) { - ticks_per_usec=ceil(mhz); - info ("udelay: using TSC delay loop, %u ticks per microsecond", ticks_per_usec); - } else + + int tsc; + double mhz; + + getCPUinfo(&tsc, &mhz); + + if (tsc && mhz > 0.0) { + ticks_per_usec = ceil(mhz); + info("udelay: using TSC delay loop, %u ticks per microsecond", ticks_per_usec); + } else #else - error ("udelay: The file 'include/asm/msr.h' was missing at compile time."); - error ("udelay: Even if your CPU supports TSC, it will not be used!"); - error ("udelay: You *really* should install msr.h and recompile LCD4linux!"); + error("udelay: The file 'include/asm/msr.h' was missing at compile time."); + error("udelay: Even if your CPU supports TSC, it will not be used!"); + error("udelay: You *really* should install msr.h and recompile LCD4linux!"); #endif - { - ticks_per_usec=0; - info ("udelay: using gettimeofday() delay loop"); - } + { + ticks_per_usec = 0; + info("udelay: using gettimeofday() delay loop"); + } } -void ndelay (const unsigned long nsec) +void ndelay(const unsigned long nsec) { #ifdef HAVE_ASM_MSR_H - if (ticks_per_usec) { + if (ticks_per_usec) { - unsigned int t1, t2; - unsigned long tsc; + unsigned int t1, t2; + unsigned long tsc; - tsc=(nsec*ticks_per_usec+999)/1000; + tsc = (nsec * ticks_per_usec + 999) / 1000; - rdtscl(t1); - do { - rep_nop(); - rdtscl(t2); - } while ((t2-t1)1000000) { - end.tv_usec-=1000000; - end.tv_sec++; + { + struct timeval now, end; + + 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); } - - do { - rep_nop(); - gettimeofday(&now, NULL); - } while (now.tv_sec==end.tv_sec?now.tv_usec