Module Name:    src
Committed By:   riz
Date:           Wed Oct 17 21:21:44 UTC 2012

Modified Files:
        src/etc/powerd/scripts [netbsd-6]: sensor_indicator
        src/sys/dev/sysmon [netbsd-6]: sysmon_envsys_events.c
            sysmon_envsys_tables.c sysmon_envsysvar.h
        src/sys/sys [netbsd-6]: envsys.h

Log Message:
Pull up following revision(s) (requested by pgoyette in ticket #545):
        etc/powerd/scripts/sensor_indicator: revision 1.5
        sys/dev/sysmon/sysmon_envsys_tables.c: revision 1.11
        sys/sys/envsys.h: revision 1.32
        sys/dev/sysmon/sysmon_envsysvar.h: revision 1.43
        sys/dev/sysmon/sysmon_envsys_events.c: revision 1.104
Provide names for the values associated with INDICATOR sensors.
1. Enable use of FMONSTCHANGED events for INDICATOR sensors
2. Update handling of FMONCRITICAL event reporting.   The state
    transition does not require a corresponding change in value.
With these changes, you can now have an INDICATOR sensor that
reports the presence or absence of a device, and (if the device
is present) separately monitor it for proper functioning.
Should address the concerns expressed recently with the commit
of changes to wmi(4) BBU handling.
Handle any reports of state changes for INDICATORs


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.4.32.1 src/etc/powerd/scripts/sensor_indicator
cvs rdiff -u -r1.98.8.1 -r1.98.8.2 src/sys/dev/sysmon/sysmon_envsys_events.c
cvs rdiff -u -r1.10 -r1.10.8.1 src/sys/dev/sysmon/sysmon_envsys_tables.c
cvs rdiff -u -r1.40.8.1 -r1.40.8.2 src/sys/dev/sysmon/sysmon_envsysvar.h
cvs rdiff -u -r1.31 -r1.31.16.1 src/sys/sys/envsys.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/etc/powerd/scripts/sensor_indicator
diff -u src/etc/powerd/scripts/sensor_indicator:1.4 src/etc/powerd/scripts/sensor_indicator:1.4.32.1
--- src/etc/powerd/scripts/sensor_indicator:1.4	Thu Oct 11 00:30:47 2007
+++ src/etc/powerd/scripts/sensor_indicator	Wed Oct 17 21:21:43 2012
@@ -1,6 +1,6 @@
 #!/bin/sh -
 #
-#	$NetBSD: sensor_indicator,v 1.4 2007/10/11 00:30:47 xtraeme Exp $
+#	$NetBSD: sensor_indicator,v 1.4.32.1 2012/10/17 21:21:43 riz Exp $
 #
 # Generic script for indicator and integer sensors.
 #
@@ -33,6 +33,10 @@ warning-over)
 	logger -p warning "${0}: ($1) warning limit exceeded [${3}]" >&1
 	exit 0
 	;;
+state-changed)
+	logger -p warning "${0}: ($1) state changed [${3}] : ${4}" >&1
+	exit 0
+	;;
 *)
 	logger -p warning "${0}: unsupported event ${2} on device ${1}" >&1
 	exit 1

Index: src/sys/dev/sysmon/sysmon_envsys_events.c
diff -u src/sys/dev/sysmon/sysmon_envsys_events.c:1.98.8.1 src/sys/dev/sysmon/sysmon_envsys_events.c:1.98.8.2
--- src/sys/dev/sysmon/sysmon_envsys_events.c:1.98.8.1	Wed Oct 17 21:06:55 2012
+++ src/sys/dev/sysmon/sysmon_envsys_events.c	Wed Oct 17 21:21:43 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: sysmon_envsys_events.c,v 1.98.8.1 2012/10/17 21:06:55 riz Exp $ */
+/* $NetBSD: sysmon_envsys_events.c,v 1.98.8.2 2012/10/17 21:21:43 riz 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.98.8.1 2012/10/17 21:06:55 riz Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys_events.c,v 1.98.8.2 2012/10/17 21:21:43 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -206,26 +206,28 @@ sme_event_register(prop_dictionary_t sdi
 		see->see_pes.pes_type = powertype;
 
 		switch (crittype) {
-		case PENVSYS_EVENT_LIMITS:
-			see->see_evsent = ENVSYS_SVALID;
-			break;
 		case PENVSYS_EVENT_CAPACITY:
-			see->see_evsent = ENVSYS_BATTERY_CAPACITY_NORMAL;
+			see->see_evstate = ENVSYS_BATTERY_CAPACITY_NORMAL;
 			break;
 		case PENVSYS_EVENT_STATE_CHANGED:
 			if (edata->units == ENVSYS_BATTERY_CAPACITY)
-				see->see_evsent = ENVSYS_BATTERY_CAPACITY_NORMAL;
+				see->see_evstate = 
+				    ENVSYS_BATTERY_CAPACITY_NORMAL;
 			else if (edata->units == ENVSYS_DRIVE)
-				see->see_evsent = ENVSYS_DRIVE_EMPTY;
+				see->see_evstate = ENVSYS_DRIVE_EMPTY;
+			else if (edata->units == ENVSYS_INDICATOR)
+				see->see_evstate = ENVSYS_SVALID;
 			else
 				panic("%s: bad units for "
 				      "PENVSYS_EVENT_STATE_CHANGED", __func__);
 			break;
 		case PENVSYS_EVENT_CRITICAL:
+		case PENVSYS_EVENT_LIMITS:
 		default:
-			see->see_evsent = 0;
+			see->see_evstate = ENVSYS_SVALID;
 			break;
 		}
+		see->see_evvalue = 0;
 
 		(void)strlcpy(see->see_pes.pes_dvname, sme->sme_name,
 		    sizeof(see->see_pes.pes_dvname));
@@ -832,7 +834,7 @@ sme_deliver_event(sme_event_t *see)
 		/*
 		 * Send event if state has changed
 		 */
