PERFORCE change 125329 for review
Constantine A. Murenin
cnst at FreeBSD.org
Sat Aug 18 19:50:47 PDT 2007
http://perforce.freebsd.org/chv.cgi?CH=125329
Change 125329 by cnst at dale on 2007/08/19 02:50:29
convert coretemp(4) to sysctl hw.sensors framework.
Values can be monitored via sysctl(3) in systat(1) sensors display,
sensorsd(8) etc.
Affected files ...
.. //depot/projects/soc2007/cnst-sensors/sys.dev.coretemp/coretemp.c#4 edit
Differences ...
==== //depot/projects/soc2007/cnst-sensors/sys.dev.coretemp/coretemp.c#4 (text+ko) ====
@@ -42,7 +42,7 @@
#include <sys/module.h>
#include <sys/conf.h>
#include <sys/kernel.h>
-#include <sys/sysctl.h>
+#include <sys/sensors.h>
#include <sys/proc.h> /* for curthread */
#include <sys/sched.h>
@@ -53,9 +53,10 @@
extern int smp_cpus;
struct coretemp_softc {
- device_t sc_dev;
- int sc_tjmax;
- struct sysctl_oid *sc_oid;
+ struct ksensordev sc_sensordev;
+ struct ksensor sc_sensor;
+ device_t sc_dev;
+ int sc_tjmax;
};
/*
@@ -67,7 +68,7 @@
static int coretemp_detach(device_t dev);
static int coretemp_get_temp(device_t dev);
-static int coretemp_get_temp_sysctl(SYSCTL_HANDLER_ARGS);
+static void coretemp_refresh(void *arg);
static device_method_t coretemp_methods[] = {
/* Device interface */
@@ -180,14 +181,17 @@
sc->sc_tjmax = 100;
/*
- * Add the "temperature" MIB to dev.cpu.N.
+ * Add hw.sensors.cpuN.temp0 MIB.
*/
- sc->sc_oid = SYSCTL_ADD_PROC(device_get_sysctl_ctx(pdev),
- SYSCTL_CHILDREN(device_get_sysctl_tree(pdev)),
- OID_AUTO, "temperature",
- CTLTYPE_INT | CTLFLAG_RD,
- dev, 0, coretemp_get_temp_sysctl, "I",
- "Current temperature in degC");
+ strlcpy(sc->sc_sensordev.xname, device_get_nameunit(pdev),
+ sizeof(sc->sc_sensordev.xname));
+ sc->sc_sensor.type = SENSOR_TEMP;
+ sensor_attach(&sc->sc_sensordev, &sc->sc_sensor);
+ if (sensor_task_register(sc, coretemp_refresh, 2)) {
+ device_printf(dev, "unable to register update task\n");
+ return (ENXIO);
+ }
+ sensordev_install(&sc->sc_sensordev);
return (0);
}
@@ -197,7 +201,8 @@
{
struct coretemp_softc *sc = device_get_softc(dev);
- sysctl_remove_oid(sc->sc_oid, 1, 0);
+ sensordev_deinstall(&sc->sc_sensordev);
+ sensor_task_unregister(sc);
return (0);
}
@@ -268,13 +273,21 @@
return (-1);
}
-static int
-coretemp_get_temp_sysctl(SYSCTL_HANDLER_ARGS)
+static void
+coretemp_refresh(void *arg)
{
- device_t dev = (device_t) arg1;
+ struct coretemp_softc *sc = arg;
+ device_t dev = sc->sc_dev;
+ struct ksensor *s = &sc->sc_sensor;
int temp;
temp = coretemp_get_temp(dev);
- return (sysctl_handle_int(oidp, &temp, 0, req));
+ if (temp == -1) {
+ s->flags |= SENSOR_FINVALID;
+ s->value = 0;
+ } else {
+ s->flags &= ~SENSOR_FINVALID;
+ s->value = temp * 1e6 + 273.15e6;
+ }
}
More information about the p4-projects
mailing list