[BACK]Return to delay.c CVS log [TXT][DIR] Up to [Development] / linux-2.6-xfs / arch / sh / lib

File: [Development] / linux-2.6-xfs / arch / sh / lib / delay.c (download)

Revision 1.5, Thu May 24 16:41:45 2007 UTC (10 years, 4 months ago) by tes.longdrop.melbourne.sgi.com
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +3 -2 lines

Merge up to 2.6.22-rc2
Merge of 2.6.x-xfs-melb:linux:28675b by kenmcd.

/*
 *	Precise Delay Loops for SuperH
 *
 *	Copyright (C) 1999 Niibe Yutaka & Kaz Kojima
 */

#include <linux/sched.h>
#include <linux/delay.h>

void __delay(unsigned long loops)
{
	__asm__ __volatile__(
		"tst	%0, %0\n\t"
		"1:\t"
		"bf/s	1b\n\t"
		" dt	%0"
		: "=r" (loops)
		: "0" (loops)
		: "t");
}

inline void __const_udelay(unsigned long xloops)
{
	__asm__("dmulu.l	%0, %2\n\t"
		"sts	mach, %0"
		: "=r" (xloops)
		: "0" (xloops),
		  "r" (HZ * cpu_data[raw_smp_processor_id()].loops_per_jiffy)
		: "macl", "mach");
	__delay(xloops);
}

void __udelay(unsigned long usecs)
{
	__const_udelay(usecs * 0x000010c6);  /* 2**32 / 1000000 */
}

void __ndelay(unsigned long nsecs)
{
	__const_udelay(nsecs * 0x00000005);
}