Module Name:    src
Committed By:   pgoyette
Date:           Sun Feb 14 23:30:52 UTC 2010

Modified Files:
        src/sys/dev/sysmon: sysmon_envsys_events.c

Log Message:
Replace large amount of replicated code with a macro to improve readability.


To generate a diff of this commit:
cvs rdiff -u -r1.82 -r1.83 src/sys/dev/sysmon/sysmon_envsys_events.c

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_events.c
diff -u src/sys/dev/sysmon/sysmon_envsys_events.c:1.82 src/sys/dev/sysmon/sysmon_envsys_events.c:1.83
--- src/sys/dev/sysmon/sysmon_envsys_events.c:1.82	Sun Feb 14 23:06:02 2010
+++ src/sys/dev/sysmon/sysmon_envsys_events.c	Sun Feb 14 23:30:52 2010
@@ -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,126 +218,39 @@
 	/*
 	 * 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;
-	}
-
-	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;
-	}
-
-	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;
-	}
-
-	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;
+#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;					\
 	}
 
+	/* 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);
+
+	/* %Capacity-based limits */
+	LIMIT_OP("warning-capacity",  sel_warnmin,  PROP_BATTWARN);
+	LIMIT_OP("critical-capacity", sel_critmin,  PROP_BATTCAP);
+
+#undef LIMIT_OP
+
 	if (props & PROP_DRIVER_LIMITS)
 		edata->upropset |= PROP_DRIVER_LIMITS;
 	else
@@ -734,6 +647,11 @@
 			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;
 

Reply via email to