xref: /wlan-dirver/qca-wifi-host-cmn/qdf/linux/src/qdf_time.c (revision 10fe6982eb7194813d8d8335da336bbcd531b22e)
1 /*
2  * Copyright (c) 2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**
21  * DOC: qdf_time
22  * QCA driver framework (QDF) timer APIs
23  */
24 
25 #include <i_qdf_time.h>
26 #include "qdf_time.h"
27 #include <qdf_module.h>
28 
29 qdf_ktime_t qdf_ns_to_ktime(uint64_t ns)
30 {
31 	return __qdf_ns_to_ktime(ns);
32 }
33 
34 qdf_export_symbol(qdf_ns_to_ktime);
35 
36 qdf_ktime_t qdf_ktime_add(qdf_ktime_t ktime1, qdf_ktime_t ktime2)
37 {
38 	return __qdf_ktime_add(ktime1, ktime2);
39 }
40 
41 qdf_export_symbol(qdf_ktime_add);
42 
43 qdf_ktime_t qdf_ktime_get(void)
44 {
45 	return __qdf_ktime_get();
46 }
47 
48 qdf_export_symbol(qdf_ktime_get);
49 
50 qdf_ktime_t qdf_ktime_real_get(void)
51 {
52 	return __qdf_ktime_real_get();
53 }
54 
55 qdf_export_symbol(qdf_ktime_real_get);
56 
57 qdf_ktime_t qdf_ktime_add_ns(qdf_ktime_t ktime, int64_t ns)
58 {
59 	return __qdf_ktime_add_ns(ktime, ns);
60 }
61 
62 qdf_export_symbol(qdf_ktime_add_ns);
63 
64 int64_t qdf_ktime_to_ms(qdf_ktime_t ktime)
65 {
66 	return __qdf_ktime_to_ms(ktime);
67 }
68 
69 qdf_export_symbol(qdf_ktime_to_ms);
70 
71 int64_t qdf_ktime_to_us(qdf_ktime_t ktime)
72 {
73 	return __qdf_time_ktime_to_us(ktime);
74 }
75 
76 qdf_export_symbol(qdf_ktime_to_us);
77 
78 int64_t qdf_ktime_to_ns(qdf_ktime_t ktime)
79 {
80 	return __qdf_ktime_to_ns(ktime);
81 }
82 
83 qdf_export_symbol(qdf_ktime_to_ns);
84 
85 qdf_time_t qdf_system_ticks(void)
86 {
87 	return __qdf_system_ticks();
88 }
89 
90 qdf_export_symbol(qdf_system_ticks);
91 
92 uint32_t qdf_system_ticks_to_msecs(unsigned long clock_ticks)
93 {
94 	return __qdf_system_ticks_to_msecs(clock_ticks);
95 }
96 
97 qdf_export_symbol(qdf_system_ticks_to_msecs);
98 
99 uint32_t qdf_system_ticks_to_nsecs(unsigned long clock_ticks)
100 {
101 	return __qdf_system_ticks_to_nsecs(clock_ticks);
102 }
103 
104 qdf_export_symbol(qdf_system_ticks_to_nsecs);
105 
106 qdf_time_t qdf_system_msecs_to_ticks(uint32_t msecs)
107 {
108 	return __qdf_system_msecs_to_ticks(msecs);
109 }
110 
111 qdf_export_symbol(qdf_system_msecs_to_ticks);
112 
113 qdf_time_t qdf_get_system_uptime(void)
114 {
115 	return __qdf_get_system_uptime();
116 }
117 
118 qdf_export_symbol(qdf_get_system_uptime);
119 
120 uint64_t qdf_get_bootbased_boottime_ns(void)
121 {
122 	return __qdf_get_bootbased_boottime_ns();
123 }
124 
125 qdf_export_symbol(qdf_get_bootbased_boottime_ns);
126 
127 unsigned long qdf_get_system_timestamp(void)
128 {
129 	return __qdf_get_system_timestamp();
130 }
131 
132 qdf_export_symbol(qdf_get_system_timestamp);
133 
134 void qdf_udelay(int usecs)
135 {
136 	__qdf_udelay(usecs);
137 }
138 
139 qdf_export_symbol(qdf_udelay);
140 
141 void qdf_mdelay(int msecs)
142 {
143 	__qdf_mdelay(msecs);
144 }
145 
146 qdf_export_symbol(qdf_mdelay);
147 
148 bool qdf_system_time_after(qdf_time_t a, qdf_time_t b)
149 {
150 	return __qdf_system_time_after(a, b);
151 }
152 
153 qdf_export_symbol(qdf_system_time_after);
154 
155 bool qdf_system_time_before(qdf_time_t a, qdf_time_t b)
156 {
157 	return __qdf_system_time_before(a, b);
158 }
159 
160 qdf_export_symbol(qdf_system_time_before);
161 
162 bool qdf_system_time_after_eq(qdf_time_t a, qdf_time_t b)
163 {
164 	return __qdf_system_time_after_eq(a, b);
165 }
166 
167 qdf_export_symbol(qdf_system_time_after_eq);
168 
169 #ifdef MSM_PLATFORM
170 uint64_t qdf_log_timestamp_to_usecs(uint64_t time)
171 {
172 	/*
173 	 * Try to preserve precision by multiplying by 10 first.
174 	 * If that would cause a wrap around, divide first instead.
175 	 */
176 	if (time * 10 < time) {
177 		do_div(time, QDF_LOG_TIMESTAMP_CYCLES_PER_10_US);
178 		return time * 10;
179 	}
180 
181 	time = time * 10;
182 	do_div(time, QDF_LOG_TIMESTAMP_CYCLES_PER_10_US);
183 
184 	return time;
185 }
186 
187 qdf_export_symbol(qdf_log_timestamp_to_usecs);
188 #else
189 uint64_t qdf_log_timestamp_to_usecs(uint64_t time)
190 {
191 	/* timestamps are already in micro seconds */
192 	return time;
193 }
194 
195 qdf_export_symbol(qdf_log_timestamp_to_usecs);
196 #endif /* end of MSM_PLATFORM */
197 
198 void qdf_log_timestamp_to_secs(uint64_t time, uint64_t *secs,
199 			       uint64_t *usecs)
200 {
201 	*secs = qdf_log_timestamp_to_usecs(time);
202 	*usecs = do_div(*secs, 1000000ul);
203 }
204 
205 qdf_export_symbol(qdf_log_timestamp_to_secs);
206 
207 uint64_t qdf_usecs_to_log_timestamp(uint64_t usecs)
208 {
209 	uint64_t ts;
210 
211 	ts = (usecs * QDF_LOG_TIMESTAMP_CYCLES_PER_10_US);
212 
213 	return do_div(ts, 10ul);
214 }
215 
216 qdf_export_symbol(qdf_usecs_to_log_timestamp);
217 
218 uint64_t qdf_get_log_timestamp(void)
219 {
220 	return __qdf_get_log_timestamp();
221 }
222 
223 qdf_export_symbol(qdf_get_log_timestamp);
224 
225 uint64_t qdf_get_log_timestamp_usecs(void)
226 {
227 	return qdf_log_timestamp_to_usecs(qdf_get_log_timestamp());
228 }
229 
230 qdf_export_symbol(qdf_get_log_timestamp_usecs);
231 
232 uint64_t qdf_get_monotonic_boottime(void)
233 {
234 	return __qdf_get_monotonic_boottime();
235 }
236 
237 qdf_export_symbol(qdf_get_monotonic_boottime);
238 
239 void qdf_time_ktime_get_real_time(qdf_timespec_t *ts)
240 {
241 	return __qdf_time_ktime_get_real_time(ts);
242 }
243 
244 qdf_export_symbol(qdf_time_ktime_get_real_time);
245 
246 unsigned long long qdf_time_sched_clock(void)
247 {
248 	return __qdf_time_sched_clock();
249 }
250 
251 qdf_export_symbol(qdf_time_sched_clock);
252