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