Module Name: src Committed By: nakayama Date: Sat Nov 28 04:14:27 UTC 2009
Modified Files: src/share/man/man4/man4.sparc64: lom.4 src/sys/arch/sparc64/dev: lom.c Log Message: Add support for monitoring Fault LED and Alarms status. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/share/man/man4/man4.sparc64/lom.4 cvs rdiff -u -r1.2 -r1.3 src/sys/arch/sparc64/dev/lom.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/share/man/man4/man4.sparc64/lom.4 diff -u src/share/man/man4/man4.sparc64/lom.4:1.2 src/share/man/man4/man4.sparc64/lom.4:1.3 --- src/share/man/man4/man4.sparc64/lom.4:1.2 Fri Oct 2 17:48:39 2009 +++ src/share/man/man4/man4.sparc64/lom.4 Sat Nov 28 04:14:27 2009 @@ -1,4 +1,4 @@ -.\" $NetBSD: lom.4,v 1.2 2009/10/02 17:48:39 wiz Exp $ +.\" $NetBSD: lom.4,v 1.3 2009/11/28 04:14:27 nakayama Exp $ .\" $OpenBSD: lom.4,v 1.4 2009/09/23 22:08:07 kettenis Exp $ .\" .\" Copyright (c) 2009 Mark Kettenis <kette...@openbsd.org> @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd October 2, 2009 +.Dd November 28, 2009 .Dt LOM 4 sparc64 .Os .Sh NAME @@ -29,8 +29,8 @@ driver provides support for the LOMlite lights out management module found on Sun Netra t1 systems and the LOMlite2 module found on Sun Fire V100/V120 and Sun Netra T1/X1 systems. -Temperature readings, PSU status and fan status provided by the LOM -are made available through the +Fault LED and alarms status, temperature readings, PSU status and +fan status provided by the LOM are made available through the .Xr envstat 8 interface. The integrated watchdog timer can be configured through the Index: src/sys/arch/sparc64/dev/lom.c diff -u src/sys/arch/sparc64/dev/lom.c:1.2 src/sys/arch/sparc64/dev/lom.c:1.3 --- src/sys/arch/sparc64/dev/lom.c:1.2 Mon Nov 16 13:11:51 2009 +++ src/sys/arch/sparc64/dev/lom.c Sat Nov 28 04:14:27 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: lom.c,v 1.2 2009/11/16 13:11:51 nakayama Exp $ */ +/* $NetBSD: lom.c,v 1.3 2009/11/28 04:14:27 nakayama Exp $ */ /* $OpenBSD: lom.c,v 1.19 2009/11/10 22:26:48 kettenis Exp $ */ /* * Copyright (c) 2009 Mark Kettenis @@ -17,7 +17,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: lom.c,v 1.2 2009/11/16 13:11:51 nakayama Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lom.c,v 1.3 2009/11/28 04:14:27 nakayama Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -83,6 +83,10 @@ #define LOM_IDX_LED1 0x25 #define LOM_IDX_ALARM 0x30 +#define LOM_ALARM_1 0x01 +#define LOM_ALARM_2 0x02 +#define LOM_ALARM_3 0x04 +#define LOM_ALARM_FAULT 0xf0 #define LOM_IDX_WDOG_CTL 0x31 #define LOM_WDOG_ENABLE 0x01 #define LOM_WDOG_RESET 0x02 @@ -131,6 +135,7 @@ #define LOM_IDX5_FAN_NAME_START 0x40 #define LOM_IDX5_FAN_NAME_END 0xff +#define LOM_MAX_ALARM 4 #define LOM_MAX_FAN 4 #define LOM_MAX_PSU 3 #define LOM_MAX_TEMP 8 @@ -153,10 +158,12 @@ int sc_space; struct sysmon_envsys *sc_sme; + envsys_data_t sc_alarm[LOM_MAX_ALARM]; envsys_data_t sc_fan[LOM_MAX_FAN]; envsys_data_t sc_psu[LOM_MAX_PSU]; envsys_data_t sc_temp[LOM_MAX_TEMP]; + int sc_num_alarm; int sc_num_fan; int sc_num_psu; int sc_num_temp; @@ -290,6 +297,7 @@ IPL_BIO, lom2_intr, sc); } + sc->sc_num_alarm = LOM_MAX_ALARM; sc->sc_num_fan = min((config >> 5) & 0x7, LOM_MAX_FAN); sc->sc_num_psu = min((config >> 3) & 0x3, LOM_MAX_PSU); sc->sc_num_temp = min((config2 >> 4) & 0xf, LOM_MAX_TEMP); @@ -309,6 +317,16 @@ /* Initialize sensor data. */ sc->sc_sme = sysmon_envsys_create(); + for (i = 0; i < sc->sc_num_alarm; i++) { + sc->sc_alarm[i].units = ENVSYS_INDICATOR; + snprintf(sc->sc_alarm[i].desc, sizeof(sc->sc_alarm[i].desc), + i == 0 ? "Fault LED" : "Alarm%d", i); + if (sysmon_envsys_sensor_attach(sc->sc_sme, &sc->sc_alarm[i])) { + sysmon_envsys_destroy(sc->sc_sme); + aprint_error_dev(self, "can't attach alarm sensor\n"); + return; + } + } for (i = 0; i < sc->sc_num_fan; i++) { sc->sc_fan[i].units = ENVSYS_SFANRPM; snprintf(sc->sc_fan[i].desc, sizeof(sc->sc_fan[i].desc), @@ -900,6 +918,27 @@ uint8_t val; int i; + if (lom_read(sc, LOM_IDX_ALARM, &val)) { + for (i = 0; i < sc->sc_num_alarm; i++) + sc->sc_alarm[i].state = ENVSYS_SINVALID; + } else { + /* Fault LED */ + if ((val & LOM_ALARM_FAULT) == LOM_ALARM_FAULT) + sc->sc_alarm[0].value_cur = 0; + else + sc->sc_alarm[0].value_cur = 1; + sc->sc_alarm[0].state = ENVSYS_SVALID; + + /* Alarms */ + for (i = 1; i < sc->sc_num_alarm; i++) { + if ((val & (LOM_ALARM_1 << (i - 1))) == 0) + sc->sc_alarm[i].value_cur = 0; + else + sc->sc_alarm[i].value_cur = 1; + sc->sc_alarm[i].state = ENVSYS_SVALID; + } + } + for (i = 0; i < sc->sc_num_fan; i++) { if (lom_read(sc, LOM_IDX_FAN1 + i, &val)) { sc->sc_fan[i].state = ENVSYS_SINVALID;