Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src Add support for monitoring Fault LED and Alarms status.



details:   https://anonhg.NetBSD.org/src/rev/007e7357fa60
branches:  trunk
changeset: 749373:007e7357fa60
user:      nakayama <nakayama%NetBSD.org@localhost>
date:      Sat Nov 28 04:14:27 2009 +0000

description:
Add support for monitoring Fault LED and Alarms status.

diffstat:

 share/man/man4/man4.sparc64/lom.4 |   8 +++---
 sys/arch/sparc64/dev/lom.c        |  43 +++++++++++++++++++++++++++++++++++++-
 2 files changed, 45 insertions(+), 6 deletions(-)

diffs (132 lines):

diff -r edc989b6b46d -r 007e7357fa60 share/man/man4/man4.sparc64/lom.4
--- a/share/man/man4/man4.sparc64/lom.4 Sat Nov 28 03:56:38 2009 +0000
+++ b/share/man/man4/man4.sparc64/lom.4 Sat Nov 28 04:14:27 2009 +0000
@@ -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 <kettenis%openbsd.org@localhost>
@@ -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
diff -r edc989b6b46d -r 007e7357fa60 sys/arch/sparc64/dev/lom.c
--- a/sys/arch/sparc64/dev/lom.c        Sat Nov 28 03:56:38 2009 +0000
+++ b/sys/arch/sparc64/dev/lom.c        Sat Nov 28 04:14:27 2009 +0000
@@ -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;



Home | Main Index | Thread Index | Old Index