summaryrefslogtreecommitdiff
path: root/sys/dev/sysmon
diff options
context:
space:
mode:
authorpgoyette <pgoyette@NetBSD.org>2010-02-14 23:30:52 +0000
committerpgoyette <pgoyette@NetBSD.org>2010-02-14 23:30:52 +0000
commitde08bb89f29f74b1ad988d33550b3e53bcb756ca (patch)
treeec6cf9ec43322e03e6a30270e2c00f5099288b3b /sys/dev/sysmon
parent6ac583dc3239aebe8ea1ed63dfb4552db4b7b7de (diff)
Replace large amount of replicated code with a macro to improve readability.
Diffstat (limited to 'sys/dev/sysmon')
-rw-r--r--sys/dev/sysmon/sysmon_envsys_events.c152
1 files changed, 35 insertions, 117 deletions
diff --git a/sys/dev/sysmon/sysmon_envsys_events.c b/sys/dev/sysmon/sysmon_envsys_events.c
index 8d262498efe..94ce63ef1b5 100644
--- a/sys/dev/sysmon/sysmon_envsys_events.c
+++ b/sys/dev/sysmon/sysmon_envsys_events.c
@@ -1,4 +1,4 @@
-/* $NetBSD: sysmon_envsys_events.c,v 1.82 2010/02/14 23:06:02 pgoyette Exp $ */
+/* $NetBSD: sysmon_envsys_events.c,v 1.83 2010/02/14 23:30:52 pgoyette Exp $ */
/*-
* Copyright (c) 2007, 2008 Juan Romero Pardines.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys_events.c,v 1.82 2010/02/14 23:06:02 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys_events.c,v 1.83 2010/02/14 23:30:52 pgoyette Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -218,125 +218,38 @@ sme_event_register(prop_dictionary_t sdict, envsys_data_t *edata,
/*
* Limit operation requested.
*/
- if (props & PROP_CRITMAX) {
- objkey = "critical-max";
- obj = prop_dictionary_get(sdict, objkey);
- if (obj && prop_object_type(obj) != PROP_TYPE_NUMBER) {
- DPRINTF(("%s: (%s) %s object not TYPE_NUMBER\n",
- __func__, sme->sme_name, objkey));
- error = ENOTSUP;
- } else {
- edata->limits.sel_critmax = lims->sel_critmax;
- error = sme_sensor_upint32(sdict, objkey,
- lims->sel_critmax);
- DPRINTF(("%s: (%s) event [sensor=%s type=%d] "
- "(%s updated)\n", __func__, sme->sme_name,
- edata->desc, crittype, objkey));
- }
- if (error && error != EEXIST)
- goto out;
- edata->upropset |= PROP_CRITMAX;
- }
-
- if (props & PROP_WARNMAX) {
- objkey = "warning-max";
- obj = prop_dictionary_get(sdict, objkey);
- if (obj && prop_object_type(obj) != PROP_TYPE_NUMBER) {
- DPRINTF(("%s: (%s) %s object not TYPE_NUMBER\n",
- __func__, sme->sme_name, objkey));
- error = ENOTSUP;
- } else {
- edata->limits.sel_warnmax = lims->sel_warnmax;
- error = sme_sensor_upint32(sdict, objkey,
- lims->sel_warnmax);
- DPRINTF(("%s: (%s) event [sensor=%s type=%d] "
- "(%s updated)\n", __func__, sme->sme_name,
- edata->desc, crittype, objkey));
- }
- if (error && error != EEXIST)
- goto out;
- edata->upropset |= PROP_WARNMAX;
- }
-
- if (props & PROP_WARNMIN) {
- objkey = "warning-min";
- obj = prop_dictionary_get(sdict, objkey);
- if (obj && prop_object_type(obj) != PROP_TYPE_NUMBER) {
- DPRINTF(("%s: (%s) %s object not TYPE_NUMBER\n",
- __func__, sme->sme_name, objkey));
- error = ENOTSUP;
- } else {
- edata->limits.sel_warnmin = lims->sel_warnmin;
- error = sme_sensor_upint32(sdict, objkey,
- lims->sel_warnmin);
- DPRINTF(("%s: (%s) event [sensor=%s type=%d] "
- "(%s updated)\n", __func__, sme->sme_name,
- edata->desc, crittype, objkey));
- }
- if (error && error != EEXIST)
- goto out;
- edata->upropset |= PROP_WARNMIN;
+#define LIMIT_OP(k, l, p) \
+ if (props & p) { \
+ objkey = k; \
+ obj = prop_dictionary_get(sdict, objkey); \
+ if (obj != NULL && \
+ prop_object_type(obj) != PROP_TYPE_NUMBER) { \
+ DPRINTF(("%s: (%s) %s object no TYPE_NUMBER\n", \
+ __func__, sme->sme_name, objkey)); \
+ error = ENOTSUP; \
+ } else { \
+ edata->limits.l = lims->l; \
+ error = sme_sensor_upint32(sdict, objkey,lims->l); \
+ DPRINTF(("%s: (%s) event [sensor=%s type=%d] " \
+ "(%s updated)\n", __func__, sme->sme_name, \
+ edata->desc, crittype, objkey)); \
+ } \
+ if (error && error != EEXIST) \
+ goto out; \
+ edata->upropset |= p; \
}
- if (props & PROP_CRITMIN) {
- objkey = "critical-min";
- obj = prop_dictionary_get(sdict, objkey);
- if (obj && prop_object_type(obj) != PROP_TYPE_NUMBER) {
- DPRINTF(("%s: (%s) %s object not TYPE_NUMBER\n",
- __func__, sme->sme_name, objkey));
- error = ENOTSUP;
- } else {
- edata->limits.sel_critmin = lims->sel_critmin;
- error = sme_sensor_upint32(sdict, objkey,
- lims->sel_critmin);
- DPRINTF(("%s: (%s) event [sensor=%s type=%d] "
- "(%s updated)\n", __func__, sme->sme_name,
- edata->desc, crittype, objkey));
- }
- if (error && error != EEXIST)
- goto out;
- edata->upropset |= PROP_CRITMIN;
- }
+ /* Value-based limits */
+ LIMIT_OP("critical-max", sel_critmax, PROP_CRITMAX);
+ LIMIT_OP("warning-max", sel_warnmax, PROP_WARNMAX);
+ LIMIT_OP("warning-min", sel_warnmin, PROP_WARNMIN);
+ LIMIT_OP("critical-min", sel_critmin, PROP_CRITMIN);
- if (props & PROP_BATTWARN) {
- objkey = "warning-capacity";
- obj = prop_dictionary_get(sdict, objkey);
- if (obj && prop_object_type(obj) != PROP_TYPE_NUMBER) {
- DPRINTF(("%s: (%s) %s object not TYPE_NUMBER\n",
- __func__, sme->sme_name, objkey));
- error = ENOTSUP;
- } else {
- edata->limits.sel_warnmin = lims->sel_warnmin;
- error = sme_sensor_upint32(sdict, objkey,
- lims->sel_warnmin);
- DPRINTF(("%s: (%s) event [sensor=%s type=%d] "
- "(%s updated)\n", __func__, sme->sme_name,
- edata->desc, crittype, objkey));
- }
- if (error && error != EEXIST)
- goto out;
- edata->upropset |= PROP_BATTWARN;
- }
+ /* %Capacity-based limits */
+ LIMIT_OP("warning-capacity", sel_warnmin, PROP_BATTWARN);
+ LIMIT_OP("critical-capacity", sel_critmin, PROP_BATTCAP);
- if (props & PROP_BATTCAP) {
- objkey = "critical-capacity";
- obj = prop_dictionary_get(sdict, objkey);
- if (obj && prop_object_type(obj) != PROP_TYPE_NUMBER) {
- DPRINTF(("%s: (%s) %s object not TYPE_NUMBER\n",
- __func__, sme->sme_name, objkey));
- error = ENOTSUP;
- } else {
- edata->limits.sel_critmin = lims->sel_critmin;
- error = sme_sensor_upint32(sdict, objkey,
- lims->sel_critmin);
- DPRINTF(("%s: (%s) event [sensor=%s type=%d] "
- "(%s updated)\n", __func__, sme->sme_name,
- edata->desc, crittype, objkey));
- }
- if (error && error != EEXIST)
- goto out;
- edata->upropset |= PROP_BATTCAP;
- }
+#undef LIMIT_OP
if (props & PROP_DRIVER_LIMITS)
edata->upropset |= PROP_DRIVER_LIMITS;
@@ -734,6 +647,11 @@ sme_events_worker(struct work *wk, void *arg)
sysmon_penvsys_event(&see->see_pes, sse[i].event);
see->see_evsent = edata->state;
+ DPRINTFOBJ(("%s: (%s) desc=%s sensor=%d state=%d send_ev=%d\n",
+ __func__, sme->sme_name, edata->desc, edata->sensor,
+ edata->state,
+ (edata->state == ENVSYS_SVALID) ? PENVSYS_EVENT_NORMAL :
+ sse[i].event));
break;