--- xfce4-systemload-plugin-1.0.0/panel-plugin/cpu.c.orig 2010-12-09 16:04:10.000000000 +0000 +++ xfce4-systemload-plugin-1.0.0/panel-plugin/cpu.c 2011-10-08 17:01:57.195888231 +0100 @@ -252,6 +252,62 @@ gulong read_cpuload() return cpu_used; } +#elif defined(__sun__) + +#include +kstat_ctl_t *kc; +gulong cpu_used; +gulong oldtotal = 0; +gulong oldused = 0; + +void init_stats() +{ + kc = kstat_open(); +} + +gulong read_cpuload() +{ + gulong used, total; + kstat_t *ksp; + kstat_named_t *knp; + + if (!kc) + { + init_stats(); + } + kstat_chain_update(kc); + used = 0; + total = 0; + for (ksp = kc->kc_chain; ksp != NULL; ksp = ksp->ks_next) + { + if (!strcmp(ksp->ks_module, "cpu") && !strcmp(ksp->ks_name, "sys")) + { + kstat_read(kc, ksp, NULL); + knp = kstat_data_lookup(ksp, "cpu_ticks_user"); + used += knp->value.ui64; + total += knp->value.ui64; + knp = kstat_data_lookup(ksp, "cpu_ticks_kernel"); + used += knp->value.ui64; + total += knp->value.ui64; + knp = kstat_data_lookup(ksp, "cpu_ticks_idle"); + total += knp->value.ui64; + } + } + + printf("CPU: %d %d %d %d\n", used, oldused, total, oldtotal); + + if ((total - oldtotal) != 0) + { + cpu_used = (100 * (double)(used - oldused)) / (double)(total - oldtotal); + } + else + { + cpu_used = 0; + } + oldused = used; + oldtotal = total; + return cpu_used; +} #else #error "Your platform is not yet supported" --- xfce4-systemload-plugin-1.0.0/panel-plugin/memswap.c.orig 2010-12-09 16:04:10.000000000 +0000 +++ xfce4-systemload-plugin-1.0.0/panel-plugin/memswap.c 2011-10-08 16:50:14.004764333 +0100 @@ -467,7 +467,68 @@ gint read_memswap(gulong *mem, gulong *s return 0; } +#elif defined (__sun__) + +#include +#include +#include +kstat_ctl_t *kc; + +static size_t MTotal = 0; +static size_t MFree = 0; +static size_t MUsed = 0; +static size_t STotal = 0; +static size_t SFree = 0; +static size_t SUsed = 0; + +void mem_init_stats() +{ + kc = kstat_open(); +} + +gint read_memswap(gulong *mem, gulong *swap, gulong *MT, gulong *MU, gulong *ST, gulong *SU) +{ + long pagesize; + struct anoninfo swapinfo; + kstat_t *ksp; + kstat_named_t *knp; + + pagesize = (long)(sysconf(_SC_PAGESIZE)); + + /* FIXME use real numbers, not fake data */ + if (!kc) + { + mem_init_stats(); + } + + if (ksp = kstat_lookup(kc, "unix", 0, "system_pages")) + { + kstat_read(kc, ksp, NULL); + knp = kstat_data_lookup(ksp, "physmem"); + MTotal = (pagesize * knp->value.ui64) >> 10; + knp = kstat_data_lookup(ksp, "freemem"); + MUsed = MTotal - ((pagesize * knp->value.ui64) >> 10); + } + if (swapctl(SC_AINFO, &swapinfo) == 0) { + STotal = (swapinfo.ani_max * pagesize) >> 10; + SUsed = ((swapinfo.ani_max - swapinfo.ani_free) * pagesize) >> 10; + *swap = SUsed * 100 / STotal; + } else { + STotal = 0; + SUsed = 0; + *swap = 0; + } + + *mem = MUsed * 100 / MTotal; + + *MT = MTotal; + *MU = MUsed; + *ST = STotal; + *SU = SUsed; + + return 0; +} + #else -#error "Your platform is not yet support" +#error "Your platform is not yet supported" #endif - --- xfce4-systemload-plugin-1.0.0/panel-plugin/uptime.c.orig 2010-12-09 16:04:10.000000000 +0000 +++ xfce4-systemload-plugin-1.0.0/panel-plugin/uptime.c 2011-10-08 16:50:14.008626112 +0100 @@ -110,4 +110,32 @@ gulong read_uptime() return uptime; } +#elif defined(__sun__) + +#include + +gulong read_uptime() +{ + kstat_ctl_t *kc; + kstat_t *ks; + kstat_named_t *boottime; + time_t now; + gulong uptime; + + if (((kc = kstat_open()) != 0) && ((ks = kstat_lookup(kc, "unix", 0, "system_misc")) != NULL) && (kstat_read(kc, ks, NULL) != -1) && ((boottime = kstat_data_lookup(ks, "boot_time")) != NULL)) { + time(&now); + uptime = now - boottime->value.ul; + kstat_close(kc); + } + else + { + g_warning("Cannot get boot_time"); + uptime = 0; + } + + return uptime; +} + +#else +#error "Your platform is not yet supported" #endif