summaryrefslogtreecommitdiff
path: root/sysutils/p5-Sys-CPU/patches/patch-CPU.xs
blob: 10148f8b2fe0b7e2cf08caf836446897bbb4a1e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
$NetBSD: patch-CPU.xs,v 1.2 2020/10/28 12:04:02 nia Exp $

Add NetBSD support.
https://rt.cpan.org/Public/Bug/Display.html?id=98004

--- CPU.xs.orig	2013-11-27 22:40:07.000000000 +0000
+++ CPU.xs
@@ -40,7 +40,7 @@
  #define _have_cpu_clock
  #define _have_cpu_type
 #endif
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__NetBSD__)
  #include <sys/sysctl.h>
  #define _have_cpu_type
  #define _have_cpu_clock
@@ -345,6 +345,27 @@ CODE:
     size_t len = sizeof(clock);
     sysctlbyname("hw.clockrate", &clock, &len, NULL, 0);
 #endif
+#ifdef __NetBSD__
+    size_t len = sizeof(clock);
+    char const *name;
+
+    if (sysctlbyname("machdep.powernow.frequency.current", NULL, &len, NULL, 0) == 0)
+        name = "machdep.powernow.frequency.current";
+    else if (sysctlbyname("machdep.est.frequency.current", NULL, &len, NULL, 0) == 0)
+        name = "machdep.est.frequency.current";
+    else if (sysctlbyname("machdep.loongson.frequency.current", NULL, &len, NULL, 0) == 0)
+        name = "machdep.loongson.frequency.current";
+    else if (sysctlbyname("machdep.intrepid.frequency.current", NULL, &len, NULL, 0) == 0)
+        name = "machdep.intrepid.frequency.current";
+    else if (sysctlbyname("machdep.cpufreq.cpu0.current", NULL, &len, NULL, 0) == 0)
+        name = "machdep.cpufreq.cpu0.current";
+    else if (sysctlbyname("machdep.cpu.frequency.current", NULL, &len, NULL, 0) == 0)
+        name = "machdep.cpu.frequency.current";
+    else if (sysctlbyname("machdep.frequency.current", NULL, &len, NULL, 0) == 0)
+        name = "machdep.frequency.current";
+
+    sysctlbyname(name, &clock, &len, NULL, 0);
+#endif
 #ifdef WINDOWS
     char *clock_str = malloc(MAX_IDENT_SIZE);
     /*!! untested !!*/
@@ -394,6 +415,11 @@ CODE:
     size_t len = MAX_IDENT_SIZE;
     sysctlbyname("hw.model", value, &len, NULL, 0);
 #endif
+#ifdef __NetBSD__
+    value = malloc(MAX_IDENT_SIZE);
+    size_t len = MAX_IDENT_SIZE;
+    sysctlbyname("hw.model", value, &len, NULL, 0);
+#endif
 #ifdef __linux__
 #if defined __s390__ || defined __s390x__
     value = processor_machine_field (proc_cpuinfo_field ("processor") );