Thanks,
G
srinivas_g_go...@dell.com
DELL
diff -Naurp 04-ipmitool_delloem_lanhelp_update/lib/ipmi_sel.c 05-ipmitool_opensel_part1_delloem/lib/ipmi_sel.c
--- 04-ipmitool_delloem_lanhelp_update/lib/ipmi_sel.c 2012-03-06 16:26:57.000000000 +0530
+++ 05-ipmitool_opensel_part1_delloem/lib/ipmi_sel.c 2012-03-06 19:15:42.000000000 +0530
@@ -505,6 +505,93 @@ get_newisys_evt_desc(struct ipmi_intf *
return description;
}
+#define BIT(x) (1 << x)
+#define SIZE_OF_DESC 128
+
+char * get_dell_evt_desc(struct ipmi_intf * intf, struct sel_event_record * rec)
+ {
+ int data1, data2, data3;
+ int code;
+ char *desc = NULL;
+
+ unsigned char count;
+ unsigned char node;
+ unsigned char num;
+ unsigned char dimmNum;
+ unsigned char dimmsPerNode;
+ char dimmStr[32];
+ char cardStr[32];
+ char numStr[32];
+ char tmpdesc[SIZE_OF_DESC];
+ char* str;
+ unsigned char incr = 0;
+ unsigned char i = 0;
+ unsigned char postCode;
+ struct ipmi_rs *rsp;
+ struct ipmi_rq req;
+ char tmpData;
+ int version;
+
+ data1 = rec->sel_type.standard_type.event_data[0];
+ data2 = rec->sel_type.standard_type.event_data[1];
+ data3 = rec->sel_type.standard_type.event_data[2];
+ if ( (rec->sel_type.standard_type.event_type == 0x0B) ||
+ (rec->sel_type.standard_type.event_type == 0x6F) ||
+ (rec->sel_type.standard_type.event_type == 0x07))
+ {
+ code = rec->sel_type.standard_type.sensor_type;
+ /* BDF or Slot */
+ desc = (char*)malloc(SIZE_OF_DESC);
+ if(desc == NULL)
+ return NULL;
+ memset(desc,0,SIZE_OF_DESC);
+ switch (code) {
+ case 0x07:
+ if( ((data1 & DATA_BYTE2_SPECIFIED_MASK) == 0x80))
+ {
+ if((data1 & 0x0f) == 0x00)
+ snprintf(desc,SIZE_OF_DESC,"CPU Internal Err | ");
+ if((data1 & 0x0f) == 0x06)
+ {
+ snprintf(desc,SIZE_OF_DESC,"CPU Protocol Err | ");
+ }
+ /* change bit location to a number */
+ for (count= 0; count < 8; count++)
+ {
+ if (BIT(count)& data2)
+ {
+ count++;
+ if( ((data1 & 0x0f) == 0x06) && (rec->sel_type.standard_type.sensor_num == 0x0A))
+ snprintf(desc,SIZE_OF_DESC,"FSB %d ",count);
+ else
+ snprintf(desc,SIZE_OF_DESC,"CPU %d | APIC ID %d ",count,data3);
+ break;
+ }
+ }
+ }
+ break;
+ case 0x0C:
+ if ( (rec->sel_type.standard_type.event_type == 0x0B) &&
+ !(data1 & 0x03) )
+ {
+ if(data2 & 0x04)
+ strcpy(desc,"Memory is in Spare Mode");
+ else if(data2 & 0x02)
+ strcpy(desc,"Memory is in Raid Mode ");
+ else if(data2 & 0x01)
+ strcpy(desc,"Memory is in Mirror Mode ");
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ else
+ {
+ code = rec->sel_type.standard_type.event_type;
+ }
+ return desc;
+}
char *
ipmi_get_oem_desc(struct ipmi_intf * intf, struct sel_event_record * rec)
@@ -519,6 +606,9 @@ ipmi_get_oem_desc(struct ipmi_intf * int
case IPMI_OEM_KONTRON:
desc = get_kontron_evt_desc(intf, rec);
break;
+ case IPMI_OEM_DELL:
+ desc = get_dell_evt_desc(intf, rec);
+ break;
case IPMI_OEM_UNKNOWN:
default:
break;
@@ -533,6 +623,7 @@ ipmi_get_event_desc(struct ipmi_intf * i
{
uint8_t code, offset;
struct ipmi_event_sensor_types *evt = NULL;
+ char *sfx = NULL;
if (desc == NULL)
return;
@@ -554,6 +645,17 @@ ipmi_get_event_desc(struct ipmi_intf * i
evt = oem_kontron_event_types;
code = rec->sel_type.standard_type.sensor_type;
break;
+ case IPMI_OEM_DELL:
+ evt = sensor_specific_types;
+ code = rec->sel_type.standard_type.sensor_type;
+ if ( ((rec->sel_type.standard_type.event_data[0] & DATA_BYTE2_SPECIFIED_MASK) == 0x80) ||
+ ((rec->sel_type.standard_type.event_data[0] & DATA_BYTE3_SPECIFIED_MASK) == 0x20) )
+ {
+ if(rec->sel_type.standard_type.event_data[0] & DATA_BYTE2_SPECIFIED_MASK)
+ evt->data = rec->sel_type.standard_type.event_data[1];
+ sfx = ipmi_get_oem_desc(intf, rec);
+ }
+ break;
/* add your oem sensor assignation here */
}
if( evt == NULL ){
@@ -565,6 +667,25 @@ ipmi_get_event_desc(struct ipmi_intf * i
evt = sensor_specific_types;
code = rec->sel_type.standard_type.sensor_type;
}
+ if(ipmi_get_oem(intf) == IPMI_OEM_DELL) {
+ code = rec->sel_type.standard_type.sensor_type;
+ if ( ((rec->sel_type.standard_type.event_data[0] & DATA_BYTE2_SPECIFIED_MASK) == 0x80) ||
+ ((rec->sel_type.standard_type.event_data[0] & DATA_BYTE3_SPECIFIED_MASK) == 0x20) )
+ {
+ if(rec->sel_type.standard_type.event_data[0] & DATA_BYTE2_SPECIFIED_MASK)
+ evt->data = rec->sel_type.standard_type.event_data[1];
+ sfx = ipmi_get_oem_desc(intf, rec);
+
+ }
+ else if(rec->sel_type.standard_type.event_data[0] == 0xC1)
+ {
+ if(rec->sel_type.standard_type.sensor_num == 0x23)
+ {
+ evt->data = rec->sel_type.standard_type.event_data[1];
+ sfx = ipmi_get_oem_desc(intf, rec);
+ }
+ }
+ }
} else {
evt = generic_event_types;
code = rec->sel_type.standard_type.event_type;
@@ -578,17 +699,34 @@ ipmi_get_event_desc(struct ipmi_intf * i
((rec->sel_type.standard_type.event_data[0] & DATA_BYTE2_SPECIFIED_MASK) &&
(evt->data == rec->sel_type.standard_type.event_data[1]))))
{
- *desc = (char *)malloc(strlen(evt->desc) + 48);
+ *desc = (char *)malloc(strlen(evt->desc) + 48 + SIZE_OF_DESC);
if (*desc == NULL) {
lprintf(LOG_ERR, "ipmitool: malloc failure");
return;
}
- memset(*desc, 0, strlen(evt->desc)+48);
+ memset(*desc, 0, strlen(evt->desc)+ 48 + SIZE_OF_DESC);
+ if (sfx) {
+ sprintf(*desc, "%s (%s)", evt->desc, sfx);
+ free(sfx);
+ } else {
sprintf(*desc, "%s", evt->desc);
+ }
return;
}
evt++;
+ }
+ if(sfx && ( (code == 0x0F) && (offset == 0x0F) ) ||
+ ((code == 0xC2) && (offset == 0x00)) || ((code == 0xC3) && (offset == 0x01)))
+ {
+ *desc = (char *)malloc( 48 + SIZE_OF_DESC);
+ if (*desc == NULL) {
+ lprintf(LOG_ERR, "ipmitool: malloc failure");
+ return;
+ }
+ memset(*desc, 0, 48 + SIZE_OF_DESC);
+ sprintf(*desc, "(%s)",sfx);
}
+
}
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Ipmitool-devel mailing list
Ipmitool-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipmitool-devel