[PATCH phosphor-host-ipmid v2 18/20] C7 and & virtual sensor support

OpenBMC Patches patches at stwcx.xyz
Wed Oct 21 23:48:19 AEDT 2015


From: Chris Austen <austenc at us.ibm.com>

---
 ipmisensor.C | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/ipmisensor.C b/ipmisensor.C
index 72cb576..f60db18 100644
--- a/ipmisensor.C
+++ b/ipmisensor.C
@@ -7,7 +7,6 @@ extern unsigned char findSensor(char);
 extern int set_sensor_dbus_state_v(uint8_t , const char *, char *);
 
 
-
 struct sensorRES_t {
 	uint8_t sensor_number;
 	uint8_t operation;
@@ -93,7 +92,7 @@ char *getfw02string(uint8_t b) {
 		i++;
 	} while ((p+i)->data != 0xFF);
 
-	return p->text;
+	return (p+i)->text;
 }
 //  The fw progress sensor contains some additional information that needs to be processed
 //  prior to calling the dbus code.  
@@ -108,12 +107,23 @@ int set_sensor_dbus_state_fwprogress(const sensorRES_t *pRec, const lookup_t *pT
 					break;
 		case 0x01 : sprintf(valuestring, "FW Hang, 0x%02x", pRec->event_data2);
 					break;
-		case 0x02 : sprintf(valuestring, "FW Progress, 0x%02x", getfw02string(pRec->event_data2));
+		case 0x02 : sprintf(valuestring, "FW Progress, %s", getfw02string(pRec->event_data2));
 	}
 
 	return set_sensor_dbus_state_v(pRec->sensor_number, pTable->method, pStr);
 }
 
+// Handling this special OEM sensor by coping what is in byte 4.  I also think that is odd
+// considering byte 3 is for sensor reading.  This seems like a misuse of the IPMI spec
+int set_sensor_dbus_state_osboot(const sensorRES_t *pRec, const lookup_t *pTable, const char *value) {
+	char valuestring[32];
+	char* pStr = valuestring;
+
+	sprintf(valuestring, "%d", pRec->assert_state7_0);
+
+	return set_sensor_dbus_state_v(pRec->sensor_number, pTable->method, pStr);
+}
+
 
 //  This table lists only senors we care about telling dbus about.
 //  Offset definition cab be found in section 42.2 of the IPMI 2.0 
@@ -127,6 +137,10 @@ lookup_t g_ipmidbuslookup[] = {
 	{0x0F, 0x02, set_sensor_dbus_state_fwprogress, "setValue", "True", "False"},
 	{0x0F, 0x01, set_sensor_dbus_state_fwprogress, "setValue", "True", "False"},
 	{0x0F, 0x00, set_sensor_dbus_state_fwprogress, "setValue", "True", "False"},
+	{0xC7, 0x01, set_sensor_dbus_state_simple, "setFault", "True", "False"},
+	{0x07, 0x00, set_sensor_dbus_state_simple, "setPresent", "False", "False"}, // OCC Inactive 0
+	{0x07, 0x01, set_sensor_dbus_state_simple, "setPresent", "True", "True"},   // OCC Active 1 
+	{0xc3, 0x00, set_sensor_dbus_state_osboot, "setValue", "" ,""},
 
 	{0xFF, 0xFF, NULL, "", "", ""}
 };
@@ -161,11 +175,20 @@ int findindex(const uint8_t sensor_type, int offset, int *index) {
 	return rc;
 }
 
+void debug_print_ok_to_dont_care(uint8_t stype, int offset)
+{
+	printf("Sensor should not be reported:  Type 0x%02x, Offset 0x%02x\n",
+		stype, offset);
+}
+
 bool shouldReport(uint8_t sensorType, int offset, int *index) {
 
 	bool rc = false;
+
 	if (findindex(sensorType, offset, index)) { rc = true;	}
 
+	if (rc==false) { debug_print_ok_to_dont_care(sensorType, offset); }
+
 	return rc;
 }
 
@@ -177,7 +200,6 @@ int updateSensorRecordFromSSRAESC(const void *record) {
 	int index, i=0;
 	stype = findSensor(pRec->sensor_number);
 
-
 	// Scroll through each bit position .  Determine 
 	// if any bit is either asserted or Deasserted.
 	for(i=0;i<8;i++) {
-- 
2.6.0




More information about the openbmc mailing list