1 /* 2 * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana 3 * University Research and Technology 4 * Corporation. All rights reserved. 5 * Copyright (c) 2004-2005 The University of Tennessee and The University 6 * of Tennessee Research Foundation. All rights 7 * reserved. 8 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 9 * University of Stuttgart. All rights reserved. 10 * Copyright (c) 2004-2005 The Regents of the University of California. 11 * All rights reserved. 12 * $COPYRIGHT$ 13 * 14 * Additional copyrights may follow 15 * 16 * $HEADER$ 17 */ 18 19 #ifndef OPAL_SYS_ARCH_TIMER_H 20 #define OPAL_SYS_ARCH_TIMER_H 1 21 22 23 typedef uint64_t opal_timer_t; 24 25 26 #if OPAL_GCC_INLINE_ASSEMBLY 27 28 static inline opal_timer_t opal_sys_timer_get_cycles(void)29opal_sys_timer_get_cycles(void) 30 { 31 unsigned int tbl, tbu0, tbu1; 32 33 do { 34 __asm__ __volatile__ ("mftbu %0" : "=r"(tbu0)); 35 __asm__ __volatile__ ("mftb %0" : "=r"(tbl)); 36 __asm__ __volatile__ ("mftbu %0" : "=r"(tbu1)); 37 } while (tbu0 != tbu1); 38 39 return (((unsigned long long)tbu0) << 32) | tbl; 40 } 41 42 #define OPAL_HAVE_SYS_TIMER_GET_CYCLES 1 43 44 #else 45 46 opal_timer_t opal_sys_timer_get_cycles(void); 47 48 #define OPAL_HAVE_SYS_TIMER_GET_CYCLES 1 49 50 #endif /* OPAL_GCC_INLINE_ASSEMBLY */ 51 52 #endif /* ! OPAL_SYS_ARCH_TIMER_H */ 53