diff options
author | Olivier Duchateau <olivierd@FreeBSD.org> | 2017-01-24 21:37:57 +0000 |
---|---|---|
committer | Olivier Duchateau <olivierd@FreeBSD.org> | 2017-01-24 21:37:57 +0000 |
commit | bd76ecd8df91bfc1941d31ce49c86a0b1aeb8f6b (patch) | |
tree | 8c9e37db45dbc1b5caf6d8165b2599849ae973a2 /x11/lxpanel/files/patch-plugins_cpufreq_cpufreq.c | |
parent | - Update to 0.5.3 (diff) |
- Update to 0.9.3
- Adjust dependencies
- Add WEATHER (set by default), and ALSA (unset) options
- Rewrite patches plugins in order to use sysctl calls instead the Linux
proc and sys file system
Notes
Notes:
svn path=/head/; revision=432391
Diffstat (limited to 'x11/lxpanel/files/patch-plugins_cpufreq_cpufreq.c')
-rw-r--r-- | x11/lxpanel/files/patch-plugins_cpufreq_cpufreq.c | 334 |
1 files changed, 334 insertions, 0 deletions
diff --git a/x11/lxpanel/files/patch-plugins_cpufreq_cpufreq.c b/x11/lxpanel/files/patch-plugins_cpufreq_cpufreq.c new file mode 100644 index 000000000000..7307c40ef526 --- /dev/null +++ b/x11/lxpanel/files/patch-plugins_cpufreq_cpufreq.c @@ -0,0 +1,334 @@ +--- plugins/cpufreq/cpufreq.c.orig 2015-05-06 19:44:51 UTC ++++ plugins/cpufreq/cpufreq.c +@@ -22,6 +22,9 @@ + #include <sys/types.h> + #include <stdio.h> + #include <stdlib.h> ++#if defined(__DragonFly__) || defined(__FreeBSD__) ++#include <sys/sysctl.h> ++#endif + #include <glib.h> + #include <glib/gi18n.h> + +@@ -33,6 +36,7 @@ + #include "dbg.h" + + #define PROC_ICON "cpufreq-icon" ++#if defined(__linux__) + #define SYSFS_CPU_DIRECTORY "/sys/devices/system/cpu" + #define SCALING_GOV "scaling_governor" + #define SCALING_AGOV "scaling_available_governors" +@@ -41,15 +45,19 @@ + #define SCALING_SETFREQ "scaling_setspeed" + #define SCALING_MAX "scaling_max_freq" + #define SCALING_MIN "scaling_min_freq" +- ++#endif + + typedef struct { + GtkWidget *main; + config_setting_t *settings; ++#if defined(__linux__) + GList *governors; + GList *cpus; +- int has_cpufreq; + char* cur_governor; ++#elif defined(__DragonFly__) || defined(__FreeBSD__) ++ int cpus; ++#endif ++ int has_cpufreq; + int cur_freq; + unsigned int timer; + //gboolean remember; +@@ -62,6 +70,7 @@ typedef struct { + + static void cpufreq_destructor(gpointer user_data); + ++#if defined(__linux__) + static void + get_cur_governor(cpufreq *cf){ + FILE *fp; +@@ -99,98 +108,6 @@ get_cur_freq(cpufreq *cf){ + } + } + +-/*static void +-get_governors(cpufreq *cf){ +- FILE *fp; +- GList *l; +- char buf[ 100 ], sstmp [ 256 ], c, bufl = 0; +- +- g_list_free(cf->governors); +- cf->governors = NULL; +- +- get_cur_governor(cf); +- +- if(cf->cpus == NULL){ +- cf->governors = NULL; +- return; +- } +- sprintf(sstmp,"%s/%s",cf->cpus->data, SCALING_AGOV); +- +- if (!(fp = fopen( sstmp, "r"))) { +- printf("cpufreq: cannot open %s\n",sstmp); +- return; +- } +- +- while((c = fgetc(fp)) != EOF){ +- if(c == ' '){ +- if(bufl > 1){ +- buf[bufl] = '\0'; +- cf->governors = g_list_append(cf->governors, strdup(buf)); +- } +- bufl = 0; +- buf[0] = '\0'; +- }else{ +- buf[bufl++] = c; +- } +- } +- +- fclose(fp); +-} +- +-static void +-cpufreq_set_freq(GtkWidget *widget, Param* p){ +- FILE *fp; +- char buf[ 100 ], sstmp [ 256 ]; +- +- if(strcmp(p->cf->cur_governor, "userspace")) return; +- +- sprintf(sstmp,"%s/%s",p->cf->cpus->data, SCALING_SETFREQ); +- if ((fp = fopen( sstmp, "w")) != NULL) { +- fprintf(fp,"%s",p->data); +- fclose(fp); +- } +-} +- +-static GtkWidget * +-frequency_menu(cpufreq *cf){ +- FILE *fp; +- Param* param; +- char buf[ 100 ], sstmp [ 256 ], c, bufl = 0; +- +- sprintf(sstmp,"%s/%s",cf->cpus->data, SCALING_AFREQ); +- +- if (!(fp = fopen( sstmp, "r"))) { +- printf("cpufreq: cannot open %s\n",sstmp); +- return 0; +- } +- +- GtkMenu* menu = GTK_MENU(gtk_menu_new()); +- GtkWidget* menuitem; +- +- while((c = fgetc(fp)) != EOF){ +- if(c == ' '){ +- if(bufl > 1){ +- buf[bufl] = '\0'; +- menuitem = gtk_menu_item_new_with_label(strdup(buf)); +- gtk_menu_append (GTK_MENU_SHELL (menu), menuitem); +- gtk_widget_show (menuitem); +- param = g_new0(Param, 1); +- param->data = strdup(buf); +- param->cf = cf; +- g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(cpufreq_set_freq), param); +- g_object_weak_ref(G_OBJECT(menuitem), (GWeakNotify)g_free, param); +- } +- bufl = 0; +- buf[0] = '\0'; +- }else{ +- buf[bufl++] = c; +- } +- } +- +- fclose(fp); +- return GTK_WIDGET(menu); +-}*/ +- + static void + get_cpus(cpufreq *cf) + { +@@ -227,72 +144,49 @@ get_cpus(cpufreq *cf) + } + g_dir_close(cpuDirectory); + } ++#elif defined(__DragonFly__) || defined(__FreeBSD__) ++static void ++get_cur_freq(cpufreq *cf) ++{ ++ int buf; ++ size_t length_buf = sizeof(int); + +-/*static void +-cpufreq_set_governor(GtkWidget *widget, Param* p){ +- FILE *fp; +- char buf[ 100 ], sstmp [ 256 ]; +- +- sprintf(sstmp, "%s/%s", p->cf->cpus->data, SCALING_GOV); +- if ((fp = fopen( sstmp, "w")) != NULL) { +- fprintf(fp,"%s",p->data); +- fclose(fp); +- } ++ if (sysctlbyname("dev.cpu.0.freq", &buf, &length_buf, NULL, 0) < 0) ++ cf->cur_freq = 0; ++ else ++ cf->cur_freq = buf; + } + +-static GtkWidget * +-cpufreq_menu(cpufreq *cf){ +- GList *l; +- GSList *group; +- char buff[100]; +- GtkMenuItem* menuitem; +- Param* param; +- +- GtkMenu* menu = GTK_MENU(gtk_menu_new()); +- g_signal_connect(menu, "selection-done", G_CALLBACK(gtk_widget_destroy), NULL); +- +- get_governors(cf); +- group = NULL; ++int ++detect_cpus_number(void) ++{ ++ static int mib[] = {CTL_HW, HW_NCPU}; ++ int buf; ++ size_t length_buf = sizeof(int); + +- if((cf->governors == NULL) || (!cf->has_cpufreq) || (cf->cur_governor == NULL)){ +- menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label("CPUFreq not supported")); +- gtk_menu_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); +- gtk_widget_show (GTK_WIDGET (menuitem)); +- return GTK_WIDGET(menu); +- } ++ if (sysctl(mib, 2, &buf, &length_buf, NULL, 0) < 0) ++ return 0; ++ else ++ return buf; ++} + +- if(strcmp(cf->cur_governor, "userspace") == 0){ +- menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label(" Frequency")); +- gtk_menu_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); +- gtk_widget_show (GTK_WIDGET (menuitem)); +- gtk_menu_item_set_submenu(menuitem, frequency_menu(cf)); +- menuitem = GTK_MENU_ITEM(gtk_separator_menu_item_new()); +- gtk_menu_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); +- gtk_widget_show (GTK_WIDGET(menuitem)); +- } ++static void ++get_cpus(cpufreq *cf) ++{ ++ int ncpus, buf; ++ size_t lenght_buf = sizeof(int); + +- for( l = cf->governors; l; l = l->next ) ++ ncpus = detect_cpus_number(); ++ cf->cpus = ncpus; ++ if (cf->cpus > 0) ++ cf->has_cpufreq = 1; ++ else + { +- if(strcmp((char*)l->data, cf->cur_governor) == 0){ +- sprintf(buff,"> %s", l->data); +- menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label(strdup(buff))); +- }else{ +- sprintf(buff," %s", l->data); +- menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label(strdup(buff))); +- } +- +- gtk_menu_shell_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); +- gtk_widget_show (GTK_WIDGET (menuitem)); +- param = g_new0(Param, 1); +- param->data = l->data; +- param->cf = cf; +- g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(cpufreq_set_governor), param); +- g_object_weak_ref(G_OBJECT(menuitem), (GWeakNotify) g_free, param); ++ cf->has_cpufreq = 0; ++ printf("cpufreq: no cpu found\n"); + } +- +- return GTK_WIDGET (menu); +-}*/ +- ++} ++#endif + + + static gboolean +@@ -318,12 +212,18 @@ _update_tooltip(cpufreq *cf) + char *tooltip; + + get_cur_freq(cf); ++#if defined(__linux__) + get_cur_governor(cf); ++#endif + + ENTER; + ++#if defined(__linux__) + tooltip = g_strdup_printf(_("Frequency: %d MHz\nGovernor: %s"), + cf->cur_freq / 1000, cf->cur_governor); ++#elif defined(__DragonFly__) || defined(__FreeBSD__) ++ tooltip = g_strdup_printf("Frequency: %d MHz", cf->cur_freq); ++#endif + gtk_widget_set_tooltip_text(cf->main, tooltip); + g_free(tooltip); + RET(TRUE); +@@ -344,8 +244,12 @@ static GtkWidget *cpufreq_constructor(LX + ENTER; + cf = g_new0(cpufreq, 1); + g_return_val_if_fail(cf != NULL, NULL); ++#if defined(__linux__) + cf->governors = NULL; + cf->cpus = NULL; ++#elif defined(__DragonFly__) || defined(__FreeBSD__) ++ cf->cpus = 0; ++#endif + cf->settings = settings; + + cf->main = lxpanel_button_new_for_icon(panel, PROC_ICON, NULL, NULL); +@@ -365,30 +269,14 @@ static GtkWidget *cpufreq_constructor(LX + RET(cf->main); + } + +-/* +-static gboolean applyConfig(gpointer user_data) +-{ +- cpufreq *cf = lxpanel_plugin_get_data(user_data); +- +- config_group_set_int(cf->settings, "Remember", cf->remember); +- return FALSE; +-} +- +-static GtkWidget *config(LXPanel *panel, GtkWidget *p, GtkWindow *parent) +-{ +- cpufreq *cf = lxpanel_plugin_get_data(p); +- return lxpanel_generic_config_dlg(_("CPUFreq frontend"), panel, applyConfig, p, +- _("Remember governor and frequency"), &cf->remember, CONF_TYPE_BOOL, +- NULL); +-} +-*/ +- + static void + cpufreq_destructor(gpointer user_data) + { + cpufreq *cf = (cpufreq *)user_data; ++#if defined(__linux__) + g_list_free ( cf->cpus ); + g_list_free ( cf->governors ); ++#endif + g_source_remove(cf->timer); + g_free(cf); + } +@@ -399,7 +287,11 @@ FM_DEFINE_MODULE(lxpanel_gtk, cpufreq) + /* Plugin descriptor. */ + LXPanelPluginInit fm_module_init_lxpanel_gtk = { + .name = N_("CPUFreq frontend"), ++#if defined(__linux__) + .description = N_("Display CPU frequency and allow to change governors and frequency"), ++#elif defined(__DragonFly__) || defined(__FreeBSD__) ++ .description = "Display CPU frequency", ++#endif + + .new_instance = cpufreq_constructor, + //.config = config, |