summaryrefslogtreecommitdiff
path: root/util/oem_lenovo.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/oem_lenovo.c')
-rw-r--r--util/oem_lenovo.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/util/oem_lenovo.c b/util/oem_lenovo.c
index 9c5079f..a1162bb 100644
--- a/util/oem_lenovo.c
+++ b/util/oem_lenovo.c
@@ -57,12 +57,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "ievents.h"
#include "oem_lenovo.h"
+extern uchar bitnum(ushort value); /*isensor.c*/
+extern char fdebug; /*ipmicmd.c*/
void set_loglevel(int level); /*prototype */
-static char * progver = "3.01";
+static char * progver = "3.02";
static char * progname = "ioemlenovo";
static int verbose = 0;
-static char fdebug = 0;
static uchar g_bus = PUBLIC_BUS;
static uchar g_sa = BMC_SA;
static uchar g_lun = BMC_LUN;
@@ -70,7 +71,6 @@ static uchar g_addrtype = ADDR_SMI;
static int vend_id = 0;
static int prod_id = 0;
-extern uchar bitnum(ushort value); /*isensor.c*/
/*
* decode_sensor_lenovo
@@ -116,7 +116,18 @@ int decode_sensor_lenovo(uchar *sdr,uchar *reading,char *pstring, int slen)
case 0x08: pstr = "Disabled"; break;
default: pstr = "OK*"; break;
}
- snprintf(pstring,slen,"%04x %s",bval,pstr);
+ rv = 0;
+ }
+ break;
+ case 0x0D: /* Disk Drive slots */
+ if (etype == 0x6F) {
+ switch(bval) {
+ case 0x00: pstr = "Absent"; break;
+ case 0x01: pstr = "Present"; break;
+ case 0x21: pstr = "NotRedundant"; break;
+ case 0x40: pstr = "NotAvailable"; break; /*not initialized*/
+ default: pstr = "Faulty"; break; /*e.g. 0x03*/
+ }
rv = 0;
}
break;
@@ -126,7 +137,6 @@ int decode_sensor_lenovo(uchar *sdr,uchar *reading,char *pstring, int slen)
else if (bval & 0x01) pstr = "FirmwareError"; /*bit 0*/
else if ((bval & 0x02) != 0) pstr = "FirmwareHang"; /*bit 1*/
else pstr = "OK*";
- snprintf(pstring,slen,"%04x %s",bval,pstr);
rv = 0;
}
break;
@@ -138,7 +148,6 @@ int decode_sensor_lenovo(uchar *sdr,uchar *reading,char *pstring, int slen)
case 0x02: pstr = "CableError"; break;
default: pstr = "OK*"; break;
}
- snprintf(pstring,slen,"%04x %s",rval,pstr);
rv = 0;
}
break;
@@ -148,14 +157,12 @@ int decode_sensor_lenovo(uchar *sdr,uchar *reading,char *pstring, int slen)
case 0x00: pstr = "OK"; break; /*No Media*/
default: pstr = "Asserted"; break;
}
- snprintf(pstring,slen,"%04x %s",rval,pstr);
rv = 0;
}
case 0x21: /*All PCI Error, PCI 1, Internal RAID, No Op ROM, etc.*/
if (etype == 0x6F) {
if (bval == 0x00) pstr = "OK";
else pstr = "Fault";
- snprintf(pstring,slen,"%04x %s",bval,pstr);
rv = 0;
}
break;
@@ -180,7 +187,6 @@ int decode_sensor_lenovo(uchar *sdr,uchar *reading,char *pstring, int slen)
case 0x07: pstr = "ChangedOK"; break; /*entity 21,22*/
default: pstr = "_"; break;
}
- snprintf(pstring,slen,"%04x %s",rval,pstr);
rv = 0;
}
break;
@@ -188,7 +194,6 @@ int decode_sensor_lenovo(uchar *sdr,uchar *reading,char *pstring, int slen)
if (etype == 0x07) {
if ((bval & 0x04) != 0) pstr = "Faulty";
else pstr = "OK";
- snprintf(pstring,slen,"%04x %s",bval,pstr);
rv = 0;
}
break;
@@ -196,12 +201,12 @@ int decode_sensor_lenovo(uchar *sdr,uchar *reading,char *pstring, int slen)
if (etype == 0x08) {
if ((bval & 0x02) != 0) pstr = "Faulty";
else pstr = "OK";
- snprintf(pstring,slen,"%04x %s",bval,pstr);
rv = 0;
}
break;
default: break;
}
+ if (rv == 0) snprintf(pstring,slen,"%s",pstr);
// if (rv == 0) strncpy(pstring, pstr, slen);
return(rv);
}