Module Name: src Committed By: pgoyette Date: Fri Mar 26 20:31:06 UTC 2010
Modified Files: src/sys/dev/sysmon: sysmon_envsys.c sysmonvar.h Log Message: Add a routine to iterate over all the sensors on the system. This will be needed to update acpiapm_get_powstat() which is currently slightly broken due to recent rearrangement of acpi_bat(4)'s sensors. (This approach is in lieu of exporting proplists between kernel entities, and avoids exposing some internal sysmon_envsys details.) To generate a diff of this commit: cvs rdiff -u -r1.99 -r1.100 src/sys/dev/sysmon/sysmon_envsys.c cvs rdiff -u -r1.34 -r1.35 src/sys/dev/sysmon/sysmonvar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/sysmon/sysmon_envsys.c diff -u src/sys/dev/sysmon/sysmon_envsys.c:1.99 src/sys/dev/sysmon/sysmon_envsys.c:1.100 --- src/sys/dev/sysmon/sysmon_envsys.c:1.99 Fri Mar 26 12:36:59 2010 +++ src/sys/dev/sysmon/sysmon_envsys.c Fri Mar 26 20:31:06 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sysmon_envsys.c,v 1.99 2010/03/26 12:36:59 pgoyette Exp $ */ +/* $NetBSD: sysmon_envsys.c,v 1.100 2010/03/26 20:31:06 pgoyette Exp $ */ /*- * Copyright (c) 2007, 2008 Juan Romero Pardines. @@ -64,7 +64,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.99 2010/03/26 12:36:59 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.100 2010/03/26 20:31:06 pgoyette Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -2001,3 +2001,30 @@ return error; } + +/* + * + sysmon_envsys_foreach_sensor + * + * Walk through the devices' sensor lists and execute the callback. + * If the callback returns false, the remainder of the current + * device's sensors are skipped. + */ +void +sysmon_envsys_foreach_sensor(bool(*func)(struct sysmon_envsys *, + envsys_data_t *, void*), void *arg) +{ + struct sysmon_envsys *sme; + envsys_data_t *sensor; + + mutex_enter(&sme_global_mtx); + LIST_FOREACH(sme, &sysmon_envsys_list, sme_list) { + + mutex_enter(&sme->sme_mtx); + TAILQ_FOREACH(sensor, &sme->sme_sensors_list, sensors_head) { + if ((*func)(sme, sensor, arg)) + break; + } + mutex_exit(&sme->sme_mtx); + } + mutex_exit(&sme_global_mtx); +} Index: src/sys/dev/sysmon/sysmonvar.h diff -u src/sys/dev/sysmon/sysmonvar.h:1.34 src/sys/dev/sysmon/sysmonvar.h:1.35 --- src/sys/dev/sysmon/sysmonvar.h:1.34 Fri Mar 19 02:19:13 2010 +++ src/sys/dev/sysmon/sysmonvar.h Fri Mar 26 20:31:06 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sysmonvar.h,v 1.34 2010/03/19 02:19:13 pgoyette Exp $ */ +/* $NetBSD: sysmonvar.h,v 1.35 2010/03/26 20:31:06 pgoyette Exp $ */ /*- * Copyright (c) 2000 Zembu Labs, Inc. @@ -208,6 +208,9 @@ void sysmon_envsys_sensor_event(struct sysmon_envsys *, envsys_data_t *, int); +void sysmon_envsys_foreach_sensor(bool(*)(struct sysmon_envsys *, + envsys_data_t *, void*), void *); + void sysmon_envsys_init(void); /*****************************************************************************