Linux Audio

Check our new training course

Loading...
v6.8
  1// SPDX-License-Identifier: GPL-2.0-only
  2/*
  3 * Copyright (C) 2004 IBM Corporation
  4 * Copyright (C) 2014 Intel Corporation
  5 *
  6 * Authors:
  7 * Leendert van Doorn <leendert@watson.ibm.com>
  8 * Dave Safford <safford@watson.ibm.com>
  9 * Reiner Sailer <sailer@watson.ibm.com>
 10 * Kylene Hall <kjhall@us.ibm.com>
 11 *
 12 * Maintained by: <tpmdd-devel@lists.sourceforge.net>
 13 *
 14 * Device driver for TCG/TCPA TPM (trusted platform module).
 15 * Specifications at www.trustedcomputinggroup.org
 16 *
 
 
 
 
 
 17 * Note, the TPM chip is not interrupt driven (only polling)
 18 * and can have very long timeouts (minutes!). Hence the unusual
 19 * calls to msleep.
 
 20 */
 21
 22#include <linux/poll.h>
 23#include <linux/slab.h>
 24#include <linux/mutex.h>
 25#include <linux/spinlock.h>
 26#include <linux/suspend.h>
 27#include <linux/freezer.h>
 28#include <linux/tpm_eventlog.h>
 29
 30#include "tpm.h"
 
 
 
 
 
 
 31
 32/*
 33 * Bug workaround - some TPM's don't flush the most
 34 * recently changed pcr on suspend, so force the flush
 35 * with an extend to the selected _unused_ non-volatile pcr.
 36 */
 37static u32 tpm_suspend_pcr;
 38module_param_named(suspend_pcr, tpm_suspend_pcr, uint, 0644);
 39MODULE_PARM_DESC(suspend_pcr,
 40		 "PCR to use for dummy writes to facilitate flush on suspend.");
 41
 42/**
 43 * tpm_calc_ordinal_duration() - calculate the maximum command duration
 44 * @chip:    TPM chip to use.
 45 * @ordinal: TPM command ordinal.
 46 *
 47 * The function returns the maximum amount of time the chip could take
 48 * to return the result for a particular ordinal in jiffies.
 49 *
 50 * Return: A maximal duration time for an ordinal in jiffies.
 51 */
 52unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 53{
 54	if (chip->flags & TPM_CHIP_FLAG_TPM2)
 55		return tpm2_calc_ordinal_duration(chip, ordinal);
 
 
 
 
 
 
 
 
 
 
 
 
 56	else
 57		return tpm1_calc_ordinal_duration(chip, ordinal);
 58}
 59EXPORT_SYMBOL_GPL(tpm_calc_ordinal_duration);
 60
 61static ssize_t tpm_try_transmit(struct tpm_chip *chip, void *buf, size_t bufsiz)
 
 
 
 
 62{
 63	struct tpm_header *header = buf;
 64	int rc;
 65	ssize_t len = 0;
 66	u32 count, ordinal;
 67	unsigned long stop;
 68
 69	if (bufsiz < TPM_HEADER_SIZE)
 70		return -EINVAL;
 71
 72	if (bufsiz > TPM_BUFSIZE)
 73		bufsiz = TPM_BUFSIZE;
 74
 75	count = be32_to_cpu(header->length);
 76	ordinal = be32_to_cpu(header->ordinal);
 77	if (count == 0)
 78		return -ENODATA;
 79	if (count > bufsiz) {
 80		dev_err(&chip->dev,
 81			"invalid count value %x %zx\n", count, bufsiz);
 82		return -E2BIG;
 83	}
 84
 85	rc = chip->ops->send(chip, buf, count);
 86	if (rc < 0) {
 87		if (rc != -EPIPE)
 88			dev_err(&chip->dev,
 89				"%s: send(): error %d\n", __func__, rc);
 90		return rc;
 91	}
 92
 93	/* A sanity check. send() should just return zero on success e.g.
 94	 * not the command length.
 95	 */
 96	if (rc > 0) {
 97		dev_warn(&chip->dev,
 98			 "%s: send(): invalid value %d\n", __func__, rc);
 99		rc = 0;
 
100	}
101
102	if (chip->flags & TPM_CHIP_FLAG_IRQ)
103		goto out_recv;
104
105	stop = jiffies + tpm_calc_ordinal_duration(chip, ordinal);
 
 
 
106	do {
107		u8 status = chip->ops->status(chip);
108		if ((status & chip->ops->req_complete_mask) ==
109		    chip->ops->req_complete_val)
110			goto out_recv;
111
112		if (chip->ops->req_canceled(chip, status)) {
113			dev_err(&chip->dev, "Operation Canceled\n");
114			return -ECANCELED;
 
115		}
116
117		tpm_msleep(TPM_TIMEOUT_POLL);
118		rmb();
119	} while (time_before(jiffies, stop));
120
121	chip->ops->cancel(chip);
122	dev_err(&chip->dev, "Operation Timed out\n");
123	return -ETIME;
 
124
125out_recv:
126	len = chip->ops->recv(chip, buf, bufsiz);
127	if (len < 0) {
128		rc = len;
129		dev_err(&chip->dev, "tpm_transmit: tpm_recv: error %d\n", rc);
130	} else if (len < TPM_HEADER_SIZE || len != be32_to_cpu(header->length))
131		rc = -EFAULT;
 
132
133	return rc ? rc : len;
 
 
134}
135
136/**
137 * tpm_transmit - Internal kernel interface to transmit TPM commands.
138 * @chip:	a TPM chip to use
139 * @buf:	a TPM command buffer
140 * @bufsiz:	length of the TPM command buffer
141 *
142 * A wrapper around tpm_try_transmit() that handles TPM2_RC_RETRY returns from
143 * the TPM and retransmits the command after a delay up to a maximum wait of
144 * TPM2_DURATION_LONG.
145 *
146 * Note that TPM 1.x never returns TPM2_RC_RETRY so the retry logic is TPM 2.0
147 * only.
148 *
149 * Return:
150 * * The response length	- OK
151 * * -errno			- A system error
152 */
153ssize_t tpm_transmit(struct tpm_chip *chip, u8 *buf, size_t bufsiz)
154{
155	struct tpm_header *header = (struct tpm_header *)buf;
156	/* space for header and handles */
157	u8 save[TPM_HEADER_SIZE + 3*sizeof(u32)];
158	unsigned int delay_msec = TPM2_DURATION_SHORT;
159	u32 rc = 0;
160	ssize_t ret;
161	const size_t save_size = min(sizeof(save), bufsiz);
162	/* the command code is where the return code will be */
163	u32 cc = be32_to_cpu(header->return_code);
164
165	/*
166	 * Subtlety here: if we have a space, the handles will be
167	 * transformed, so when we restore the header we also have to
168	 * restore the handles.
169	 */
170	memcpy(save, buf, save_size);
171
172	for (;;) {
173		ret = tpm_try_transmit(chip, buf, bufsiz);
174		if (ret < 0)
175			break;
176		rc = be32_to_cpu(header->return_code);
177		if (rc != TPM2_RC_RETRY && rc != TPM2_RC_TESTING)
178			break;
179		/*
180		 * return immediately if self test returns test
181		 * still running to shorten boot time.
182		 */
183		if (rc == TPM2_RC_TESTING && cc == TPM2_CC_SELF_TEST)
184			break;
185
186		if (delay_msec > TPM2_DURATION_LONG) {
187			if (rc == TPM2_RC_RETRY)
188				dev_err(&chip->dev, "in retry loop\n");
189			else
190				dev_err(&chip->dev,
191					"self test is still running\n");
192			break;
193		}
194		tpm_msleep(delay_msec);
195		delay_msec *= 2;
196		memcpy(buf, save, save_size);
197	}
198	return ret;
199}
200
201/**
202 * tpm_transmit_cmd - send a tpm command to the device
203 * @chip:			a TPM chip to use
204 * @buf:			a TPM command buffer
205 * @min_rsp_body_length:	minimum expected length of response body
206 * @desc:			command description used in the error message
207 *
208 * Return:
209 * * 0		- OK
210 * * -errno	- A system error
211 * * TPM_RC	- A TPM error
212 */
213ssize_t tpm_transmit_cmd(struct tpm_chip *chip, struct tpm_buf *buf,
214			 size_t min_rsp_body_length, const char *desc)
215{
216	const struct tpm_header *header = (struct tpm_header *)buf->data;
217	int err;
218	ssize_t len;
219
220	len = tpm_transmit(chip, buf->data, PAGE_SIZE);
221	if (len <  0)
222		return len;
 
 
 
 
223
224	err = be32_to_cpu(header->return_code);
225	if (err != 0 && err != TPM_ERR_DISABLED && err != TPM_ERR_DEACTIVATED
226	    && err != TPM2_RC_TESTING && desc)
227		dev_err(&chip->dev, "A TPM error (%d) occurred %s\n", err,
228			desc);
229	if (err)
230		return err;
231
232	if (len < min_rsp_body_length + TPM_HEADER_SIZE)
233		return -EFAULT;
234
235	return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
236}
237EXPORT_SYMBOL_GPL(tpm_transmit_cmd);
238
239int tpm_get_timeouts(struct tpm_chip *chip)
240{
 
 
 
 
241	if (chip->flags & TPM_CHIP_FLAG_HAVE_TIMEOUTS)
242		return 0;
243
244	if (chip->flags & TPM_CHIP_FLAG_TPM2)
245		return tpm2_get_timeouts(chip);
246	else
247		return tpm1_get_timeouts(chip);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
248}
249EXPORT_SYMBOL_GPL(tpm_get_timeouts);
250
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251/**
252 * tpm_is_tpm2 - do we a have a TPM2 chip?
253 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
254 *
255 * Return:
256 * 1 if we have a TPM2 chip.
257 * 0 if we don't have a TPM2 chip.
258 * A negative number for system errors (errno).
259 */
260int tpm_is_tpm2(struct tpm_chip *chip)
261{
 
262	int rc;
263
264	chip = tpm_find_get_ops(chip);
265	if (!chip)
266		return -ENODEV;
267
268	rc = (chip->flags & TPM_CHIP_FLAG_TPM2) != 0;
269
270	tpm_put_ops(chip);
271
272	return rc;
273}
274EXPORT_SYMBOL_GPL(tpm_is_tpm2);
275
276/**
277 * tpm_pcr_read - read a PCR value from SHA1 bank
278 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
279 * @pcr_idx:	the PCR to be retrieved
280 * @digest:	the PCR bank and buffer current PCR value is written to
 
281 *
282 * Return: same as with tpm_transmit_cmd()
 
 
283 */
284int tpm_pcr_read(struct tpm_chip *chip, u32 pcr_idx,
285		 struct tpm_digest *digest)
286{
 
287	int rc;
288
289	chip = tpm_find_get_ops(chip);
290	if (!chip)
291		return -ENODEV;
292
293	if (chip->flags & TPM_CHIP_FLAG_TPM2)
294		rc = tpm2_pcr_read(chip, pcr_idx, digest, NULL);
295	else
296		rc = tpm1_pcr_read(chip, pcr_idx, digest->digest);
297
298	tpm_put_ops(chip);
299	return rc;
300}
301EXPORT_SYMBOL_GPL(tpm_pcr_read);
302
 
 
 
 
 
 
 
 
303/**
304 * tpm_pcr_extend - extend a PCR value in SHA1 bank.
305 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
306 * @pcr_idx:	the PCR to be retrieved
307 * @digests:	array of tpm_digest structures used to extend PCRs
308 *
309 * Note: callers must pass a digest for every allocated PCR bank, in the same
310 * order of the banks in chip->allocated_banks.
311 *
312 * Return: same as with tpm_transmit_cmd()
313 */
314int tpm_pcr_extend(struct tpm_chip *chip, u32 pcr_idx,
315		   struct tpm_digest *digests)
316{
 
317	int rc;
318	int i;
319
320	chip = tpm_find_get_ops(chip);
321	if (!chip)
322		return -ENODEV;
323
324	for (i = 0; i < chip->nr_allocated_banks; i++) {
325		if (digests[i].alg_id != chip->allocated_banks[i].alg_id) {
326			rc = -EINVAL;
327			goto out;
328		}
329	}
330
331	if (chip->flags & TPM_CHIP_FLAG_TPM2) {
332		rc = tpm2_pcr_extend(chip, pcr_idx, digests);
333		goto out;
 
334	}
335
336	rc = tpm1_pcr_extend(chip, pcr_idx, digests[0].digest,
337			     "attempting extend a PCR value");
 
 
 
338
339out:
340	tpm_put_ops(chip);
341	return rc;
342}
343EXPORT_SYMBOL_GPL(tpm_pcr_extend);
344
345/**
346 * tpm_send - send a TPM command
347 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
348 * @cmd:	a TPM command buffer
349 * @buflen:	the length of the TPM command buffer
350 *
351 * Return: same as with tpm_transmit_cmd()
 
352 */
353int tpm_send(struct tpm_chip *chip, void *cmd, size_t buflen)
354{
355	struct tpm_buf buf;
356	int rc;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
357
358	chip = tpm_find_get_ops(chip);
359	if (!chip)
 
 
 
 
 
360		return -ENODEV;
361
362	buf.data = cmd;
363	rc = tpm_transmit_cmd(chip, &buf, 0, "attempting to a send a command");
364
365	tpm_put_ops(chip);
366	return rc;
367}
368EXPORT_SYMBOL_GPL(tpm_send);
369
370int tpm_auto_startup(struct tpm_chip *chip)
 
