diff options
Diffstat (limited to 'x11/gnome-applets/files/patch-cpufreq-freebsd')
-rw-r--r-- | x11/gnome-applets/files/patch-cpufreq-freebsd | 514 |
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; |