From 4039042e948eb4d9009c8ae55d7c2ef2fc069d2e Mon Sep 17 00:00:00 2001 From: John Chandy Date: Wed, 8 Jul 2009 20:26:51 -0400 Subject: [PATCH] usd-util: FreeBSD && MacOSX port of get_mhz Use: "sysctl -n hw.cpufrequency" in MacOSX and: "sysctl -n dev.cpu.0.freq" in FreeBSD to retrieve the mhz of the running system Signed-off-by: John Chandy Signed-off-by: Boaz Harrosh --- osd-util/osd-util.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/osd-util/osd-util.c b/osd-util/osd-util.c index de9187e..4dae0be 100644 --- a/osd-util/osd-util.c +++ b/osd-util/osd-util.c @@ -636,9 +636,29 @@ double median(double *v, int N) double get_mhz(void) { FILE *fp; - char s[1024], *cp; - int found = 0; + char s[1024]; double mhz; +#if defined(__FreeBSD__) || defined(__APPLE__) +#ifdef __APPLE__ + #define hw_cpufrequency "hw.cpufrequency" + const long div_by = 1000000L; +#else + #define hw_cpufrequency "dev.cpu.0.freq" + const long div_by = 1L; +#endif + + if (!(fp = popen("sysctl -n " hw_cpufrequency, "r"))) + osd_error_fatal("Cannot call sysctl"); + + if (fgets(s, sizeof(s), fp) == NULL || + sscanf(s, "%lf", &mhz) != 1) { + osd_error_fatal("got no hw.cpufrequency sysctl value"); + } + mhz /= div_by; + pclose(fp); +#else /* defined(__FreeBSD__) || defined(__APPLE__) .e.g Linux */ + char *cp; + int found = 0; if (!(fp = fopen("/proc/cpuinfo", "r"))) osd_error_fatal("Cannot open /proc/cpuinfo"); @@ -658,6 +678,7 @@ double get_mhz(void) osd_error_fatal("\"cpu MHz\" line not found\n"); fclose(fp); +#endif /* else defined(__FreeBSD__) || defined(__APPLE__) */ return mhz; }