Esempio n. 1
0
static void sensor_read_states(ipmi_sensor_t *sensor,
                               int           err,
                               ipmi_states_t *states,
                               void          *cb_data)
{
	struct ohoi_sensor_reading *p = cb_data;

        p->sensor_reading->ValuesPresent = SAHPI_SRF_EVENT_STATE;

	if (ipmi_is_event_messages_enabled(states))
		p->sensor_reading->EventStatus.SensorStatus |=
			SAHPI_SENSTAT_EVENTS_ENABLED;

	if (ipmi_is_sensor_scanning_enabled(states))
		p->sensor_reading->EventStatus.SensorStatus |= 
			SAHPI_SENSTAT_EVENTS_ENABLED;

	if (ipmi_is_initial_update_in_progress(states))
		p->sensor_reading->EventStatus.SensorStatus |=
			SAHPI_SENSTAT_BUSY;

	p->sensor_reading->EventStatus.EventStatus = states->__states;
	
	p->done = 1;
}
Esempio n. 2
0
static void
read_sensor_states(ipmi_sensor_t *sensor,
		   int           err,
		   ipmi_states_t *states,
		   void          *cb_data)
{
    ipmi_cmd_info_t *cmd_info = cb_data;
    ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
    int             i;
    char            sensor_name[IPMI_SENSOR_NAME_LEN];
    int             rv;

    ipmi_cmdlang_lock(cmd_info);
    if (err) {
	cmdlang->errstr = "Error reading sensor";
	cmdlang->err = err;
	ipmi_sensor_get_name(sensor, cmdlang->objstr,
			     cmdlang->objstr_len);
	cmdlang->location = "cmd_sensor.c(read_sensor_states)";
	goto out;
    }

    ipmi_sensor_get_name(sensor, sensor_name, sizeof(sensor_name));

    ipmi_cmdlang_out(cmd_info, "Sensor", NULL);
    ipmi_cmdlang_down(cmd_info);
    ipmi_cmdlang_out(cmd_info, "Name", sensor_name);

    ipmi_cmdlang_out_bool(cmd_info, "Event Messages Enabled",
			  ipmi_is_event_messages_enabled(states));
    ipmi_cmdlang_out_bool(cmd_info, "Sensor Scanning Enabled",
			  ipmi_is_sensor_scanning_enabled(states));
    ipmi_cmdlang_out_bool(cmd_info, "Initial Update In Progress",
			  ipmi_is_initial_update_in_progress(states));
    for (i=0; i<15; i++) {
	int        ival;
	const char *str;

	rv = ipmi_sensor_discrete_event_readable(sensor, i, &ival);
	if ((rv) || !ival)
	    continue;

	ipmi_cmdlang_out(cmd_info, "Event", NULL);
	ipmi_cmdlang_down(cmd_info);
	ipmi_cmdlang_out_int(cmd_info, "Offset", i);
	str = ipmi_sensor_reading_name_string(sensor, i);
	if (strcmp(str, "unknown") != 0)
	    ipmi_cmdlang_out(cmd_info, "Name", str);
	ipmi_cmdlang_out_bool(cmd_info, "Set", ipmi_is_state_set(states, i));
	ipmi_cmdlang_up(cmd_info);
    }
    ipmi_cmdlang_up(cmd_info);

 out:
    ipmi_cmdlang_unlock(cmd_info);
    ipmi_cmdlang_cmd_info_put(cmd_info);
}
Esempio n. 3
0
static void
got_discrete_states(ipmi_sensor_t *sensor,
		    int           err,
		    ipmi_states_t *states,
		    void          *cb_data)
{
    sdata_t *sdata = cb_data;
    int     i;

    if (err) {
	printf("Error 0x%x getting discrete states for sensor %s\n",
	       err, sdata->name);
	goto out;
    }

    if (err) {
	printf("Error 0x%x getting discrete states for sensor %s\n",
	       err, sdata->name);
	goto out;
    }

    printf("Got state reading for sensor %s\n", sdata->name);
    if (ipmi_is_event_messages_enabled(states))
	printf("  event messages enabled\n");
    if (ipmi_is_sensor_scanning_enabled(states))
	printf("  sensor scanning enabled\n");
    if (ipmi_is_initial_update_in_progress(states))
	printf("  initial update in progress\n");

    for (i=0; i<15; i++) {
	int val, rv;

	rv = ipmi_sensor_discrete_event_readable(sensor, i, &val);
	if (rv || !val)
	    continue;

	printf("  state %d value is %d\n", i, ipmi_is_state_set(states, i));
    }

 out:
    release_sdata(sdata);
}
Esempio n. 4
0
static void
read_sensor(ipmi_sensor_t             *sensor,
	    int                       err,
	    enum ipmi_value_present_e value_present,
	    unsigned int              raw_val,
	    double                    val,
	    ipmi_states_t             *states,
	    void                      *cb_data)
{
    ipmi_cmd_info_t    *cmd_info = cb_data;
    ipmi_cmdlang_t     *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
    enum ipmi_thresh_e thresh;
    char               sensor_name[IPMI_SENSOR_NAME_LEN];
    int                rv;

    ipmi_cmdlang_lock(cmd_info);
    if (err) {
	cmdlang->errstr = "Error reading sensor";
	cmdlang->err = err;
	ipmi_sensor_get_name(sensor, cmdlang->objstr,
			     cmdlang->objstr_len);
	cmdlang->location = "cmd_sensor.c(read_sensor)";
	goto out;
    }

    ipmi_sensor_get_name(sensor, sensor_name, sizeof(sensor_name));

    ipmi_cmdlang_out(cmd_info, "Sensor", NULL);
    ipmi_cmdlang_down(cmd_info);
    ipmi_cmdlang_out(cmd_info, "Name", sensor_name);

    ipmi_cmdlang_out_bool(cmd_info, "Event Messages Enabled",
			  ipmi_is_event_messages_enabled(states));
    ipmi_cmdlang_out_bool(cmd_info, "Sensor Scanning Enabled",
			  ipmi_is_sensor_scanning_enabled(states));
    ipmi_cmdlang_out_bool(cmd_info, "Initial Update In Progress",
			  ipmi_is_initial_update_in_progress(states));

    switch (value_present) {
    case IPMI_BOTH_VALUES_PRESENT:
	ipmi_cmdlang_out_double(cmd_info, "Value", val);
	/* FALLTHRU */
    case IPMI_RAW_VALUE_PRESENT:
	ipmi_cmdlang_out_hex(cmd_info, "Raw Value", raw_val);
    default:
	break;
    }	

    for (thresh = IPMI_LOWER_NON_CRITICAL;
	 thresh <= IPMI_UPPER_NON_RECOVERABLE; 
	 thresh++)
    {
	int ival;

	rv = ipmi_sensor_threshold_reading_supported(sensor, thresh, &ival);
	if ((rv) || !ival)
	    continue;

	ipmi_cmdlang_out(cmd_info, "Threshold", NULL);
	ipmi_cmdlang_down(cmd_info);
	ipmi_cmdlang_out(cmd_info, "Name",
			 ipmi_get_threshold_string(thresh));
	ipmi_cmdlang_out_bool(cmd_info, "Out Of Range",
			      ipmi_is_threshold_out_of_range(states, thresh));
	ipmi_cmdlang_up(cmd_info);
    }
    ipmi_cmdlang_up(cmd_info);

 out:
    ipmi_cmdlang_unlock(cmd_info);
    ipmi_cmdlang_cmd_info_put(cmd_info);
}
Esempio n. 5
0
static void
got_thresh_reading(ipmi_sensor_t             *sensor,
		   int                       err,
		   enum ipmi_value_present_e value_present,
		   unsigned int              raw_value,
		   double                    val,
		   ipmi_states_t             *states,
		   void                      *cb_data)
{
    sdata_t            *sdata = cb_data;
    enum ipmi_thresh_e thresh;

    if (err) {
	printf("Error 0x%x getting discrete states for sensor %s\n",
	       err, sdata->name);
	goto out;
    }

    printf("Got threshold reading for sensor %s\n", sdata->name);
    if (ipmi_is_event_messages_enabled(states))
	printf("  event messages enabled\n");
    if (ipmi_is_sensor_scanning_enabled(states))
	printf("  sensor scanning enabled\n");
    if (ipmi_is_initial_update_in_progress(states))
	printf("  initial update in progress\n");

    switch (value_present)
    {
    case IPMI_NO_VALUES_PRESENT:
	printf("  no value present\n");
	break;
    case IPMI_BOTH_VALUES_PRESENT:
	{
	    const char *percent = "";
	    const char *base;
	    const char *mod_use = "";
	    const char *modifier = "";
	    const char *rate;

	    base = ipmi_sensor_get_base_unit_string(sensor);
	    if (ipmi_sensor_get_percentage(sensor))
		percent = "%";
	    switch (ipmi_sensor_get_modifier_unit_use(sensor)) {
	    case IPMI_MODIFIER_UNIT_NONE:
		break;
	    case IPMI_MODIFIER_UNIT_BASE_DIV_MOD:
		mod_use = "/";
		modifier = ipmi_sensor_get_modifier_unit_string(sensor);
		break;
	    case IPMI_MODIFIER_UNIT_BASE_MULT_MOD:
		mod_use = "*";
		modifier = ipmi_sensor_get_modifier_unit_string(sensor);
		break;
	    }
	    rate = ipmi_sensor_get_rate_unit_string(sensor);
	    
	    printf("  value: %lf%s %s%s%s%s\n", val, percent,
		   base, mod_use, modifier, rate);
	}
	/* FALLTHROUGH */
    case IPMI_RAW_VALUE_PRESENT:
	printf("  raw value: 0x%2.2x\n", raw_value);
    }

    if (sdata->thresh_sup == IPMI_THRESHOLD_ACCESS_SUPPORT_NONE)
	goto out;

    for (thresh=IPMI_LOWER_NON_CRITICAL;
	 thresh<=IPMI_UPPER_NON_RECOVERABLE;
	 thresh++)
    {
	int val, rv;

	rv = ipmi_sensor_threshold_reading_supported(sensor, thresh, &val);
	if (rv || !val)
	    continue;

	if (ipmi_is_threshold_out_of_range(states, thresh))
	    printf("  Threshold %s is out of range\n",
		   ipmi_get_threshold_string(thresh));
	else
	    printf("  Threshold %s is in range\n",
		   ipmi_get_threshold_string(thresh));
    }

 out:
    release_sdata(sdata);
}