sfc: Report units in sensor warnings
authorEdward Cree <ecree@solarflare.com>
Mon, 30 Sep 2013 09:52:49 +0000 (10:52 +0100)
committerBen Hutchings <bhutchings@solarflare.com>
Thu, 12 Dec 2013 22:06:52 +0000 (22:06 +0000)
Add units to the "Sensor reports condition X for raw value Y" messages.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
drivers/net/ethernet/sfc/mcdi_mon.c

index d72ad4fc36172241d5aeccbe883f4a82c8ee2daf..99c80f8c0a0e4da8a178f1aa4f24b41e77feccd3 100644 (file)
@@ -24,6 +24,15 @@ enum efx_hwmon_type {
        EFX_HWMON_IN,           /* voltage */
        EFX_HWMON_CURR,         /* current */
        EFX_HWMON_POWER,        /* power */
+       EFX_HWMON_TYPES_COUNT
+};
+
+static const char *const efx_hwmon_unit[EFX_HWMON_TYPES_COUNT] = {
+       [EFX_HWMON_TEMP]  = " degC",
+       [EFX_HWMON_COOL]  = " rpm", /* though nonsense for a heatsink */
+       [EFX_HWMON_IN]    = " mV",
+       [EFX_HWMON_CURR]  = " mA",
+       [EFX_HWMON_POWER] = " W",
 };
 
 static const struct {
@@ -91,7 +100,8 @@ static const char *const sensor_status_names[] = {
 void efx_mcdi_sensor_event(struct efx_nic *efx, efx_qword_t *ev)
 {
        unsigned int type, state, value;
-       const char *name = NULL, *state_txt;
+       enum efx_hwmon_type hwmon_type = EFX_HWMON_UNKNOWN;
+       const char *name = NULL, *state_txt, *unit;
 
        type = EFX_QWORD_FIELD(*ev, MCDI_EVENT_SENSOREVT_MONITOR);
        state = EFX_QWORD_FIELD(*ev, MCDI_EVENT_SENSOREVT_STATE);
@@ -99,16 +109,22 @@ void efx_mcdi_sensor_event(struct efx_nic *efx, efx_qword_t *ev)
 
        /* Deal gracefully with the board having more drivers than we
         * know about, but do not expect new sensor states. */
-       if (type < ARRAY_SIZE(efx_mcdi_sensor_type))
+       if (type < ARRAY_SIZE(efx_mcdi_sensor_type)) {
                name = efx_mcdi_sensor_type[type].label;
+               hwmon_type = efx_mcdi_sensor_type[type].hwmon_type;
+       }
        if (!name)
                name = "No sensor name available";
        EFX_BUG_ON_PARANOID(state >= ARRAY_SIZE(sensor_status_names));
        state_txt = sensor_status_names[state];
+       EFX_BUG_ON_PARANOID(hwmon_type >= EFX_HWMON_TYPES_COUNT);
+       unit = efx_hwmon_unit[hwmon_type];
+       if (!unit)
+               unit = "";
 
        netif_err(efx, hw, efx->net_dev,
-                 "Sensor %d (%s) reports condition '%s' for raw value %d\n",
-                 type, name, state_txt, value);
+                 "Sensor %d (%s) reports condition '%s' for value %d%s\n",
+                 type, name, state_txt, value, unit);
 }
 
 #ifdef CONFIG_SFC_MCDI_MON