Annotation of Gnu-Mach/linux/src/arch/i386/lib/delay.c, revision 1.1

1.1     ! root        1: /*
        !             2:  *     Precise Delay Loops for i386
        !             3:  *
        !             4:  *     Copyright (C) 1993 Linus Torvalds
        !             5:  *     Copyright (C) 1997 Martin Mares <[email protected]>
        !             6:  *
        !             7:  *     The __delay function must _NOT_ be inlined as its execution time
        !             8:  *     depends wildly on alignment on many x86 processors. The additional
        !             9:  *     jump magic is needed to get the timing stable on all the CPU's
        !            10:  *     we have to worry about.
        !            11:  */
        !            12: 
        !            13: #include <linux/sched.h>
        !            14: #include <linux/delay.h>
        !            15: 
        !            16: #ifdef __SMP__
        !            17: #include <asm/smp.h>
        !            18: #endif
        !            19: 
        !            20: void __delay(unsigned long loops)
        !            21: {
        !            22:        int d0;
        !            23:        __asm__ __volatile__(
        !            24:                "\tjmp 1f\n"
        !            25:                ".align 16\n"
        !            26:                "1:\tjmp 2f\n"
        !            27:                ".align 16\n"
        !            28:                "2:\tdecl %0\n\tjns 2b"
        !            29:                :"=&a" (d0)
        !            30:                :"0" (loops));
        !            31: }
        !            32: 
        !            33: inline void __const_udelay(unsigned long xloops)
        !            34: {
        !            35:        int d0;
        !            36:        __asm__("mull %0"
        !            37:                :"=d" (xloops), "=&a" (d0)
        !            38:                :"1" (xloops),"0" (loops_per_sec));
        !            39:         __delay(xloops);
        !            40: }
        !            41: 
        !            42: void __udelay(unsigned long usecs)
        !            43: {
        !            44:        __const_udelay(usecs * 0x000010c6);  /* 2**32 / 1000000 */
        !            45: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.