ppc64: extern inline -> static inline
[opensuse:kernel.git] / include / asm-ppc64 / time.h
1 /*
2  * Common time prototypes and such for all ppc machines.
3  *
4  * Written by Cort Dougan (cort@cs.nmt.edu) to merge
5  * Paul Mackerras' version and mine for PReP and Pmac.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version
10  * 2 of the License, or (at your option) any later version.
11  */
12
13 #ifndef __PPC64_TIME_H
14 #define __PPC64_TIME_H
15
16 #ifdef __KERNEL__
17 #include <linux/types.h>
18 #include <linux/mc146818rtc.h>
19
20 #include <asm/processor.h>
21 #include <asm/paca.h>
22 #include <asm/iSeries/HvCall.h>
23
24 /* time.c */
25 extern unsigned long tb_ticks_per_jiffy;
26 extern unsigned long tb_ticks_per_usec;
27 extern unsigned long tb_ticks_per_sec;
28 extern unsigned long tb_to_xs;
29 extern unsigned      tb_to_us;
30 extern unsigned long tb_last_stamp;
31
32 struct rtc_time;
33 extern void to_tm(int tim, struct rtc_time * tm);
34 extern time_t last_rtc_update;
35
36 /*
37  * By putting all of this stuff into a single struct we 
38  * reduce the number of cache lines touched by do_gettimeofday.
39  * Both by collecting all of the data in one cache line and
40  * by touching only one TOC entry
41  */
42 struct gettimeofday_vars {
43         unsigned long tb_to_xs;
44         unsigned long stamp_xsec;
45 };
46
47 struct gettimeofday_struct {
48         unsigned long tb_orig_stamp;
49         unsigned long tb_ticks_per_sec;
50         struct gettimeofday_vars vars[2];
51         struct gettimeofday_vars * volatile varp;
52         unsigned      var_idx;
53         unsigned      tb_to_us;
54 };
55
56 struct div_result {
57         unsigned long result_high;
58         unsigned long result_low;
59 };
60
61 int via_calibrate_decr(void);
62
63 static __inline__ unsigned long get_tb(void)
64 {
65         return mftb();
66 }
67
68 /* Accessor functions for the decrementer register. */
69 static __inline__ unsigned int get_dec(void)
70 {
71         return (mfspr(SPRN_DEC));
72 }
73
74 static __inline__ void set_dec(int val)
75 {
76 #ifdef CONFIG_PPC_ISERIES
77         struct paca_struct *lpaca = get_paca();
78         int cur_dec;
79
80         if (lpaca->xLpPaca.xSharedProc) {
81                 lpaca->xLpPaca.xVirtualDecr = val;
82                 cur_dec = get_dec();
83                 if (cur_dec > val)
84                         HvCall_setVirtualDecr();
85         } else
86 #endif
87                 mtspr(SPRN_DEC, val);
88 }
89
90 static inline unsigned long tb_ticks_since(unsigned long tstamp)
91 {
92         return get_tb() - tstamp;
93 }
94
95 #define mulhwu(x,y) \
96 ({unsigned z; asm ("mulhwu %0,%1,%2" : "=r" (z) : "r" (x), "r" (y)); z;})
97 #define mulhdu(x,y) \
98 ({unsigned long z; asm ("mulhdu %0,%1,%2" : "=r" (z) : "r" (x), "r" (y)); z;})
99
100
101 unsigned mulhwu_scale_factor(unsigned, unsigned);
102 void div128_by_32( unsigned long dividend_high, unsigned long dividend_low,
103                    unsigned divisor, struct div_result *dr );
104 #endif /* __KERNEL__ */
105 #endif /* __PPC64_TIME_H */