xref: /netbsd-src/sys/dev/sysmon/sysmon_envsys_tables.c (revision 068b504f95c6be416b60a8e0f26f8266e2d9a604)
1*068b504fSbrad /* $NetBSD: sysmon_envsys_tables.c,v 1.14 2022/11/21 21:24:01 brad Exp $ */
25b53183eSxtraeme 
35b53183eSxtraeme /*-
46c4da82bSxtraeme  * Copyright (c) 2007 Juan Romero Pardines.
55b53183eSxtraeme  * All rights reserved.
65b53183eSxtraeme  *
75b53183eSxtraeme  * Redistribution and use in source and binary forms, with or without
85b53183eSxtraeme  * modification, are permitted provided that the following conditions
95b53183eSxtraeme  * are met:
105b53183eSxtraeme  * 1. Redistributions of source code must retain the above copyright
115b53183eSxtraeme  *    notice, this list of conditions and the following disclaimer.
125b53183eSxtraeme  * 2. Redistributions in binary form must reproduce the above copyright
135b53183eSxtraeme  *    notice, this list of conditions and the following disclaimer in the
145b53183eSxtraeme  *    documentation and/or other materials provided with the distribution.
155b53183eSxtraeme  *
166c4da82bSxtraeme  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
176c4da82bSxtraeme  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
186c4da82bSxtraeme  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
196c4da82bSxtraeme  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
206c4da82bSxtraeme  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
216c4da82bSxtraeme  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
226c4da82bSxtraeme  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
236c4da82bSxtraeme  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
246c4da82bSxtraeme  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
256c4da82bSxtraeme  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
265b53183eSxtraeme  */
275b53183eSxtraeme 
285b53183eSxtraeme #include <sys/cdefs.h>
29*068b504fSbrad __KERNEL_RCSID(0, "$NetBSD: sysmon_envsys_tables.c,v 1.14 2022/11/21 21:24:01 brad Exp $");
305b53183eSxtraeme 
315b53183eSxtraeme #include <sys/types.h>
325b53183eSxtraeme 
335b53183eSxtraeme #include <dev/sysmon/sysmonvar.h>
345b53183eSxtraeme #include <dev/sysmon/sysmon_envsysvar.h>
355b53183eSxtraeme 
365b53183eSxtraeme /*
375b53183eSxtraeme  * Available units type descriptions.
385b53183eSxtraeme  */
39e76f489bSpgoyette static const struct sme_descr_entry sme_units_description[] = {
405b53183eSxtraeme 	{ ENVSYS_STEMP,		PENVSYS_TYPE_TEMP,	"Temperature" },
415b53183eSxtraeme 	{ ENVSYS_SFANRPM,	PENVSYS_TYPE_FAN,	"Fan" },
425b53183eSxtraeme 	{ ENVSYS_SVOLTS_AC,	PENVSYS_TYPE_VOLTAGE,	"Voltage AC" },
435b53183eSxtraeme 	{ ENVSYS_SVOLTS_DC,	PENVSYS_TYPE_VOLTAGE,	"Voltage DC" },
445b53183eSxtraeme 	{ ENVSYS_SOHMS,		PENVSYS_TYPE_RESISTANCE,"Ohms" },
455b53183eSxtraeme 	{ ENVSYS_SWATTS,	PENVSYS_TYPE_POWER,	"Watts" },
465b53183eSxtraeme 	{ ENVSYS_SAMPS,		PENVSYS_TYPE_POWER,	"Ampere" },
475b53183eSxtraeme 	{ ENVSYS_SWATTHOUR,	PENVSYS_TYPE_BATTERY,	"Watt hour" },
485b53183eSxtraeme 	{ ENVSYS_SAMPHOUR,	PENVSYS_TYPE_BATTERY,	"Ampere hour" },
495b53183eSxtraeme 	{ ENVSYS_INDICATOR,	PENVSYS_TYPE_INDICATOR,	"Indicator" },
505b53183eSxtraeme 	{ ENVSYS_INTEGER,	PENVSYS_TYPE_INDICATOR,	"Integer" },
515b53183eSxtraeme 	{ ENVSYS_DRIVE,		PENVSYS_TYPE_DRIVE,	"Drive" },
524e10a848Sxtraeme 	{ ENVSYS_BATTERY_CAPACITY, PENVSYS_TYPE_BATTERY,"Battery capacity" },
534e10a848Sxtraeme 	{ ENVSYS_BATTERY_CHARGE, -1,			"Battery charge" },
5454c2251dSkardel 	{ ENVSYS_SRELHUMIDITY,	-1,			"relative Humidity" },
55033d68f1Sthorpej 	{ ENVSYS_LUX,		-1,			"Illuminance" },
56*068b504fSbrad 	{ ENVSYS_PRESSURE,	-1,			"pressure" },
575b53183eSxtraeme 	{ -1,			-1,			"unknown" }
585b53183eSxtraeme };
595b53183eSxtraeme 
605b53183eSxtraeme /*
615b53183eSxtraeme  * Available sensor state descriptions.
625b53183eSxtraeme  */
63e76f489bSpgoyette static const struct sme_descr_entry sme_state_description[] = {
645b53183eSxtraeme 	{ ENVSYS_SVALID,	-1, 	"valid" },
655b53183eSxtraeme 	{ ENVSYS_SINVALID,	-1, 	"invalid" },
665b53183eSxtraeme 	{ ENVSYS_SCRITICAL,	-1, 	"critical" },
675b53183eSxtraeme 	{ ENVSYS_SCRITUNDER,	-1, 	"critical-under" },
685b53183eSxtraeme 	{ ENVSYS_SCRITOVER,	-1, 	"critical-over" },
695b53183eSxtraeme 	{ ENVSYS_SWARNUNDER,	-1, 	"warning-under" },
705b53183eSxtraeme 	{ ENVSYS_SWARNOVER,	-1, 	"warning-over" },
715b53183eSxtraeme 	{ -1,			-1, 	"unknown" }
725b53183eSxtraeme };
735b53183eSxtraeme 
745b53183eSxtraeme /*
755b53183eSxtraeme  * Available drive state descriptions.
765b53183eSxtraeme  */
77e76f489bSpgoyette static const struct sme_descr_entry sme_drivestate_description[] = {
78820f120bSxtraeme 	{ ENVSYS_DRIVE_EMPTY,		-1, 	"unknown" },
79820f120bSxtraeme 	{ ENVSYS_DRIVE_READY,		-1, 	"ready" },
80820f120bSxtraeme 	{ ENVSYS_DRIVE_POWERUP,		-1, 	"powering up" },
81820f120bSxtraeme 	{ ENVSYS_DRIVE_ONLINE,		-1, 	"online" },
8251e43163Sxtraeme 	{ ENVSYS_DRIVE_OFFLINE, 	-1, 	"offline" },
83820f120bSxtraeme 	{ ENVSYS_DRIVE_IDLE,		-1, 	"idle" },
84820f120bSxtraeme 	{ ENVSYS_DRIVE_ACTIVE,		-1, 	"active" },
8551e43163Sxtraeme 	{ ENVSYS_DRIVE_BUILD,		-1,	"building" },
86820f120bSxtraeme 	{ ENVSYS_DRIVE_REBUILD,		-1, 	"rebuilding" },
87820f120bSxtraeme 	{ ENVSYS_DRIVE_POWERDOWN,	-1, 	"powering down" },
88820f120bSxtraeme 	{ ENVSYS_DRIVE_FAIL,		-1, 	"failed" },
89820f120bSxtraeme 	{ ENVSYS_DRIVE_PFAIL,		-1, 	"degraded" },
90820f120bSxtraeme 	{ ENVSYS_DRIVE_MIGRATING,	-1,	"migrating" },
9151e43163Sxtraeme 	{ ENVSYS_DRIVE_CHECK,		-1,	"checking" },
925b53183eSxtraeme 	{ -1,				-1, 	"unknown" }
935b53183eSxtraeme };
945b53183eSxtraeme 
955b53183eSxtraeme /*
964e10a848Sxtraeme  * Available battery capacity descriptions.
975b53183eSxtraeme  */
98e76f489bSpgoyette static const struct sme_descr_entry sme_batterycap_description[] = {
994e10a848Sxtraeme 	{ ENVSYS_BATTERY_CAPACITY_NORMAL,	-1,	"NORMAL" },
1004e10a848Sxtraeme 	{ ENVSYS_BATTERY_CAPACITY_WARNING,	-1, 	"WARNING" },
1014e10a848Sxtraeme 	{ ENVSYS_BATTERY_CAPACITY_CRITICAL,	-1, 	"CRITICAL" },
1024e10a848Sxtraeme 	{ ENVSYS_BATTERY_CAPACITY_LOW,		-1,	"LOW" },
1035b53183eSxtraeme 	{ -1,					-1, 	"UNKNOWN" }
1045b53183eSxtraeme };
1055b53183eSxtraeme 
1069687fb7cSpgoyette /*
1079687fb7cSpgoyette  * Available indicator descriptions.
1089687fb7cSpgoyette  */
1099687fb7cSpgoyette static const struct sme_descr_entry sme_indicator_description[] = {
1109687fb7cSpgoyette 	{ ENVSYS_INDICATOR_FALSE,		-1,	"FALSE" },
1119687fb7cSpgoyette 	{ ENVSYS_INDICATOR_TRUE,		-1, 	"TRUE" },
1129687fb7cSpgoyette 	{ -1,					-1, 	"UNKNOWN" }
1139687fb7cSpgoyette };
1149687fb7cSpgoyette 
115fa7cbdd7Snonaka static const struct sme_descr_entry *
sme_find_table(enum sme_descr_type table_id)1163cc76943Schristos sme_find_table(enum sme_descr_type table_id)
1173cc76943Schristos {
1183cc76943Schristos 	switch (table_id) {
1193cc76943Schristos 	case SME_DESC_UNITS:
1203cc76943Schristos 		return sme_units_description;
1213cc76943Schristos 		break;
1223cc76943Schristos 	case SME_DESC_STATES:
1233cc76943Schristos 		return sme_state_description;
1243cc76943Schristos 		break;
1253cc76943Schristos 	case SME_DESC_DRIVE_STATES:
1263cc76943Schristos 		return sme_drivestate_description;
1273cc76943Schristos 		break;
1283cc76943Schristos 	case SME_DESC_BATTERY_CAPACITY:
1293cc76943Schristos 		return sme_batterycap_description;
1303cc76943Schristos 		break;
1319687fb7cSpgoyette 	case SME_DESC_INDICATOR:
1329687fb7cSpgoyette 		return sme_indicator_description;
1339687fb7cSpgoyette 		break;
1343cc76943Schristos 	default:
1353cc76943Schristos 		return NULL;
1363cc76943Schristos 	}
1373cc76943Schristos }
1383cc76943Schristos 
1395b53183eSxtraeme /*
140e76f489bSpgoyette  * Returns the entry from specified table with type == key
1415b53183eSxtraeme  */
142e76f489bSpgoyette const struct sme_descr_entry *
sme_find_table_entry(enum sme_descr_type table_id,int key)143e76f489bSpgoyette sme_find_table_entry(enum sme_descr_type table_id, int key)
1445b53183eSxtraeme {
145e191e46aSnonaka 	const struct sme_descr_entry *table = sme_find_table(table_id);
146820f120bSxtraeme 
1473cc76943Schristos 	if (table != NULL)
148e76f489bSpgoyette 		for (; table->type != -1; table++)
149e76f489bSpgoyette 			if (table->type == key)
150e76f489bSpgoyette 				return table;
1513cc76943Schristos 
1523cc76943Schristos 	return NULL;
1535b53183eSxtraeme }
1543cc76943Schristos 
1553b3fd974Spgoyette const struct sme_descr_entry *
sme_find_table_desc(enum sme_descr_type table_id,const char * str)1563b3fd974Spgoyette sme_find_table_desc(enum sme_descr_type table_id, const char *str)
1573b3fd974Spgoyette {
158e191e46aSnonaka 	const struct sme_descr_entry *table = sme_find_table(table_id);
1593b3fd974Spgoyette 
1603cc76943Schristos 	if (table != NULL)
1613b3fd974Spgoyette 		for (; table->type != -1; table++)
1623b3fd974Spgoyette 			if (strcmp(table->desc, str) == 0)
1633b3fd974Spgoyette 				return table;
1643cc76943Schristos 	return NULL;
1653b3fd974Spgoyette }
166