On 03/26/2012 10:08 PM, Gowda, Srinivas G wrote:
>
> Thanks,
> G
> srinivas_g_go...@dell.com
> DELL
Rewritten patch using macros.
Thanks,
G
srinivas_g_go...@dell.com
DELL
diff -Naurp 05-ipmitool_opensel_part1_delloem/lib/ipmi_sel.c
06-ipmitool_opensel_part2_delloem/lib/ipmi_sel.c
--- 05-ipmitool_opensel_part1_delloem/lib/ipmi_sel.c 2012-04-03
17:51:35.000000000 +0530
+++ 06-ipmitool_opensel_part2_delloem/lib/ipmi_sel.c 2012-04-03
18:05:35.000000000 +0530
@@ -585,6 +585,147 @@ char * get_dell_evt_desc(struct ipmi_int
strcpy(desc,"Memory is
in Mirror Mode ");
break;
}
+ case 0x10:
+ memset(&req, 0, sizeof (req));
+ req.msg.netfn = IPMI_NETFN_APP;
+ req.msg.lun = 0;
+ req.msg.cmd = BMC_GET_DEVICE_ID;
+ req.msg.data = NULL;
+ req.msg.data_len = 0;
+
+ rsp = intf->sendrecv(intf, &req);
+ if (rsp == NULL)
+ {
+ lprintf(LOG_ERR, " Error getting system
info");
+ return NULL;
+ }
+ else if (rsp->ccode > 0)
+ {
+ lprintf(LOG_ERR, " Error getting system
info: %s",
+ val2str(rsp->ccode,
completion_code_vals));
+ return NULL;
+ }
+ version = rsp->data[4];
+ /* Memory DIMMS */
+ if( EVT1_OEM2_VALID(data1) ||
EVT1_OEM3_VALID(data1) )
+ {
+ if( (code == 0x0c) &&
(rec->sel_type.standard_type.event_type == 0x0B) )
+ {
+ if(EVT1_OFFSET(data1) == 0x00)
+ {
+
snprintf(desc,SIZE_OF_DESC," Redundancy Regained | ");
+ }
+ else if(EVT1_OFFSET(data1) ==
0x01)
+ {
+
snprintf(desc,SIZE_OF_DESC,"Redundancy Lost | ");
+ }
+ }
+ else if(code == 0x0c)
+ {
+ if(EVT1_OFFSET(data1) == 0x00)
+ {
+
snprintf(desc,SIZE_OF_DESC,"Correctable ECC | ");
+ }
+ else if(EVT1_OFFSET(data1) ==
0x01)
+ {
+
snprintf(desc,SIZE_OF_DESC,"UnCorrectable ECC | ");
+ }
+ }
+ }
+ if(EVT1_OEM2_VALID(data1))
+ {
+ if(((data2 >> 4) != 0x0f) && ((data2 >>
4) < 0x08))
+ {
+ tmpData = ('A'+ (data2 >>
4));
+ if( (code == 0x0c) &&
(rec->sel_type.standard_type.event_type == 0x0B) )
+ {
+ snprintf(tmpdesc,
SIZE_OF_DESC, "Bad Card %c", tmpData);
+ }
+ else
+ {
+ snprintf(tmpdesc,
SIZE_OF_DESC, "Card %c", tmpData);
+ }
+ strcat(desc, tmpdesc);
+ }
+ if (0x0F != EVT1_OFFSET(data2))
+ {
+ if(0x51 == version)
+ {
+ snprintf(tmpdesc,
SIZE_OF_DESC, "Bank %d", ((data2 & 0x0f)+1));
+ strcat(desc, tmpdesc);
+ }
+ else
+ {
+ incr = (data2 & 0x0f)
<< 3;
+ }
+ }
+
+ }
+ if(EVT1_OEM3_VALID(data1))
+ {
+ if(0x51 == version)
+ {
+ snprintf(tmpdesc, SIZE_OF_DESC,
"DIMM %s", ('A'+ data3));
+ strcat(desc, tmpdesc);
+ }
+ else if( ((data2 >> 4) > 0x07) &&
((data2 >> 4) != 0x0F))
+ {
+ strcpy(dimmStr, " DIMM_");
+ str = desc+strlen(desc);
+ dimmsPerNode = 4;
+ if( (data2 >> 4) == 0x09)
dimmsPerNode = 6;
+ else if( (data2 >> 4) == 0x0A)
dimmsPerNode = 8;
+ else if( (data2 >> 4) == 0x0B)
dimmsPerNode = 9;
+ else if( (data2 >> 4) == 0x0C)
dimmsPerNode = 12;
+ else if( (data2 >> 4) == 0x0D)
dimmsPerNode = 24;
+ else if( (data2 >> 4) == 0x0E)
dimmsPerNode = 3;
+ count = 0;
+ for (i = 0; i < 8; i++)
+ {
+ if (BIT(i) & data3)
+ {
+ if (count)
+ {
+ *str++ = ',';
+ count = 0;
+ }
+ node = (incr + i)/dimmsPerNode;
+ dimmNum = ((incr +
i)%dimmsPerNode)+1;
+ dimmStr[5] = node + 'A';
+ sprintf(tmpdesc,"%d",dimmNum);
+ dimmStr[6] = tmpdesc[0];
+ dimmStr[7] = '\0';
+ strcat(str,dimmStr);
+ count++;
+ }
+ }
+ }
+ else
+ {
+ strcpy(dimmStr, " DIMM");
+ str = desc+strlen(desc);
+ count = 0;
+ for (i = 0; i < 8; i++)
+ {
+ if (BIT(i) & data3)
+ {
+ // check if more than one DIMM, if
so add a comma to the string.
+ if (count)
+ {
+ *str++ = ',';
+ count = 0;
+ }
+ sprintf(tmpdesc,"%d",(i + incr +
1));
+ dimmStr[4] = tmpdesc[0];
+ dimmStr[5] = '\0';
+ strcat(str, dimmStr);
+ count++;
+ }
+ }
+ }
+ }
+ break;
+
default:
break;
}
------------------------------------------------------------------------------
For Developers, A Lot Can Happen In A Second.
Boundary is the first to Know...and Tell You.
Monitor Your Applications in Ultra-Fine Resolution. Try it FREE!
http://p.sf.net/sfu/Boundary-d2dvs2
_______________________________________________
Ipmitool-devel mailing list
Ipmitool-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipmitool-devel