time.h 3.2 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/*
 * Copyright (C) 2001, 2002, MontaVista Software Inc.
 * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
 * Copyright (c) 2003  Maciej W. Rozycki
 *
 * include/asm-mips/time.h
 *     header file for the new style time.c file and time services.
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * Free Software Foundation;  either version 2 of the  License, or (at your
 * option) any later version.
 *
 * Please refer to Documentation/mips/time.README.
 */
#ifndef _ASM_TIME_H
#define _ASM_TIME_H

#include <linux/interrupt.h>
#include <linux/linkage.h>
#include <linux/ptrace.h>
#include <linux/rtc.h>
23 24 25
#include <linux/spinlock.h>

extern spinlock_t rtc_lock;
L
Linus Torvalds 已提交
26 27 28

/*
 * RTC ops.  By default, they point to no-RTC functions.
29 30 31
 *	rtc_mips_get_time - mktime(year, mon, day, hour, min, sec) in seconds.
 *	rtc_mips_set_time - reverse the above translation and set time to RTC.
 *	rtc_mips_set_mmss - similar to rtc_set_time, but only min and sec need
L
Linus Torvalds 已提交
32 33
 *			to be set.  Used by RTC sync-up.
 */
34 35 36
extern unsigned long (*rtc_mips_get_time)(void);
extern int (*rtc_mips_set_time)(unsigned long);
extern int (*rtc_mips_set_mmss)(unsigned long);
L
Linus Torvalds 已提交
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69

/*
 * Timer interrupt functions.
 * mips_timer_state is needed for high precision timer calibration.
 * mips_timer_ack may be NULL if the interrupt is self-recoverable.
 */
extern int (*mips_timer_state)(void);
extern void (*mips_timer_ack)(void);

/*
 * High precision timer functions.
 * If mips_hpt_read is NULL, an R4k-compatible timer setup is attempted.
 */
extern unsigned int (*mips_hpt_read)(void);
extern void (*mips_hpt_init)(unsigned int);

/*
 * to_tm() converts system time back to (year, mon, day, hour, min, sec).
 * It is intended to help implement rtc_set_time() functions.
 * Copied from PPC implementation.
 */
extern void to_tm(unsigned long tim, struct rtc_time *tm);

/*
 * do_gettimeoffset(). By default, this func pointer points to
 * do_null_gettimeoffset(), which leads to the same resolution as HZ.
 * Higher resolution versions are available, which give ~1us resolution.
 */
extern unsigned long (*do_gettimeoffset)(void);

/*
 * high-level timer interrupt routines.
 */
70
extern irqreturn_t timer_interrupt(int irq, void *dev_id);
L
Linus Torvalds 已提交
71 72 73 74 75 76 77 78 79

/*
 * the corresponding low-level timer interrupt routine.
 */
extern asmlinkage void ll_timer_interrupt(int irq, struct pt_regs *regs);

/*
 * profiling and process accouting is done separately in local_timer_interrupt
 */
80
extern void local_timer_interrupt(int irq, void *dev_id);
L
Linus Torvalds 已提交
81 82 83 84 85
extern asmlinkage void ll_local_timer_interrupt(int irq, struct pt_regs *regs);

/*
 * board specific routines required by time_init().
 * board_time_init is defaulted to NULL and can remain so.
86
 * plat_timer_setup must be setup properly in machine setup routine.
L
Linus Torvalds 已提交
87 88 89
 */
struct irqaction;
extern void (*board_time_init)(void);
90
extern void plat_timer_setup(struct irqaction *irq);
L
Linus Torvalds 已提交
91 92 93 94 95 96 97 98 99

/*
 * mips_hpt_frequency - must be set if you intend to use an R4k-compatible
 * counter as a timer interrupt source; otherwise it can be set up
 * automagically with an aid of mips_timer_state.
 */
extern unsigned int mips_hpt_frequency;

#endif /* _ASM_TIME_H */