summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Marcher <me@drkhsh.at>2018-04-30 13:20:24 +0200
committerAaron Marcher <me@drkhsh.at>2018-04-30 13:20:24 +0200
commit3fe1db88922f9c06ee92ad6b6655ca0788aef93b (patch)
tree232cb4eed053d1399dfeb396996cef87973661ab
parentc3ce506b7fe4c9615c8bf1b6936dd235d6c04750 (diff)
cpu_freq: Port to OpenBSD
In OpenBSD CPU frequency gets fetched using sysctl now.
-rw-r--r--README2
-rw-r--r--components/cpu.c25
2 files changed, 25 insertions, 2 deletions
diff --git a/README b/README
index b6f2961..78dc7ab 100644
--- 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}
diff --git a/components/cpu.c b/components/cpu.c
index a001d14..11e2e98 100644
--- a/components/cpu.c
+++ b/components/cpu.c
@@ -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