GNU Linux-libre 5.15.72-gnu
[releases.git] / arch / powerpc / kernel / vdso32 / gettimeofday.S
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Userland implementation of gettimeofday() for 32 bits processes in a
4  * ppc64 kernel for use in the vDSO
5  *
6  * Copyright (C) 2004 Benjamin Herrenschmuidt (benh@kernel.crashing.org,
7  *                    IBM Corp.
8  */
9 #include <asm/processor.h>
10 #include <asm/ppc_asm.h>
11 #include <asm/vdso.h>
12 #include <asm/vdso_datapage.h>
13 #include <asm/asm-offsets.h>
14 #include <asm/unistd.h>
15 #include <asm/vdso/gettimeofday.h>
16
17         .text
18 /*
19  * Exact prototype of gettimeofday
20  *
21  * int __kernel_gettimeofday(struct timeval *tv, struct timezone *tz);
22  *
23  */
24 V_FUNCTION_BEGIN(__kernel_gettimeofday)
25         cvdso_call __c_kernel_gettimeofday
26 V_FUNCTION_END(__kernel_gettimeofday)
27
28 /*
29  * Exact prototype of clock_gettime()
30  *
31  * int __kernel_clock_gettime(clockid_t clock_id, struct timespec *tp);
32  *
33  */
34 V_FUNCTION_BEGIN(__kernel_clock_gettime)
35         cvdso_call __c_kernel_clock_gettime
36 V_FUNCTION_END(__kernel_clock_gettime)
37
38 /*
39  * Exact prototype of clock_gettime64()
40  *
41  * int __kernel_clock_gettime64(clockid_t clock_id, struct __timespec64 *ts);
42  *
43  */
44 V_FUNCTION_BEGIN(__kernel_clock_gettime64)
45         cvdso_call __c_kernel_clock_gettime64
46 V_FUNCTION_END(__kernel_clock_gettime64)
47
48 /*
49  * Exact prototype of clock_getres()
50  *
51  * int __kernel_clock_getres(clockid_t clock_id, struct timespec *res);
52  *
53  */
54 V_FUNCTION_BEGIN(__kernel_clock_getres)
55         cvdso_call __c_kernel_clock_getres
56 V_FUNCTION_END(__kernel_clock_getres)
57
58
59 /*
60  * Exact prototype of time()
61  *
62  * time_t time(time *t);
63  *
64  */
65 V_FUNCTION_BEGIN(__kernel_time)
66         cvdso_call_time __c_kernel_time
67 V_FUNCTION_END(__kernel_time)
68
69 /* Routines for restoring integer registers, called by the compiler.  */
70 /* Called with r11 pointing to the stack header word of the caller of the */
71 /* function, just beyond the end of the integer restore area.  */
72 _GLOBAL(_restgpr_31_x)
73 _GLOBAL(_rest32gpr_31_x)
74         lwz     r0,4(r11)
75         lwz     r31,-4(r11)
76         mtlr    r0
77         mr      r1,r11
78         blr