示例#1
0
文件: dmi_info.c 项目: alhazred/ddu
void
print_system_info(picl_nodehdl_t  nodeh, int verbose)
{
	int		ret, i;
	picl_prophdl_t	proph;
	picl_propinfo_t	pinfo;

	if (verbose) {
		prt_node_props(nodeh);
		return;
	}

	PRINTF(" Manufacturer:SUN\n");
	i = 1;

	while (system_prop[i]) {
		if (system_info[i]) {
			PRINTF(" %s:", system_info[i]);
		} else {
			PRINTF(" %s:", system_prop[i]);
		}

		ret = picl_get_propinfo_by_name(nodeh, system_prop[i],
						&pinfo, &proph);

		if (ret == 0) {
			prt_prop_val(proph, &pinfo);
		}
		PRINTF("\n");

		i++;
	}
}
示例#2
0
/*
 * return the first compatible value
 */
static int
montoya_get_first_compatible_value(picl_nodehdl_t nodeh, char **outbuf)
{
    int		err;
    picl_prophdl_t	proph;
    picl_propinfo_t	pinfo;
    picl_prophdl_t	tblh;
    picl_prophdl_t	rowproph;
    char		*pval;

    err = picl_get_propinfo_by_name(nodeh, OBP_PROP_COMPATIBLE,
                                    &pinfo, &proph);
    if (err != PICL_SUCCESS)
        return (err);

    if (pinfo.type == PICL_PTYPE_CHARSTRING) {
        pval = malloc(pinfo.size);
        if (pval == NULL)
            return (PICL_FAILURE);
        err = picl_get_propval(proph, pval, pinfo.size);
        if (err != PICL_SUCCESS) {
            free(pval);
            return (err);
        }
        *outbuf = pval;
        return (PICL_SUCCESS);
    }

    if (pinfo.type != PICL_PTYPE_TABLE)
        return (PICL_FAILURE);

    /* get first string from table */
    err = picl_get_propval(proph, &tblh, pinfo.size);
    if (err != PICL_SUCCESS)
        return (err);

    err = picl_get_next_by_row(tblh, &rowproph);
    if (err != PICL_SUCCESS)
        return (err);

    err = picl_get_propinfo(rowproph, &pinfo);
    if (err != PICL_SUCCESS)
        return (err);

    pval = malloc(pinfo.size);
    if (pval == NULL)
        return (PICL_FAILURE);

    err = picl_get_propval(rowproph, pval, pinfo.size);
    if (err != PICL_SUCCESS) {
        free(pval);
        return (err);
    }

    *outbuf = pval;
    return (PICL_SUCCESS);
}
示例#3
0
static int
process_switch(picl_nodehdl_t childh,
                   char propname[PICL_PROPNAMELEN_MAX])
{
    picl_nodehdl_t  sensorh;
    picl_propinfo_t sensor_info;

    char state[32];
    int st_cnt;
    char *switch_settings[]={"OFF","ON","NORMAL","LOCKED","UNKNOWN",
                                    "DIAG","SECURE"};
    u_int value;
    u_int found = 0;
    int max_key_posns = 7;
    int typ = 3; /*other*/

    if (sensor_array[typ].n >= MAX_SENSORS){
        DEBUGMSG(("ucd-snmp/lmSensors",
            "There are too many sensors of type %d\n",typ));
        }
    else{
        picl_errno_t    error_code,ec2;

        error_code = (picl_get_propinfo_by_name(childh,
                         "State",&sensor_info,&sensorh));
        if (error_code == PICL_SUCCESS) {
             ec2 = picl_get_propval(sensorh,&state,sensor_info.size);
             if (ec2 == PICL_SUCCESS){
                 for (st_cnt=0;st_cnt < max_key_posns;st_cnt++){
                     if (strncmp(state,switch_settings[st_cnt],
                           strlen(switch_settings[st_cnt])) == 0){
                         value = st_cnt;
                         found = 1;
                         break;
                         } /* end if */
                     } /* end for */
                 if (found==0)
                     value = 99;
                 sensor_array[typ].sensor[sensor_array[typ].n].value = value;
                 snprintf(sensor_array[typ].sensor[sensor_array[typ].n].name,
                     (PICL_PROPNAMELEN_MAX - 1),"%s",propname);
                 sensor_array[typ].sensor[sensor_array[typ].n].
                     name[PICL_PROPNAMELEN_MAX - 1] = '\0';
                 sensor_array[typ].n++;
                 } /*end if ec2*/
             else
                 DEBUGMSG(("ucd-snmp/lmSensors",
                     "sensor value read error code->%d\n",ec2));
            } /* end if */
        else
            DEBUGMSG(("ucd-snmp/lmSensors",
                "sensor lookup failed  error code->%d\n",error_code));
        }
} /*process switch*/
示例#4
0
static int
process_i2c(picl_nodehdl_t childh,
                   char propname[PICL_PROPNAMELEN_MAX])
{
    picl_nodehdl_t  sensorh;
    picl_propinfo_t sensor_info;

    char state[32];
    int st_cnt;
    char *i2c_settings[]={"OK"};
    u_int value;
    u_int found = 0;
    int max_i2c_posns = 1;
    int typ = 3; 

    picl_errno_t    error_code,ec2;

    if (sensor_array[typ].n >= MAX_SENSORS){
        DEBUGMSG(("ucd-snmp/lmSensors",
            "There are too many sensors of type %d\n",typ));
        }
    else{
        error_code = (picl_get_propinfo_by_name(childh,
                         "State",&sensor_info,&sensorh));
        if (error_code == PICL_SUCCESS) {
             ec2 = picl_get_propval(sensorh,&state,sensor_info.size);
             if (ec2 == PICL_SUCCESS){
                 for (st_cnt=0;st_cnt < max_i2c_posns;st_cnt++){
                     if (strncmp(state,i2c_settings[st_cnt],
                           strlen(i2c_settings[st_cnt])) == 0){
                         value=st_cnt;
                         found = 1;
                         break;
                         } 
                     } 
                 if (found==0)
                     value = 99;
                 sensor_array[typ].sensor[sensor_array[typ].n].value = value;
                 snprintf(sensor_array[typ].sensor[sensor_array[typ].n].name,
                     (PICL_PROPNAMELEN_MAX - 1),"%s",propname);
                 sensor_array[typ].sensor[sensor_array[typ].n].
                     name[PICL_PROPNAMELEN_MAX - 1] = '\0';
                 sensor_array[typ].n++;
                 } 
             else
                 DEBUGMSG(("ucd-snmp/lmSensors",
                     "sensor value read error code->%d\n",ec2));
            }
        else
            DEBUGMSG(("ucd-snmp/lmSensors",
                "sensor lookup failed  error code->%d\n",error_code));
        }
}
示例#5
0
文件: dmi_info.c 项目: alhazred/ddu
int
print_processor_info(picl_nodehdl_t nodeh, void *args)
{
	int		ret, i;
	picl_prophdl_t	proph;
	picl_propinfo_t	pinfo;

	PRINTF(" Processor %d:\n", cpu_num);
	cpu_num++;

	i = *(int *)args;

	if (i) {
		prt_node_props(nodeh);
		return (PICL_WALK_CONTINUE);
	}

	i = 0;

	while (processor_prop[i]) {
		if (processor_name[i]) {
			PRINTF("  %s: ", processor_name[i]);
		} else {
			PRINTF("  %s: ", processor_prop[i]);
		}

		ret = picl_get_propinfo_by_name(nodeh, processor_prop[i],
						&pinfo, &proph);

		if (ret == 0) {
			if (i == 4) {
				granu = 1000000;
			}

			prt_prop_val(proph, &pinfo);

			if (i == 4) {
				granu = 1;
				PRINTF("MHZ");
			}
		}
		PRINTF("\n");

		i++;
	}
	PRINTF("\n");

	return (PICL_WALK_CONTINUE);
}
示例#6
0
static int64_t
montoya_get_int_propval(picl_nodehdl_t modh, char *prop_name, int *ret)
{
    int		err;
    picl_prophdl_t	proph;
    picl_propinfo_t	pinfo;
    int8_t		int8v;
    int16_t		int16v;
    int32_t		int32v;
    int64_t		int64v;

    err = picl_get_propinfo_by_name(modh, prop_name, &pinfo, &proph);
    if (err != PICL_SUCCESS) {
        *ret = err;
        return (0);
    }

    /*
     * If it is not an int, uint or byte array prop, return failure
     */
    if ((pinfo.type != PICL_PTYPE_INT) &&
            (pinfo.type != PICL_PTYPE_UNSIGNED_INT) &&
            (pinfo.type != PICL_PTYPE_BYTEARRAY)) {
        *ret = PICL_FAILURE;
        return (0);
    }

    switch (pinfo.size) {
    case sizeof (int8_t):
        err = picl_get_propval(proph, &int8v, sizeof (int8v));
        *ret = err;
        return (int8v);
    case sizeof (int16_t):
        err = picl_get_propval(proph, &int16v, sizeof (int16v));
        *ret = err;
        return (int16v);
    case sizeof (int32_t):
        err = picl_get_propval(proph, &int32v, sizeof (int32v));
        *ret = err;
        return (int32v);
    case sizeof (int64_t):
        err = picl_get_propval(proph, &int64v, sizeof (int64v));
        *ret = err;
        return (int64v);
    default:	/* not supported size */
        *ret = PICL_FAILURE;
        return (0);
    }
}
示例#7
0
文件: dmi_info.c 项目: alhazred/ddu
int
print_memory_info(picl_nodehdl_t nodeh, void *args)
{
	int		ret, i;
	picl_prophdl_t	proph;
	picl_propinfo_t	pinfo;

	i = *(int *)args;

	if (i) {
		prt_node_props(nodeh);
		return (PICL_WALK_CONTINUE);
	}

	i = 0;

	while (mem_prop[i]) {
		if (mem_info[i]) {
			PRINTF(" %s: ", mem_info[i]);
		} else {
			PRINTF(" %s: ", mem_prop[i]);
		}

		ret = picl_get_propinfo_by_name(nodeh, mem_prop[i],
						&pinfo, &proph);

		if (ret == 0) {
			if (i == 1) {
				granu = 1024 * 1024;
			}
			prt_prop_val(proph, &pinfo);

			if (i == 1) {
				granu = 1;
				PRINTF("M");
			}
		}
		PRINTF("\n");

		i++;
	}
	PRINTF("\n");

	return (PICL_WALK_CONTINUE);
}
示例#8
0
static int
read_enum_sensor( picl_nodehdl_t childh, float *value, const char **options )
{
    picl_nodehdl_t  sensorh;
    picl_propinfo_t sensor_info;
    picl_errno_t    error_code;
    char            state[PICL_PROPSIZE_MAX];
    int             i;

    /*
     *  Retrieve the specified sensor information and value
     */
    error_code = picl_get_propinfo_by_name(childh, "State", &sensor_info, &sensorh);
    if ( error_code != PICL_SUCCESS ) {
        DEBUGMSGTL(("sensors:arch:detail", "sensor info lookup failed (%d)\n",
                                            error_code));
        return( error_code );
    }

    error_code = picl_get_propval(sensorh, state, sensor_info.size);
    if ( error_code != PICL_SUCCESS ) {
        DEBUGMSGTL(("sensors:arch:detail", "sensor value lookup failed (%d)\n",
                                            error_code));
        return( error_code );
    }

    /*
     * Try to find a matching entry in the list of options.
     * Note that some platforms may use upper or lower case
     *   versions of these enumeration values
     *  (so the checks are case insensitive)
     */
    *value = 99;    /* Dummy value */
    for ( i=0;  options[i] != NULL; i++ ) {
        if (strncasecmp(state, options[i], strlen(options[i])) == 0) {
            *value = i;
            return 0;
        }
    }
    
    DEBUGMSGTL(("sensors:arch:detail", "Enumeration state %s not matched\n",
                                        state));
    return 0;  /* Or an error ? */
}
示例#9
0
static int
read_enum_sensor(picl_nodehdl_t childh, const char **options, u_int *value)
{
  picl_nodehdl_t  sensorh;
  picl_propinfo_t sensor_info;
  picl_errno_t    error_code;
  char            state[PICL_PROPSIZE_MAX];
  int             i;

  error_code = (picl_get_propinfo_by_name(childh, "State",
                                         &sensor_info, &sensorh));

  if (error_code != PICL_SUCCESS) {
     DEBUGMSGTL(("ucd-snmp/lmSensors",
                "sensor info lookup failed in read_enum_sensor - error code->%d\n", error_code));
     return(error_code);
  }

  error_code = picl_get_propval(sensorh, state, sensor_info.size);

  if (error_code != PICL_SUCCESS) {
    DEBUGMSGTL(("ucd-snmp/lmSensors",
               "sensor value lookup failed in read_enum_sensor - error code->%d\n", error_code));
    return(error_code);
  }

  /* Start with error value, then try to fill in something better.
     Use case-insensitive match to find the right value since platforms
     may return either case. 
  */

  *value = 99;

  for (i = 0; options[i] != NULL; i++){
    if (strncasecmp(state, options[i], strlen(options[i])) == 0){
      *value = i;
      break;
    } 
  }

  DEBUGMSGTL(("ucd-snmp/lmSensors", "read_enum_sensor value is %d\n", *value));
  return(error_code);
} /* end of read_enum_sensor() */
示例#10
0
static int
process_digital_sensor(picl_nodehdl_t childh,
                   char propname[PICL_PROPNAMELEN_MAX])
{
    picl_nodehdl_t  sensorh;
    picl_propinfo_t sensor_info;

    int temp; /*volts?*/
    int typ = 2; /*volts*/

    picl_errno_t    error_code,ec2;

    if (sensor_array[typ].n >= MAX_SENSORS){
        DEBUGMSG(("ucd-snmp/lmSensors",
            "There are too many sensors of type %d\n",typ));
        }
    else{
        error_code = (picl_get_propinfo_by_name(childh,
                          "AtoDSensorValue",&sensor_info,&sensorh));
        if (error_code == PICL_SUCCESS) {
             ec2 = picl_get_propval(sensorh,&temp,sizeof(temp));
             if (ec2 == PICL_SUCCESS){
                 sensor_array[typ].sensor[sensor_array[typ].n].value = temp;
                 snprintf(sensor_array[typ].sensor[sensor_array[typ].n].name,
                    (PICL_PROPNAMELEN_MAX - 1),"%s",propname);
                 sensor_array[typ].sensor[sensor_array[typ].n].
                      name[PICL_PROPNAMELEN_MAX - 1] = '\0';
                 sensor_array[typ].n++;
                 }
             else
                 DEBUGMSG(("ucd-snmp/lmSensors", 
                   "sensor value read error code->%d\n",ec2));
            } /* end if */
        else
            DEBUGMSG(("ucd-snmp/lmSensors", 
              "sensor lookup failed  error code->%d\n",error_code));
        }
}  /* process digital sensor */
示例#11
0
文件: vbe.c 项目: belenix/belenixold
static int
walk_callback(picl_nodehdl_t nodeh, void *args)
{
        char vga[10];
        picl_propinfo_t pinfo;
        picl_prophdl_t ph;
        /*int i;*/

        if (picl_get_propval_by_name(nodeh, "driver-name", vga, 10) != 0) {
                return (PICL_WALK_CONTINUE);
        }
         
        if (strcmp(vga, "vgatext") != 0) {
                return (PICL_WALK_CONTINUE);
        }
         
        if (picl_get_propinfo_by_name(nodeh, "display-edif-block",
                                &pinfo, &ph) != 0) {
                return (PICL_WALK_TERMINATE);
        }      
               
        mem = (unsigned char *)malloc(pinfo.size);
	if (mem == NULL) {
		return (PICL_WALK_TERMINATE);
	}

        if (picl_get_propval(ph, mem, pinfo.size)) {
                (void) printf("Unable to get block\n");
                return (PICL_WALK_TERMINATE);
        }      
               
        /*(void) printf("display-edif-block = ");
        for (i = 0; i < pinfo.size; i++)
                (void) printf("%02x.", mem[i]);
        (void) putchar('\n');*/
               
        return (PICL_WALK_TERMINATE);
}       
示例#12
0
文件: dmi_info.c 项目: alhazred/ddu
void
print_bios_info(picl_nodehdl_t  nodeh, int verbose)
{
	int		ret, i;
	picl_prophdl_t	proph;
	picl_propinfo_t	pinfo;

	if (verbose) {
		prt_node_props(nodeh);
		return;
	}

	PRINTF(" Vendor:\n");
	i = 1;

	while (prom_prop[i]) {
		if (prom_info[i]) {
			PRINTF(" %s:", prom_info[i]);
		} else {
			PRINTF(" %s:", prom_prop[i]);
		}

		ret = picl_get_propinfo_by_name(nodeh, prom_prop[i],
						&pinfo, &proph);

		if (ret == 0) {
			prt_prop_val(proph, &pinfo);
		}
		PRINTF("\n");

		i++;
	}
	PRINTF(" Release Date:\n");
	PRINTF(" BIOS Revision:\n");
	PRINTF(" Firmware Revision:\n");
}
示例#13
0
/*
 * Handle a numeric-valued sensor
 */
