xref: /haiku/src/system/libroot/os/arch/ppc/system_time.c (revision 262e0a636b40816127403066159df9c3e3791d9a)
1 /*
2  * Copyright 2006, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
3  * All rights reserved. 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 vint32 *sConversionFactor;
14 
15 void
16 __ppc_setup_system_time(vint32 *cvFactor)
17 {
18 	sConversionFactor = cvFactor;
19 }
20 
21 
22 // Note: We don't implement system_time() in assembly since the 64 bit
23 // divisions/multiplications are a bit tough to implement for a 32 bit
24 // PPC.
25 bigtime_t
26 system_time(void)
27 {
28 	uint64 timeBase = __ppc_get_time_base();
29 
30 	uint32 cv = *sConversionFactor;
31 	return (timeBase >> 32) * cv + (((timeBase & 0xffffffff) * cv) >> 32);
32 }
33