1 /* 2 * Copyright 2010 Tilera Corporation. All Rights Reserved. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation, version 2. 7 * 8 * This program is distributed in the hope that it will be useful, but 9 * WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 * NON INFRINGEMENT. See the GNU General Public License for 12 * more details. 13 */ 14 15 #ifndef _ASM_TILE_TIMEX_H 16 #define _ASM_TILE_TIMEX_H 17 18 /* 19 * This rate should be a multiple of the possible HZ values (100, 250, 1000) 20 * and a fraction of the possible hardware timer frequencies. Our timer 21 * frequency is highly tunable but also quite precise, so for the primary use 22 * of this value (setting ACT_HZ from HZ) we just pick a value that causes 23 * ACT_HZ to be set to HZ. We make the value somewhat large just to be 24 * more robust in case someone tries out a new value of HZ. 25 */ 26 #define CLOCK_TICK_RATE 1000000 27 28 typedef unsigned long long cycles_t; 29 30 #if CHIP_HAS_SPLIT_CYCLE() 31 cycles_t get_cycles(void); 32 #define get_cycles_low() __insn_mfspr(SPR_CYCLE_LOW) 33 #else get_cycles(void)34static inline cycles_t get_cycles(void) 35 { 36 return __insn_mfspr(SPR_CYCLE); 37 } 38 #define get_cycles_low() __insn_mfspr(SPR_CYCLE) /* just get all 64 bits */ 39 #endif 40 41 cycles_t get_clock_rate(void); 42 43 /* Convert nanoseconds to core clock cycles. */ 44 cycles_t ns2cycles(unsigned long nsecs); 45 46 /* Called at cpu initialization to set some low-level constants. */ 47 void setup_clock(void); 48 49 /* Called at cpu initialization to start the tile-timer clock device. */ 50 void setup_tile_timer(void); 51 52 #endif /* _ASM_TILE_TIMEX_H */ 53