summaryrefslogtreecommitdiffstats
path: root/x11/gnome-applets/files/patch-cpufreq-selector-freebsd
diff options
context:
space:
mode:
Diffstat (limited to 'x11/gnome-applets/files/patch-cpufreq-selector-freebsd')
-rw-r--r--x11/gnome-applets/files/patch-cpufreq-selector-freebsd373
1 files changed, 373 insertions, 0 deletions
diff --git a/x11/gnome-applets/files/patch-cpufreq-selector-freebsd b/x11/gnome-applets/files/patch-cpufreq-selector-freebsd
new file mode 100644
index 000000000..d25df35e2
--- /dev/null
+++ b/x11/gnome-applets/files/patch-cpufreq-selector-freebsd
@@ -0,0 +1,373 @@
+--- cpufreq/src/cpufreq-selector/cpufreq-sysctl.h.orig Mon Feb 14 00:38:57 2005
++++ cpufreq/src/cpufreq-selector/cpufreq-sysctl.h Mon Feb 14 00:21:39 2005
+@@ -0,0 +1,51 @@
++/*
++ * 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_SYSCTL_H__
++#define __CPUFREQ_SYSCTL_H__
++
++#include <glib-object.h>
++
++#include "cpufreq.h"
++
++#define TYPE_CPUFREQ_SYSCTL (cpufreq_sysctl_get_type ())
++#define CPUFREQ_SYSCTL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CPUFREQ_SYSCTL, CPUFreqSysctl))
++#define CPUFREQ_SYSCTL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), TYPE_CPUFREQ_SYSCTL, CPUFreqSysctlClass))
++#define IS_CPUFREQ_SYSCTL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CPUFREQ_SYSCTL))
++#define IS_CPUFREQ_SYSCTL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CPUFREQ_SYSCTL))
++#define CPUFREQ_SYSCTL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CPUFREQ_SYSCTL, CPUFreqSysctlClass))
++
++typedef struct _CPUFreqSysctl CPUFreqSysctl;
++typedef struct _CPUFreqSysctlClass CPUFreqSysctlClass;
++typedef struct _CPUFreqSysctlPriv CPUFreqSysctlPriv;
++
++struct _CPUFreqSysctl {
++ CPUFreq parent;
++};
++
++struct _CPUFreqSysctlClass {
++ CPUFreqClass parent_class;
++};
++
++
++GType cpufreq_sysctl_get_type ();
++CPUFreqSysctl *cpufreq_sysctl_new ();
++
++#endif /* __CPUFREQ_SYSCTL_H__ */
+--- cpufreq/src/cpufreq-selector/cpufreq-sysctl.c.orig Mon Feb 14 00:38:52 2005
++++ cpufreq/src/cpufreq-selector/cpufreq-sysctl.c Mon Feb 14 00:44:43 2005
+@@ -0,0 +1,235 @@
++/*
++ * 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 <stdio.h>
++#include <stdlib.h>
++
++#ifdef __FreeBSD__
++#include <sys/types.h>
++#include <sys/sysctl.h>
++#endif /* __FreeBSD__ */
++
++#include "cpufreq-sysctl.h"
++
++#define PARENT_TYPE TYPE_CPUFREQ
++
++#define CPUFREQ_SYSCTL_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), TYPE_CPUFREQ_SYSCTL, CPUFreqSysctlPrivate))
++
++static void cpufreq_sysctl_init (CPUFreqSysctl *cfq);
++static void cpufreq_sysctl_class_init (CPUFreqSysctlClass *klass);
++static void cpufreq_sysctl_finalize (GObject *object);
++
++static void cpufreq_sysctl_set_governor (CPUFreq *cfq, const gchar *governor);
++static void cpufreq_sysctl_set_frequency (CPUFreq *cfq, gint frequency);
++
++static void cpufreq_sysctl_setup (CPUFreqSysctl *cfq);
++
++static GObjectClass *parent_class = NULL;
++
++typedef struct _CPUFreqSysctlPrivate CPUFreqSysctlPrivate;
++
++struct _CPUFreqSysctlPrivate
++{
++ gint pmax;
++};
++
++GType cpufreq_sysctl_get_type ()
++{
++ static GType type = 0;
++
++ if (!type) {
++ static const GTypeInfo info = {
++ sizeof (CPUFreqSysctlClass),
++ (GBaseInitFunc) NULL,
++ (GBaseFinalizeFunc) NULL,
++ (GClassInitFunc) cpufreq_sysctl_class_init,
++ NULL,
++ NULL,
++ sizeof (CPUFreqSysctl),
++ 0,
++ (GInstanceInitFunc) cpufreq_sysctl_init
++ };
++
++ type = g_type_register_static (PARENT_TYPE, "CPUFreqSysctl",
++ &info, 0);
++ }
++
++ return type;
++}
++
++static void
++cpufreq_sysctl_init (CPUFreqSysctl *cfq)
++{
++ CPUFreqSysctlPrivate *private;
++
++ g_return_if_fail (IS_CPUFREQ_SYSCTL (cfq));
++
++ private = CPUFREQ_SYSCTL_GET_PRIVATE (cfq);
++}
++
++static void
++cpufreq_sysctl_class_init (CPUFreqSysctlClass *klass)
++{
++ GObjectClass *object_class = G_OBJECT_CLASS (klass);
++ CPUFreqClass *cfq_class = CPUFREQ_CLASS (klass);
++
++ parent_class = g_type_class_peek_parent (klass);
++
++ g_type_class_add_private (klass, sizeof (CPUFreqSysctlPrivate));
++
++ cfq_class->set_governor = cpufreq_sysctl_set_governor;
++ cfq_class->set_frequency = cpufreq_sysctl_set_frequency;
++
++ object_class->finalize = cpufreq_sysctl_finalize;
++}
++
++static void
++cpufreq_sysctl_finalize (GObject *object)
++{
++ if (G_OBJECT_CLASS (parent_class)->finalize)
++ (* G_OBJECT_CLASS (parent_class)->finalize) (object);
++}
++
++CPUFreqSysctl *
++cpufreq_sysctl_new ()
++{
++ CPUFreqSysctl *cfq;
++
++ cfq = g_object_new (TYPE_CPUFREQ_SYSCTL, NULL);
++
++ cpufreq_sysctl_setup (cfq);
++
++ return cfq;
++}
++
++static void
++cpufreq_sysctl_set_governor (CPUFreq *cfq, const gchar *governor)
++{
++ /* Not implemented. */
++}
++
++static void
++cpufreq_sysctl_set_frequency (CPUFreq *cfq, gint frequency)
++{
++ gint cpu, i;
++ size_t len;
++ gchar *freq_oid;
++
++ g_return_if_fail (IS_CPUFREQ_SYSCTL (cfq));
++
++ g_object_get (G_OBJECT (cfq), "n_cpu", &cpu, NULL);
++
++ frequency = (gint) ((gdouble) frequency / 1000); /* Convert back to MHz*/
++
++ for (i = 0; i < cpu; i++) {
++ freq_oid = g_strdup_printf ("dev.cpu.%d.freq", i);
++
++ sysctlbyname (freq_oid, NULL, &len, &frequency, sizeof (frequency));
++ g_free (freq_oid);
++ }
++}
++
++
++static void
++cpufreq_sysctl_setup (CPUFreqSysctl *cfq)
++{
++ guint cpu;
++ gint fmax, fmin;
++ gint pmax;
++ gint ifreq;
++ gint mib[4];
++ gchar *governor, *levels;
++ gchar **levelsp, **frpr, **l;
++ size_t len;
++ CPUFreqSysctlPrivate *private;
++
++ g_return_if_fail (IS_CPUFREQ_SYSCTL (cfq));
++
++ private = CPUFREQ_SYSCTL_GET_PRIVATE (cfq);
++
++ pmax = 100;
++ fmax = 0;
++ fmin = 0;
++ ifreq = 0;
++
++ private->pmax = pmax;
++
++ len = sizeof (cpu);
++
++ if (sysctlbyname ("hw.ncpu", &cpu, &len, NULL, 0) == -1)
++ cpu = 1;
++
++ len = 4;
++ sysctlnametomib ("dev.cpu.0.freq_levels", mib, &len);
++ len = sizeof (levels);
++
++ if (sysctl (mib, 4, NULL, &len, NULL, 0) == -1) {
++ g_warning ("Failed to fetch dev.cpu.0.freq_levels");
++ return;
++ }
++
++ levels = g_malloc (len);
++ if (sysctl (mib, 4, levels, &len, NULL, 0) == -1) {
++ g_warning ("Failed to fetch data for dev.cpu.0.freq_levels");
++ return;
++ }
++
++ levelsp = g_strsplit (levels, " ", 0);
++ g_free (levels);
++
++ frpr = g_strsplit (levelsp[0], "/", 0); /* MAX */
++ if (frpr && frpr[0] != NULL)
++ fmax = atoi (frpr[0]);
++ g_strfreev (frpr);
++
++ for (l = levelsp; l && *l; l++) /* Walk to the last frequency */
++ ;
++
++ l --;
++ frpr = g_strsplit (*l, "/", 0);
++ if (frpr && frpr[0] != NULL)
++ fmin = atoi (frpr[0]);
++
++ g_strfreev (frpr);
++ g_strfreev (levelsp);
++
++ len = sizeof (ifreq);
++ if (sysctlbyname ("dev.cpu.0.freq", &ifreq, &len, NULL, 0) == -1) {
++ g_warning ("Failed to fetch data for dev.cpu.0.freq");
++ return;
++ }
++
++ if (ifreq == fmax)
++ governor = g_strdup ("performance");
++ else if (ifreq == fmin)
++ governor = g_strdup ("economy");
++ else
++ governor = g_strdup ("other");
++
++ fmax *= 1000;
++ fmin *= 1000;
++
++ g_object_set (G_OBJECT (cfq), "n_cpu", cpu,
++ "sc_max", fmax, "sc_min", fmin,
++ "governor", governor, NULL);
++
++ g_free (governor);
++}
+--- cpufreq/src/cpufreq-selector/main.c.orig Sun Apr 3 12:03:13 2005
++++ cpufreq/src/cpufreq-selector/main.c Sun Jul 3 17:16:19 2005
+@@ -17,6 +17,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 <glib-object.h>
+@@ -26,6 +27,9 @@
+ #include "cpufreq.h"
+ #include "cpufreq-sysfs.h"
+ #include "cpufreq-procfs.h"
++#ifdef __FreeBSD__
++#include "cpufreq-sysctl.h"
++#endif /* __FreeBSD__ */
+
+ gint
+ main (gint argc, gchar **argv)
+@@ -34,6 +38,9 @@ main (gint argc, gchar **argv)
+ static gint cpu = 0;
+ static gchar *governor = NULL;
+ static gulong frequency = 0;
++#ifdef __FreeBSD__
++ size_t len;
++#endif /* __FreeBSD__ */
+ GError *error = NULL;
+ CPUFreq *cfq;
+
+@@ -71,10 +78,15 @@ main (gint argc, gchar **argv)
+
+ g_option_context_free (context);
+
++#ifndef __FreeBSD__
+ if (g_file_test ("/sys/devices/system/cpu/cpu0/cpufreq", G_FILE_TEST_EXISTS)) { /* 2.6 kernel */
+ cfq = CPUFREQ (cpufreq_sysfs_new ());
+ } else if (g_file_test ("/proc/cpufreq", G_FILE_TEST_EXISTS)) { /* 2.4 kernel */
+ cfq = CPUFREQ (cpufreq_procfs_new ());
++#else
++ if (sysctlbyname ("dev.cpu.0.freq", NULL, &len, NULL, 0) == 0) {
++ cfq = CPUFREQ (cpufreq_sysctl_new ());
++#endif /* __FreeBSD__ */
+ } else {
+ g_print ("No cpufreq support\n");
+ return 1;
+--- cpufreq/src/cpufreq-selector/Makefile.in.orig Tue Oct 4 00:21:25 2005
++++ cpufreq/src/cpufreq-selector/Makefile.in Tue Oct 4 00:27:54 2005
+@@ -55,7 +55,7 @@
+ PROGRAMS = $(bin_PROGRAMS)
+ am_cpufreq_selector_OBJECTS = cpufreq.$(OBJEXT) \
+ cpufreq-sysfs.$(OBJEXT) cpufreq-procfs.$(OBJEXT) \
+- main.$(OBJEXT)
++ cpufreq-sysctl.$(OBJEXT) main.$(OBJEXT)
+ cpufreq_selector_OBJECTS = $(am_cpufreq_selector_OBJECTS)
+ am__DEPENDENCIES_1 =
+ cpufreq_selector_DEPENDENCIES = $(am__DEPENDENCIES_1)
+@@ -64,6 +64,7 @@
+ am__depfiles_maybe = depfiles
+ @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/cpufreq-procfs.Po \
+ @AMDEP_TRUE@ ./$(DEPDIR)/cpufreq-sysfs.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cpufreq-sysctl.Po \
+ @AMDEP_TRUE@ ./$(DEPDIR)/cpufreq.Po ./$(DEPDIR)/main.Po
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@@ -332,6 +333,7 @@
+ cpufreq.c cpufreq.h \
+ cpufreq-sysfs.c cpufreq-sysfs.h \
+ cpufreq-procfs.c cpufreq-procfs.h \
++ cpufreq-sysctl.c cpufreq-sysctl.h \
+ main.c
+
+ cpufreq_selector_LDADD = $(CPUFREQ_SELECTOR_LIBS) -lpopt
+@@ -407,6 +409,7 @@
+ -rm -f *.tab.c
+
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpufreq-procfs.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpufreq-sysctl.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpufreq-sysfs.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpufreq.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@