mirror of
https://github.com/lm-sensors/lm-sensors.git
synced 2026-11-09 16:21:51 +00:00
Use complete chip names (prefix + bus + address) as the keys of
sensors_chip_features_list[]. Using only the prefix (as was done before) makes it impossible to properly support multiple chips with the same prefix but a different feature set. git-svn-id: http://lm-sensors.org/svn/lm-sensors/branches/lm-sensors-3.0.0@4508 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
1 parent
8fdfa3f19d
commit
063f4b91d4
6 files changed
+30
-35
No files matched your search
+17
-17
@@ -99,14 +99,14 @@ sensors_chip *sensors_for_all_config_chips(sensors_chip_name chip_name,
|
||||
/* Look up a resource in the intern chip list, and return a pointer to it.
|
||||
Do not modify the struct the return value points to! Returns NULL if
|
||||
not found.*/
|
||||
const sensors_chip_feature *sensors_lookup_feature_nr(const char *prefix,
|
||||
const sensors_chip_feature *sensors_lookup_feature_nr(const sensors_chip_name *chip,
|
||||
int feature)
|
||||
{
|
||||
int i, j;
|
||||
const sensors_chip_feature *features;
|
||||
|
||||
for (i = 0; sensors_chip_features_list[i].prefix; i++)
|
||||
if (!strcasecmp(sensors_chip_features_list[i].prefix, prefix)) {
|
||||
for (i = 0; sensors_chip_features_list[i].chip.prefix; i++)
|
||||
if (sensors_match_chip(sensors_chip_features_list[i].chip, *chip)) {
|
||||
features = sensors_chip_features_list[i].feature;
|
||||
for (j = 0; features[j].data.name; j++)
|
||||
if (features[j].data.number == feature)
|
||||
@@ -118,14 +118,14 @@ const sensors_chip_feature *sensors_lookup_feature_nr(const char *prefix,
|
||||
/* Look up a resource in the intern chip list, and return a pointer to it.
|
||||
Do not modify the struct the return value points to! Returns NULL if
|
||||
not found.*/
|
||||
const sensors_chip_feature *sensors_lookup_feature_name(const char *prefix,
|
||||
const sensors_chip_feature *sensors_lookup_feature_name(const sensors_chip_name *chip,
|
||||
const char *feature)
|
||||
{
|
||||
int i, j;
|
||||
const sensors_chip_feature *features;
|
||||
|
||||
for (i = 0; sensors_chip_features_list[i].prefix; i++)
|
||||
if (!strcasecmp(sensors_chip_features_list[i].prefix, prefix)) {
|
||||
for (i = 0; sensors_chip_features_list[i].chip.prefix; i++)
|
||||
if (sensors_match_chip(sensors_chip_features_list[i].chip, *chip)) {
|
||||
features = sensors_chip_features_list[i].feature;
|
||||
for (j = 0; features[j].data.name; j++)
|
||||
if (!strcasecmp(features[j].data.name, feature))
|
||||
@@ -161,7 +161,7 @@ int sensors_get_label(sensors_chip_name name, int feature, char **result)
|
||||
*result = NULL;
|
||||
if (sensors_chip_name_has_wildcards(name))
|
||||
return -SENSORS_ERR_WILDCARDS;
|
||||
if (!(featureptr = sensors_lookup_feature_nr(name.prefix, feature)))
|
||||
if (!(featureptr = sensors_lookup_feature_nr(&name, feature)))
|
||||
return -SENSORS_ERR_NO_ENTRY;
|
||||
|
||||
for (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));)
|
||||
@@ -193,12 +193,12 @@ int sensors_get_ignored(sensors_chip_name name, int feature)
|
||||
res = 1;
|
||||
if (sensors_chip_name_has_wildcards(name))
|
||||
return -SENSORS_ERR_WILDCARDS;
|
||||
if (!(featureptr = sensors_lookup_feature_nr(name.prefix, feature)))
|
||||
if (!(featureptr = sensors_lookup_feature_nr(&name, feature)))
|
||||
return -SENSORS_ERR_NO_ENTRY;
|
||||
if (featureptr->data.mapping == SENSORS_NO_MAPPING)
|
||||
alt_featureptr = NULL;
|
||||
else if (!(alt_featureptr =
|
||||
sensors_lookup_feature_nr(name.prefix,
|
||||
sensors_lookup_feature_nr(&name,
|
||||
featureptr->data.mapping)))
|
||||
return -SENSORS_ERR_NO_ENTRY;
|
||||
for (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));)
|
||||
@@ -227,11 +227,11 @@ int sensors_get_feature(sensors_chip_name name, int feature, double *result)
|
||||
|
||||
if (sensors_chip_name_has_wildcards(name))
|
||||
return -SENSORS_ERR_WILDCARDS;
|
||||
if (!(main_feature = sensors_lookup_feature_nr(name.prefix, feature)))
|
||||
if (!(main_feature = sensors_lookup_feature_nr(&name, feature)))
|
||||
return -SENSORS_ERR_NO_ENTRY;
|
||||
if (main_feature->data.compute_mapping == SENSORS_NO_MAPPING)
|
||||
alt_feature = NULL;
|
||||
else if (!(alt_feature = sensors_lookup_feature_nr(name.prefix,
|
||||
else if (!(alt_feature = sensors_lookup_feature_nr(&name,
|
||||
main_feature->data.compute_mapping)))
|
||||
return -SENSORS_ERR_NO_ENTRY;
|
||||
if (!(main_feature->data.mode & SENSORS_MODE_R))
|
||||
@@ -271,11 +271,11 @@ int sensors_set_feature(sensors_chip_name name, int feature, double value)
|
||||
|
||||
if (sensors_chip_name_has_wildcards(name))
|
||||
return -SENSORS_ERR_WILDCARDS;
|
||||
if (!(main_feature = sensors_lookup_feature_nr(name.prefix, feature)))
|
||||
if (!(main_feature = sensors_lookup_feature_nr(&name, feature)))
|
||||
return -SENSORS_ERR_NO_ENTRY;
|
||||
if (main_feature->data.compute_mapping == SENSORS_NO_MAPPING)
|
||||
alt_feature = NULL;
|
||||
else if (!(alt_feature = sensors_lookup_feature_nr(name.prefix,
|
||||
else if (!(alt_feature = sensors_lookup_feature_nr(&name,
|
||||
main_feature->data.compute_mapping)))
|
||||
return -SENSORS_ERR_NO_ENTRY;
|
||||
if (!(main_feature->data.mode & SENSORS_MODE_W))
|
||||
@@ -332,8 +332,8 @@ const sensors_feature_data *sensors_get_all_features(sensors_chip_name name,
|
||||
sensors_chip_feature *feature_list;
|
||||
int i;
|
||||
|
||||
for (i = 0; sensors_chip_features_list[i].prefix; i++)
|
||||
if (!strcasecmp(sensors_chip_features_list[i].prefix, name.prefix)) {
|
||||
for (i = 0; sensors_chip_features_list[i].chip.prefix; i++)
|
||||
if (sensors_match_chip(sensors_chip_features_list[i].chip, name)) {
|
||||
feature_list = sensors_chip_features_list[i].feature;
|
||||
if (!*nr1 && !*nr2) { /* Return the first entry */
|
||||
if (!feature_list[0].data.name) /* The list may be empty */
|
||||
@@ -373,7 +373,7 @@ int sensors_eval_expr(sensors_chip_name chipname, const sensors_expr * expr,
|
||||
return 0;
|
||||
}
|
||||
if (expr->kind == sensors_kind_var) {
|
||||
if (!(feature = sensors_lookup_feature_name(chipname.prefix,
|
||||
if (!(feature = sensors_lookup_feature_name(&chipname,
|
||||
expr->data.var)))
|
||||
return SENSORS_ERR_NO_ENTRY;
|
||||
if (!(res = sensors_get_feature(chipname, feature->data.number, result)))
|
||||
@@ -432,7 +432,7 @@ int sensors_do_this_chip_sets(sensors_chip_name name)
|
||||
|
||||
for (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));)
|
||||
for (i = 0; i < chip->sets_count; i++) {
|
||||
feature = sensors_lookup_feature_name(name.prefix,
|
||||
feature = sensors_lookup_feature_name(&name,
|
||||
chip->sets[i].name);
|
||||
if (!feature) {
|
||||
sensors_parse_error("Unknown feature name",
|
||||
|
||||
+2
-2
@@ -36,14 +36,14 @@ extern sensors_chip *sensors_for_all_config_chips(sensors_chip_name chip_name,
|
||||
/* Look up a resource in the intern chip list, and return a pointer to it.
|
||||
Do not modify the struct the return value points to! Returns NULL if
|
||||
not found. */
|
||||
extern const sensors_chip_feature *sensors_lookup_feature_nr(const char *prefix,
|
||||
extern const sensors_chip_feature *sensors_lookup_feature_nr(const sensors_chip_name *chip,
|
||||
int feature);
|
||||
|
||||
/* Look up a resource in the intern chip list, and return a pointer to it.
|
||||
Do not modify the struct the return value points to! Returns NULL if
|
||||
not found.*/
|
||||
extern const sensors_chip_feature *sensors_lookup_feature_name
|
||||
(const char *prefix, const char *feature);
|
||||
(const sensors_chip_name *chip, const char *feature);
|
||||
|
||||
/* Substitute configuration bus numbers with real-world /proc bus numbers
|
||||
in the chips lists */
|
||||
|
||||
+2
-2
@@ -44,11 +44,11 @@ sensors_bus *sensors_proc_bus = NULL;
|
||||
int sensors_proc_bus_count = 0;
|
||||
int sensors_proc_bus_max = 0;
|
||||
|
||||
#define PLACEHOLDER_ELEMENTS {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}
|
||||
#define PLACEHOLDER_ELEMENTS {{0}}, {{0}}, {{0}}, {{0}}, {{0}}, {{0}}, {{0}}, {{0}}, {{0}}, {{0}}
|
||||
|
||||
sensors_chip_features sensors_chip_features_list[] = {
|
||||
PLACEHOLDER_ELEMENTS,
|
||||
{ 0 }
|
||||
{ { 0 } }
|
||||
};
|
||||
|
||||
static int sensors_substitute_chip(sensors_chip_name *name,int lineno);
|
||||
|
||||
+1
-1
@@ -147,7 +147,7 @@ typedef struct sensors_chip_feature {
|
||||
|
||||
/* Internal data about all features of a type of chip */
|
||||
typedef struct sensors_chip_features {
|
||||
const char *prefix;
|
||||
struct sensors_chip_name chip;
|
||||
struct sensors_chip_feature *feature;
|
||||
} sensors_chip_features;
|
||||
|
||||
|
||||
+2
-2
@@ -39,7 +39,7 @@ int sensors_read_proc(sensors_chip_name name, int feature, double *value)
|
||||
char n[NAME_MAX], altn[NAME_MAX];
|
||||
FILE *f;
|
||||
|
||||
if (! (the_feature = sensors_lookup_feature_nr(name.prefix,feature)))
|
||||
if (!(the_feature = sensors_lookup_feature_nr(&name, feature)))
|
||||
return -SENSORS_ERR_NO_ENTRY;
|
||||
|
||||
strcpy(n, name.busname);
|
||||
@@ -68,7 +68,7 @@ int sensors_write_proc(sensors_chip_name name, int feature, double value)
|
||||
char n[NAME_MAX], altn[NAME_MAX];
|
||||
FILE *f;
|
||||
|
||||
if (! (the_feature = sensors_lookup_feature_nr(name.prefix,feature)))
|
||||
if (!(the_feature = sensors_lookup_feature_nr(&name, feature)))
|
||||
return -SENSORS_ERR_NO_ENTRY;
|
||||
|
||||
strcpy(n, name.busname);
|
||||
|
||||
+6
-11
@@ -67,7 +67,7 @@ sensors_chip_features sensors_read_dynamic_chip(struct sysfs_device *sysdir)
|
||||
int i, type, fnum = 1;
|
||||
struct sysfs_attribute *attr;
|
||||
struct dlist *attrs;
|
||||
sensors_chip_features ret = {0, 0};
|
||||
sensors_chip_features ret = {{0}, 0};
|
||||
/* room for all 3 (in, fan, temp) types, with all their subfeatures
|
||||
+ misc features. We use a large sparse table at first to store all
|
||||
found features, so that we can store them sorted at type and index
|
||||
@@ -90,7 +90,7 @@ sensors_chip_features sensors_read_dynamic_chip(struct sysfs_device *sysdir)
|
||||
name = attr->name;
|
||||
|
||||
if (!strcmp(name, "name")) {
|
||||
ret.prefix = strndup(attr->value, strlen(attr->value) - 1);
|
||||
ret.chip.prefix = strndup(attr->value, strlen(attr->value) - 1);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -269,18 +269,13 @@ static int sensors_read_one_sysfs_chip(struct sysfs_device *dev)
|
||||
} else
|
||||
return -SENSORS_ERR_PARSE;
|
||||
|
||||
/* check whether this chip is known in the static list */
|
||||
for (i = 0; sensors_chip_features_list[i].prefix; i++)
|
||||
if (!strcasecmp(sensors_chip_features_list[i].prefix, name.prefix))
|
||||
break;
|
||||
|
||||
/* if no chip definition matches */
|
||||
if (!sensors_chip_features_list[i].prefix &&
|
||||
total_dynamic < N_PLACEHOLDER_ELEMENTS) {
|
||||
if (total_dynamic < N_PLACEHOLDER_ELEMENTS) {
|
||||
sensors_chip_features n_entry = sensors_read_dynamic_chip(dev);
|
||||
n_entry.chip.addr = name.addr;
|
||||
n_entry.chip.bus = name.bus;
|
||||
|
||||
/* skip to end of list */
|
||||
for(i = 0; sensors_chip_features_list[i].prefix; i++);
|
||||
for(i = 0; sensors_chip_features_list[i].chip.prefix; i++);
|
||||
|
||||
sensors_chip_features_list[i] = n_entry;
|
||||
|
||||
|
||||
Reference in new issue
Block a user