From a14856904a86cf301f38adbbbd77e88b9b2c2a9c Mon Sep 17 00:00:00 2001 From: Stefan Berger Date: Fri, 11 Nov 2011 12:57:03 -0500 Subject: [PATCH] --- yaml --- r: 283231 b: refs/heads/master c: d97c6ade5926afb6d52df36c33a3491d62cd0dc0 h: refs/heads/master i: 283229: e1b962e02827dd53a15330f45c7c82203436d735 283227: 9128762986e86ab245650fbef0b9f2e9be6bcc94 283223: 2ad227f8859b6991302e508de9319eaa3582d3c7 283215: 392abcec42d4d8167c7d28d09d563e7f01a78b19 283199: 1b887748f1573f9f412efdfbbe31819d0a6c4006 v: v3 --- [refs] | 2 +- trunk/drivers/char/tpm/tpm.c | 30 +++++++++++++++++++++++------- trunk/drivers/char/tpm/tpm.h | 2 +- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index d23dff1cda66..d9c629022515 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2b30a90f6c358714b9d6e628ac92e514917f93a1 +refs/heads/master: d97c6ade5926afb6d52df36c33a3491d62cd0dc0 diff --git a/trunk/drivers/char/tpm/tpm.c b/trunk/drivers/char/tpm/tpm.c index b6c4a320cfde..9bd4668e2855 100644 --- a/trunk/drivers/char/tpm/tpm.c +++ b/trunk/drivers/char/tpm/tpm.c @@ -611,15 +611,31 @@ int tpm_get_timeouts(struct tpm_chip *chip) } EXPORT_SYMBOL_GPL(tpm_get_timeouts); -void tpm_continue_selftest(struct tpm_chip *chip) +#define TPM_ORD_CONTINUE_SELFTEST 83 +#define CONTINUE_SELFTEST_RESULT_SIZE 10 + +static struct tpm_input_header continue_selftest_header = { + .tag = TPM_TAG_RQU_COMMAND, + .length = cpu_to_be32(10), + .ordinal = cpu_to_be32(TPM_ORD_CONTINUE_SELFTEST), +}; + +/** + * tpm_continue_selftest -- run TPM's selftest + * @chip: TPM chip to use + * + * Returns 0 on success, < 0 in case of fatal error or a value > 0 representing + * a TPM error code. + */ +int tpm_continue_selftest(struct tpm_chip *chip) { - u8 data[] = { - 0, 193, /* TPM_TAG_RQU_COMMAND */ - 0, 0, 0, 10, /* length */ - 0, 0, 0, 83, /* TPM_ORD_ContinueSelfTest */ - }; + int rc; + struct tpm_cmd_t cmd; - tpm_transmit(chip, data, sizeof(data)); + cmd.header.in = continue_selftest_header; + rc = transmit_cmd(chip, &cmd, CONTINUE_SELFTEST_RESULT_SIZE, + "continue selftest"); + return rc; } EXPORT_SYMBOL_GPL(tpm_continue_selftest); diff --git a/trunk/drivers/char/tpm/tpm.h b/trunk/drivers/char/tpm/tpm.h index 4747b68c0c1b..5d2be8ae1b48 100644 --- a/trunk/drivers/char/tpm/tpm.h +++ b/trunk/drivers/char/tpm/tpm.h @@ -281,7 +281,7 @@ ssize_t tpm_getcap(struct device *, __be32, cap_t *, const char *); extern int tpm_get_timeouts(struct tpm_chip *); extern void tpm_gen_interrupt(struct tpm_chip *); -extern void tpm_continue_selftest(struct tpm_chip *); +extern int tpm_continue_selftest(struct tpm_chip *); extern unsigned long tpm_calc_ordinal_duration(struct tpm_chip *, u32); extern struct tpm_chip* tpm_register_hardware(struct device *, const struct tpm_vendor_specific *);