371{
372	int rc;
 
 
 
 
 
 
 
 
 
 
373
374	if (!(chip->ops->flags & TPM_OPS_AUTO_STARTUP))
 
 
 
 
 
 
 
 
 
 
375		return 0;
376
377	if (chip->flags & TPM_CHIP_FLAG_TPM2)
378		rc = tpm2_auto_startup(chip);
379	else
380		rc = tpm1_auto_startup(chip);
381
382	return rc;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
383}
 
 
 
 
 
 
 
 
 
 
384
385/*
386 * We are about to suspend. Save the TPM state
387 * so that it can be restored.
388 */
389int tpm_pm_suspend(struct device *dev)
390{
391	struct tpm_chip *chip = dev_get_drvdata(dev);
392	int rc = 0;
 
393
394	if (!chip)
395		return -ENODEV;
396
397	if (chip->flags & TPM_CHIP_FLAG_ALWAYS_POWERED)
398		goto suspended;
399
400	if ((chip->flags & TPM_CHIP_FLAG_FIRMWARE_POWER_MANAGED) &&
401	    !pm_suspend_via_firmware())
402		goto suspended;
403
404	rc = tpm_try_get_ops(chip);
405	if (!rc) {
406		if (chip->flags & TPM_CHIP_FLAG_TPM2)
407			tpm2_shutdown(chip, TPM2_SU_STATE);
408		else
409			rc = tpm1_pm_suspend(chip, tpm_suspend_pcr);
410
411		tpm_put_ops(chip);
 
 
 
 
 
 
 
412	}
413
414suspended:
415	chip->flags |= TPM_CHIP_FLAG_SUSPENDED;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
416
417	if (rc)
418		dev_err(dev, "Ignoring error %d while suspending\n", rc);
419	return 0;
 
 
 
 
 
420}
421EXPORT_SYMBOL_GPL(tpm_pm_suspend);
422
423/*
424 * Resume from a power safe. The BIOS already restored
425 * the TPM state.
426 */
427int tpm_pm_resume(struct device *dev)
428{
429	struct tpm_chip *chip = dev_get_drvdata(dev);
430
431	if (chip == NULL)
432		return -ENODEV;
433
434	chip->flags &= ~TPM_CHIP_FLAG_SUSPENDED;
435
436	/*
437	 * Guarantee that SUSPENDED is written last, so that hwrng does not
438	 * activate before the chip has been fully resumed.
439	 */
440	wmb();
441
442	return 0;
443}
444EXPORT_SYMBOL_GPL(tpm_pm_resume);
445
 
 
 
 
 
 
 