static int
read_num_sensor( picl_nodehdl_t childh, const char *propval, float *value )
{
    picl_nodehdl_t  sensorh;
    picl_propinfo_t sensor_info;
    picl_errno_t    error_code;

    union valu {
        char buf[PICL_PROPSIZE_MAX];
        uint32_t us4;
        uint16_t us2;
        int32_t is4;
        int16_t is2;
        float f;
    } val;

    /*
     *  Retrieve the specified sensor information and value
     */
    error_code = picl_get_propinfo_by_name(childh, propval, &sensor_info, &sensorh);
    if ( error_code != PICL_SUCCESS ) {
        DEBUGMSGTL(("sensors:arch:detail", "sensor info lookup failed (%d)\n",
                                            error_code));
        return( error_code );
    }

    error_code = picl_get_propval(sensorh, &val.buf, sensor_info.size);
    if ( error_code != PICL_SUCCESS ) {
        DEBUGMSGTL(("sensors:arch:detail", "sensor value lookup failed (%d)\n",
                                            error_code));
        return( error_code );
    }

    /*
     *  Check the validity (type and size) of this value
     */
    if ( sensor_info.type == PICL_PTYPE_FLOAT ) {
        *value = val.f;
    } else if ( sensor_info.type == PICL_PTYPE_UNSIGNED_INT ) {
        /* 16-bit or 32-bit unsigned integers */
        if ( sensor_info.size == 2 ) {
            *value = val.us2;
        } else if ( sensor_info.size == 4 ) { 
            *value = val.us4;
        } else {
            DEBUGMSGTL(("sensors:arch:detail", "unsigned integer (%d bit)\n",
                                                sensor_info.size * 8));
            return PICL_FAILURE;
        }
    } else if ( sensor_info.type == PICL_PTYPE_INT ) {
        /* 16-bit or 32-bit signed integers */
        if ( sensor_info.size == 2 ) {
            *value = val.is2;
        } else if ( sensor_info.size == 4 ) { 
            *value = val.is4;
        } else {
            DEBUGMSGTL(("sensors:arch:detail", "signed integer (%d bit)\n",
                                                sensor_info.size * 8));
            return PICL_FAILURE;
        }
    } else {
        DEBUGMSGTL(("sensors:arch:detail", "unrecognised type (%d)\n",
                                            sensor_info.type));
        return PICL_FAILURE;
    }

    return error_code;
}
示例#14
0
文件: dmi_info.c 项目: alhazred/ddu
int
prt_mem_bank_size(picl_nodehdl_t nodeh, void *args)
{
	int		ret;
	void 		*data;
	u_longlong_t	value;
	unsigned long	size;
	picl_prophdl_t	proph;
	picl_propinfo_t	pinfo;
	char		c;

	ret = picl_get_propinfo_by_name(nodeh, mem_prop[1],
						&pinfo, &proph);

	if (ret) {
		return (PICL_WALK_CONTINUE);
	}

	if (!(pinfo.accessmode & PICL_READ)) {
		return (PICL_WALK_CONTINUE);
	}

	if (pinfo.size == 0) {
		return (PICL_WALK_CONTINUE);
	}

	data = malloc(pinfo.size);

	if (data == NULL) {
		return (PICL_WALK_CONTINUE);
	}

	ret = picl_get_propval(proph, data, pinfo.size);

	if (ret) {
		(void) free(data);
		return (PICL_WALK_CONTINUE);
	}

	if ((pinfo.type == PICL_PTYPE_INT) ||
	(pinfo.type == PICL_PTYPE_UNSIGNED_INT)) {
		switch (pinfo.size) {
			case sizeof (char):
				value = *(unsigned char *)data;
				break;
			case sizeof (short):
				value = *(unsigned short *)data;
				break;
			case sizeof (int):
				value =	*(unsigned int *)data;
				break;
			case sizeof (long long):
				value =	*(unsigned long long *)data;
				break;
			default:
				break;
		}
	}

	if (value == 0) {
		(void) free(data);
		return (PICL_WALK_CONTINUE);
	}

	if (*(int *)args == 0) {
		PRINTF("(");
	} else {
		PRINTF(" + ");
	}

	value = value >> 10;

	if (value >= 1024) {
		value = value >> 10;

		if (value >= 1024) {
			size = (unsigned long) (value & 0x3ff);
			value = value >> 10;
			c = 'G';
		} else {
示例#15
0
static int
read_num_sensor(picl_nodehdl_t childh, const char *prop, int scale, int *value)
 {
  picl_nodehdl_t  sensorh;
  picl_propinfo_t sensor_info;
  picl_errno_t    error_code;
  int             valid = 1;

  union valu {
    char buf[PICL_PROPSIZE_MAX];
    uint32_t us4;
    uint16_t us2;
    int32_t is4;
    int16_t is2;
    float f;
  } val;

  error_code = (picl_get_propinfo_by_name(childh, prop,
                                         &sensor_info, &sensorh));

  if (error_code != PICL_SUCCESS) {
     DEBUGMSGTL(("ucd-snmp/lmSensors",
                "sensor info lookup failed in read_num_sensor - error code->%d\n", error_code));
     return(error_code);
  }

  error_code = picl_get_propval(sensorh, &val.buf, sensor_info.size);

  if (error_code != PICL_SUCCESS) {
    DEBUGMSGTL(("ucd-snmp/lmSensors",
               "sensor value lookup failed in read_num_sensor - error code->%d\n", error_code));
    return(error_code);
  }
    
  /* Can't make assumptions about the type or size of the value we get... */

  if  (sensor_info.type == PICL_PTYPE_FLOAT) {
    *value = (int)(val.f*scale);
  } else if (sensor_info.type == PICL_PTYPE_UNSIGNED_INT) {
    if (sensor_info.size == 2) {
      *value = (int)(val.us2 * scale);
    } else if (sensor_info.size == 4) {
      *value = (int)(val.us4 * scale);
    } else
      valid = 0;
  } else if (sensor_info.type == PICL_PTYPE_INT) {
    if (sensor_info.size == 2) {
      *value = (int)(val.is2 * scale);
    } else if (sensor_info.size == 4) {
      *value = (int)(val.is4 * scale);
    } else 
      valid = 0;
  } else
    valid = 0;

  if (valid == 0) {
    DEBUGMSGTL(("ucd-snmp/lmSensors",
               "Don't know how to handle data type %d with length %d\n", 
               sensor_info.type, sensor_info.size));
    error_code = PICL_FAILURE;
  } else 
    DEBUGMSGTL(("ucd-snmp/lmSensors", "read_num_sensor value is %d\n", *value));

  return(error_code);
} /* end of read_num_sensor() */