aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/char/tpm/tpm.c18
-rw-r--r--drivers/char/tpm/tpm.h2
-rw-r--r--drivers/char/tpm/tpm_tis.c4
3 files changed, 21 insertions, 3 deletions
diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c
index 36e0fa161c2b..faf5a2c65926 100644
--- a/drivers/char/tpm/tpm.c
+++ b/drivers/char/tpm/tpm.c
@@ -577,9 +577,11 @@ duration:
577 if (rc) 577 if (rc)
578 return; 578 return;
579 579
580 if (be32_to_cpu(tpm_cmd.header.out.return_code) 580 if (be32_to_cpu(tpm_cmd.header.out.return_code) != 0 ||
581 != 3 * sizeof(u32)) 581 be32_to_cpu(tpm_cmd.header.out.length)
582 != sizeof(tpm_cmd.header.out) + sizeof(u32) + 3 * sizeof(u32))
582 return; 583 return;
584
583 duration_cap = &tpm_cmd.params.getcap_out.cap.duration; 585 duration_cap = &tpm_cmd.params.getcap_out.cap.duration;
584 chip->vendor.duration[TPM_SHORT] = 586 chip->vendor.duration[TPM_SHORT] =
585 usecs_to_jiffies(be32_to_cpu(duration_cap->tpm_short)); 587 usecs_to_jiffies(be32_to_cpu(duration_cap->tpm_short));
@@ -939,6 +941,18 @@ ssize_t tpm_show_caps_1_2(struct device * dev,
939} 941}
940EXPORT_SYMBOL_GPL(tpm_show_caps_1_2); 942EXPORT_SYMBOL_GPL(tpm_show_caps_1_2);
941 943
944ssize_t tpm_show_timeouts(struct device *dev, struct device_attribute *attr,
945 char *buf)
946{
947 struct tpm_chip *chip = dev_get_drvdata(dev);
948
949 return sprintf(buf, "%d %d %d\n",
950 jiffies_to_usecs(chip->vendor.duration[TPM_SHORT]),
951 jiffies_to_usecs(chip->vendor.duration[TPM_MEDIUM]),
952 jiffies_to_usecs(chip->vendor.duration[TPM_LONG]));
953}
954EXPORT_SYMBOL_GPL(tpm_show_timeouts);
955
942ssize_t tpm_store_cancel(struct device *dev, struct device_attribute *attr, 956ssize_t tpm_store_cancel(struct device *dev, struct device_attribute *attr,
943 const char *buf, size_t count) 957 const char *buf, size_t count)
944{ 958{
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index 72ddb031b69a..d84ff772c26f 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 *);
57extern ssize_t tpm_show_temp_deactivated(struct device *, 57extern ssize_t tpm_show_temp_deactivated(struct device *,
58 struct device_attribute *attr, char *); 58 struct device_attribute *attr, char *);
59extern ssize_t tpm_show_timeouts(struct device *,
60 struct device_attribute *attr, char *);
59 61
60struct tpm_chip; 62struct tpm_chip;
61 63
diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
index dd21df55689d..0d1d38e5f266 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);
377static DEVICE_ATTR(caps, S_IRUGO, tpm_show_caps_1_2, NULL); 377static DEVICE_ATTR(caps, S_IRUGO, tpm_show_caps_1_2, NULL);
378static DEVICE_ATTR(cancel, S_IWUSR | S_IWGRP, NULL, tpm_store_cancel); 378static DEVICE_ATTR(cancel, S_IWUSR | S_IWGRP, NULL, tpm_store_cancel);
379static DEVICE_ATTR(timeouts, S_IRUGO, tpm_show_timeouts, NULL);
379 380
380static struct attribute *tis_attrs[] = { 381static 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_timeouts.attr, NULL,
389}; 391};
390 392
391static struct attribute_group tis_attr_grp = { 393static struct attribute_group tis_attr_grp = {