freebsd-ports/x11/gnome-applets/files/patch-cpufreq-selector-freebsd
Joe Marcus Clarke e18151212d Presenting GNOME 2.12 for FreeBSD. The release is chock full of bug fixes
and new features.  Don't believe me?  Then see for yourself at
http://www.gnome.org/start/2.12/notes/en/.

DO NOT USE portupgrade by itself to upgrade to GNOME 2.12.  Instead, use
the gnome_upgrade.sh script from
http://www.marcuscom.com/downloads/gnome_upgrade212.sh.  This script will
circumvent some potential pitfalls users can see if they use portupgrade
by itself.

In keeping with tradition, GNOME 2.12 for FreeBSD comes with a special
splash screen.  The winner of this release's contest is
Dominique Goncalves <dominique.goncalves@gmail.com>.  His splash screen
was inspired by http://art.gnome.org/contests/2.12-splash/83.

The FreeBSD GNOME Team would lank to thank the following users for
their contributions to this release:

Matthew Luckie <mjl@luckie.org.nz>
ade
sajd on #freebsd-gnome
Caelian on #freebsd-gnome
mnag
Yasuda Keisuke <kysd@po.harenet.ne.jp>
Mark Hobden <markhobden@gmail.com>
Sergey Akifyev <asa@agava.com>
Andreas Kohn

For more information on GNOME on FreeBSD, checkout
http://www.FreeBSD.org/gnome/.  The 2.12 documentation will be
posted shortly.
2005-11-05 04:53:48 +00:00

373 lines
11 KiB
Text
Raw Blame History

--- 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<72>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@