-		if (edata->state == see->see_evsent)
+		if (edata->state == see->see_evstate)
 			break;
 
 		for (i = 0; sse[i].state != -1; i++)
@@ -848,7 +850,7 @@ sme_deliver_event(sme_event_t *see)
 		else
 			sysmon_penvsys_event(&see->see_pes, sse[i].event);
 
-		see->see_evsent = edata->state;
+		see->see_evstate = edata->state;
 		DPRINTFOBJ(("%s: (%s) desc=%s sensor=%d state=%d send_ev=%d\n",
 		    __func__, see->see_sme->sme_name, edata->desc,
 		    edata->sensor, edata->state,
@@ -864,17 +866,24 @@ sme_deliver_event(sme_event_t *see)
 	 *	State has returned from CRITICAL to non-CRITICAL
 	 */
 	case PENVSYS_EVENT_CRITICAL:
+		DPRINTF(("%s: CRITICAL: old/new state %d/%d, old/new value "
+		    "%d/%d\n", __func__, see->see_evstate, edata->state,
+		    see->see_evvalue, edata->value_cur));
 		if (edata->state == ENVSYS_SVALID &&
-		    see->see_evsent != 0) {
+		    see->see_evstate != ENVSYS_SVALID) {
 			sysmon_penvsys_event(&see->see_pes,
 					     PENVSYS_EVENT_NORMAL);
-			see->see_evsent = 0;
-		} else if (edata->state == ENVSYS_SCRITICAL &&
-		    see->see_evsent != edata->value_cur) {
+			see->see_evstate = ENVSYS_SVALID;
+			break;
+		} else if (edata->state != ENVSYS_SCRITICAL)
+			break;
+		if (see->see_evstate != ENVSYS_SCRITICAL ||
+		    see->see_evvalue != edata->value_cur) {
 			sysmon_penvsys_event(&see->see_pes,
 					     PENVSYS_EVENT_CRITICAL);
-			see->see_evsent = edata->value_cur;
+			see->see_evstate = ENVSYS_SCRITICAL;
 		}
+		see->see_evvalue = edata->value_cur;
 		break;
 
 	/*
@@ -885,7 +894,7 @@ sme_deliver_event(sme_event_t *see)
 		/* 
 		 * the state has not been changed, just ignore the event.
 		 */
-		if (edata->value_cur == see->see_evsent)
+		if (edata->value_cur == see->see_evvalue)
 			break;
 
 		switch (edata->units) {
@@ -899,6 +908,11 @@ sme_deliver_event(sme_event_t *see)
 			    edata->value_cur);
 			state = ENVSYS_BATTERY_CAPACITY_NORMAL;
 			break;
+		case ENVSYS_INDICATOR:
+			sdt = sme_find_table_entry(SME_DESC_INDICATOR,
+			    edata->value_cur);
+			state = see->see_evvalue;	/* force state change */
+			break;
 		default:
 			panic("%s: bad units for PENVSYS_EVENT_STATE_CHANGED",
 			    __func__);
@@ -925,7 +939,7 @@ sme_deliver_event(sme_event_t *see)
 			 */
 			sysmon_penvsys_event(&see->see_pes, see->see_type);
 
-		see->see_evsent = edata->value_cur;
+		see->see_evvalue = edata->value_cur;
 
 		/* 
 		 * There's no need to continue if it's a drive sensor.

Index: src/sys/dev/sysmon/sysmon_envsys_tables.c
diff -u src/sys/dev/sysmon/sysmon_envsys_tables.c:1.10 src/sys/dev/sysmon/sysmon_envsys_tables.c:1.10.8.1
--- src/sys/dev/sysmon/sysmon_envsys_tables.c:1.10	Sun Jun 19 05:26:31 2011
+++ src/sys/dev/sysmon/sysmon_envsys_tables.c	Wed Oct 17 21:21:43 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: sysmon_envsys_tables.c,v 1.10 2011/06/19 05:26:31 nonaka Exp $ */
+/* $NetBSD: sysmon_envsys_tables.c,v 1.10.8.1 2012/10/17 21:21:43 riz Exp $ */
 
 /*-
  * Copyright (c) 2007 Juan Romero Pardines.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys_tables.c,v 1.10 2011/06/19 05:26:31 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys_tables.c,v 1.10.8.1 2012/10/17 21:21:43 riz Exp $");
 
 #include <sys/types.h>
 
@@ -100,6 +100,15 @@ static const struct sme_descr_entry sme_
 	{ -1,					-1, 	"UNKNOWN" }
 };
 
+/*
+ * Available indicator descriptions.
+ */
+static const struct sme_descr_entry sme_indicator_description[] = {
+	{ ENVSYS_INDICATOR_FALSE,		-1,	"FALSE" },
+	{ ENVSYS_INDICATOR_TRUE,		-1, 	"TRUE" },
+	{ -1,					-1, 	"UNKNOWN" }
+};
+
 static const struct sme_descr_entry *
 sme_find_table(enum sme_descr_type table_id)
 {
@@ -116,6 +125,9 @@ sme_find_table(enum sme_descr_type table
 	case SME_DESC_BATTERY_CAPACITY:
 		return sme_batterycap_description;
 		break;
+	case SME_DESC_INDICATOR:
+		return sme_indicator_description;
+		break;
 	default:
 		return NULL;
 	}

Index: src/sys/dev/sysmon/sysmon_envsysvar.h
diff -u src/sys/dev/sysmon/sysmon_envsysvar.h:1.40.8.1 src/sys/dev/sysmon/sysmon_envsysvar.h:1.40.8.2
--- src/sys/dev/sysmon/sysmon_envsysvar.h:1.40.8.1	Wed Oct 17 21:06:55 2012
+++ src/sys/dev/sysmon/sysmon_envsysvar.h	Wed Oct 17 21:21:43 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: sysmon_envsysvar.h,v 1.40.8.1 2012/10/17 21:06:55 riz Exp $ */
+/* $NetBSD: sysmon_envsysvar.h,v 1.40.8.2 2012/10/17 21:21:43 riz Exp $ */
 
 /*-
  * Copyright (c) 2007, 2008 Juan Romero Pardines.
@@ -44,7 +44,8 @@ enum sme_descr_type {
 	SME_DESC_UNITS = 1,
 	SME_DESC_STATES,
 	SME_DESC_DRIVE_STATES,
-	SME_DESC_BATTERY_CAPACITY
+	SME_DESC_BATTERY_CAPACITY,
+	SME_DESC_INDICATOR
 };
 
 #ifdef ENVSYS_DEBUG
@@ -75,7 +76,8 @@ typedef struct sme_event {
 	envsys_data_t		*see_edata;	/* our sensor data */
 	sysmon_envsys_lim_t	see_lims;	/* limit values */
 	int			see_type;	/* type of the event */
-	int			see_evsent;	/* event already sent */
+	int			see_evstate;	/* state of prev event */
+	int			see_evvalue;	/* value of prev event */
 	int 			see_flags;	/* see above */
 #define SEE_EVENT_WORKING	0x0001 		/* This event is busy */
 } sme_event_t;

Index: src/sys/sys/envsys.h
diff -u src/sys/sys/envsys.h:1.31 src/sys/sys/envsys.h:1.31.16.1
--- src/sys/sys/envsys.h:1.31	Sun Feb 28 20:04:04 2010
+++ src/sys/sys/envsys.h	Wed Oct 17 21:21:43 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: envsys.h,v 1.31 2010/02/28 20:04:04 pgoyette Exp $ */
+/* $NetBSD: envsys.h,v 1.31.16.1 2012/10/17 21:21:43 riz Exp $ */
 
 /*-
  * Copyright (c) 1999, 2007 The NetBSD Foundation, Inc.
@@ -105,6 +105,12 @@ enum envsys_battery_capacity_states {
 	ENVSYS_BATTERY_CAPACITY_LOW		/* low cap in battery */
 };
 
+/* sensor indicator states */
+enum envsys_indicator_states {
+	ENVSYS_INDICATOR_FALSE		= 0,
+	ENVSYS_INDICATOR_TRUE		= 1
+};
+
 /*
  * IOCTLs
  */

Reply via email to