aboutsummaryrefslogtreecommitdiffstats
path: root/x11/gnome-applets/files/patch-cpufreq-freebsd
diff options
context:
space:
mode:
Diffstat (limited to 'x11/gnome-applets/files/patch-cpufreq-freebsd')
-rw-r--r--x11/gnome-applets/files/patch-cpufreq-freebsd514
1 files changed, 514 insertions, 0 deletions
diff --git a/x11/gnome-applets/files/patch-cpufreq-freebsd b/x11/gnome-applets/files/patch-cpufreq-freebsd
new file mode 100644
index 000000000000..48f2ebb6c5b1
--- /dev/null
+++ b/x11/gnome-applets/files/patch-cpufreq-freebsd
@@ -0,0 +1,514 @@
+--- cpufreq/src/Makefile.in.orig Sun Feb 13 01:00:35 2005
++++ cpufreq/src/Makefile.in Sun Feb 13 01:01:31 2005
+@@ -55,6 +55,7 @@
+ cpufreq-prefs.$(OBJEXT) cpufreq-popup.$(OBJEXT) \
+ cpufreq-monitor.$(OBJEXT) cpufreq-monitor-factory.$(OBJEXT) \
+ cpufreq-monitor-procfs.$(OBJEXT) \
++ cpufreq-monitor-sysctl.$(OBJEXT) \
+ cpufreq-monitor-sysfs.$(OBJEXT) \
+ cpufreq-monitor-cpuinfo.$(OBJEXT)
+ cpufreq_applet_OBJECTS = $(am_cpufreq_applet_OBJECTS)
+@@ -68,6 +69,7 @@
+ @AMDEP_TRUE@ ./$(DEPDIR)/cpufreq-monitor-cpuinfo.Po \
+ @AMDEP_TRUE@ ./$(DEPDIR)/cpufreq-monitor-factory.Po \
+ @AMDEP_TRUE@ ./$(DEPDIR)/cpufreq-monitor-procfs.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cpufreq-monitor-sysctl.Po \
+ @AMDEP_TRUE@ ./$(DEPDIR)/cpufreq-monitor-sysfs.Po \
+ @AMDEP_TRUE@ ./$(DEPDIR)/cpufreq-monitor.Po \
+ @AMDEP_TRUE@ ./$(DEPDIR)/cpufreq-popup.Po \
+@@ -336,6 +338,7 @@
+ cpufreq-monitor-protected.h \
+ cpufreq-monitor-factory.c cpufreq-monitor-factory.h \
+ cpufreq-monitor-procfs.c cpufreq-monitor-procfs.h \
++ cpufreq-monitor-sysctl.c cpufreq-monitor-sysctl.h \
+ cpufreq-monitor-sysfs.c cpufreq-monitor-sysfs.h \
+ cpufreq-monitor-cpuinfo.c cpufreq-monitor-cpuinfo.h
+
+@@ -419,6 +422,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpufreq-monitor-cpuinfo.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpufreq-monitor-factory.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpufreq-monitor-procfs.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpufreq-monitor-sysctl.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpufreq-monitor-sysfs.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpufreq-monitor.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpufreq-popup.Po@am__quote@
+--- cpufreq/src/cpufreq-monitor-sysctl.h.orig Sun Feb 13 01:00:25 2005
++++ cpufreq/src/cpufreq-monitor-sysctl.h Sat Feb 12 20:25:21 2005
+@@ -0,0 +1,48 @@
++/*
++ * 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 ();
++CPUFreqMonitor *cpufreq_monitor_sysctl_new (guint cpu);
++
++#endif /* __CPUFREQ_MONITOR_SYSCTL_H__ */
+--- cpufreq/src/cpufreq-monitor-cpuinfo.c.orig Fri Dec 31 14:39:04 2004
++++ cpufreq/src/cpufreq-monitor-cpuinfo.c Sun Feb 13 23:58:38 2005
+@@ -22,6 +22,10 @@
+ #include <glib/gi18n.h>
+ #include <libgnomevfs/gnome-vfs.h>
+
++#ifdef __FreeBSD__
++#include <sys/types.h>
++#include <sys/sysctl.h>
++#endif /* __FreeBSD__ */
+ #include <string.h>
+
+ #include "cpufreq-monitor-cpuinfo.h"
+@@ -102,6 +106,7 @@
+ static gboolean
+ cpufreq_monitor_cpuinfo_get (gpointer gdata)
+ {
++#ifndef __FreeBSD__
+ GnomeVFSHandle *handle;
+ GnomeVFSFileSize bytes_read;
+ GnomeVFSResult result;
+@@ -109,6 +114,9 @@
+ gchar **lines;
+ gchar buffer[256];
+ gchar *p;
++#else
++ size_t len;
++#endif /* __FreeBSD__ */
+ gchar *freq, *perc, *unit, *governor;
+ gint cpu, i;
+ CPUFreqMonitorCPUInfo *monitor;
+@@ -118,6 +126,7 @@
+
+ private = CPUFREQ_MONITOR_GET_PROTECTED (CPUFREQ_MONITOR (monitor));
+
++#ifndef __FreeBSD__
+ uri = gnome_vfs_get_uri_from_local_path ("/proc/cpuinfo");
+
+ result = gnome_vfs_open (&handle, uri, GNOME_VFS_OPEN_READ);
+@@ -178,6 +187,12 @@
+
+ g_strfreev (lines);
+ g_free (file);
++#else
++ len = sizeof (cpu);
++
++ if (sysctlbyname ("hw.clockrate", &cpu, &len, NULL, 0) == -1)
++ return FALSE;
++#endif /* __FreeBSD__ */
+
+ governor = g_strdup (_("Frequency Scaling Unsupported"));
+ freq = parent_class->get_human_readable_freq (cpu * 1000); /* kHz are expected*/
+--- cpufreq/src/cpufreq-monitor-factory.c.orig Mon Dec 27 12:53:46 2004
++++ cpufreq/src/cpufreq-monitor-factory.c Sun Feb 13 23:58:44 2005
+@@ -16,13 +16,21 @@
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Authors : Carlos García Campos <carlosgc@gnome.org>
++ * Joe Marcus Clarke <marcus@FreeBSD.org>
+ */
+
+ #include <glib.h>
++#ifdef __FreeBSD__
++#include <sys/types.h>
++#include <sys/sysctl.h>
++#endif /* __FreeBSD__ */
+
+ #include "cpufreq-applet.h"
+ #include "cpufreq-monitor-sysfs.h"
+ #include "cpufreq-monitor-procfs.h"
++#ifdef __FreeBSD__
++#include "cpufreq-monitor-sysctl.h"
++#endif /* __FreeBSD__ */
+ #include "cpufreq-monitor-cpuinfo.h"
+ #include "cpufreq-monitor-factory.h"
+
+@@ -30,6 +38,7 @@
+ cpufreq_monitor_factory_create_monitor (guint cpu)
+ {
+ CPUFreqMonitor *monitor = NULL;
++#ifndef __FreeBSD__
+
+ if (g_file_test ("/sys/devices/system/cpu/cpu0/cpufreq", G_FILE_TEST_EXISTS)) { /* 2.6 kernel */
+ monitor = cpufreq_monitor_sysfs_new (cpu);
+@@ -48,6 +57,20 @@
+
+ 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_applet_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;
+ }
+--- cpufreq/src/cpufreq-monitor-sysctl.c.orig Sun Feb 13 03:52:42 2005
++++ cpufreq/src/cpufreq-monitor-sysctl.c Mon Feb 14 00:42:07 2005
+@@ -0,0 +1,269 @@
++/*
++ * 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"
++#include "cpufreq-monitor-protected.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 void cpufreq_monitor_sysctl_finalize (GObject *object);
++
++static void cpufreq_monitor_sysctl_run (CPUFreqMonitor *monitor);
++static GList *cpufreq_monitor_sysctl_get_available_frequencies (CPUFreqMonitor *monitor);
++
++static gboolean cpufreq_monitor_sysctl_get (gpointer gdata);
++
++
++static CPUFreqMonitorClass *parent_class = NULL;
++
++typedef struct _CPUFreqMonitorProtected CPUFreqMonitorProtected;
++
++GType cpufreq_monitor_sysctl_get_type ()
++{
++ static GType type = 0;
++
++ if (!type) {
++ static const GTypeInfo info = {
++ sizeof (CPUFreqMonitorSysctlClass),
++ (GBaseInitFunc) NULL,
++ (GBaseFinalizeFunc) NULL,
++ (GClassInitFunc) cpufreq_monitor_sysctl_class_init,
++ NULL,
++ NULL,
++ sizeof (CPUFreqMonitorSysctl),
++ 0,
++ NULL
++ };
++
++ type = g_type_register_static (PARENT_TYPE, "CPUFreqMonitorSysctl",
++ &info, 0);
++ }
++
++ return type;
++}
++
++static void
++cpufreq_monitor_sysctl_class_init (CPUFreqMonitorSysctlClass *klass)
++{
++ GObjectClass *object_class = G_OBJECT_CLASS (klass);
++ CPUFreqMonitorClass *monitor_class = CPUFREQ_MONITOR_CLASS (klass);
++
++ parent_class = g_type_class_peek_parent (klass);
++
++ monitor_class->run = cpufreq_monitor_sysctl_run;
++ monitor_class->get_available_frequencies = cpufreq_monitor_sysctl_get_available_frequencies;
++
++ object_class->finalize = cpufreq_monitor_sysctl_finalize;
++}
++
++static void
++cpufreq_monitor_sysctl_finalize (GObject *object)
++{
++ g_return_if_fail (IS_CPUFREQ_MONITOR_SYSCTL (object));
++
++ if (G_OBJECT_CLASS (parent_class)->finalize)
++ (* G_OBJECT_CLASS (parent_class)->finalize) (object);
++}
++
++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_get (gpointer gdata)
++{
++ gint fmax, fmin, ifreq;
++ gchar *freq, *perc, *unit, *governor;
++ gboolean changed;
++ size_t len;
++ gchar *freq_oid;
++ CPUFreqMonitorSysctl *monitor;
++ CPUFreqMonitorProtected *private;
++
++ monitor = (CPUFreqMonitorSysctl *) gdata;
++ private = CPUFREQ_MONITOR_GET_PROTECTED (CPUFREQ_MONITOR (monitor));
++
++ if (private->available_freqs == NULL) {
++ if (!cpufreq_monitor_sysctl_get_available_frequencies (CPUFREQ_MONITOR (monitor)))
++ return FALSE;
++ }
++
++ fmax = atoi ((gchar *) private->available_freqs->data);
++ fmin = atoi ((gchar *) g_list_nth_data (private->available_freqs, (g_list_length (private->available_freqs) - 1)));
++
++ len = sizeof (ifreq);
++ freq_oid = g_strdup_printf ("dev.cpu.%d.freq", private->cpu);
++
++ 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 ("other");
++
++ freq = parent_class->get_human_readable_freq (ifreq);
++ perc = parent_class->get_human_readable_perc (fmax, ifreq);
++ unit = parent_class->get_human_readable_unit (ifreq);
++
++ changed = FALSE;
++
++ if (!private->governor || (g_ascii_strcasecmp (governor, private->governor) != 0)) {
++ changed = TRUE;
++ }
++
++ if (!private->freq || (g_ascii_strcasecmp (freq, private->freq) != 0)) {
++ changed = TRUE;
++ }
++
++ if (!private->perc || (g_ascii_strcasecmp (perc, private->perc) != 0)) {
++ changed = TRUE;
++ }
++
++ if (!private->unit || (g_ascii_strcasecmp (unit, private->unit) != 0)) {
++ changed = TRUE;
++ }
++
++ parent_class->free_data (CPUFREQ_MONITOR (monitor));
++
++ private->governor = governor;
++ private->freq = freq;
++ private->perc = perc;
++ private->unit = unit;
++
++ if (private->governor == NULL)
++ return FALSE;
++ if (private->freq == NULL)
++ return FALSE;
++ if (private->perc == NULL)
++ return FALSE;
++ if (private->unit == NULL)
++ return FALSE;
++
++ if (changed)
++ g_signal_emit (CPUFREQ_MONITOR (monitor), parent_class->signals[CHANGED], 0);
++
++ return TRUE;
++}
++
++static void
++cpufreq_monitor_sysctl_run (CPUFreqMonitor *monitor)
++{
++ CPUFreqMonitorProtected *private;
++
++ g_return_if_fail (IS_CPUFREQ_MONITOR_SYSCTL (monitor));
++
++ private = CPUFREQ_MONITOR_GET_PROTECTED (CPUFREQ_MONITOR (monitor));
++
++ if (private->timeout_handler > 0)
++ g_source_remove (private->timeout_handler);
++
++ private->timeout_handler = g_timeout_add (1000, cpufreq_monitor_sysctl_get, (gpointer) monitor);
++}
++
++static void
++free_string (gpointer str, gpointer gdata)
++{
++ if (str) g_free (str);
++}
++
++static GList *
++cpufreq_monitor_sysctl_get_available_frequencies (CPUFreqMonitor *monitor)
++{
++ CPUFreqMonitorProtected *private;
++ gchar *levels_oid, *levels;
++ gchar **levelsp, **l;
++ gint mib[4];
++ size_t len;
++
++ g_return_val_if_fail (IS_CPUFREQ_MONITOR_SYSCTL (monitor), NULL);
++
++ private = CPUFREQ_MONITOR_GET_PROTECTED (CPUFREQ_MONITOR (monitor));
++
++ if (private->available_freqs) {
++ g_list_foreach (private->available_freqs,
++ free_string, NULL);
++ g_list_free (private->available_freqs);
++ private->available_freqs = NULL;
++ }
++
++ levels_oid = g_strdup_printf ("dev.cpu.%d.freq_levels",
++ private->cpu);
++ 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)
++ 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]);
++ private->available_freqs =
++ g_list_append (private->available_freqs, g_strdup_printf ("%d", freq * 1000));
++ }
++ g_strfreev (frpr);
++ }
++
++ g_strfreev (levelsp);
++
++ return private->available_freqs;
++}
++#endif /* __FreeBSD__ */
+--- cpufreq/src/cpufreq-applet.c.orig Fri Jan 14 23:38:20 2005
++++ cpufreq/src/cpufreq-applet.c Mon Feb 14 00:47:36 2005
+@@ -16,6 +16,7 @@
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Authors : Carlos García Campos <carlosgc@gnome.org>
++ * Joe Marcus Clarke <marcus@FreeBSD.org>
+ */
+
+ #include <config.h>
+@@ -25,6 +26,10 @@
+ #include <panel-applet-gconf.h>
+ #include <glade/glade.h>
+ #include <glib/gi18n.h>
++#ifdef __FreeBSD__
++#include <sys/types.h>
++#include <sys/sysctl.h>
++#endif /* __FreeBSD__ */
+ #include <string.h>
+
+ #include "cpufreq-applet.h"
+@@ -192,6 +197,7 @@
+ {
+ static const gchar *authors[] = {
+ "Carlos Garcia Campos <carlosgc@gnome.org>",
++ "Joe Marcus Clarke <marcus@FreeBSD.org> (FreeBSD support)",
+ NULL
+ };
+ static const gchar *documenters[] = {
+@@ -231,6 +237,7 @@
+ cpufreq_applet_get_max_cpu ()
+ {
+ gint mcpu = -1;
++#ifndef __FreeBSD__
+ gchar *file = NULL;
+
+ do {
+@@ -253,6 +260,14 @@
+ } while (g_file_test (file, G_FILE_TEST_EXISTS));
+ g_free (file);
+ mcpu --;
++#else
++ size_t len;
++
++ len = sizeof (mcpu);
++
++ sysctlbyname ("hw.ncpu", &mcpu, &len, NULL, 0);
++ mcpu --;
++#endif /* __FreeBSD__ */
+
+ if (mcpu >= 0)
+ return mcpu;