cpu_freq: Port to OpenBSD
authorAaron Marcher <me@drkhsh.at>
Mon, 30 Apr 2018 11:20:24 +0000 (13:20 +0200)
committerAaron Marcher <me@drkhsh.at>
Mon, 30 Apr 2018 11:20:24 +0000 (13:20 +0200)
In OpenBSD CPU frequency gets fetched using sysctl now.

README
components/cpu.c

diff --git a/README b/README
index b6f2961d699baf305aaabcf5adfef115f8417c33..78dc7ab1ba3a531ae4915a92b4205baa7c93c16f 100644 (file)
--- a/README
+++ b/README
@@ -62,7 +62,7 @@ Porting to OpenBSD is the current goal before thinking about a release.
 
 The following functions are not portable at the moment:
 - wifi_{perc,essid}
-- cpu_{freq,perc,iowait}
+- cpu_{perc,iowait}
 - entropy
 - swap_{free,perc,total,used}
 - battery_{power,state}
index a001d146b5bf6cc4a9a3ad72b8f1e2b77b1a8092..11e2e984469013dc6dc7da58e33a2ac922312768 100644 (file)
@@ -1,10 +1,14 @@
 /* See LICENSE file for copyright and license details. */
-#if defined(__linux__)
+#include <errno.h>
 #include <stdio.h>
 #include <string.h>
+#if defined(__OpenBSD__)
+#include <sys/sysctl.h>
+#endif
 
 #include "../util.h"
 
+#if defined(__linux__)
 const char *
 cpu_freq(void)
 {
@@ -62,4 +66,23 @@ cpu_iowait(void)
 
        return bprintf("%d", perc);
 }
+#elif defined(__OpenBSD__)
+const char *
+cpu_freq(void)
+{
+       int freq, mib[2];
+       size_t size;
+
+       mib[0] = CTL_HW;
+       mib[1] = HW_CPUSPEED;
+
+       size = sizeof(freq);
+
+       if (sysctl(mib, 2, &freq, &size, NULL, 0) == -1) {
+               fprintf(stderr, "sysctl 'HW_CPUSPEED': %s\n", strerror(errno));
+               return NULL;
+       }
+
+       return bprintf("%d", freq);
+}
 #endif