mirror of
https://git.freebsd.org/ports.git
synced 2025-06-30 09:00:33 -04:00
410 lines
12 KiB
Text
410 lines
12 KiB
Text
--- cpufreq/src/Makefile.am.orig 2021-08-07 11:25:17 UTC
|
|
+++ cpufreq/src/Makefile.am
|
|
@@ -33,6 +33,8 @@ else
|
|
mate_cpufreq_applet_SOURCES += \
|
|
cpufreq-monitor-cpuinfo.c \
|
|
cpufreq-monitor-cpuinfo.h \
|
|
+ cpufreq-monitor-sysctl.c \
|
|
+ cpufreq-monitor-sysctl.h \
|
|
cpufreq-monitor-sysfs.c \
|
|
cpufreq-monitor-sysfs.h
|
|
endif
|
|
--- cpufreq/src/cpufreq-monitor-cpuinfo.c.orig 2021-08-07 11:25:17 UTC
|
|
+++ cpufreq/src/cpufreq-monitor-cpuinfo.c
|
|
@@ -16,7 +16,7 @@
|
|
* License along with this library; if not, write to the Free
|
|
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
- * Authors : Carlos García Campos <carlosgc@gnome.org>
|
|
+ * Authors : Carlos Garcia Campos <carlosgc@gnome.org>
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
@@ -26,6 +26,10 @@
|
|
#include <glib.h>
|
|
#include <glib/gi18n.h>
|
|
|
|
+#ifdef __FreeBSD__
|
|
+#include <sys/types.h>
|
|
+#include <sys/sysctl.h>
|
|
+#endif /* __FreeBSD__ */
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
|
|
@@ -62,15 +66,19 @@ cpufreq_monitor_cpuinfo_new (guint cpu)
|
|
static gboolean
|
|
cpufreq_monitor_cpuinfo_run (CPUFreqMonitor *monitor)
|
|
{
|
|
+#ifndef __FreeBSD__
|
|
gchar *file;
|
|
gchar **lines;
|
|
gchar *buffer = NULL;
|
|
gchar *p;
|
|
+#else
|
|
+ size_t len;
|
|
+#endif /* __FreeBSD__ */
|
|
gint cpu, i;
|
|
gint cur_freq, max_freq;
|
|
gchar *governor;
|
|
GError *error = NULL;
|
|
-
|
|
+#ifndef __FreeBSD__
|
|
file = g_strdup ("/proc/cpuinfo");
|
|
if (!cpufreq_file_get_contents (file, &buffer, NULL, &error)) {
|
|
g_warning ("%s", error->message);
|
|
@@ -115,7 +123,12 @@ cpufreq_monitor_cpuinfo_run (CPUFreqMonitor *monitor)
|
|
|
|
g_strfreev (lines);
|
|
g_free (buffer);
|
|
+#else
|
|
+ len = sizeof (cpu);
|
|
|
|
+ if (sysctlbyname ("hw.clockrate", &cpu, &len, NULL, 0) == -1)
|
|
+ return FALSE;
|
|
+#endif /* __FreeBSD__ */
|
|
governor = g_strdup (_("Frequency Scaling Unsupported"));
|
|
cur_freq = cpu * 1000;
|
|
max_freq = cur_freq;
|
|
--- cpufreq/src/cpufreq-monitor-factory.c.orig 2021-08-07 11:25:17 UTC
|
|
+++ cpufreq/src/cpufreq-monitor-factory.c
|
|
@@ -17,6 +17,7 @@
|
|
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* Authors : Carlos García Campos <carlosgc@gnome.org>
|
|
+ * Joe Marcus Clarke <marcus@FreeBSD.org>
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
@@ -26,8 +27,16 @@
|
|
#include <glib.h>
|
|
#include <glib/gi18n.h>
|
|
|
|
+#ifdef __FreeBSD__
|
|
+#include <sys/types.h>
|
|
+#include <sys/sysctl.h>
|
|
+#endif /* __FreeBSD__ */
|
|
+
|
|
#include "cpufreq-applet.h"
|
|
#include "cpufreq-utils.h"
|
|
+#ifdef __FreeBSD__
|
|
+#include "cpufreq-monitor-sysctl.h"
|
|
+#endif /* __FreeBSD__ */
|
|
#include "cpufreq-monitor-factory.h"
|
|
#ifdef HAVE_LIBCPUFREQ
|
|
#include "cpufreq-monitor-libcpufreq.h"
|
|
@@ -43,7 +52,7 @@ cpufreq_monitor_factory_create_monitor (guint cpu)
|
|
return cpufreq_monitor_libcpufreq_new (cpu);
|
|
#else
|
|
CPUFreqMonitor *monitor = NULL;
|
|
-
|
|
+#ifndef __FreeBSD__
|
|
if (g_file_test ("/sys/devices/system/cpu/cpu0/cpufreq", G_FILE_TEST_EXISTS)) {
|
|
monitor = cpufreq_monitor_sysfs_new (cpu);
|
|
} else if (g_file_test ("/proc/cpuinfo", G_FILE_TEST_EXISTS)) {
|
|
@@ -59,7 +68,19 @@ cpufreq_monitor_factory_create_monitor (guint cpu)
|
|
|
|
monitor = cpufreq_monitor_cpuinfo_new (cpu);
|
|
}
|
|
+#else
|
|
+ size_t len;
|
|
|
|
+ if (sysctlbyname ("dev.cpu.0.freq", NULL, &len, NULL, 0) == 0) {
|
|
+ monitor = cpufreq_monitor_sysctl_new (cpu);
|
|
+ } else {
|
|
+ cpufreq_utils_display_error (_("CPU frequency scaling unsupported"),
|
|
+ ("You will not be able to modify the frequency of your machine. "
|
|
+ "Your machine may be misconfigured or not have hardware support "
|
|
+ "for CPU frequency scaling."));
|
|
+ monitor = cpufreq_monitor_cpuinfo_new (cpu);
|
|
+ }
|
|
+#endif /* __FreeBSD__ */
|
|
return monitor;
|
|
#endif
|
|
}
|
|
--- cpufreq/src/cpufreq-monitor-sysctl.c.orig 2021-10-12 00:51:41 UTC
|
|
+++ cpufreq/src/cpufreq-monitor-sysctl.c
|
|
@@ -0,0 +1,184 @@
|
|
+/*
|
|
+ * Copyright (C) 2001, 2002 Free Software Foundation
|
|
+ *
|
|
+ * This library is free software; you can redistribute it and/or
|
|
+ * modify it under the terms of the GNU General Public
|
|
+ * License as published by the Free Software Foundation; either
|
|
+ * version 2 of the License, or (at your option) any later version.
|
|
+ *
|
|
+ * This library is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ * General Public License for more details.
|
|
+ *
|
|
+ * You should have received a copy of the GNU General Public
|
|
+ * License along with this library; if not, write to the Free
|
|
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
+ *
|
|
+ * Authors : Joe Marcus Clarke <marcus@FreeBSD.org>
|
|
+ */
|
|
+
|
|
+#include <glib.h>
|
|
+#include <glib/gi18n.h>
|
|
+
|
|
+#include <string.h>
|
|
+
|
|
+#ifdef __FreeBSD__
|
|
+#include <sys/types.h>
|
|
+#include <sys/sysctl.h>
|
|
+
|
|
+#include "cpufreq-monitor-sysctl.h"
|
|
+
|
|
+#define PARENT_TYPE TYPE_CPUFREQ_MONITOR
|
|
+
|
|
+#define CPUFREQ_MONITOR_GET_PROTECTED(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PARENT_TYPE, CPUFreqMonitorProtected))
|
|
+
|
|
+static void cpufreq_monitor_sysctl_class_init (CPUFreqMonitorSysctlClass *klass);
|
|
+
|
|
+static gboolean cpufreq_monitor_sysctl_run (CPUFreqMonitor *monitor);
|
|
+static GList *cpufreq_monitor_sysctl_get_available_frequencies (CPUFreqMonitor *monitor);
|
|
+static GList *cpufreq_monitor_sysctl_get_available_governors (CPUFreqMonitor *monitor);
|
|
+
|
|
+static gboolean cpufreq_monitor_sysctl_get (gpointer gdata);
|
|
+
|
|
+G_DEFINE_TYPE (CPUFreqMonitorSysctl, cpufreq_monitor_sysctl, CPUFREQ_TYPE_MONITOR)
|
|
+
|
|
+static void
|
|
+cpufreq_monitor_sysctl_init (CPUFreqMonitorSysctl *monitor)
|
|
+{
|
|
+}
|
|
+
|
|
+static void
|
|
+cpufreq_monitor_sysctl_class_init (CPUFreqMonitorSysctlClass *klass)
|
|
+{
|
|
+ CPUFreqMonitorClass *monitor_class = CPUFREQ_MONITOR_CLASS (klass);
|
|
+
|
|
+ monitor_class->run = cpufreq_monitor_sysctl_run;
|
|
+ monitor_class->get_available_frequencies = cpufreq_monitor_sysctl_get_available_frequencies;
|
|
+ monitor_class->get_available_governors = cpufreq_monitor_sysctl_get_available_governors;
|
|
+}
|
|
+
|
|
+CPUFreqMonitor *
|
|
+cpufreq_monitor_sysctl_new (guint cpu)
|
|
+{
|
|
+ CPUFreqMonitorSysctl *monitor;
|
|
+
|
|
+ monitor = g_object_new (TYPE_CPUFREQ_MONITOR_SYSCTL, "cpu", cpu, NULL);
|
|
+
|
|
+ return CPUFREQ_MONITOR (monitor);
|
|
+}
|
|
+
|
|
+static gboolean
|
|
+cpufreq_monitor_sysctl_run (CPUFreqMonitor *monitor)
|
|
+{
|
|
+ gint fmax, fmin, ifreq;
|
|
+ gchar *governor;
|
|
+ size_t len;
|
|
+ gchar *freq_oid;
|
|
+ guint mon_cpu;
|
|
+ GList *list;
|
|
+
|
|
+ list = cpufreq_monitor_sysctl_get_available_frequencies (CPUFREQ_MONITOR (monitor));
|
|
+
|
|
+ fmax = atoi ((gchar *) list->data);
|
|
+ fmin = atoi ((gchar *) g_list_nth_data (list, (g_list_length (list) - 1)));
|
|
+
|
|
+ g_list_foreach (list, (GFunc) g_free, NULL);
|
|
+ g_list_free (list);
|
|
+
|
|
+ g_object_get (G_OBJECT (monitor), "cpu", &mon_cpu, NULL);
|
|
+ len = sizeof (ifreq);
|
|
+ freq_oid = g_strdup_printf ("dev.cpu.%d.freq", 0);
|
|
+
|
|
+ if (sysctlbyname (freq_oid, &ifreq, &len, NULL, 0) == -1) {
|
|
+ g_free (freq_oid);
|
|
+ return FALSE;
|
|
+ }
|
|
+
|
|
+ ifreq *= 1000;
|
|
+
|
|
+ if (ifreq == fmax)
|
|
+ governor = g_strdup ("performance");
|
|
+ else if (ifreq == fmin)
|
|
+ governor = g_strdup ("economy");
|
|
+ else
|
|
+ governor = g_strdup ("userspace");
|
|
+
|
|
+ g_object_set (G_OBJECT (monitor),
|
|
+ "online", TRUE,
|
|
+ "governor", governor,
|
|
+ "frequency", ifreq,
|
|
+ "max-frequency", fmax,
|
|
+ NULL);
|
|
+
|
|
+ g_free (governor);
|
|
+
|
|
+ return TRUE;
|
|
+}
|
|
+
|
|
+static GList *
|
|
+cpufreq_monitor_sysctl_get_available_frequencies (CPUFreqMonitor *monitor)
|
|
+{
|
|
+ gchar *levels_oid, *levels;
|
|
+ gchar **levelsp, **l;
|
|
+ GList *list = NULL;
|
|
+ gint mib[4];
|
|
+ guint mon_cpu;
|
|
+ size_t len;
|
|
+
|
|
+ g_object_get (G_OBJECT (monitor), "cpu", &mon_cpu, NULL);
|
|
+
|
|
+ levels_oid = g_strdup_printf ("dev.cpu.%d.freq_levels",
|
|
+ 0);
|
|
+ len = 4;
|
|
+ sysctlnametomib (levels_oid, mib, &len);
|
|
+ len = sizeof (levels);
|
|
+ g_free (levels_oid);
|
|
+
|
|
+ if (sysctl (mib, 4, NULL, &len, NULL, 0) == -1)
|
|
+ return NULL;
|
|
+
|
|
+ levels = g_malloc (len);
|
|
+ if (sysctl (mib, 4, levels, &len, NULL, 0) == -1)
|
|
+ {
|
|
+ g_free(levels);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ levelsp = g_strsplit (levels, " ", 0);
|
|
+ g_free (levels);
|
|
+
|
|
+ for (l = levelsp; l && *l; l++) {
|
|
+ gchar **frpr;
|
|
+
|
|
+ frpr = g_strsplit (*l, "/", 0);
|
|
+ if (frpr && frpr[0] != NULL) {
|
|
+ /* sysctl format is %d/%d where the
|
|
+ * first %d is the frequency, and
|
|
+ * the second is the power used in
|
|
+ * mW.
|
|
+ */
|
|
+ int freq = atoi (frpr[0]);
|
|
+ list =
|
|
+ g_list_append (list, g_strdup_printf ("%d", freq * 1000));
|
|
+ }
|
|
+ g_strfreev (frpr);
|
|
+ }
|
|
+
|
|
+ g_strfreev (levelsp);
|
|
+
|
|
+ return (list);
|
|
+}
|
|
+
|
|
+static GList *
|
|
+cpufreq_monitor_sysctl_get_available_governors (CPUFreqMonitor *monitor)
|
|
+{
|
|
+ GList *list = NULL;
|
|
+
|
|
+ list = g_list_prepend (list, g_strdup ("performance"));
|
|
+ list = g_list_prepend (list, g_strdup ("userspace"));
|
|
+ list = g_list_prepend (list, g_strdup ("economy"));
|
|
+
|
|
+ return list;
|
|
+}
|
|
+#endif /* __FreeBSD__ */
|
|
--- cpufreq/src/cpufreq-monitor-sysctl.h.orig 2021-10-12 00:51:41 UTC
|
|
+++ cpufreq/src/cpufreq-monitor-sysctl.h
|
|
@@ -0,0 +1,49 @@
|
|
+/*
|
|
+ * Copyright (C) 2001, 2002 Free Software Foundation
|
|
+ *
|
|
+ * This library is free software; you can redistribute it and/or
|
|
+ * modify it under the terms of the GNU General Public
|
|
+ * License as published by the Free Software Foundation; either
|
|
+ * version 2 of the License, or (at your option) any later version.
|
|
+ *
|
|
+ * This library is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ * General Public License for more details.
|
|
+ *
|
|
+ * You should have received a copy of the GNU General Public
|
|
+ * License along with this library; if not, write to the Free
|
|
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
+ *
|
|
+ * Authors : Joe Marcus Clarke <marcus@FreeBSD.org>
|
|
+ */
|
|
+
|
|
+#ifndef __CPUFREQ_MONITOR_SYSCTL_H__
|
|
+#define __CPUFREQ_MONITOR_SYSCTL_H__
|
|
+
|
|
+#include <glib-object.h>
|
|
+
|
|
+#include "cpufreq-monitor.h"
|
|
+
|
|
+#define TYPE_CPUFREQ_MONITOR_SYSCTL (cpufreq_monitor_sysctl_get_type ())
|
|
+#define CPUFREQ_MONITOR_SYSCTL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CPUFREQ_MONITOR_SYSCTL, CPUFreqMonitorSysctl))
|
|
+#define CPUFREQ_MONITOR_SYSCTL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), TYPE_CPUFREQ_MONITOR_SYSCTL, CPUFreqMonitorSysctlClass))
|
|
+#define IS_CPUFREQ_MONITOR_SYSCTL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CPUFREQ_MONITOR_SYSCTL))
|
|
+#define IS_CPUFREQ_MONITOR_SYSCTL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CPUFREQ_MONITOR_SYSCTL))
|
|
+#define CPUFREQ_MONITOR_SYSCTL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CPUFREQ_MONITOR_SYSCTL, CPUFreqMonitorSysctlClass))
|
|
+
|
|
+typedef struct _CPUFreqMonitorSysctl CPUFreqMonitorSysctl;
|
|
+typedef struct _CPUFreqMonitorSysctlClass CPUFreqMonitorSysctlClass;
|
|
+
|
|
+struct _CPUFreqMonitorSysctl {
|
|
+ CPUFreqMonitor parent;
|
|
+};
|
|
+
|
|
+struct _CPUFreqMonitorSysctlClass {
|
|
+ CPUFreqMonitorClass parent_class;
|
|
+};
|
|
+
|
|
+GType cpufreq_monitor_sysctl_get_type (void) G_GNUC_CONST;
|
|
+CPUFreqMonitor *cpufreq_monitor_sysctl_new (guint cpu);
|
|
+
|
|
+#endif /* __CPUFREQ_MONITOR_SYSCTL_H__ */
|
|
--- cpufreq/src/cpufreq-utils.c.orig 2021-08-07 11:25:17 UTC
|
|
+++ cpufreq/src/cpufreq-utils.c
|
|
@@ -24,6 +24,9 @@
|
|
#include <glib.h>
|
|
#include <gtk/gtk.h>
|
|
#include <sys/types.h>
|
|
+#ifdef __FreeBSD__
|
|
+#include <sys/sysctl.h>
|
|
+#endif
|
|
#include <sys/stat.h>
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
@@ -36,9 +39,27 @@
|
|
#include <gio/gio.h>
|
|
#endif /* HAVE_POLKIT */
|
|
|
|
+#ifdef __FreeBSD__
|
|
guint
|
|
cpufreq_utils_get_n_cpus (void)
|
|
{
|
|
+ size_t len;
|
|
+ static guint n_cpus = 0;
|
|
+
|
|
+ if (n_cpus > 0)
|
|
+ return n_cpus;
|
|
+
|
|
+ len = sizeof (n_cpus);
|
|
+ if (sysctlbyname ("hw.ncpu", &n_cpus, &len, NULL, 0) == -1) {
|
|
+ return 1;
|
|
+ }
|
|
+
|
|
+ return n_cpus;
|
|
+}
|
|
+#else
|
|
+guint
|
|
+cpufreq_utils_get_n_cpus (void)
|
|
+{
|
|
gint mcpu = -1;
|
|
gchar *file = NULL;
|
|
static guint n_cpus = 0;
|
|
@@ -78,6 +99,7 @@ cpufreq_utils_get_n_cpus (void)
|
|
|
|
return 1;
|
|
}
|
|
+#endif /* __FreeBSD__ */
|
|
|
|
void
|
|
cpufreq_utils_display_error (const gchar *message,
|