aboutsummaryrefslogtreecommitdiff
path: root/sys/powerpc/include/cpufunc.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/powerpc/include/cpufunc.h')
-rw-r--r--sys/powerpc/include/cpufunc.h38
1 files changed, 31 insertions, 7 deletions
diff --git a/sys/powerpc/include/cpufunc.h b/sys/powerpc/include/cpufunc.h
index 66b5df38ad6f..2bf1161a29f9 100644
--- a/sys/powerpc/include/cpufunc.h
+++ b/sys/powerpc/include/cpufunc.h
@@ -71,7 +71,7 @@ mtmsr(register_t value)
static __inline register_t
mfmsr(void)
{
- register_t value;
+ register_t value;
__asm __volatile ("mfmsr %0" : "=r"(value));
@@ -88,7 +88,7 @@ mtsrin(vm_offset_t va, register_t value)
static __inline register_t
mfsrin(vm_offset_t va)
{
- register_t value;
+ register_t value;
__asm __volatile ("mfsrin %0,%1" : "=r"(value) : "r"(va));
@@ -105,7 +105,7 @@ mtdec(register_t value)
static __inline register_t
mfdec(void)
{
- register_t value;
+ register_t value;
__asm __volatile ("mfdec %0" : "=r"(value));
@@ -115,13 +115,37 @@ mfdec(void)
static __inline register_t
mfpvr(void)
{
- register_t value;
+ register_t value;
__asm __volatile ("mfpvr %0" : "=r"(value));
return (value);
}
+static __inline u_quad_t
+mftb(void)
+{
+ u_quad_t tb;
+ uint32_t *tbup = (uint32_t *)&tb;
+ uint32_t *tblp = tbup + 1;
+
+ do {
+ *tbup = mfspr(TBR_TBU);
+ *tblp = mfspr(TBR_TBL);
+ } while (*tbup != mfspr(TBR_TBU));
+
+ return (tb);
+}
+
+static __inline void
+mttb(u_quad_t time)
+{
+
+ mtspr(TBR_TBWL, 0);
+ mtspr(TBR_TBWU, (uint32_t)(time >> 32));
+ mtspr(TBR_TBWL, (uint32_t)(time & 0xffffffff));
+}
+
static __inline void
eieio(void)
{
@@ -146,7 +170,7 @@ powerpc_sync(void)
static __inline register_t
intr_disable(void)
{
- register_t msr;
+ register_t msr;
msr = mfmsr();
mtmsr(msr & ~PSL_EE);
@@ -163,11 +187,11 @@ intr_restore(register_t msr)
static __inline struct pcpu *
powerpc_get_pcpup(void)
{
- struct pcpu *ret;
+ struct pcpu *ret;
__asm __volatile("mfsprg %0, 0" : "=r"(ret));
- return(ret);
+ return (ret);
}
#endif /* _KERNEL */