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

Reply via email to