PageRenderTime 15ms CodeModel.GetById 12ms app.highlight 1ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/x86_64/lib/delay.c

https://bitbucket.org/evzijst/gittest
C | 48 lines | 31 code | 8 blank | 9 comment | 0 complexity | 39de9276b3adf0121e318e073102a719 MD5 | raw file
 1/*
 2 *	Precise Delay Loops for x86-64
 3 *
 4 *	Copyright (C) 1993 Linus Torvalds
 5 *	Copyright (C) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
 6 *
 7 *	The __delay function must _NOT_ be inlined as its execution time
 8 *	depends wildly on alignment on many x86 processors. 
 9 */
10
11#include <linux/config.h>
12#include <linux/sched.h>
13#include <linux/delay.h>
14#include <asm/delay.h>
15
16#ifdef CONFIG_SMP
17#include <asm/smp.h>
18#endif
19
20int x86_udelay_tsc = 0;		/* Delay via TSC */
21
22void __delay(unsigned long loops)
23{
24	unsigned bclock, now;
25	
26	rdtscl(bclock);
27	do
28	{
29		rep_nop(); 
30		rdtscl(now);
31	}
32	while((now-bclock) < loops);
33}
34
35inline void __const_udelay(unsigned long xloops)
36{
37	__delay(((xloops * cpu_data[_smp_processor_id()].loops_per_jiffy) >> 32) * HZ);
38}
39
40void __udelay(unsigned long usecs)
41{
42	__const_udelay(usecs * 0x000010c6);  /* 2**32 / 1000000 */
43}
44
45void __ndelay(unsigned long nsecs)
46{
47	__const_udelay(nsecs * 0x00005);  /* 2**32 / 1000000000 (rounded up) */
48}