diff options
author | Stefan Berger <stefanb@linux.vnet.ibm.com> | 2011-03-30 12:13:25 -0400 |
---|---|---|
committer | Rajiv Andrade <srajiv@linux.vnet.ibm.com> | 2011-07-12 17:53:07 -0400 |
commit | 04ab2293bbd36fc04060da93058cef7789414585 (patch) | |
tree | 051266e417a83140a7d2c80486f98e3c219d7eba /drivers | |
parent | e934acca1ee993e1d99d7dc203569a6e5cdfb392 (diff) |
tpm_tis: Introduce durations sysfs entry
Display the TPM's command timeouts in a 'durations' sysfs entry. Display
the entries as having been adjusted when they were scaled due to their values
being reported in milliseconds rather than microseconds.
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Tested-by: Guillaume Chazarain <guichaz@gmail.com>
Signed-off-by: Rajiv Andrade <srajiv@linux.vnet.ibm.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/char/tpm/tpm.c | 15 | ||||
-rw-r--r-- | drivers/char/tpm/tpm.h | 3 | ||||
-rw-r--r-- | drivers/char/tpm/tpm_tis.c | 4 |
3 files changed, 21 insertions, 1 deletions
diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c index 277cf22609ca..27abfd93714d 100644 --- a/drivers/char/tpm/tpm.c +++ b/drivers/char/tpm/tpm.c | |||
@@ -597,6 +597,7 @@ duration: | |||
597 | chip->vendor.duration[TPM_SHORT] = HZ; | 597 | chip->vendor.duration[TPM_SHORT] = HZ; |
598 | chip->vendor.duration[TPM_MEDIUM] *= 1000; | 598 | chip->vendor.duration[TPM_MEDIUM] *= 1000; |
599 | chip->vendor.duration[TPM_LONG] *= 1000; | 599 | chip->vendor.duration[TPM_LONG] *= 1000; |
600 | chip->vendor.duration_adjusted = true; | ||
600 | dev_info(chip->dev, "Adjusting TPM timeout parameters."); | 601 | dev_info(chip->dev, "Adjusting TPM timeout parameters."); |
601 | } | 602 | } |
602 | } | 603 | } |
@@ -944,6 +945,20 @@ ssize_t tpm_show_caps_1_2(struct device * dev, | |||
944 | } | 945 | } |
945 | EXPORT_SYMBOL_GPL(tpm_show_caps_1_2); | 946 | EXPORT_SYMBOL_GPL(tpm_show_caps_1_2); |
946 | 947 | ||
948 | ssize_t tpm_show_durations(struct device *dev, struct device_attribute *attr, | ||
949 | char *buf) | ||
950 | { | ||
951 | struct tpm_chip *chip = dev_get_drvdata(dev); | ||
952 | |||
953 | return sprintf(buf, "%d %d %d [%s]\n", | ||
954 | jiffies_to_usecs(chip->vendor.duration[TPM_SHORT]), | ||
955 | jiffies_to_usecs(chip->vendor.duration[TPM_MEDIUM]), | ||
956 | jiffies_to_usecs(chip->vendor.duration[TPM_LONG]), | ||
957 | chip->vendor.duration_adjusted | ||
958 | ? "adjusted" : "original"); | ||
959 | } | ||
960 | EXPORT_SYMBOL_GPL(tpm_show_durations); | ||
961 | |||
947 | ssize_t tpm_store_cancel(struct device *dev, struct device_attribute *attr, | 962 | ssize_t tpm_store_cancel(struct device *dev, struct device_attribute *attr, |
948 | const char *buf, size_t count) | 963 | const char *buf, size_t count) |
949 | { | 964 | { |
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h index 72ddb031b69a..6fc797611ccb 100644 --- a/drivers/char/tpm/tpm.h +++ b/drivers/char/tpm/tpm.h | |||
@@ -56,6 +56,8 @@ extern ssize_t tpm_show_owned(struct device *, struct device_attribute *attr, | |||
56 | char *); | 56 | char *); |
57 | extern ssize_t tpm_show_temp_deactivated(struct device *, | 57 | extern ssize_t tpm_show_temp_deactivated(struct device *, |
58 | struct device_attribute *attr, char *); | 58 | struct device_attribute *attr, char *); |
59 | extern ssize_t tpm_show_durations(struct device *, | ||
60 | struct device_attribute *attr, char *); | ||
59 | 61 | ||
60 | struct tpm_chip; | 62 | struct tpm_chip; |
61 | 63 | ||
@@ -82,6 +84,7 @@ struct tpm_vendor_specific { | |||
82 | int locality; | 84 | int locality; |
83 | unsigned long timeout_a, timeout_b, timeout_c, timeout_d; /* jiffies */ | 85 | unsigned long timeout_a, timeout_b, timeout_c, timeout_d; /* jiffies */ |
84 | unsigned long duration[3]; /* jiffies */ | 86 | unsigned long duration[3]; /* jiffies */ |
87 | bool duration_adjusted; | ||
85 | 88 | ||
86 | wait_queue_head_t read_queue; | 89 | wait_queue_head_t read_queue; |
87 | wait_queue_head_t int_queue; | 90 | wait_queue_head_t int_queue; |
diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c index dd21df55689d..e15b30d49543 100644 --- a/drivers/char/tpm/tpm_tis.c +++ b/drivers/char/tpm/tpm_tis.c | |||
@@ -376,6 +376,7 @@ static DEVICE_ATTR(temp_deactivated, S_IRUGO, tpm_show_temp_deactivated, | |||
376 | NULL); | 376 | NULL); |
377 | static DEVICE_ATTR(caps, S_IRUGO, tpm_show_caps_1_2, NULL); | 377 | static DEVICE_ATTR(caps, S_IRUGO, tpm_show_caps_1_2, NULL); |
378 | static DEVICE_ATTR(cancel, S_IWUSR | S_IWGRP, NULL, tpm_store_cancel); | 378 | static DEVICE_ATTR(cancel, S_IWUSR | S_IWGRP, NULL, tpm_store_cancel); |
379 | static DEVICE_ATTR(durations, S_IRUGO, tpm_show_durations, NULL); | ||
379 | 380 | ||
380 | static struct attribute *tis_attrs[] = { | 381 | static struct attribute *tis_attrs[] = { |
381 | &dev_attr_pubek.attr, | 382 | &dev_attr_pubek.attr, |
@@ -385,7 +386,8 @@ static struct attribute *tis_attrs[] = { | |||
385 | &dev_attr_owned.attr, | 386 | &dev_attr_owned.attr, |
386 | &dev_attr_temp_deactivated.attr, | 387 | &dev_attr_temp_deactivated.attr, |
387 | &dev_attr_caps.attr, | 388 | &dev_attr_caps.attr, |
388 | &dev_attr_cancel.attr, NULL, | 389 | &dev_attr_cancel.attr, |
390 | &dev_attr_durations.attr, NULL, | ||
389 | }; | 391 | }; |
390 | 392 | ||
391 | static struct attribute_group tis_attr_grp = { | 393 | static struct attribute_group tis_attr_grp = { |