lspcmcia: print out card resource configuration Starting with 2.6.36, there is some per-card resource configuration which can be extracted from sysfs, and which might be useful for debugging purposes. Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
diff --git a/src/pccardctl.c b/src/pccardctl.c index d5cbfef..534680d 100644 --- a/src/pccardctl.c +++ b/src/pccardctl.c
@@ -498,6 +498,58 @@ return; } +static void lspcmcia_device_resources(unsigned long socket_no, int fun) { + char file[SYSFS_PATH_MAX]; + struct sysfs_attribute *attr; + int ret, length; + char *sep; + char *result = NULL; + + snprintf(file, SYSFS_PATH_MAX, + "/sys/bus/pcmcia/devices/%lu.%u/resources", socket_no, fun); + + attr = sysfs_open_attribute(file); + if (!attr) + return; + + ret = sysfs_read_attribute(attr); + if (ret) + goto close_out; + + if (!attr->value || !attr->len || (attr->len < 5)) + goto close_out; + + result = malloc(attr->len + 1); + if (result) { + memcpy(result, attr->value, attr->len); + result[attr->len] = '\0'; + if (result[attr->len - 1] == '\n') + result[attr->len - 1] = '\0'; + } else + goto close_out; + + ret = 0; + printf("\t\t\t"); + do { + sep = strchr(&result[ret], '\n'); + if (sep) { + length = sep - &result[ret]; + if (length > SYSFS_PATH_MAX) + break; + memcpy(file, &result[ret], length); + file[length] = '\0'; + printf("%s\n\t\t\t",file); + ret += length + 1; + } + } while (sep); + if (result) + printf("%s\n", &result[ret]); + + close_out: + sysfs_close_attribute(attr); + return; +} + static int lspcmcia(unsigned long socket_no, int verbose) { char file[SYSFS_PATH_MAX]; @@ -575,6 +627,7 @@ int pm_state = pccardctl_get_power_device(socket_no, i); printf("\tConfiguration:\tstate: %s\n", pm_state ? "suspended" : "on"); + lspcmcia_device_resources(socket_no, i); printf("\tProduct Name: "); for (j=1;j<=4;j++) {