summaryrefslogtreecommitdiff
path: root/util/oem_supermicro.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/oem_supermicro.c')
-rw-r--r--util/oem_supermicro.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/util/oem_supermicro.c b/util/oem_supermicro.c
index f3e42dd..d1d1da7 100644
--- a/util/oem_supermicro.c
+++ b/util/oem_supermicro.c
@@ -68,7 +68,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
void set_loglevel(int level); /*prototype */
extern char fsm_debug; /*mem_if.c*/
-static char * progver = "3.01";
+static char * progver = "3.02";
static char * progname = "ismcoem";
static int verbose = 0;
static char fdebug = 0;
@@ -463,32 +463,32 @@ int decode_sensor_supermicro(uchar *sdr,uchar *reading,char *pstring, int slen)
//if (dbg) printf("supermicro %x sensor reading %x\n",stype,reading);
rv = 0;
switch(bval) {
- case 0x0000: pstr = "00_Low"; break;
- case 0x0001: pstr = "01_Medium"; break;
- case 0x0002: pstr = "02_High"; break;
- case 0x0004: pstr = "04_Overheat"; break;
- case 0x0007: pstr = "07_Not Installed"; break;
+ case 0x0000: pstr = "Low"; break;
+ case 0x0001: pstr = "Medium"; break;
+ case 0x0002: pstr = "High"; break;
+ case 0x0004: pstr = "Overheat"; break;
+ case 0x0007: pstr = "Not Installed"; break;
default: rv = -1; break;
}
break;
case 0x08: /* Power Supply Status (Full/Discrete) Table 42-3 */
rv = 0;
switch(bval) {
- case 0x00: pstr = "00_Absent"; break; /*bit 0*/
- case 0x01: pstr = "01_Present"; break; /*bit 0*/
- case 0x02: pstr = "02_Failure"; break; /*bit 1*/
- case 0x04: pstr = "04_Predict Fail"; break; /*bit 2*/
- case 0x08: pstr = "08_Input Lost"; break; /*bit 3*/
+ case 0x00: pstr = "Absent"; break; /*bit 0*/
+ case 0x01: pstr = "Present"; break; /*bit 0*/
+ case 0x02: pstr = "Failure"; break; /*bit 1*/
+ case 0x04: pstr = "Predict Fail"; break; /*bit 2*/
+ case 0x08: pstr = "Input Lost"; break; /*bit 3*/
default: rv = -1; break;
}
break;
case 0x0D: /* HDD Status (Full/Discrete) Table 42-3 */
rv = 0;
switch(bval) {
- case 0x00: pstr = "00_Absent"; break; /*bit 0*/
- case 0x01: pstr = "01_Present"; break; /*bit 0*/
- case 0x02: pstr = "02_Failure"; break; /*bit 1*/
- case 0x04: pstr = "04_Predict Fail"; break; /*bit 2*/
+ case 0x00: pstr = "Absent"; break; /*bit 0*/
+ case 0x01: pstr = "Present"; break; /*bit 0*/
+ case 0x02: pstr = "Failure"; break; /*bit 1*/
+ case 0x04: pstr = "Predict Fail"; break; /*bit 2*/
default: rv = -1; break;
}
break;
@@ -520,6 +520,7 @@ int decode_mem_supermicro(int prod, uchar b2, uchar b3, char *desc, int *psz)
dimm = bdata % 10;
#endif
/* ver 0 previous SuperMicro firmware returned all zeros here.
+ * Memory #00 Correctable ECC, <pstr> 6f [00 00 00]
* ver 1 returns data3 with some info (X9)
* ver 2 returns data2 with some info (X9,X10)
* There have been bugs in these SuperMicro events, but this
@@ -548,7 +549,10 @@ int decode_mem_supermicro(int prod, uchar b2, uchar b3, char *desc, int *psz)
if (pair < 0) pair = 0;
if (pair > NPAIRS) pair = NPAIRS - 1;
dimm = (bdata & 0x0F) - 9; /*0x0A=dimmX1, 0x0B=dimmX2*/
- n = sprintf(desc,"P%d_DIMM%c%d",cpu,rgpair[pair],dimm);
+ if (dimm < 0)
+ n = sprintf(desc,"unknown DIMM"); /* was ver 0 */
+ else
+ n = sprintf(desc,"P%d_DIMM%c%d",cpu,rgpair[pair],dimm);
}
#ifdef DMIOK
/* Use DMI if we get confirmation about cpu/dimm indices. */