On Wed, 8 Jul 2020 14:26:02 +0200 (CEST)
Mark Kettenis <[email protected]> wrote:

> > From: Paul Irofti <[email protected]>
> > Reads OK to me. Please make the adjustments to static functions that 
> > kettenis@ mentioned in the alpha thread.
> 
> To add to that:
> 
> * TC_LAST isn't needed, so kill that
> * tc_get_timecount
> 
> Also in the sparc64 I did an exact copy of the kernel implementation
> of the functions to read the counter.  I only made them static inline.
> That makes it easier to verify that they are indeed identical.

Here is the diff for macppc after I drop TC_LAST, recopy usertc.c from
amd64 (so tc_get_timecount is now static), and copy ppc_mftbl from
/sys/arch/powerpc/include/cpu.h

OK to commit?

Index: lib/libc/arch/powerpc/gen/usertc.c
===================================================================
RCS file: /cvs/src/lib/libc/arch/powerpc/gen/usertc.c,v
retrieving revision 1.1
diff -u -p -r1.1 usertc.c
--- lib/libc/arch/powerpc/gen/usertc.c  6 Jul 2020 13:33:05 -0000       1.1
+++ lib/libc/arch/powerpc/gen/usertc.c  9 Jul 2020 21:41:47 -0000
@@ -1,4 +1,4 @@
-/*     $OpenBSD: usertc.c,v 1.1 2020/07/06 13:33:05 pirofti Exp $      */
+/*     $OpenBSD: usertc.c,v 1.2 2020/07/08 09:17:48 kettenis Exp $ */
 /*
  * Copyright (c) 2020 Paul Irofti <[email protected]>
  *
@@ -18,4 +18,24 @@
 #include <sys/types.h>
 #include <sys/timetc.h>
 
-int (*const _tc_get_timecount)(struct timekeep *, u_int *) = NULL;
+static __inline u_int32_t
+ppc_mftbl (void)
+{
+       int ret;
+       __asm volatile ("mftb %0" : "=r" (ret));
+       return ret;
+}
+
+static int
+tc_get_timecount(struct timekeep *tk, u_int *tc)
+{
+       switch (tk->tk_user) {
+       case TC_TB:
+               *tc = ppc_mftbl();
+               return 0;
+       }
+
+       return -1;
+}
+
+int (*const _tc_get_timecount)(struct timekeep *, u_int *) = tc_get_timecount;
Index: sys/arch/macppc/include/timetc.h
===================================================================
RCS file: /cvs/src/sys/arch/macppc/include/timetc.h,v
retrieving revision 1.1
diff -u -p -r1.1 timetc.h
--- sys/arch/macppc/include/timetc.h    6 Jul 2020 13:33:07 -0000       1.1
+++ sys/arch/macppc/include/timetc.h    9 Jul 2020 21:41:48 -0000
@@ -18,6 +18,6 @@
 #ifndef _MACHINE_TIMETC_H_
 #define _MACHINE_TIMETC_H_
 
-#define        TC_LAST 0
+#define        TC_TB   1
 
 #endif /* _MACHINE_TIMETC_H_ */
Index: sys/arch/macppc/macppc/clock.c
===================================================================
RCS file: /cvs/src/sys/arch/macppc/macppc/clock.c,v
retrieving revision 1.44
diff -u -p -r1.44 clock.c
--- sys/arch/macppc/macppc/clock.c      6 Jul 2020 13:33:08 -0000       1.44
+++ sys/arch/macppc/macppc/clock.c      9 Jul 2020 21:41:48 -0000
@@ -57,7 +57,7 @@ u_int32_t ns_per_tick = 320;
 static int32_t ticks_per_intr;
 
 static struct timecounter tb_timecounter = {
-       tb_get_timecount, NULL, 0x7fffffff, 0, "tb", 0, NULL, 0
+       tb_get_timecount, NULL, 0x7fffffff, 0, "tb", 0, NULL, TC_TB
 };
 
 /* calibrate the timecounter frequency for the listed models */

Reply via email to