--- 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; @@ -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,