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 28typedef unsigned long long cycles_t; 29 30#if CHIP_HAS_SPLIT_CYCLE() 31cycles_t get_cycles(void); 32#define get_cycles_low() __insn_mfspr(SPR_CYCLE_LOW) 33#else 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 41cycles_t get_clock_rate(void); 42 43/* Convert nanoseconds to core clock cycles. */ 44cycles_t ns2cycles(unsigned long nsecs); 45 46/* Called at cpu initialization to set some low-level constants. */ 47void setup_clock(void); 48 49/* Called at cpu initialization to start the tile-timer clock device. */ 50void setup_tile_timer(void); 51 52#endif /* _ASM_TILE_TIMEX_H */ 53