Here's a cpu_rnd_messybits() for hppa. This just steals from
itmr_get_timecount(). If we want to use the mfctl() macro, we need
to include <machine/cpufunc.h> into cpu.h. I don't know if we want
that, so I went with the explicit asm() instead.
Completely untested.
Index: sys/arch/hppa/hppa/machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/hppa/hppa/machdep.c,v
retrieving revision 1.259
diff -u -p -r1.259 machdep.c
--- sys/arch/hppa/hppa/machdep.c 31 May 2020 06:23:57 -0000 1.259
+++ sys/arch/hppa/hppa/machdep.c 5 Jun 2020 15:17:23 -0000
@@ -1496,12 +1496,3 @@ blink_led_timeout(void *vsc)
t = (((averunnable.ldavg[0] + FSCALE) * hz) >> (FSHIFT + 1));
timeout_add(&sc->bls_to, t);
}
-
-unsigned int
-cpu_rnd_messybits(void)
-{
- struct timespec ts;
-
- nanotime(&ts);
- return (ts.tv_nsec ^ (ts.tv_sec << 20));
-}
Index: sys/arch/hppa/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/hppa/include/cpu.h,v
retrieving revision 1.92
diff -u -p -r1.92 cpu.h
--- sys/arch/hppa/include/cpu.h 31 May 2020 06:23:57 -0000 1.92
+++ sys/arch/hppa/include/cpu.h 5 Jun 2020 15:17:23 -0000
@@ -54,6 +54,7 @@
#ifdef _KERNEL
#include <machine/trap.h>
#include <machine/frame.h>
+#include <machine/reg.h>
#endif /* _KERNEL */
/*
@@ -237,7 +238,16 @@ int copy_on_fault(void);
void switch_trampoline(void);
int cpu_dumpsize(void);
int cpu_dump(void);
-unsigned int cpu_rnd_messybits(void);
+
+static inline unsigned int
+cpu_rnd_messybits(void)
+{
+ unsigned int __itmr;
+
+ __asm volatile("mfctl %1,%0": "=r" (__itmr) : "i" (CR_ITMR));
+
+ return (__itmr);
+}
#ifdef MULTIPROCESSOR
void cpu_boot_secondary_processors(void);
--
Christian "naddy" Weisgerber [email protected]