diff options
Diffstat (limited to 'arch/s390/include/asm/timex.h')
-rw-r--r-- | arch/s390/include/asm/timex.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/arch/s390/include/asm/timex.h b/arch/s390/include/asm/timex.h new file mode 100644 index 000000000000..d744c3d62de5 --- /dev/null +++ b/arch/s390/include/asm/timex.h | |||
@@ -0,0 +1,88 @@ | |||
1 | /* | ||
2 | * include/asm-s390/timex.h | ||
3 | * | ||
4 | * S390 version | ||
5 | * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation | ||
6 | * | ||
7 | * Derived from "include/asm-i386/timex.h" | ||
8 | * Copyright (C) 1992, Linus Torvalds | ||
9 | */ | ||
10 | |||
11 | #ifndef _ASM_S390_TIMEX_H | ||
12 | #define _ASM_S390_TIMEX_H | ||
13 | |||
14 | /* Inline functions for clock register access. */ | ||
15 | static inline int set_clock(__u64 time) | ||
16 | { | ||
17 | int cc; | ||
18 | |||
19 | asm volatile( | ||
20 | " sck 0(%2)\n" | ||
21 | " ipm %0\n" | ||
22 | " srl %0,28\n" | ||
23 | : "=d" (cc) : "m" (time), "a" (&time) : "cc"); | ||
24 | return cc; | ||
25 | } | ||
26 | |||
27 | static inline int store_clock(__u64 *time) | ||
28 | { | ||
29 | int cc; | ||
30 | |||
31 | asm volatile( | ||
32 | " stck 0(%2)\n" | ||
33 | " ipm %0\n" | ||
34 | " srl %0,28\n" | ||
35 | : "=d" (cc), "=m" (*time) : "a" (time) : "cc"); | ||
36 | return cc; | ||
37 | } | ||
38 | |||
39 | static inline void set_clock_comparator(__u64 time) | ||
40 | { | ||
41 | asm volatile("sckc 0(%1)" : : "m" (time), "a" (&time)); | ||
42 | } | ||
43 | |||
44 | static inline void store_clock_comparator(__u64 *time) | ||
45 | { | ||
46 | asm volatile("stckc 0(%1)" : "=m" (*time) : "a" (time)); | ||
47 | } | ||
48 | |||
49 | #define CLOCK_TICK_RATE 1193180 /* Underlying HZ */ | ||
50 | |||
51 | typedef unsigned long long cycles_t; | ||
52 | |||
53 | static inline unsigned long long get_clock (void) | ||
54 | { | ||
55 | unsigned long long clk; | ||
56 | |||
57 | #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2) | ||
58 | asm volatile("stck %0" : "=Q" (clk) : : "cc"); | ||
59 | #else /* __GNUC__ */ | ||
60 | asm volatile("stck 0(%1)" : "=m" (clk) : "a" (&clk) : "cc"); | ||
61 | #endif /* __GNUC__ */ | ||
62 | return clk; | ||
63 | } | ||
64 | |||
65 | static inline unsigned long long get_clock_xt(void) | ||
66 | { | ||
67 | unsigned char clk[16]; | ||
68 | |||
69 | #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2) | ||
70 | asm volatile("stcke %0" : "=Q" (clk) : : "cc"); | ||
71 | #else /* __GNUC__ */ | ||
72 | asm volatile("stcke 0(%1)" : "=m" (clk) | ||
73 | : "a" (clk) : "cc"); | ||
74 | #endif /* __GNUC__ */ | ||
75 | |||
76 | return *((unsigned long long *)&clk[1]); | ||
77 | } | ||
78 | |||
79 | static inline cycles_t get_cycles(void) | ||
80 | { | ||
81 | return (cycles_t) get_clock() >> 2; | ||
82 | } | ||
83 | |||
84 | int get_sync_clock(unsigned long long *clock); | ||
85 | void init_cpu_timer(void); | ||
86 | unsigned long long monotonic_clock(void); | ||
87 | |||
88 | #endif | ||