446/**
447 * tpm_get_random() - get random bytes from the TPM's RNG
448 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
449 * @out:	destination buffer for the random bytes
450 * @max:	the max number of bytes to write to @out
451 *
452 * Return: number of random bytes read or a negative error value.
453 */
454int tpm_get_random(struct tpm_chip *chip, u8 *out, size_t max)
455{
456	int rc;
 
 
 
 
457
458	if (!out || max > TPM_MAX_RNG_DATA)
459		return -EINVAL;
460
461	chip = tpm_find_get_ops(chip);
462	if (!chip)
463		return -ENODEV;
464
465	if (chip->flags & TPM_CHIP_FLAG_TPM2)
466		rc = tpm2_get_random(chip, out, max);
467	else
468		rc = tpm1_get_random(chip, out, max);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
469
470	tpm_put_ops(chip);
471	return rc;
472}
473EXPORT_SYMBOL_GPL(tpm_get_random);
474
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
475static int __init tpm_init(void)
476{
477	int rc;
478
479	rc = class_register(&tpm_class);
480	if (rc) {
481		pr_err("couldn't create tpm class\n");
482		return rc;
483	}
484
485	rc = class_register(&tpmrm_class);
486	if (rc) {
487		pr_err("couldn't create tpmrm class\n");
488		goto out_destroy_tpm_class;
489	}
490
491	rc = alloc_chrdev_region(&tpm_devt, 0, 2*TPM_NUM_DEVICES, "tpm");
492	if (rc < 0) {
493		pr_err("tpm: failed to allocate char dev region\n");
494		goto out_destroy_tpmrm_class;
495	}
496
497	rc = tpm_dev_common_init();
498	if (rc) {
499		pr_err("tpm: failed to allocate char dev region\n");
500		goto out_unreg_chrdev;
501	}
502
503	return 0;
504
505out_unreg_chrdev:
506	unregister_chrdev_region(tpm_devt, 2 * TPM_NUM_DEVICES);
507out_destroy_tpmrm_class:
508	class_unregister(&tpmrm_class);
509out_destroy_tpm_class:
510	class_unregister(&tpm_class);
511
512	return rc;
513}
514
515static void __exit tpm_exit(void)
516{
517	idr_destroy(&dev_nums_idr);
518	class_unregister(&tpm_class);
519	class_unregister(&tpmrm_class);
520	unregister_chrdev_region(tpm_devt, 2*TPM_NUM_DEVICES);
521	tpm_dev_common_exit();
522}
523
524subsys_initcall(tpm_init);
525module_exit(tpm_exit);
526
527MODULE_AUTHOR("Leendert van Doorn (leendert@watson.ibm.com)");
528MODULE_DESCRIPTION("TPM Driver");
529MODULE_VERSION("2.0");
530MODULE_LICENSE("GPL");
v4.10.11
 
   1/*
   2 * Copyright (C) 2004 IBM Corporation
   3 * Copyright (C) 2014 Intel Corporation
   4 *
   5 * Authors:
   6 * Leendert van Doorn <leendert@watson.ibm.com>
   7 * Dave Safford <safford@watson.ibm.com>
   8 * Reiner Sailer <sailer@watson.ibm.com>
   9 * Kylene Hall <kjhall@us.ibm.com>
  10 *
  11 * Maintained by: <tpmdd-devel@lists.sourceforge.net>
  12 *
  13 * Device driver for TCG/TCPA TPM (trusted platform module).
  14 * Specifications at www.trustedcomputinggroup.org
  15 *
  16 * This program is free software; you can redistribute it and/or
  17 * modify it under the terms of the GNU General Public License as
  18 * published by the Free Software Foundation, version 2 of the
  19 * License.
  20 *
  21 * Note, the TPM chip is not interrupt driven (only polling)
  22 * and can have very long timeouts (minutes!). Hence the unusual
  23 * calls to msleep.
  24 *
  25 */
  26
  27#include <linux/poll.h>
  28#include <linux/slab.h>
  29#include <linux/mutex.h>
  30#include <linux/spinlock.h>
 
  31#include <linux/freezer.h>
  32#include <linux/pm_runtime.h>
  33
  34#include "tpm.h"
  35#include "tpm_eventlog.h"
  36
  37#define TPM_MAX_ORDINAL 243
  38#define TSC_MAX_ORDINAL 12
  39#define TPM_PROTECTED_COMMAND 0x00
  40#define TPM_CONNECTION_COMMAND 0x40
  41
  42/*
  43 * Bug workaround - some TPM's don't flush the most
  44 * recently changed pcr on suspend, so force the flush
  45 * with an extend to the selected _unused_ non-volatile pcr.
  46 */
  47static int tpm_suspend_pcr;
  48module_param_named(suspend_pcr, tpm_suspend_pcr, uint, 0644);
  49MODULE_PARM_DESC(suspend_pcr,
  50		 "PCR to use for dummy writes to faciltate flush on suspend.");
  51
  52/*
  53 * Array with one entry per ordinal defining the maximum amount
  54 * of time the chip could take to return the result.  The ordinal
  55 * designation of short, medium or long is defined in a table in
  56 * TCG Specification TPM Main Part 2 TPM Structures Section 17. The
  57 * values of the SHORT, MEDIUM, and LONG durations are retrieved
  58 * from the chip during initialization with a call to tpm_get_timeouts.
 
 
  59 */
  60static const u8 tpm_ordinal_duration[TPM_MAX_ORDINAL] = {
  61	TPM_UNDEFINED,		/* 0 */
  62	TPM_UNDEFINED,
  63	TPM_UNDEFINED,
  64	TPM_UNDEFINED,
  65	TPM_UNDEFINED,
  66	TPM_UNDEFINED,		/* 5 */
  67	TPM_UNDEFINED,
  68	TPM_UNDEFINED,
  69	TPM_UNDEFINED,
  70	TPM_UNDEFINED,
  71	TPM_SHORT,		/* 10 */
  72	TPM_SHORT,
  73	TPM_MEDIUM,
  74	TPM_LONG,
  75	TPM_LONG,
  76	TPM_MEDIUM,		/* 15 */
  77	TPM_SHORT,
  78	TPM_SHORT,
  79	TPM_MEDIUM,
  80	TPM_LONG,
  81	TPM_SHORT,		/* 20 */
  82	TPM_SHORT,
  83	TPM_MEDIUM,
  84	TPM_MEDIUM,
  85	TPM_MEDIUM,
  86	TPM_SHORT,		/* 25 */
  87	TPM_SHORT,
  88	TPM_MEDIUM,
  89	TPM_SHORT,
  90	TPM_SHORT,
  91	TPM_MEDIUM,		/* 30 */
  92	TPM_LONG,
  93	TPM_MEDIUM,
  94	TPM_SHORT,
  95	TPM_SHORT,
  96	TPM_SHORT,		/* 35 */
  97	TPM_MEDIUM,
  98	TPM_MEDIUM,
  99	TPM_UNDEFINED,
 100	TPM_UNDEFINED,
 101	TPM_MEDIUM,		/* 40 */
 102	TPM_LONG,
 103	TPM_MEDIUM,
 104	TPM_SHORT,
 105	TPM_SHORT,
 106	TPM_SHORT,		/* 45 */
 107	TPM_SHORT,
 108	TPM_SHORT,
 109	TPM_SHORT,
 110	TPM_LONG,
 111	TPM_MEDIUM,		/* 50 */
 112	TPM_MEDIUM,
 113	TPM_UNDEFINED,
 114	TPM_UNDEFINED,
 115	TPM_UNDEFINED,
 116	TPM_UNDEFINED,		/* 55 */
 117	TPM_UNDEFINED,
 118	TPM_UNDEFINED,
 119	TPM_UNDEFINED,
 120	TPM_UNDEFINED,
 121	TPM_MEDIUM,		/* 60 */
 122	TPM_MEDIUM,
 123	TPM_MEDIUM,
 124	TPM_SHORT,
 125	TPM_SHORT,
 126	TPM_MEDIUM,		/* 65 */
 127	TPM_UNDEFINED,
 128	TPM_UNDEFINED,
 129	TPM_UNDEFINED,
 130	TPM_UNDEFINED,
 131	TPM_SHORT,		/* 70 */
 132	TPM_SHORT,
 133	TPM_UNDEFINED,
 134	TPM_UNDEFINED,
 135	TPM_UNDEFINED,
 136	TPM_UNDEFINED,		/* 75 */
 137	TPM_UNDEFINED,
 138	TPM_UNDEFINED,
 139	TPM_UNDEFINED,
 140	TPM_UNDEFINED,
 141	TPM_LONG,		/* 80 */
 142	TPM_UNDEFINED,
 143	TPM_MEDIUM,
 144	TPM_LONG,
 145	TPM_SHORT,
 146	TPM_UNDEFINED,		/* 85 */
 147	TPM_UNDEFINED,
 148	TPM_UNDEFINED,
 149	TPM_UNDEFINED,
 150	TPM_UNDEFINED,
 151	TPM_SHORT,		/* 90 */
 152	TPM_SHORT,
 153	TPM_SHORT,
 154	TPM_SHORT,
 155	TPM_SHORT,
 156	TPM_UNDEFINED,		/* 95 */
 157	TPM_UNDEFINED,
 158	TPM_UNDEFINED,
 159	TPM_UNDEFINED,
 160	TPM_UNDEFINED,
 161	TPM_MEDIUM,		/* 100 */
 162	TPM_SHORT,
 163	TPM_SHORT,
 164	TPM_UNDEFINED,
 165	TPM_UNDEFINED,
 166	TPM_UNDEFINED,		/* 105 */
 167	TPM_UNDEFINED,
 168	TPM_UNDEFINED,
 169	TPM_UNDEFINED,
 170	TPM_UNDEFINED,
 171	TPM_SHORT,		/* 110 */
 172	TPM_SHORT,
 173	TPM_SHORT,
 174	TPM_SHORT,
 175	TPM_SHORT,
 176	TPM_SHORT,		/* 115 */
 177	TPM_SHORT,
 178	TPM_SHORT,
 179	TPM_UNDEFINED,
 180	TPM_UNDEFINED,
 181	TPM_LONG,		/* 120 */
 182	TPM_LONG,
 183	TPM_MEDIUM,
 184	TPM_UNDEFINED,
 185	TPM_SHORT,
 186	TPM_SHORT,		/* 125 */
 187	TPM_SHORT,
 188	TPM_LONG,
 189	TPM_SHORT,
 190	TPM_SHORT,
 191	TPM_SHORT,		/* 130 */
 192	TPM_MEDIUM,
 193	TPM_UNDEFINED,
 194	TPM_SHORT,
 195	TPM_MEDIUM,
 196	TPM_UNDEFINED,		/* 135 */
 197	TPM_UNDEFINED,
 198	TPM_UNDEFINED,
 199	TPM_UNDEFINED,
 200	TPM_UNDEFINED,
 201	TPM_SHORT,		/* 140 */
 202	TPM_SHORT,
 203	TPM_UNDEFINED,
 204	TPM_UNDEFINED,
 205	TPM_UNDEFINED,
 206	TPM_UNDEFINED,		/* 145 */
 207	TPM_UNDEFINED,
 208	TPM_UNDEFINED,
 209	TPM_UNDEFINED,
 210	TPM_UNDEFINED,
 211	TPM_SHORT,		/* 150 */
 212	TPM_MEDIUM,
 213	TPM_MEDIUM,
 214	TPM_SHORT,
 215	TPM_SHORT,
 216	TPM_UNDEFINED,		/* 155 */
 217	TPM_UNDEFINED,
 218	TPM_UNDEFINED,
 219	TPM_UNDEFINED,
 220	TPM_UNDEFINED,
 221	TPM_SHORT,		/* 160 */
 222	TPM_SHORT,
 223	TPM_SHORT,
 224	TPM_SHORT,
 225	TPM_UNDEFINED,
 226	TPM_UNDEFINED,		/* 165 */
 227	TPM_UNDEFINED,
 228	TPM_UNDEFINED,
 229	TPM_UNDEFINED,
 230	TPM_UNDEFINED,
 231	TPM_LONG,		/* 170 */
 232	TPM_UNDEFINED,
 233	TPM_UNDEFINED,
 234	TPM_UNDEFINED,
 235	TPM_UNDEFINED,
 236	TPM_UNDEFINED,		/* 175 */
 237	TPM_UNDEFINED,
 238	TPM_UNDEFINED,
 239	TPM_UNDEFINED,
 240	TPM_UNDEFINED,
 241	TPM_MEDIUM,		/* 180 */
 242	TPM_SHORT,
 243	TPM_MEDIUM,
 244	TPM_MEDIUM,
 245	TPM_MEDIUM,
 246	TPM_MEDIUM,		/* 185 */
 247	TPM_SHORT,
 248	TPM_UNDEFINED,
 249	TPM_UNDEFINED,
 250	TPM_UNDEFINED,
 251	TPM_UNDEFINED,		/* 190 */
 252	TPM_UNDEFINED,
 253	TPM_UNDEFINED,
 254	TPM_UNDEFINED,
 255	TPM_UNDEFINED,
 256	TPM_UNDEFINED,		/* 195 */
 257	TPM_UNDEFINED,
 258	TPM_UNDEFINED,
 259	TPM_UNDEFINED,
 260	TPM_UNDEFINED,
 261	TPM_SHORT,		/* 200 */
 262	TPM_UNDEFINED,
 263	TPM_UNDEFINED,
 264	TPM_UNDEFINED,
 265	TPM_SHORT,
 266	TPM_SHORT,		/* 205 */
 267	TPM_SHORT,
 268	TPM_SHORT,
 269	TPM_SHORT,
 270	TPM_SHORT,
 271	TPM_MEDIUM,		/* 210 */
 272	TPM_UNDEFINED,
 273	TPM_MEDIUM,
 274	TPM_MEDIUM,
 275	TPM_MEDIUM,
 276	TPM_UNDEFINED,		/* 215 */
 277	TPM_MEDIUM,
 278	TPM_UNDEFINED,
 279	TPM_UNDEFINED,
 280	TPM_SHORT,
 281	TPM_SHORT,		/* 220 */
 282	TPM_SHORT,
 283	TPM_SHORT,
 284	TPM_SHORT,
 285	TPM_SHORT,
 286	TPM_UNDEFINED,		/* 225 */
 287	TPM_UNDEFINED,
 288	TPM_UNDEFINED,
 289	TPM_UNDEFINED,
 290	TPM_UNDEFINED,
 291	TPM_SHORT,		/* 230 */
 292	TPM_LONG,
 293	TPM_MEDIUM,
 294	TPM_UNDEFINED,
 295	TPM_UNDEFINED,
 296	TPM_UNDEFINED,		/* 235 */
 297	TPM_UNDEFINED,
 298	TPM_UNDEFINED,
 299	TPM_UNDEFINED,
 300	TPM_UNDEFINED,
 301	TPM_SHORT,		/* 240 */
 302	TPM_UNDEFINED,
 303	TPM_MEDIUM,
 304};
 305
 306/*
 307 * Returns max number of jiffies to wait
 308 */
 309unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip,
 310					   u32 ordinal)
 311{
 312	int duration_idx = TPM_UNDEFINED;
 313	int duration = 0;
 314
 315	/*
 316	 * We only have a duration table for protected commands, where the upper
 317	 * 16 bits are 0. For the few other ordinals the fallback will be used.
 318	 */
 319	if (ordinal < TPM_MAX_ORDINAL)
 320		duration_idx = tpm_ordinal_duration[ordinal];
 321
 322	if (duration_idx != TPM_UNDEFINED)
 323		duration = chip->duration[duration_idx];
 324	if (duration <= 0)
 325		return 2 * 60 * HZ;
 326	else
 327		return duration;
 328}
 329EXPORT_SYMBOL_GPL(tpm_calc_ordinal_duration);
 330
 331/*
 332 * Internal kernel interface to transmit TPM commands
 333 */
 334ssize_t tpm_transmit(struct tpm_chip *chip, const u8 *buf, size_t bufsiz,
 335		     unsigned int flags)
 336{
 337	ssize_t rc;
 
 
 338	u32 count, ordinal;
 339	unsigned long stop;
 340
 341	if (bufsiz < TPM_HEADER_SIZE)
 342		return -EINVAL;
 343
 344	if (bufsiz > TPM_BUFSIZE)
 345		bufsiz = TPM_BUFSIZE;
 346
 347	count = be32_to_cpu(*((__be32 *) (buf + 2)));
 348	ordinal = be32_to_cpu(*((__be32 *) (buf + 6)));
 349	if (count == 0)
 350		return -ENODATA;
 351	if (count > bufsiz) {
 352		dev_err(&chip->dev,
 353			"invalid count value %x %zx\n", count, bufsiz);
 354		return -E2BIG;
 355	}
 356
 357	if (!(flags & TPM_TRANSMIT_UNLOCKED))
 358		mutex_lock(&chip->tpm_mutex);
 
 
 
 
 
 359
 360	if (chip->dev.parent)
 361		pm_runtime_get_sync(chip->dev.parent);
 362
 363	rc = chip->ops->send(chip, (u8 *) buf, count);
 364	if (rc < 0) {
 365		dev_err(&chip->dev,
 366			"tpm_transmit: tpm_send: error %zd\n", rc);
 367		goto out;
 368	}
 369
 370	if (chip->flags & TPM_CHIP_FLAG_IRQ)
 371		goto out_recv;
 372
 373	if (chip->flags & TPM_CHIP_FLAG_TPM2)
 374		stop = jiffies + tpm2_calc_ordinal_duration(chip, ordinal);
 375	else
 376		stop = jiffies + tpm_calc_ordinal_duration(chip, ordinal);
 377	do {
 378		u8 status = chip->ops->status(chip);
 379		if ((status & chip->ops->req_complete_mask) ==
 380		    chip->ops->req_complete_val)
 381			goto out_recv;
 382
 383		if (chip->ops->req_canceled(chip, status)) {
 384			dev_err(&chip->dev, "Operation Canceled\n");
 385			rc = -ECANCELED;
 386			goto out;
 387		}
 388
 389		msleep(TPM_TIMEOUT);	/* CHECK */
 390		rmb();
 391	} while (time_before(jiffies, stop));
 392
 393	chip->ops->cancel(chip);
 394	dev_err(&chip->dev, "Operation Timed out\n");
 395	rc = -ETIME;
 396	goto out;
 397
 398out_recv:
 399	rc = chip->ops->recv(chip, (u8 *) buf, bufsiz);
 400	if (rc < 0)
 401		dev_err(&chip->dev,
 402			"tpm_transmit: tpm_recv: error %zd\n", rc);
 403out:
 404	if (chip->dev.parent)
 405		pm_runtime_put_sync(chip->dev.parent);
 406
 407	if (!(flags & TPM_TRANSMIT_UNLOCKED))
 408		mutex_unlock(&chip->tpm_mutex);
 409	return rc;
 410}
 411
 412#define TPM_DIGEST_SIZE 20
 413#define TPM_RET_CODE_IDX 6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 414
 415ssize_t tpm_transmit_cmd(struct tpm_chip *chip, const void *cmd,
 416			 int len, unsigned int flags, const char *desc)
 
 
 
 
 
 
 
 
 
 
 
 
 417{
 418	const struct tpm_output_header *header;
 419	int err;
 
 420
 421	len = tpm_transmit(chip, (const u8 *)cmd, len, flags);
 422	if (len <  0)
 423		return len;
 424	else if (len < TPM_HEADER_SIZE)
 425		return -EFAULT;
 426
 427	header = cmd;
 428
 429	err = be32_to_cpu(header->return_code);
 430	if (err != 0 && desc)
 
 431		dev_err(&chip->dev, "A TPM error (%d) occurred %s\n", err,
 432			desc);
 
 
 433
 434	return err;
 435}
 436
 437#define TPM_INTERNAL_RESULT_SIZE 200
 438#define TPM_ORD_GET_CAP cpu_to_be32(101)
 439#define TPM_ORD_GET_RANDOM cpu_to_be32(70)
 440
 441static const struct tpm_input_header tpm_getcap_header = {
 442	.tag = TPM_TAG_RQU_COMMAND,
 443	.length = cpu_to_be32(22),
 444	.ordinal = TPM_ORD_GET_CAP
 445};
 446
 447ssize_t tpm_getcap(struct tpm_chip *chip, u32 subcap_id, cap_t *cap,
 448		   const char *desc)
 449{
 450	struct tpm_cmd_t tpm_cmd;
 451	int rc;
 452
 453	tpm_cmd.header.in = tpm_getcap_header;
 454	if (subcap_id == TPM_CAP_VERSION_1_1 ||
 455	    subcap_id == TPM_CAP_VERSION_1_2) {
 456		tpm_cmd.params.getcap_in.cap = cpu_to_be32(subcap_id);
 457		/*subcap field not necessary */
 458		tpm_cmd.params.getcap_in.subcap_size = cpu_to_be32(0);
 459		tpm_cmd.header.in.length -= cpu_to_be32(sizeof(__be32));
 460	} else {
 461		if (subcap_id == TPM_CAP_FLAG_PERM ||
 462		    subcap_id == TPM_CAP_FLAG_VOL)
 463			tpm_cmd.params.getcap_in.cap =
 464				cpu_to_be32(TPM_CAP_FLAG);
 465		else
 466			tpm_cmd.params.getcap_in.cap =
 467				cpu_to_be32(TPM_CAP_PROP);
 468		tpm_cmd.params.getcap_in.subcap_size = cpu_to_be32(4);
 469		tpm_cmd.params.getcap_in.subcap = cpu_to_be32(subcap_id);
 470	}
 471	rc = tpm_transmit_cmd(chip, &tpm_cmd, TPM_INTERNAL_RESULT_SIZE, 0,
 472			      desc);
 473	if (!rc)
 474		*cap = tpm_cmd.params.getcap_out.cap;
 475	return rc;
 476}
 477EXPORT_SYMBOL_GPL(tpm_getcap);
 478
 479#define TPM_ORD_STARTUP cpu_to_be32(153)
 480#define TPM_ST_CLEAR cpu_to_be16(1)
 481#define TPM_ST_STATE cpu_to_be16(2)
 482#define TPM_ST_DEACTIVATED cpu_to_be16(3)
 483static const struct tpm_input_header tpm_startup_header = {
 484	.tag = TPM_TAG_RQU_COMMAND,
 485	.length = cpu_to_be32(12),
 486	.ordinal = TPM_ORD_STARTUP
 487};
 488
 489static int tpm_startup(struct tpm_chip *chip, __be16 startup_type)
 490{
 491	struct tpm_cmd_t start_cmd;
 492	start_cmd.header.in = tpm_startup_header;
 493
 494	start_cmd.params.startup_in.startup_type = startup_type;
 495	return tpm_transmit_cmd(chip, &start_cmd, TPM_INTERNAL_RESULT_SIZE, 0,
 496				"attempting to start the TPM");
 497}
 
 498
 499int tpm_get_timeouts(struct tpm_chip *chip)
 500{
 501	cap_t cap;
 502	unsigned long timeout_old[4], timeout_chip[4], timeout_eff[4];
 503	ssize_t rc;
 504
 505	if (chip->flags & TPM_CHIP_FLAG_HAVE_TIMEOUTS)
 506		return 0;
 507
 508	if (chip->flags & TPM_CHIP_FLAG_TPM2) {
 509		/* Fixed timeouts for TPM2 */
 510		chip->timeout_a = msecs_to_jiffies(TPM2_TIMEOUT_A);
 511		chip->timeout_b = msecs_to_jiffies(TPM2_TIMEOUT_B);
 512		chip->timeout_c = msecs_to_jiffies(TPM2_TIMEOUT_C);
 513		chip->timeout_d = msecs_to_jiffies(TPM2_TIMEOUT_D);
 514		chip->duration[TPM_SHORT] =
 515		    msecs_to_jiffies(TPM2_DURATION_SHORT);
 516		chip->duration[TPM_MEDIUM] =
 517		    msecs_to_jiffies(TPM2_DURATION_MEDIUM);
 518		chip->duration[TPM_LONG] =
 519		    msecs_to_jiffies(TPM2_DURATION_LONG);
 520
 521		chip->flags |= TPM_CHIP_FLAG_HAVE_TIMEOUTS;
 522		return 0;
 523	}
 524
 525	rc = tpm_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap,
 526			"attempting to determine the timeouts");
 527	if (rc == TPM_ERR_INVALID_POSTINIT) {
 528		/* The TPM is not started, we are the first to talk to it.
 529		   Execute a startup command. */
 530		dev_info(&chip->dev, "Issuing TPM_STARTUP\n");
 531		if (tpm_startup(chip, TPM_ST_CLEAR))
 532			return rc;
 533
 534		rc = tpm_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap,
 535				"attempting to determine the timeouts");
 536	}
 537	if (rc)
 538		return rc;
 539
 540	timeout_old[0] = jiffies_to_usecs(chip->timeout_a);
 541	timeout_old[1] = jiffies_to_usecs(chip->timeout_b);
 542	timeout_old[2] = jiffies_to_usecs(chip->timeout_c);
 543	timeout_old[3] = jiffies_to_usecs(chip->timeout_d);
 544	timeout_chip[0] = be32_to_cpu(cap.timeout.a);
 545	timeout_chip[1] = be32_to_cpu(cap.timeout.b);
 546	timeout_chip[2] = be32_to_cpu(cap.timeout.c);
 547	timeout_chip[3] = be32_to_cpu(cap.timeout.d);
 548	memcpy(timeout_eff, timeout_chip, sizeof(timeout_eff));
 549
 550	/*
 551	 * Provide ability for vendor overrides of timeout values in case
 552	 * of misreporting.
 553	 */
 554	if (chip->ops->update_timeouts != NULL)
 555		chip->timeout_adjusted =
 556			chip->ops->update_timeouts(chip, timeout_eff);
 557
 558	if (!chip->timeout_adjusted) {
 559		/* Restore default if chip reported 0 */
 560		int i;
 561
 562		for (i = 0; i < ARRAY_SIZE(timeout_eff); i++) {
 563			if (timeout_eff[i])
 564				continue;
 565
 566			timeout_eff[i] = timeout_old[i];
 567			chip->timeout_adjusted = true;
 568		}
 569
 570		if (timeout_eff[0] != 0 && timeout_eff[0] < 1000) {
 571			/* timeouts in msec rather usec */
 572			for (i = 0; i != ARRAY_SIZE(timeout_eff); i++)
 573				timeout_eff[i] *= 1000;
 574			chip->timeout_adjusted = true;
 575		}
 576	}
 577
 578	/* Report adjusted timeouts */
 579	if (chip->timeout_adjusted) {
 580		dev_info(&chip->dev,
 581			 HW_ERR "Adjusting reported timeouts: A %lu->%luus B %lu->%luus C %lu->%luus D %lu->%luus\n",
 582			 timeout_chip[0], timeout_eff[0],
 583			 timeout_chip[1], timeout_eff[1],
 584			 timeout_chip[2], timeout_eff[2],
 585			 timeout_chip[3], timeout_eff[3]);
 586	}
 587
 588	chip->timeout_a = usecs_to_jiffies(timeout_eff[0]);
 589	chip->timeout_b = usecs_to_jiffies(timeout_eff[1]);
 590	chip->timeout_c = usecs_to_jiffies(timeout_eff[2]);
 591	chip->timeout_d = usecs_to_jiffies(timeout_eff[3]);
 592
 593	rc = tpm_getcap(chip, TPM_CAP_PROP_TIS_DURATION, &cap,
 594			"attempting to determine the durations");
 595	if (rc)
 596		return rc;
 597
 598	chip->duration[TPM_SHORT] =
 599		usecs_to_jiffies(be32_to_cpu(cap.duration.tpm_short));
 600	chip->duration[TPM_MEDIUM] =
 601		usecs_to_jiffies(be32_to_cpu(cap.duration.tpm_medium));
 602	chip->duration[TPM_LONG] =
 603		usecs_to_jiffies(be32_to_cpu(cap.duration.tpm_long));
 604
 605	/* The Broadcom BCM0102 chipset in a Dell Latitude D820 gets the above
 606	 * value wrong and apparently reports msecs rather than usecs. So we
 607	 * fix up the resulting too-small TPM_SHORT value to make things work.
 608	 * We also scale the TPM_MEDIUM and -_LONG values by 1000.
 609	 */
 610	if (chip->duration[TPM_SHORT] < (HZ / 100)) {
 611		chip->duration[TPM_SHORT] = HZ;
 612		chip->duration[TPM_MEDIUM] *= 1000;
 613		chip->duration[TPM_LONG] *= 1000;
 614		chip->duration_adjusted = true;
 615		dev_info(&chip->dev, "Adjusting TPM timeout parameters.");
 616	}
 617
 618	chip->flags |= TPM_CHIP_FLAG_HAVE_TIMEOUTS;
 619	return 0;
 620}
 621EXPORT_SYMBOL_GPL(tpm_get_timeouts);
 622
 623#define TPM_ORD_CONTINUE_SELFTEST 83
 624#define CONTINUE_SELFTEST_RESULT_SIZE 10
 625
 626static const struct tpm_input_header continue_selftest_header = {
 627	.tag = TPM_TAG_RQU_COMMAND,
 628	.length = cpu_to_be32(10),
 629	.ordinal = cpu_to_be32(TPM_ORD_CONTINUE_SELFTEST),
 630};
 631
 632/**
 633 * tpm_continue_selftest -- run TPM's selftest
 634 * @chip: TPM chip to use
 635 *
 636 * Returns 0 on success, < 0 in case of fatal error or a value > 0 representing
 637 * a TPM error code.
 638 */
 639static int tpm_continue_selftest(struct tpm_chip *chip)
 640{
 641	int rc;
 642	struct tpm_cmd_t cmd;
 643
 644	cmd.header.in = continue_selftest_header;
 645	rc = tpm_transmit_cmd(chip, &cmd, CONTINUE_SELFTEST_RESULT_SIZE, 0,
 646			      "continue selftest");
 647	return rc;
 648}
 649
 650#define TPM_ORDINAL_PCRREAD cpu_to_be32(21)
 651#define READ_PCR_RESULT_SIZE 30
 652static const struct tpm_input_header pcrread_header = {
 653	.tag = TPM_TAG_RQU_COMMAND,
 654	.length = cpu_to_be32(14),
 655	.ordinal = TPM_ORDINAL_PCRREAD
 656};
 657
 658int tpm_pcr_read_dev(struct tpm_chip *chip, int pcr_idx, u8 *res_buf)
 659{
 660	int rc;
 661	struct tpm_cmd_t cmd;
 662
 663	cmd.header.in = pcrread_header;
 664	cmd.params.pcrread_in.pcr_idx = cpu_to_be32(pcr_idx);
 665	rc = tpm_transmit_cmd(chip, &cmd, READ_PCR_RESULT_SIZE, 0,
 666			      "attempting to read a pcr value");
 667
 668	if (rc == 0)
 669		memcpy(res_buf, cmd.params.pcrread_out.pcr_result,
 670		       TPM_DIGEST_SIZE);
 671	return rc;
 672}
 673
 674/**
 675 * tpm_is_tpm2 - is the chip a TPM2 chip?
 676 * @chip_num:	tpm idx # or ANY
 677 *
 678 * Returns < 0 on error, and 1 or 0 on success depending whether the chip
 679 * is a TPM2 chip.
 
 
 680 */
 681int tpm_is_tpm2(u32 chip_num)
 682{
 683	struct tpm_chip *chip;
 684	int rc;
 685
 686	chip = tpm_chip_find_get(chip_num);
 687	if (chip == NULL)
 688		return -ENODEV;
 689
 690	rc = (chip->flags & TPM_CHIP_FLAG_TPM2) != 0;
 691
 692	tpm_put_ops(chip);
 693
 694	return rc;
 695}
 696EXPORT_SYMBOL_GPL(tpm_is_tpm2);
 697
 698/**
 699 * tpm_pcr_read - read a pcr value
 700 * @chip_num:	tpm idx # or ANY
 701 * @pcr_idx:	pcr idx to retrieve
 702 * @res_buf:	TPM_PCR value
 703 *		size of res_buf is 20 bytes (or NULL if you don't care)
 704 *
 705 * The TPM driver should be built-in, but for whatever reason it
 706 * isn't, protect against the chip disappearing, by incrementing
 707 * the module usage count.
 708 */
 709int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf)
 
 710{
 711	struct tpm_chip *chip;
 712	int rc;
 713
 714	chip = tpm_chip_find_get(chip_num);
 715	if (chip == NULL)
 716		return -ENODEV;
 
 717	if (chip->flags & TPM_CHIP_FLAG_TPM2)
 718		rc = tpm2_pcr_read(chip, pcr_idx, res_buf);
 719	else
 720		rc = tpm_pcr_read_dev(chip, pcr_idx, res_buf);
 
 721	tpm_put_ops(chip);
 722	return rc;
 723}
 724EXPORT_SYMBOL_GPL(tpm_pcr_read);
 725
 726#define TPM_ORD_PCR_EXTEND cpu_to_be32(20)
 727#define EXTEND_PCR_RESULT_SIZE 34
 728static const struct tpm_input_header pcrextend_header = {
 729	.tag = TPM_TAG_RQU_COMMAND,
 730	.length = cpu_to_be32(34),
 731	.ordinal = TPM_ORD_PCR_EXTEND
 732};
 733
 734/**
 735 * tpm_pcr_extend - extend pcr value with hash
 736 * @chip_num:	tpm idx # or AN&
 737 * @pcr_idx:	pcr idx to extend
 738 * @hash:	hash value used to extend pcr value
 739 *
 740 * The TPM driver should be built-in, but for whatever reason it
 741 * isn't, protect against the chip disappearing, by incrementing
 742 * the module usage count.
 
 743 */
 744int tpm_pcr_extend(u32 chip_num, int pcr_idx, const u8 *hash)
 
 745{
 746	struct tpm_cmd_t cmd;
 747	int rc;
 748	struct tpm_chip *chip;
 749
 750	chip = tpm_chip_find_get(chip_num);
 751	if (chip == NULL)
 752		return -ENODEV;
 753
 
 
 
 
 
 
 
 754	if (chip->flags & TPM_CHIP_FLAG_TPM2) {
 755		rc = tpm2_pcr_extend(chip, pcr_idx, hash);
 756		tpm_put_ops(chip);
 757		return rc;
 758	}
 759
 760	cmd.header.in = pcrextend_header;
 761	cmd.params.pcrextend_in.pcr_idx = cpu_to_be32(pcr_idx);
 762	memcpy(cmd.params.pcrextend_in.hash, hash, TPM_DIGEST_SIZE);
 763	rc = tpm_transmit_cmd(chip, &cmd, EXTEND_PCR_RESULT_SIZE, 0,
 764			      "attempting extend a PCR value");
 765
 
 766	tpm_put_ops(chip);
 767	return rc;
 768}
 769EXPORT_SYMBOL_GPL(tpm_pcr_extend);
 770
 771/**
 772 * tpm_do_selftest - have the TPM continue its selftest and wait until it
 773 *                   can receive further commands
 774 * @chip: TPM chip to use
 
 775 *
 776 * Returns 0 on success, < 0 in case of fatal error or a value > 0 representing
 777 * a TPM error code.
 778 */
 779int tpm_do_selftest(struct tpm_chip *chip)
 780{
 
 781	int rc;
 782	unsigned int loops;
 783	unsigned int delay_msec = 100;
 784	unsigned long duration;
 785	u8 dummy[TPM_DIGEST_SIZE];
 786
 787	duration = tpm_calc_ordinal_duration(chip, TPM_ORD_CONTINUE_SELFTEST);
 788
 789	loops = jiffies_to_msecs(duration) / delay_msec;
 790
 791	rc = tpm_continue_selftest(chip);
 792	/* This may fail if there was no TPM driver during a suspend/resume
 793	 * cycle; some may return 10 (BAD_ORDINAL), others 28 (FAILEDSELFTEST)
 794	 */
 795	if (rc)
 796		return rc;
 797
 798	do {
 799		/* Attempt to read a PCR value */
 800		rc = tpm_pcr_read_dev(chip, 0, dummy);
 801
 802		/* Some buggy TPMs will not respond to tpm_tis_ready() for
 803		 * around 300ms while the self test is ongoing, keep trying
 804		 * until the self test duration expires. */
 805		if (rc == -ETIME) {
 806			dev_info(
 807			    &chip->dev, HW_ERR
 808			    "TPM command timed out during continue self test");
 809			msleep(delay_msec);
 810			continue;
 811		}
 812
 813		if (rc == TPM_ERR_DISABLED || rc == TPM_ERR_DEACTIVATED) {
 814			dev_info(&chip->dev,
 815				 "TPM is disabled/deactivated (0x%X)\n", rc);
 816			/* TPM is disabled and/or deactivated; driver can
 817			 * proceed and TPM does handle commands for
 818			 * suspend/resume correctly
 819			 */
 820			return 0;
 821		}
 822		if (rc != TPM_WARN_DOING_SELFTEST)
 823			return rc;
 824		msleep(delay_msec);
 825	} while (--loops > 0);
 826
 827	return rc;
 828}
 829EXPORT_SYMBOL_GPL(tpm_do_selftest);
 830
 831/**
 832 * tpm1_auto_startup - Perform the standard automatic TPM initialization
 833 *                     sequence
 834 * @chip: TPM chip to use
 835 *
 836 * Returns 0 on success, < 0 in case of fatal error.
 837 */
 838int tpm1_auto_startup(struct tpm_chip *chip)
 839{
 840	int rc;
 841
 842	rc = tpm_get_timeouts(chip);
 843	if (rc)
 844		goto out;
 845	rc = tpm_do_selftest(chip);
 846	if (rc) {
 847		dev_err(&chip->dev, "TPM self test failed\n");
 848		goto out;
 849	}
 850
 851	return rc;
 852out:
 853	if (rc > 0)
 854		rc = -ENODEV;
 855	return rc;
 856}
 857
 858int tpm_send(u32 chip_num, void *cmd, size_t buflen)
 859{
 860	struct tpm_chip *chip;
 861	int rc;
 862
 863	chip = tpm_chip_find_get(chip_num);
 864	if (chip == NULL)
 865		return -ENODEV;
 866
 867	rc = tpm_transmit_cmd(chip, cmd, buflen, 0, "attempting tpm_cmd");
 
 868
 869	tpm_put_ops(chip);
 870	return rc;
 871}
 872EXPORT_SYMBOL_GPL(tpm_send);
 873
 874static bool wait_for_tpm_stat_cond(struct tpm_chip *chip, u8 mask,
 875					bool check_cancel, bool *canceled)
 876{
 877	u8 status = chip->ops->status(chip);
 878
 879	*canceled = false;
 880	if ((status & mask) == mask)
 881		return true;
 882	if (check_cancel && chip->ops->req_canceled(chip, status)) {
 883		*canceled = true;
 884		return true;
 885	}
 886	return false;
 887}
 888
 889int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
 890		      wait_queue_head_t *queue, bool check_cancel)
 891{
 892	unsigned long stop;
 893	long rc;
 894	u8 status;
 895	bool canceled = false;
 896
 897	/* check current status */
 898	status = chip->ops->status(chip);
 899	if ((status & mask) == mask)
 900		return 0;
 901
 902	stop = jiffies + timeout;
 
 
 
 903
 904	if (chip->flags & TPM_CHIP_FLAG_IRQ) {
 905again:
 906		timeout = stop - jiffies;
 907		if ((long)timeout <= 0)
 908			return -ETIME;
 909		rc = wait_event_interruptible_timeout(*queue,
 910			wait_for_tpm_stat_cond(chip, mask, check_cancel,
 911					       &canceled),
 912			timeout);
 913		if (rc > 0) {
 914			if (canceled)
 915				return -ECANCELED;
 916			return 0;
 917		}
 918		if (rc == -ERESTARTSYS && freezing(current)) {
 919			clear_thread_flag(TIF_SIGPENDING);
 920			goto again;
 921		}
 922	} else {
 923		do {
 924			msleep(TPM_TIMEOUT);
 925			status = chip->ops->status(chip);
 926			if ((status & mask) == mask)
 927				return 0;
 928		} while (time_before(jiffies, stop));
 929	}
 930	return -ETIME;
 931}
 932EXPORT_SYMBOL_GPL(wait_for_tpm_stat);
 933
 934#define TPM_ORD_SAVESTATE cpu_to_be32(152)
 935#define SAVESTATE_RESULT_SIZE 10
 936
 937static const struct tpm_input_header savestate_header = {
 938	.tag = TPM_TAG_RQU_COMMAND,
 939	.length = cpu_to_be32(10),
 940	.ordinal = TPM_ORD_SAVESTATE
 941};
 942
 943/*
 944 * We are about to suspend. Save the TPM state
 945 * so that it can be restored.
 946 */
 947int tpm_pm_suspend(struct device *dev)
 948{
 949	struct tpm_chip *chip = dev_get_drvdata(dev);
 950	struct tpm_cmd_t cmd;
 951	int rc, try;
 952
 953	u8 dummy_hash[TPM_DIGEST_SIZE] = { 0 };
 
 954
 955	if (chip == NULL)
 956		return -ENODEV;
 957
 958	if (chip->flags & TPM_CHIP_FLAG_TPM2) {
 959		tpm2_shutdown(chip, TPM2_SU_STATE);
 960		return 0;
 961	}
 
 
 
 
 
 
 962
 963	/* for buggy tpm, flush pcrs with extend to selected dummy */
 964	if (tpm_suspend_pcr) {
 965		cmd.header.in = pcrextend_header;
 966		cmd.params.pcrextend_in.pcr_idx = cpu_to_be32(tpm_suspend_pcr);
 967		memcpy(cmd.params.pcrextend_in.hash, dummy_hash,
 968		       TPM_DIGEST_SIZE);
 969		rc = tpm_transmit_cmd(chip, &cmd, EXTEND_PCR_RESULT_SIZE, 0,
 970				      "extending dummy pcr before suspend");
 971	}
 972
 973	/* now do the actual savestate */
 974	for (try = 0; try < TPM_RETRY; try++) {
 975		cmd.header.in = savestate_header;
 976		rc = tpm_transmit_cmd(chip, &cmd, SAVESTATE_RESULT_SIZE, 0,
 977				      NULL);
 978
 979		/*
 980		 * If the TPM indicates that it is too busy to respond to
 981		 * this command then retry before giving up.  It can take
 982		 * several seconds for this TPM to be ready.
 983		 *
 984		 * This can happen if the TPM has already been sent the
 985		 * SaveState command before the driver has loaded.  TCG 1.2
 986		 * specification states that any communication after SaveState
 987		 * may cause the TPM to invalidate previously saved state.
 988		 */
 989		if (rc != TPM_WARN_RETRY)
 990			break;
 991		msleep(TPM_TIMEOUT_RETRY);
 992	}
 993
 994	if (rc)
 995		dev_err(&chip->dev,
 996			"Error (%d) sending savestate before suspend\n", rc);
 997	else if (try > 0)
 998		dev_warn(&chip->dev, "TPM savestate took %dms\n",
 999			 try * TPM_TIMEOUT_RETRY);
1000
1001	return rc;
1002}
1003EXPORT_SYMBOL_GPL(tpm_pm_suspend);
1004
1005/*
1006 * Resume from a power safe. The BIOS already restored
1007 * the TPM state.
1008 */
1009int tpm_pm_resume(struct device *dev)
1010{
1011	struct tpm_chip *chip = dev_get_drvdata(dev);
1012
1013	if (chip == NULL)
1014		return -ENODEV;
1015
 
 
 
 
 
 
 
 
1016	return 0;
1017}
1018EXPORT_SYMBOL_GPL(tpm_pm_resume);
1019
1020#define TPM_GETRANDOM_RESULT_SIZE	18
1021static const struct tpm_input_header tpm_getrandom_header = {
1022	.tag = TPM_TAG_RQU_COMMAND,
1023	.length = cpu_to_be32(14),
1024	.ordinal = TPM_ORD_GET_RANDOM
1025};
1026
1027/**
1028 * tpm_get_random() - Get random bytes from the tpm's RNG
1029 * @chip_num: A specific chip number for the request or TPM_ANY_NUM
1030 * @out: destination buffer for the random bytes
1031 * @max: the max number of bytes to write to @out
1032 *
1033 * Returns < 0 on error and the number of bytes read on success
1034 */
1035int tpm_get_random(u32 chip_num, u8 *out, size_t max)
1036{
1037	struct tpm_chip *chip;
1038	struct tpm_cmd_t tpm_cmd;
1039	u32 recd, num_bytes = min_t(u32, max, TPM_MAX_RNG_DATA);
1040	int err, total = 0, retries = 5;
1041	u8 *dest = out;
1042
1043	if (!out || !num_bytes || max > TPM_MAX_RNG_DATA)
1044		return -EINVAL;
1045
1046	chip = tpm_chip_find_get(chip_num);
1047	if (chip == NULL)
1048		return -ENODEV;
1049
1050	if (chip->flags & TPM_CHIP_FLAG_TPM2) {
1051		err = tpm2_get_random(chip, out, max);
1052		tpm_put_ops(chip);
1053		return err;
1054	}
1055
1056	do {
1057		tpm_cmd.header.in = tpm_getrandom_header;
1058		tpm_cmd.params.getrandom_in.num_bytes = cpu_to_be32(num_bytes);
1059
1060		err = tpm_transmit_cmd(chip, &tpm_cmd,
1061				       TPM_GETRANDOM_RESULT_SIZE + num_bytes,
1062				       0, "attempting get random");
1063		if (err)
1064			break;
1065
1066		recd = be32_to_cpu(tpm_cmd.params.getrandom_out.rng_data_len);
1067		memcpy(dest, tpm_cmd.params.getrandom_out.rng_data, recd);
1068
1069		dest += recd;
1070		total += recd;
1071		num_bytes -= recd;
1072	} while (retries-- && total < max);
1073
1074	tpm_put_ops(chip);
1075	return total ? total : -EIO;
1076}
1077EXPORT_SYMBOL_GPL(tpm_get_random);
1078
1079/**
1080 * tpm_seal_trusted() - seal a trusted key
1081 * @chip_num: A specific chip number for the request or TPM_ANY_NUM
1082 * @options: authentication values and other options
1083 * @payload: the key data in clear and encrypted form
1084 *
1085 * Returns < 0 on error and 0 on success. At the moment, only TPM 2.0 chips
1086 * are supported.
1087 */
1088int tpm_seal_trusted(u32 chip_num, struct trusted_key_payload *payload,
1089		     struct trusted_key_options *options)
1090{
1091	struct tpm_chip *chip;
1092	int rc;
1093
1094	chip = tpm_chip_find_get(chip_num);
1095	if (chip == NULL || !(chip->flags & TPM_CHIP_FLAG_TPM2))
1096		return -ENODEV;
1097
1098	rc = tpm2_seal_trusted(chip, payload, options);
1099
1100	tpm_put_ops(chip);
1101	return rc;
1102}
1103EXPORT_SYMBOL_GPL(tpm_seal_trusted);
1104
1105/**
1106 * tpm_unseal_trusted() - unseal a trusted key
1107 * @chip_num: A specific chip number for the request or TPM_ANY_NUM
1108 * @options: authentication values and other options
1109 * @payload: the key data in clear and encrypted form
1110 *
1111 * Returns < 0 on error and 0 on success. At the moment, only TPM 2.0 chips
1112 * are supported.
1113 */
1114int tpm_unseal_trusted(u32 chip_num, struct trusted_key_payload *payload,
1115		       struct trusted_key_options *options)
1116{
1117	struct tpm_chip *chip;
1118	int rc;
1119
1120	chip = tpm_chip_find_get(chip_num);
1121	if (chip == NULL || !(chip->flags & TPM_CHIP_FLAG_TPM2))
1122		return -ENODEV;
1123
1124	rc = tpm2_unseal_trusted(chip, payload, options);
1125
1126	tpm_put_ops(chip);
1127
1128	return rc;
1129}
1130EXPORT_SYMBOL_GPL(tpm_unseal_trusted);
1131
1132static int __init tpm_init(void)
1133{
1134	int rc;
1135
1136	tpm_class = class_create(THIS_MODULE, "tpm");
1137	if (IS_ERR(tpm_class)) {
1138		pr_err("couldn't create tpm class\n");
1139		return PTR_ERR(tpm_class);
 
 
 
 
 
 
1140	}
1141
1142	rc = alloc_chrdev_region(&tpm_devt, 0, TPM_NUM_DEVICES, "tpm");
1143	if (rc < 0) {
1144		pr_err("tpm: failed to allocate char dev region\n");
1145		class_destroy(tpm_class);
1146		return rc;
 
 
 
 
 
1147	}
1148
1149	return 0;
 
 
 
 
 
 
 
 
 
1150}
1151
1152static void __exit tpm_exit(void)
1153{
1154	idr_destroy(&dev_nums_idr);
1155	class_destroy(tpm_class);
1156	unregister_chrdev_region(tpm_devt, TPM_NUM_DEVICES);
 
 
1157}
1158
1159subsys_initcall(tpm_init);
1160module_exit(tpm_exit);
1161
1162MODULE_AUTHOR("Leendert van Doorn (leendert@watson.ibm.com)");
1163MODULE_DESCRIPTION("TPM Driver");
1164MODULE_VERSION("2.0");
1165MODULE_LICENSE("GPL");