summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/powerpc/shared
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2000-01-03 14:06:42 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2000-01-03 14:06:42 +0000
commit95273a610ff4ed4f4cf78d20a99f6a32acec8841 (patch)
tree13070b2dd02c204cbcfeedfc0cdaebb2e1e44e9e /c/src/lib/libcpu/powerpc/shared
parentUse shared coverhd.h. (diff)
downloadrtems-95273a610ff4ed4f4cf78d20a99f6a32acec8841.tar.bz2
Combination of coverhd.h cleanup and MVME23xx/MCP750 patch from Eric Valette
<valette@crf.canon.fr> and Jay Kulpinski <jskulpin@eng01.gdds.com>.
Diffstat (limited to 'c/src/lib/libcpu/powerpc/shared')
-rw-r--r--c/src/lib/libcpu/powerpc/shared/cpu.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/c/src/lib/libcpu/powerpc/shared/cpu.h b/c/src/lib/libcpu/powerpc/shared/cpu.h
index f071683972..3fe27f5496 100644
--- a/c/src/lib/libcpu/powerpc/shared/cpu.h
+++ b/c/src/lib/libcpu/powerpc/shared/cpu.h
@@ -191,6 +191,40 @@ extern ppc_cpu_id_t get_ppc_cpu_type();
extern ppc_cpu_id_t current_ppc_cpu;
extern ppc_cpu_revision_t get_ppc_cpu_revision();
extern ppc_cpu_revision_t current_ppc_revision;
+/*
+ * Routines to access the time base register
+ */
+
+static inline unsigned long long PPC_Get_timebase_register( void )
+{
+ unsigned long tbr_low;
+ unsigned long tbr_high;
+ unsigned long tbr_high_old;
+ unsigned long long tbr;
+
+ do {
+ asm volatile( "mftbu %0" : "=r" (tbr_high_old));
+ asm volatile( "mftb %0" : "=r" (tbr_low));
+ asm volatile( "mftbu %0" : "=r" (tbr_high));
+ } while ( tbr_high_old != tbr_high );
+
+ tbr = tbr_high;
+ tbr <<= 32;
+ tbr |= tbr_low;
+ return tbr;
+}
+
+static inline void PPC_Set_timebase_register (unsigned long long tbr)
+{
+ unsigned long tbr_low;
+ unsigned long tbr_high;
+
+ tbr_low = (tbr & 0xffffffff) ;
+ tbr_high = (tbr >> 32) & 0xffffffff;
+ asm volatile( "mtspr 284, %0" : : "r" (tbr_low));
+ asm volatile( "mtspr 285, %0" : : "r" (tbr_high));
+
+}
#endif
#define _CPU_MSR_GET( _msr_value ) \