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 15 typedef unsigned long cycles_t; 16 17 static 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