On 09/30/12 14:11, rustyBSD wrote:
are you sure about fresqet.c ? Just returning 1 ?
Not really.

I'm looking for a way to change the cpu freq
Mmhh...

The problem with openbsd's sysctl is that
we get cpu freq in Mhz, but we can only set
it in percents - and not up to 100%.

So I put percents instead of Mhz in the menu,
even if it sometimes causes some problems with
the "speedbar". But it works.

I'll continue later. You can commit these
patches.
--- e_mod_main.c        Mon Oct  1 07:42:45 2012
+++ e_mod_main.c        Mon Oct  1 07:43:43 2012
@@ -1,9 +1,8 @@
 #include "e.h"
 #include "e_mod_main.h"
 
-#ifdef __FreeBSD__
-#include <sys/types.h>
-#include <sys/sysctl.h>
+#if defined (__FreeBSD__) || defined (__OpenBSD__)
+# include <sys/sysctl.h>
 #endif
 
 /* gadcon requirements */
@@ -291,11 +290,17 @@
 
                   frequency = (long)l->data;
                   mi = e_menu_item_new(mo);
+
+#ifdef __OpenBSD__
+                  snprintf(buf, sizeof(buf), _("%i %%"), frequency);
+#else
                   if (frequency < 1000000)
                     snprintf(buf, sizeof(buf), _("%i MHz"), frequency / 1000);
                   else
                     snprintf(buf, sizeof(buf), _("%'.1f GHz"),
                              frequency / 1000000.);
+#endif
+
                   buf[sizeof(buf) - 1] = 0;
                   e_menu_item_label_set(mi, buf);
                   e_menu_item_radio_set(mi, 1);
@@ -445,8 +451,10 @@
         return;
      }
 
-   // change it to "userspace"
+#ifndef __OpenBSD__
+   /* OpenBSD doesn't have governors */
    _cpufreq_set_governor("userspace");
+#endif
 
    snprintf(buf, sizeof(buf),
             "%s %s %i", cpufreq_config->set_exe_path, "frequency", frequency);
@@ -548,8 +556,40 @@
 {
    char buf[4096];
    Eina_List *l;
-   // FIXME: this sssumes all cores accept the same freqs/ might be wrong
-#ifdef __FreeBSD__
+   // FIXME: this assumes all cores accept the same freqs/ might be wrong
+
+#if defined (__OpenBSD__)
+   int freq, mib[] = {CTL_HW, HW_CPUSPEED};
+   size_t len = sizeof(freq);
+   int p;
+
+   if (sysctl(mib, 2, &freq, &len, NULL, 0) == 0)
+     {
+        if (s->frequencies)
+          {
+             eina_list_free(s->frequencies);
+             s->frequencies = NULL;
+          }
+
+        if (s->governors)
+          {
+             for (l = s->governors; l; l = l->next)
+               free(l->data);
+             eina_list_free(s->governors);
+             s->governors = NULL;
+          }
+
+        /* storing percents */
+        p = 100;
+        s->frequencies = eina_list_append(s->frequencies, (void *)p);
+        p = 75;
+        s->frequencies = eina_list_append(s->frequencies, (void *)p);
+        p = 50;
+        s->frequencies = eina_list_append(s->frequencies, (void *)p);
+        p = 25;
+        s->frequencies = eina_list_append(s->frequencies, (void *)p);
+     }
+#elif defined (__FreeBSD__)
    int freq, i;
    size_t len = 0;
    char *freqs, *pos, *q;
@@ -665,15 +705,28 @@
 static int
 _cpufreq_status_check_current(Status *s)
 {
-   char buf[4096];
-   int i;
-   FILE *f;
    int ret = 0;
    int frequency = 0;
-   int frequency_min = 0x7fffffff;
-   int frequency_max = 0;
-   int freqtot = 0;
-#ifdef __FreeBSD__
+
+#if defined (__OpenBSD__)
+   size_t len = sizeof(frequency);
+   int mib[] = {CTL_HW, HW_CPUSPEED};
+   s->active = 0;
+
+   _cpufreq_status_check_available(s);
+
+   if (sysctl(mib, 2, &frequency, &len, NULL, 0) == 0)
+     {
+        frequency *= 1000;
+        if (frequency != s->cur_frequency) ret = 1;
+        s->cur_frequency = frequency;
+        s->active = 1;
+     }
+
+   s->can_set_frequency = 1;
+   s->cur_governor = NULL;
+   s->cur_frequency = frequency;
+#elif defined (__FreeBSD__)
    int len = 4;
 
    s->active = 0;
@@ -690,6 +743,13 @@
    s->can_set_frequency = 1;
    s->cur_governor = NULL;
 #else
+   char buf[4096];
+   FILE *f;
+   int frequency_min = 0x7fffffff;
+   int frequency_max = 0;
+   int freqtot = 0;
+   int i;
+
    s->active = 0;
 
    _cpufreq_status_check_available(s);
@@ -724,7 +784,7 @@
 
 //  printf("%i | %i %i\n", frequency, frequency_min, frequency_max);
 
-   // FIXME: this sssumes all cores are on the same governor
+   // FIXME: this assumes all cores are on the same governor
    f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed", "r");
    if (f)
      {
--- freqset.c   Mon Oct  1 07:59:21 2012
+++ freqset.c   Mon Oct  1 07:46:15 2012
@@ -5,10 +5,15 @@
 #include <string.h>
 
 #ifdef __FreeBSD__
-#include <sys/types.h>
-#include <sys/sysctl.h>
+# include <sys/sysctl.h>
 #endif
 
+#ifdef __OpenBSD__
+# include <sys/param.h>
+# include <sys/resource.h>
+# include <sys/sysctl.h>
+#endif
+
 static int sys_cpu_setall(const char *control, const char *value);
 static int sys_cpufreq_set(const char *control, const char *value);
 
@@ -25,9 +30,29 @@
    if (seteuid(0))
      {
         fprintf(stderr, "Unable to assume root privileges\n");
+        return 1;
      }
 
-#ifdef __FreeBSD__
+#if defined __OpenBSD__
+   if (!strcmp(argv[1], "frequency"))
+     {
+        int mib[] = {CTL_HW, HW_SETPERF};
+        int new_perf = atoi(argv[2]);
+        size_t len = sizeof(new_perf);
+
+        if (sysctl(mib, 2, NULL, 0, &new_perf, len) == -1)
+          {
+             return 1;
+          }
+
+        return 0;
+     }
+   else
+     {
+        fprintf(stderr, "Unknown command (%s %s).\n", argv[1], argv[2]);
+        return 1;
+     }
+#elif defined __FreeBSD__
    if (!strcmp(argv[1], "frequency"))
      {
         int new_frequency = atoi(argv[2]);
------------------------------------------------------------------------------
Got visibility?
Most devs has no idea what their production app looks like.
Find out how fast your code is with AppDynamics Lite.
http://ad.doubleclick.net/clk;262219671;13503038;y?
http://info.appdynamics.com/FreeJavaPerformanceDownload.html
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to