Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / clients / net-snk / kernel / timer.c
diff --git a/qemu/roms/SLOF/clients/net-snk/kernel/timer.c b/qemu/roms/SLOF/clients/net-snk/kernel/timer.c
new file mode 100644 (file)
index 0000000..2d87058
--- /dev/null
@@ -0,0 +1,39 @@
+/******************************************************************************
+ * Copyright (c) 2004, 2008 IBM Corporation
+ * All rights reserved.
+ * This program and the accompanying materials
+ * are made available under the terms of the BSD License
+ * which accompanies this distribution, and is available at
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * Contributors:
+ *     IBM Corporation - initial implementation
+ *****************************************************************************/
+
+#include <stdint.h>
+#include "kernel.h"
+
+//*******************************************************************
+// variable "tb_freq" contains the frequency in Hz
+// and is read from the device tree (setup by LLFW) in "init.c"
+uint64_t tb_freq;
+
+//-------------------------------------------------------------------
+// Read the current timebase
+uint64_t get_time(void)
+{
+    uint64_t act;
+
+    __asm__ __volatile__( 
+        "0:     mftbu   %0 ;\
+                mftbl   %%r0 ; \
+                mftbu   %%r4 ; \
+                cmpw    %0,%%r4 ; \
+                bne     0b; \
+                sldi    %0,%0,32; \
+                or      %0,%0,%%r0"
+        : "=r"(act)
+        : /* no inputs */
+        : "r0", "r4");
+    return act;
+}