usec = (unsigned long)(elapsed * (tick_nsec / 1000)) / LATCH; 
usec = (unsigned long)(elapsed / (CLOCK_TICK_RATE/1000000)); 
static unsigned long iop321_gettimeoffset(void){	unsigned long elapsed, usec;	u32 tisr1, tisr2;	/*	 * If an interrupt was pending before we read the timer,	 * we've already wrapped.  Factor this into the time.	 * If an interrupt was pending after we read the timer,	 * it may have wrapped between checking the interrupt	 * status and reading the timer.  Re-read the timer to	 * be sure its value is after the wrap.	 */	asm volatile("mrc p6, 0, %0, c6, c1, 0" : "=r" (tisr1));	elapsed = get_elapsed();	asm volatile("mrc p6, 0, %0, c6, c1, 0" : "=r" (tisr2));	if(tisr1 & 1)		elapsed += LATCH;	else if (tisr2 & 1)		elapsed = LATCH + get_elapsed();	/*	 * Now convert them to usec.	 */	usec = (unsigned long)(elapsed * (tick_nsec / 1000)) / LATCH;	return usec;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/7691d931aa55409ae3339d541ec0b87ab0a2adae/iop321-time.c/clean/arch/arm/mach-iop3xx/iop321-time.c