linux-headers/arch/e2k/include/asm-l/l_timer.h

104 lines
3.3 KiB
C

#ifndef _L_ASM_L_TIMER_H
#define _L_ASM_L_TIMER_H
#include <linux/types.h>
/*
* Elbrus timer
*/
extern struct clock_event_device *global_clock_event;
extern int get_lt_timer(void);
extern u32 lt_read(void);
extern struct clocksource lt_cs;
/* New timer registers */
#define PIT_COUNTER_LIMIT 0x00
#define PIT_COUNTER_START_VALUE 0x04
#define PIT_COUNTER 0x08
#define PIT_COUNTER_CONTROL 0x0c
#define PIT_WD_COUNTER 0x10
#define PIT_WD_COUNTER_LOW PIT_WD_COUNTER
#define PIT_WD_COUNTER_HIGH (PIT_WD_COUNTER_LOW + 0x04)
#define PIT_WD_LIMIT 0x18
#define PIT_POWER_COUNTER 0x1c
#define PIT_POWER_COUNTER_LOW PIT_POWER_COUNTER
#define PIT_POWER_COUNTER_HIGH (PIT_POWER_COUNTER_LOW + 0x04)
#define PIT_WD_CONTROL 0x24
#define PIT_RESET_COUNTER 0x28
#define PIT_RESET_COUNTER_LOW PIT_RESET_COUNTER
#define PIT_RESET_COUNTER_HIGH (PIT_RESET_COUNTER_LOW + 0x04)
typedef struct lt_regs {
u32 counter_limit; /* timer counter limit value */
u32 counter_start; /* start value of counter */
u32 counter; /* timer counter */
u32 counter_cntr; /* timer control register */
u32 wd_counter; /* watchdog counter */
u32 wd_prescaler; /* watchdog prescaler */
u32 wd_limit; /* watchdog limit */
u32 power_counter_lo; /* power counter low bits */
u32 power_counter_hi; /* power counter high bits */
u32 wd_control; /* watchdog control register */
u32 reset_counter_lo; /* reset counter low bits */
u32 reset_counter_hi; /* reset counter low bits */
} lt_regs_t;
extern unsigned long long lt_phys_base;
extern lt_regs_t *lt_regs;
extern void setup_lt_timer(void);
extern int __init init_lt_clocksource(void);
/* counters registers structure */
#define LT_COUNTER_SHIFT 9 /* [30: 9] counters value */
#define LT_COUNTER_LIMIT_SHIFT 31 /* [31] Limit bit */
#define LT_COUNTER_LIMIT_BIT (1 << LT_COUNTER_LIMIT_SHIFT)
#define LT_WRITE_COUNTER_VALUE(count) ((count) << LT_COUNTER_SHIFT)
#define LT_READ_COUNTER_VALUE(count) ((count) >> LT_COUNTER_SHIFT)
#define LT_NSEC_PER_COUNTER_INCR 100 /* 10 MHz == 100 nunosec */
/* counter control register structure */
#define LT_COUNTER_CNTR_START 0x00000001 /* start/stop timer */
#define LT_COUNTER_CNTR_INVERTL 0x00000002 /* invert limit bit */
#define LT_COUNTER_CNTR_LINIT 0x00000004 /* Limit bit initial state */
/* 1 - limit bit set to 1 */
#define LT_COUNTER_CNTR_LAUNCH (LT_COUNTER_CNTR_START)
#define LT_INVERT_COUNTER_CNTR_LAUNCH (LT_COUNTER_CNTR_LAUNCH | \
LT_COUNTER_CNTR_INVERTL | \
LT_COUNTER_CNTR_LINIT)
#define LT_COUNTER_CNTR_STOP (0)
#define WD_CLOCK_TICK_RATE 10000000L
#define WD_LATCH(tick_rate) (((tick_rate) + HZ/2) / HZ)
#define WD_LIMIT_SHIFT 12
#define WD_WRITE_COUNTER_VALUE(count) (count)
#define WD_READ_COUNTER_VALUE(count) ((count) << WD_LIMIT_SHIFT)
#define WD_SET_COUNTER_VAL(sek) \
(WD_WRITE_COUNTER_VALUE(WD_CLOCK_TICK_RATE * (sek)))
#define WD_INTR_MODE 0x1
#define WD_ENABLE 0x2
#define WD_EVENT 0x4
#define WD_COUNTER_BASE 0x10
/* System timer Registers (structure see asm/l_timer_regs.h) */
#define COUNTER_LIMIT 0x00
#define COUNTER_START_VALUE 0x04
#define L_COUNTER 0x08
#define COUNTER_CONTROL 0x0c
#define WD_COUNTER_L 0x10
#define WD_COUNTER_H 0x14
#define WD_LIMIT 0x18
#define POWER_COUNTER_L 0x1c
#define POWER_COUNTER_H 0x20
#define WD_CONTROL 0x24
#define RESET_COUNTER_L 0x28
#define RESET_COUNTER_H 0x2c
#endif /* _L_ASM_L_TIMER_H */