summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2009-12-23 06:52:12 +0000
committermarcel <marcel@FreeBSD.org>2009-12-23 06:52:12 +0000
commit23c3bda2df0c608f826b3c7bb89df2c2975f9214 (patch)
tree5674061ad293ecf646944e620d10b54b28df54fd
parent6c6778bb48b1c2300ef6ed51d5ef47cbeaa34830 (diff)
downloadFreeBSD-src-23c3bda2df0c608f826b3c7bb89df2c2975f9214.zip
FreeBSD-src-23c3bda2df0c608f826b3c7bb89df2c2975f9214.tar.gz
Calculate the average CPU clock frequency and export that through
the hw.freq.cpu sysctl variable. This can be used by ports that need to know "the" CPU frequency.
-rw-r--r--sys/sparc64/sparc64/identcpu.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/sys/sparc64/sparc64/identcpu.c b/sys/sparc64/sparc64/identcpu.c
index 020dc924..cdb09e6 100644
--- a/sys/sparc64/sparc64/identcpu.c
+++ b/sys/sparc64/sparc64/identcpu.c
@@ -27,6 +27,13 @@ static char cpu_model[128];
SYSCTL_STRING(_hw, HW_MODEL, model, CTLFLAG_RD,
cpu_model, 0, "Machine model");
+SYSCTL_NODE(_hw, OID_AUTO, freq, CTLFLAG_RD, 0, "");
+
+static u_int cpu_count;
+static u_int cpu_freq;
+SYSCTL_UINT(_hw_freq, OID_AUTO, cpu, CTLFLAG_RD, &cpu_freq, 0,
+ "CPU clock frequency");
+
int cpu_impl;
void
@@ -104,4 +111,11 @@ cpu_identify(u_long vers, u_int freq, u_int id)
printf(" mask=0x%lx maxtl=%ld maxwin=%ld\n", VER_MASK(vers),
VER_MAXTL(vers), VER_MAXWIN(vers));
}
+
+ /*
+ * Calculate the average CPU frequency.
+ */
+ freq = (freq + 500000ul) / 1000000ul;
+ cpu_freq = (cpu_freq * cpu_count + freq) / (cpu_count + 1);
+ cpu_count++;
}
OpenPOWER on IntegriCloud