#include #define MILLION 1000000 #define HZ 1000 unsigned long tsc_freq = 1500000000UL; unsigned long cyclone_freq = 100000000UL; unsigned long tsc_lpj = 1500000000UL/HZ; unsigned long cyclone_lpj = 100000000UL/HZ; unsigned long LPJ; unsigned long __delay(unsigned long loops) { return loops; } unsigned long __const_udelay(unsigned long xloops) { int d0; __asm__("mull %0" :"=d" (xloops), "=&a" (d0) :"1" (xloops),"0" (LPJ)); return __delay(xloops * HZ); } unsigned long my_udelay(unsigned long usec) { unsigned long cyc_per_usec = (LPJ*HZ)/MILLION; return __delay(usec*cyc_per_usec); } unsigned long __udelay(unsigned long usecs) { return __const_udelay(usecs * 0x000010c6); /* 2**32 / 1000000 */ } unsigned long __ndelay(unsigned long nsecs) { return __const_udelay(nsecs * 0x00005); /* 2**32 / 1000000000 (rounded up) */ } int main(void) { unsigned long time[7] = {1,2,5,10,20,50,100}; int i; for(i=0;i < 7; i++){ LPJ=cyclone_lpj; printf("%3i usec: LPJ: %7lu __udelay: %5lu vs my_udelay: %5lu\n", time[i], LPJ, __udelay(time[i]), my_udelay(time[i])); LPJ=tsc_lpj; printf("%3i usec: LPJ: %lu __udelay: %5lu vs my_udelay: %5lu\n", time[i], LPJ, __udelay(time[i]), my_udelay(time[i])); printf("\n"); } return 0; }