1#ifndef _ASM_POWERPC_TIMEX_H
2#define _ASM_POWERPC_TIMEX_H
3
4#ifdef __KERNEL__
5
6/*
7 * PowerPC architecture timex specifications
8 */
9
10#include <asm/cputable.h>
11#include <asm/reg.h>
12
13#define CLOCK_TICK_RATE	1024000 /* Underlying HZ */
14
15typedef unsigned long cycles_t;
16
17static inline cycles_t get_cycles(void)
18{
19#ifdef __powerpc64__
20	return mftb();
21#else
22	cycles_t ret;
23
24	/*
25	 * For the "cycle" counter we use the timebase lower half.
26	 * Currently only used on SMP.
27	 */
28
29	ret = 0;
30
31	__asm__ __volatile__(
32#ifdef CONFIG_8xx
33		"97:	mftb %0\n"
34#else
35		"97:	mfspr %0, %2\n"
36#endif
37		"99:\n"
38		".section __ftr_fixup,\"a\"\n"
39		".align 2\n"
40		"98:\n"
41		"	.long %1\n"
42		"	.long 0\n"
43		"	.long 97b-98b\n"
44		"	.long 99b-98b\n"
45		"	.long 0\n"
46		"	.long 0\n"
47		".previous"
48#ifdef CONFIG_8xx
49		: "=r" (ret) : "i" (CPU_FTR_601));
50#else
51		: "=r" (ret) : "i" (CPU_FTR_601), "i" (SPRN_TBRL));
52#endif
53	return ret;
54#endif
55}
56
57#endif	/* __KERNEL__ */
58#endif	/* _ASM_POWERPC_TIMEX_H */
59