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
13static struct arch_real_time_data *sRealTimeData;
14
15void
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	__arm_setup_system_time(&sRealTimeData->system_time_conversion_factor);
27}
28
29
30bigtime_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