xref: /haiku/src/system/libroot/os/arch/ppc/time.c (revision 1d9d47fc72028bb71b5f232a877231e59cfe2438)
1 /*
2  * Copyright 2006, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #include <OS.h>
7 
8 #include <arch_cpu.h>
9 #include <libroot_private.h>
10 #include <real_time_data.h>
11 
12 
13 static struct arch_real_time_data *sRealTimeData;
14 
15 void
16 __arch_init_time(struct real_time_data *data, bool setDefaults)
17 {
18 	sRealTimeData = &data->arch_data;
19 
20 	if (setDefaults) {
21 		sRealTimeData->data[0].system_time_offset = 0;
22 		sRealTimeData->system_time_conversion_factor = 1000000000LL;
23 		sRealTimeData->version = 0;
24 	}
25 
26 	__ppc_setup_system_time(&sRealTimeData->system_time_conversion_factor);
27 }
28 
29 
30 bigtime_t
31 __arch_get_system_time_offset(struct real_time_data *data)
32 {
33 	int32 version;
34 	bigtime_t offset;
35 	do {
36 		version = sRealTimeData->version;
37 		offset = sRealTimeData->data[version % 2].system_time_offset;
38 	} while (version != sRealTimeData->version);
39 
40 	return offset;
41 }
42 
43