-#include "conky.h"
+/** freebsd.c
+ * Contains FreeBSD specific stuff
+ *
+ * $Id$
+ */
+
#include <fcntl.h>
#include <limits.h>
#include <stdio.h>
#include <sys/socket.h>
#include <ifaddrs.h>
+#include "conky.h"
+
#define GETSYSCTL(name, var) getsysctl(name, &(var), sizeof(var))
#define KELVTOC(x) ((x - 2732) / 10.0)
return ((tscstop - tscstart) / ((stop - start) / 1000.0));
}
-#endif
-
+#endif /* i386 */
static int getsysctl(char *name, void *ptr, size_t len)
{
struct ifmibdata *data = NULL;
size_t len = 0;
-
static int swapmode(int *retavail, int *retfree)
{
int n;
return n;
}
-
void prepare_update()
{
}
-/*double get_uptime() */
void update_uptime()
{
int mib[2] = { CTL_KERN, KERN_BOOTTIME };
}
}
-
void update_meminfo()
{
int total_pages, inactive_pages, free_pages;
void update_total_processes()
{
- /* It's easier to use kvm here than sysctl */
-
int n_processes;
static int kd_init = 1;
char *get_freq()
{
-#if defined(i386) || defined(__i386__)
- int i;
+ /* First, try to obtain CPU frequency via dev.cpu.0.freq sysctl
+ * (cpufreq(4)). If failed, do i386 magic. */
+ int freq;
char *cpuspeed;
- if ((cpuspeed = (char *) malloc(16)) == NULL) {
+ if ((cpuspeed = malloc(8)) == NULL)
CRIT_ERR("get_freq()");
+
+ if (GETSYSCTL("dev.cpu.0.freq", freq) == 0) {
+ snprintf(cpuspeed, 8, "%d", freq);
+ return cpuspeed;
+ }
+#if defined(i386) || defined(__i386__)
+ else {
+ int i;
+
+ i = 0;
+ if ((i = get_cpu_speed()) > 0) {
+ if (i < 1000000) {
+ i += 50; /* for rounding */
+ snprintf(cpuspeed, 8, "%d.%d", i / 1000,
+ (i / 100) % 10);
+ } else
+ snprintf(cpuspeed, 8, "%d", i / 1000);
+ } else
+ cpuspeed = "";
+
+ return cpuspeed;
}
-
- i = 0;
- if ((i = get_cpu_speed()) > 0) {
- if (i < 1000000) {
- i += 50; /* for rounding */
- snprintf(cpuspeed, 15, "%d.%d MHz", i / 1000,
- (i / 100) % 10);
- } else {
- snprintf(cpuspeed, 15, "%d MHz", i / 1000);
- }
- } else {
- cpuspeed = "";
- }
-
- return cpuspeed;
#else
return "";
-#endif
+#endif /* i386 */
}
void update_top()