コード例 #1
0
/*****************************************************************************
Gets called by probe_cpu.  Cycles through the table values until we find
what we are looking for.
*****************************************************************************/
static void search_table(int index, picl_prophdl_t table_hdl) {

  picl_prophdl_t  col_hdl;
  picl_prophdl_t  row_hdl;
  picl_propinfo_t p_info;
  int             val;
  char            string_val[PICL_PROPNAMELEN_MAX];

  for (val = picl_get_next_by_col(table_hdl, &row_hdl); val != PICL_ENDOFLIST;
       val = picl_get_next_by_col(row_hdl, &row_hdl)) {
    if (val == PICL_SUCCESS) {
      for (col_hdl = row_hdl; val != PICL_ENDOFLIST;
           val = picl_get_next_by_row(col_hdl, &col_hdl)) {
        if (val == PICL_SUCCESS) {
          val = picl_get_propinfo(col_hdl, &p_info);
          if (val == PICL_SUCCESS) {
            if (p_info.type == PICL_PTYPE_CHARSTRING) {
              val = picl_get_propval(col_hdl, &string_val, sizeof(string_val));
              if (val == PICL_SUCCESS) {
                assign_string_value(index, string_val);
              }
            }
          }
        }
      }
    }
  }
}
コード例 #2
0
ファイル: montoya.c プロジェクト: mikess/illumos-gate
/*
 * 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
ファイル: locator.c プロジェクト: AlainODea/illumos-gate
static int
change_locator_state(picl_nodehdl_t locator_node, locator_info_t *locator_info)
{
	picl_prophdl_t	state_prop;
	char		state[PICL_PROPNAMELEN_MAX];
	int		err;
	char		*new_state;

	err = picl_get_prop_by_name(locator_node, "State", &state_prop);
	if (err != PICL_SUCCESS) {
		(void) fprintf(stderr,
			gettext("picl_get_prop_by_name failed: %s\n"),
			picl_strerror(err));
		return (err);
	}

	err = picl_get_propval(state_prop, state, sizeof (state));
	if (err != PICL_SUCCESS) {
		(void) fprintf(stderr,
			gettext("picl_get_propval failed: %s\n"),
			picl_strerror(err));
		return (err);
	}

	new_state = (locator_info->new_state) ? locator_info->on :
	    locator_info->off;

	if (strcmp(state, new_state) != 0) {
		picl_propinfo_t prop_info;
		err = picl_get_propinfo(state_prop, &prop_info);
		if (err != PICL_SUCCESS) {
			(void) fprintf(stderr,
				gettext("picl_get_propinfo failed: %s\n"),
				picl_strerror(err));
			return (err);
		}
		err = picl_set_propval(state_prop, new_state, prop_info.size);
		if (err != PICL_SUCCESS) {
			(void) fprintf(stderr,
				gettext("picl_set_propval failed: %s\n"),
				picl_strerror(err));
			return (err);
		}
	}
	return (err);
}
コード例 #4
0
ファイル: dmi_info.c プロジェクト: alhazred/ddu
void
prt_node_props(picl_nodehdl_t nodeh)
{
	int	ret;
	picl_prophdl_t proph;
	picl_propinfo_t pinfo;

	ret = picl_get_first_prop(nodeh, &proph);

	while (!ret) {
		ret = picl_get_propinfo(proph, &pinfo);

		if (!ret) {
			if (ret) {
				PRINTF("\t%s = ", pinfo.name);
				prt_prop_val(proph, &pinfo);
				PRINTF("\n");
			}
		}

		ret = picl_get_next_prop(proph, &proph);
	}
}
コード例 #5
0
/*****************************************************************************
Gets called by picl_walk_tree_by_class.  Then it cycles through the properties
until we find what we are looking for.  Once we are done, we return
PICL_WALK_TERMINATE to stop picl_walk_tree_by_class from traversing the tree.

Note that PICL_PTYPE_UNSIGNED_INT and PICL_PTYPE_INT can either be 4-bytes
or 8-bytes.
*****************************************************************************/
static int probe_cpu(picl_nodehdl_t node_hdl, void* dummy_arg) {

  picl_prophdl_t  p_hdl;
  picl_prophdl_t  table_hdl;
  picl_propinfo_t p_info;
  long long       long_long_val;
  unsigned int    uint_val;
  int             index;
  int             int_val;
  int             val;
  char            string_val[PICL_PROPNAMELEN_MAX];

  val = picl_get_first_prop(node_hdl, &p_hdl);
  while (val == PICL_SUCCESS) {
    called_cpu_probe = 1;
    val = picl_get_propinfo(p_hdl, &p_info);
    if (val == PICL_SUCCESS) {
      for (index = 0; index < NUM_ITEMS; index++) {
        if (strcasecmp(p_info.name, items[index]) == 0) {
          if (p_info.type == PICL_PTYPE_UNSIGNED_INT) {
            if (p_info.size == sizeof(uint_val)) {
              val = picl_get_propval(p_hdl, &uint_val, sizeof(uint_val));
              if (val == PICL_SUCCESS) {
                long_long_val = uint_val;
                assign_value(index, long_long_val);
              }
            }
            else if (p_info.size == sizeof(long_long_val)) {
              val = picl_get_propval(p_hdl, &long_long_val,
                                     sizeof(long_long_val));
              if (val == PICL_SUCCESS) {
                assign_value(index, long_long_val);
              }
            }
          }
          else if (p_info.type == PICL_PTYPE_INT) {
            if (p_info.size == sizeof(int_val)) {
              val = picl_get_propval(p_hdl, &int_val, sizeof(int_val));
              if (val == PICL_SUCCESS) {
                long_long_val = int_val;
                assign_value(index, long_long_val);
              }
            }
            else if (p_info.size == sizeof(long_long_val)) {
              val = picl_get_propval(p_hdl, &long_long_val,
                                     sizeof(long_long_val));
              if (val == PICL_SUCCESS) {
                assign_value(index, long_long_val);
              }
            }
          }
          else if (p_info.type == PICL_PTYPE_CHARSTRING) {
            val = picl_get_propval(p_hdl, &string_val, sizeof(string_val));
            if (val == PICL_SUCCESS) {
              assign_string_value(index, string_val);
            }
          }
          else if (p_info.type == PICL_PTYPE_TABLE) {
            val = picl_get_propval(p_hdl, &table_hdl, p_info.size);
            if (val == PICL_SUCCESS) {
              search_table(index, table_hdl);
            }
          }
          break;
        } else if (index == NUM_ITEMS-1) {
	  if (p_info.type == PICL_PTYPE_CHARSTRING) {
            val = picl_get_propval(p_hdl, &string_val, sizeof(string_val));
            if (val == PICL_SUCCESS) {
            }	  
	  }
	} 
      }
    }

    val = picl_get_next_prop(p_hdl, &p_hdl);
  }
  return PICL_WALK_TERMINATE;
}