2 * Copyright (C) 2004 IBM Corporation
5 * Leendert van Doorn <leendert@watson.ibm.com>
6 * Dave Safford <safford@watson.ibm.com>
7 * Reiner Sailer <sailer@watson.ibm.com>
8 * Kylene Hall <kjhall@us.ibm.com>
10 * Maintained by: <tpmdd-devel@lists.sourceforge.net>
12 * Device driver for TCG/TCPA TPM (trusted platform module).
13 * Specifications at www.trustedcomputinggroup.org
15 * This program is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public License as
17 * published by the Free Software Foundation, version 2 of the
20 * Note, the TPM chip is not interrupt driven (only polling)
21 * and can have very long timeouts (minutes!). Hence the unusual
26 #include <linux/poll.h>
27 #include <linux/slab.h>
28 #include <linux/mutex.h>
29 #include <linux/spinlock.h>
34 TPM_MINOR
= 224, /* officially assigned */
36 TPM_NUM_DEVICES
= 256,
46 #define TPM_MAX_ORDINAL 243
47 #define TPM_MAX_PROTECTED_ORDINAL 12
48 #define TPM_PROTECTED_ORDINAL_MASK 0xFF
50 static LIST_HEAD(tpm_chip_list
);
51 static DEFINE_SPINLOCK(driver_lock
);
52 static DECLARE_BITMAP(dev_mask
, TPM_NUM_DEVICES
);
55 * Array with one entry per ordinal defining the maximum amount
56 * of time the chip could take to return the result. The ordinal
57 * designation of short, medium or long is defined in a table in
58 * TCG Specification TPM Main Part 2 TPM Structures Section 17. The
59 * values of the SHORT, MEDIUM, and LONG durations are retrieved
60 * from the chip during initialization with a call to tpm_get_timeouts.
62 static const u8 tpm_protected_ordinal_duration
[TPM_MAX_PROTECTED_ORDINAL
] = {
63 TPM_UNDEFINED
, /* 0 */
68 TPM_UNDEFINED
, /* 5 */
77 static const u8 tpm_ordinal_duration
[TPM_MAX_ORDINAL
] = {
78 TPM_UNDEFINED
, /* 0 */
83 TPM_UNDEFINED
, /* 5 */
133 TPM_UNDEFINED
, /* 55 */
153 TPM_UNDEFINED
, /* 75 */
163 TPM_UNDEFINED
, /* 85 */
173 TPM_UNDEFINED
, /* 95 */
178 TPM_MEDIUM
, /* 100 */
183 TPM_UNDEFINED
, /* 105 */
213 TPM_UNDEFINED
, /* 135 */
223 TPM_UNDEFINED
, /* 145 */
233 TPM_UNDEFINED
, /* 155 */
243 TPM_UNDEFINED
, /* 165 */
253 TPM_UNDEFINED
, /* 175 */
258 TPM_MEDIUM
, /* 180 */
263 TPM_MEDIUM
, /* 185 */
268 TPM_UNDEFINED
, /* 190 */
273 TPM_UNDEFINED
, /* 195 */
288 TPM_MEDIUM
, /* 210 */
293 TPM_UNDEFINED
, /* 215 */
303 TPM_UNDEFINED
, /* 225 */
313 TPM_UNDEFINED
, /* 235 */
323 static void user_reader_timeout(unsigned long ptr
)
325 struct tpm_chip
*chip
= (struct tpm_chip
*) ptr
;
327 schedule_work(&chip
->work
);
330 static void timeout_work(struct work_struct
*work
)
332 struct tpm_chip
*chip
= container_of(work
, struct tpm_chip
, work
);
334 mutex_lock(&chip
->buffer_mutex
);
335 atomic_set(&chip
->data_pending
, 0);
336 memset(chip
->data_buffer
, 0, TPM_BUFSIZE
);
337 mutex_unlock(&chip
->buffer_mutex
);
341 * Returns max number of jiffies to wait
343 unsigned long tpm_calc_ordinal_duration(struct tpm_chip
*chip
,
346 int duration_idx
= TPM_UNDEFINED
;
349 if (ordinal
< TPM_MAX_ORDINAL
)
350 duration_idx
= tpm_ordinal_duration
[ordinal
];
351 else if ((ordinal
& TPM_PROTECTED_ORDINAL_MASK
) <
352 TPM_MAX_PROTECTED_ORDINAL
)
354 tpm_protected_ordinal_duration
[ordinal
&
355 TPM_PROTECTED_ORDINAL_MASK
];
357 if (duration_idx
!= TPM_UNDEFINED
)
358 duration
= chip
->vendor
.duration
[duration_idx
];
364 EXPORT_SYMBOL_GPL(tpm_calc_ordinal_duration
);
367 * Internal kernel interface to transmit TPM commands
369 static ssize_t
tpm_transmit(struct tpm_chip
*chip
, const char *buf
,
376 count
= be32_to_cpu(*((__be32
*) (buf
+ 2)));
377 ordinal
= be32_to_cpu(*((__be32
*) (buf
+ 6)));
380 if (count
> bufsiz
) {
382 "invalid count value %x %zx \n", count
, bufsiz
);
386 mutex_lock(&chip
->tpm_mutex
);
388 if ((rc
= chip
->vendor
.send(chip
, (u8
*) buf
, count
)) < 0) {
390 "tpm_transmit: tpm_send: error %zd\n", rc
);
394 if (chip
->vendor
.irq
)
397 stop
= jiffies
+ tpm_calc_ordinal_duration(chip
, ordinal
);
399 u8 status
= chip
->vendor
.status(chip
);
400 if ((status
& chip
->vendor
.req_complete_mask
) ==
401 chip
->vendor
.req_complete_val
)
404 if ((status
== chip
->vendor
.req_canceled
)) {
405 dev_err(chip
->dev
, "Operation Canceled\n");
410 msleep(TPM_TIMEOUT
); /* CHECK */
412 } while (time_before(jiffies
, stop
));
414 chip
->vendor
.cancel(chip
);
415 dev_err(chip
->dev
, "Operation Timed out\n");
420 rc
= chip
->vendor
.recv(chip
, (u8
*) buf
, bufsiz
);
423 "tpm_transmit: tpm_recv: error %zd\n", rc
);
425 mutex_unlock(&chip
->tpm_mutex
);
429 #define TPM_DIGEST_SIZE 20
430 #define TPM_ERROR_SIZE 10
431 #define TPM_RET_CODE_IDX 6
433 enum tpm_capabilities
{
434 TPM_CAP_FLAG
= cpu_to_be32(4),
435 TPM_CAP_PROP
= cpu_to_be32(5),
436 CAP_VERSION_1_1
= cpu_to_be32(0x06),
437 CAP_VERSION_1_2
= cpu_to_be32(0x1A)
440 enum tpm_sub_capabilities
{
441 TPM_CAP_PROP_PCR
= cpu_to_be32(0x101),
442 TPM_CAP_PROP_MANUFACTURER
= cpu_to_be32(0x103),
443 TPM_CAP_FLAG_PERM
= cpu_to_be32(0x108),
444 TPM_CAP_FLAG_VOL
= cpu_to_be32(0x109),
445 TPM_CAP_PROP_OWNER
= cpu_to_be32(0x111),
446 TPM_CAP_PROP_TIS_TIMEOUT
= cpu_to_be32(0x115),
447 TPM_CAP_PROP_TIS_DURATION
= cpu_to_be32(0x120),
451 static ssize_t
transmit_cmd(struct tpm_chip
*chip
, struct tpm_cmd_t
*cmd
,
452 int len
, const char *desc
)
456 len
= tpm_transmit(chip
,(u8
*) cmd
, len
);
459 if (len
== TPM_ERROR_SIZE
) {
460 err
= be32_to_cpu(cmd
->header
.out
.return_code
);
461 dev_dbg(chip
->dev
, "A TPM error (%d) occurred %s\n", err
, desc
);
467 #define TPM_INTERNAL_RESULT_SIZE 200
468 #define TPM_TAG_RQU_COMMAND cpu_to_be16(193)
469 #define TPM_ORD_GET_CAP cpu_to_be32(101)
471 static const struct tpm_input_header tpm_getcap_header
= {
472 .tag
= TPM_TAG_RQU_COMMAND
,
473 .length
= cpu_to_be32(22),
474 .ordinal
= TPM_ORD_GET_CAP
477 ssize_t
tpm_getcap(struct device
*dev
, __be32 subcap_id
, cap_t
*cap
,
480 struct tpm_cmd_t tpm_cmd
;
482 struct tpm_chip
*chip
= dev_get_drvdata(dev
);
484 tpm_cmd
.header
.in
= tpm_getcap_header
;
485 if (subcap_id
== CAP_VERSION_1_1
|| subcap_id
== CAP_VERSION_1_2
) {
486 tpm_cmd
.params
.getcap_in
.cap
= subcap_id
;
487 /*subcap field not necessary */
488 tpm_cmd
.params
.getcap_in
.subcap_size
= cpu_to_be32(0);
489 tpm_cmd
.header
.in
.length
-= cpu_to_be32(sizeof(__be32
));
491 if (subcap_id
== TPM_CAP_FLAG_PERM
||
492 subcap_id
== TPM_CAP_FLAG_VOL
)
493 tpm_cmd
.params
.getcap_in
.cap
= TPM_CAP_FLAG
;
495 tpm_cmd
.params
.getcap_in
.cap
= TPM_CAP_PROP
;
496 tpm_cmd
.params
.getcap_in
.subcap_size
= cpu_to_be32(4);
497 tpm_cmd
.params
.getcap_in
.subcap
= subcap_id
;
499 rc
= transmit_cmd(chip
, &tpm_cmd
, TPM_INTERNAL_RESULT_SIZE
, desc
);
501 *cap
= tpm_cmd
.params
.getcap_out
.cap
;
505 void tpm_gen_interrupt(struct tpm_chip
*chip
)
507 struct tpm_cmd_t tpm_cmd
;
510 tpm_cmd
.header
.in
= tpm_getcap_header
;
511 tpm_cmd
.params
.getcap_in
.cap
= TPM_CAP_PROP
;
512 tpm_cmd
.params
.getcap_in
.subcap_size
= cpu_to_be32(4);
513 tpm_cmd
.params
.getcap_in
.subcap
= TPM_CAP_PROP_TIS_TIMEOUT
;
515 rc
= transmit_cmd(chip
, &tpm_cmd
, TPM_INTERNAL_RESULT_SIZE
,
516 "attempting to determine the timeouts");
518 EXPORT_SYMBOL_GPL(tpm_gen_interrupt
);
520 void tpm_get_timeouts(struct tpm_chip
*chip
)
522 struct tpm_cmd_t tpm_cmd
;
523 struct timeout_t
*timeout_cap
;
524 struct duration_t
*duration_cap
;
528 tpm_cmd
.header
.in
= tpm_getcap_header
;
529 tpm_cmd
.params
.getcap_in
.cap
= TPM_CAP_PROP
;
530 tpm_cmd
.params
.getcap_in
.subcap_size
= cpu_to_be32(4);
531 tpm_cmd
.params
.getcap_in
.subcap
= TPM_CAP_PROP_TIS_TIMEOUT
;
533 rc
= transmit_cmd(chip
, &tpm_cmd
, TPM_INTERNAL_RESULT_SIZE
,
534 "attempting to determine the timeouts");
538 if (be32_to_cpu(tpm_cmd
.header
.out
.length
)
542 timeout_cap
= &tpm_cmd
.params
.getcap_out
.cap
.timeout
;
543 /* Don't overwrite default if value is 0 */
544 timeout
= be32_to_cpu(timeout_cap
->a
);
546 chip
->vendor
.timeout_a
= usecs_to_jiffies(timeout
);
547 timeout
= be32_to_cpu(timeout_cap
->b
);
549 chip
->vendor
.timeout_b
= usecs_to_jiffies(timeout
);
550 timeout
= be32_to_cpu(timeout_cap
->c
);
552 chip
->vendor
.timeout_c
= usecs_to_jiffies(timeout
);
553 timeout
= be32_to_cpu(timeout_cap
->d
);
555 chip
->vendor
.timeout_d
= usecs_to_jiffies(timeout
);
558 tpm_cmd
.header
.in
= tpm_getcap_header
;
559 tpm_cmd
.params
.getcap_in
.cap
= TPM_CAP_PROP
;
560 tpm_cmd
.params
.getcap_in
.subcap_size
= cpu_to_be32(4);
561 tpm_cmd
.params
.getcap_in
.subcap
= TPM_CAP_PROP_TIS_DURATION
;
563 rc
= transmit_cmd(chip
, &tpm_cmd
, TPM_INTERNAL_RESULT_SIZE
,
564 "attempting to determine the durations");
568 if (be32_to_cpu(tpm_cmd
.header
.out
.return_code
)
571 duration_cap
= &tpm_cmd
.params
.getcap_out
.cap
.duration
;
572 chip
->vendor
.duration
[TPM_SHORT
] =
573 usecs_to_jiffies(be32_to_cpu(duration_cap
->tpm_short
));
574 /* The Broadcom BCM0102 chipset in a Dell Latitude D820 gets the above
575 * value wrong and apparently reports msecs rather than usecs. So we
576 * fix up the resulting too-small TPM_SHORT value to make things work.
578 if (chip
->vendor
.duration
[TPM_SHORT
] < (HZ
/100))
579 chip
->vendor
.duration
[TPM_SHORT
] = HZ
;
581 chip
->vendor
.duration
[TPM_MEDIUM
] =
582 usecs_to_jiffies(be32_to_cpu(duration_cap
->tpm_medium
));
583 chip
->vendor
.duration
[TPM_LONG
] =
584 usecs_to_jiffies(be32_to_cpu(duration_cap
->tpm_long
));
586 EXPORT_SYMBOL_GPL(tpm_get_timeouts
);
588 void tpm_continue_selftest(struct tpm_chip
*chip
)
591 0, 193, /* TPM_TAG_RQU_COMMAND */
592 0, 0, 0, 10, /* length */
593 0, 0, 0, 83, /* TPM_ORD_GetCapability */
596 tpm_transmit(chip
, data
, sizeof(data
));
598 EXPORT_SYMBOL_GPL(tpm_continue_selftest
);
600 ssize_t
tpm_show_enabled(struct device
* dev
, struct device_attribute
* attr
,
606 rc
= tpm_getcap(dev
, TPM_CAP_FLAG_PERM
, &cap
,
607 "attempting to determine the permanent enabled state");
611 rc
= sprintf(buf
, "%d\n", !cap
.perm_flags
.disable
);
614 EXPORT_SYMBOL_GPL(tpm_show_enabled
);
616 ssize_t
tpm_show_active(struct device
* dev
, struct device_attribute
* attr
,
622 rc
= tpm_getcap(dev
, TPM_CAP_FLAG_PERM
, &cap
,
623 "attempting to determine the permanent active state");
627 rc
= sprintf(buf
, "%d\n", !cap
.perm_flags
.deactivated
);
630 EXPORT_SYMBOL_GPL(tpm_show_active
);
632 ssize_t
tpm_show_owned(struct device
* dev
, struct device_attribute
* attr
,
638 rc
= tpm_getcap(dev
, TPM_CAP_PROP_OWNER
, &cap
,
639 "attempting to determine the owner state");
643 rc
= sprintf(buf
, "%d\n", cap
.owned
);
646 EXPORT_SYMBOL_GPL(tpm_show_owned
);
648 ssize_t
tpm_show_temp_deactivated(struct device
* dev
,
649 struct device_attribute
* attr
, char *buf
)
654 rc
= tpm_getcap(dev
, TPM_CAP_FLAG_VOL
, &cap
,
655 "attempting to determine the temporary state");
659 rc
= sprintf(buf
, "%d\n", cap
.stclear_flags
.deactivated
);
662 EXPORT_SYMBOL_GPL(tpm_show_temp_deactivated
);
665 * tpm_chip_find_get - return tpm_chip for given chip number
667 static struct tpm_chip
*tpm_chip_find_get(int chip_num
)
669 struct tpm_chip
*pos
, *chip
= NULL
;
672 list_for_each_entry_rcu(pos
, &tpm_chip_list
, list
) {
673 if (chip_num
!= TPM_ANY_NUM
&& chip_num
!= pos
->dev_num
)
676 if (try_module_get(pos
->dev
->driver
->owner
)) {
685 #define TPM_ORDINAL_PCRREAD cpu_to_be32(21)
686 #define READ_PCR_RESULT_SIZE 30
687 static struct tpm_input_header pcrread_header
= {
688 .tag
= TPM_TAG_RQU_COMMAND
,
689 .length
= cpu_to_be32(14),
690 .ordinal
= TPM_ORDINAL_PCRREAD
693 int __tpm_pcr_read(struct tpm_chip
*chip
, int pcr_idx
, u8
*res_buf
)
696 struct tpm_cmd_t cmd
;
698 cmd
.header
.in
= pcrread_header
;
699 cmd
.params
.pcrread_in
.pcr_idx
= cpu_to_be32(pcr_idx
);
700 rc
= transmit_cmd(chip
, &cmd
, READ_PCR_RESULT_SIZE
,
701 "attempting to read a pcr value");
704 memcpy(res_buf
, cmd
.params
.pcrread_out
.pcr_result
,
710 * tpm_pcr_read - read a pcr value
711 * @chip_num: tpm idx # or ANY
712 * @pcr_idx: pcr idx to retrieve
713 * @res_buf: TPM_PCR value
714 * size of res_buf is 20 bytes (or NULL if you don't care)
716 * The TPM driver should be built-in, but for whatever reason it
717 * isn't, protect against the chip disappearing, by incrementing
718 * the module usage count.
720 int tpm_pcr_read(u32 chip_num
, int pcr_idx
, u8
*res_buf
)
722 struct tpm_chip
*chip
;
725 chip
= tpm_chip_find_get(chip_num
);
728 rc
= __tpm_pcr_read(chip
, pcr_idx
, res_buf
);
729 module_put(chip
->dev
->driver
->owner
);
732 EXPORT_SYMBOL_GPL(tpm_pcr_read
);
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
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.
744 #define TPM_ORD_PCR_EXTEND cpu_to_be32(20)
745 #define EXTEND_PCR_RESULT_SIZE 34
746 static struct tpm_input_header pcrextend_header
= {
747 .tag
= TPM_TAG_RQU_COMMAND
,
748 .length
= cpu_to_be32(34),
749 .ordinal
= TPM_ORD_PCR_EXTEND
752 int tpm_pcr_extend(u32 chip_num
, int pcr_idx
, const u8
*hash
)
754 struct tpm_cmd_t cmd
;
756 struct tpm_chip
*chip
;
758 chip
= tpm_chip_find_get(chip_num
);
762 cmd
.header
.in
= pcrextend_header
;
763 cmd
.params
.pcrextend_in
.pcr_idx
= cpu_to_be32(pcr_idx
);
764 memcpy(cmd
.params
.pcrextend_in
.hash
, hash
, TPM_DIGEST_SIZE
);
765 rc
= transmit_cmd(chip
, &cmd
, EXTEND_PCR_RESULT_SIZE
,
766 "attempting extend a PCR value");
768 module_put(chip
->dev
->driver
->owner
);
771 EXPORT_SYMBOL_GPL(tpm_pcr_extend
);
773 ssize_t
tpm_show_pcrs(struct device
*dev
, struct device_attribute
*attr
,
777 u8 digest
[TPM_DIGEST_SIZE
];
781 struct tpm_chip
*chip
= dev_get_drvdata(dev
);
783 rc
= tpm_getcap(dev
, TPM_CAP_PROP_PCR
, &cap
,
784 "attempting to determine the number of PCRS");
788 num_pcrs
= be32_to_cpu(cap
.num_pcrs
);
789 for (i
= 0; i
< num_pcrs
; i
++) {
790 rc
= __tpm_pcr_read(chip
, i
, digest
);
793 str
+= sprintf(str
, "PCR-%02d: ", i
);
794 for (j
= 0; j
< TPM_DIGEST_SIZE
; j
++)
795 str
+= sprintf(str
, "%02X ", digest
[j
]);
796 str
+= sprintf(str
, "\n");
800 EXPORT_SYMBOL_GPL(tpm_show_pcrs
);
802 #define READ_PUBEK_RESULT_SIZE 314
803 #define TPM_ORD_READPUBEK cpu_to_be32(124)
804 struct tpm_input_header tpm_readpubek_header
= {
805 .tag
= TPM_TAG_RQU_COMMAND
,
806 .length
= cpu_to_be32(30),
807 .ordinal
= TPM_ORD_READPUBEK
810 ssize_t
tpm_show_pubek(struct device
*dev
, struct device_attribute
*attr
,
814 struct tpm_cmd_t tpm_cmd
;
819 struct tpm_chip
*chip
= dev_get_drvdata(dev
);
821 tpm_cmd
.header
.in
= tpm_readpubek_header
;
822 err
= transmit_cmd(chip
, &tpm_cmd
, READ_PUBEK_RESULT_SIZE
,
823 "attempting to read the PUBEK");
828 ignore header 10 bytes
829 algorithm 32 bits (1 == RSA )
832 parameters (RSA 12->bytes: keybit, #primes, expbit)
835 ignore checksum 20 bytes
837 data
= tpm_cmd
.params
.readpubek_out_buffer
;
840 "Algorithm: %02X %02X %02X %02X\nEncscheme: %02X %02X\n"
841 "Sigscheme: %02X %02X\nParameters: %02X %02X %02X %02X"
842 " %02X %02X %02X %02X %02X %02X %02X %02X\n"
843 "Modulus length: %d\nModulus: \n",
844 data
[10], data
[11], data
[12], data
[13], data
[14],
845 data
[15], data
[16], data
[17], data
[22], data
[23],
846 data
[24], data
[25], data
[26], data
[27], data
[28],
847 data
[29], data
[30], data
[31], data
[32], data
[33],
848 be32_to_cpu(*((__be32
*) (data
+ 34))));
850 for (i
= 0; i
< 256; i
++) {
851 str
+= sprintf(str
, "%02X ", data
[i
+ 38]);
852 if ((i
+ 1) % 16 == 0)
853 str
+= sprintf(str
, "\n");
859 EXPORT_SYMBOL_GPL(tpm_show_pubek
);
862 ssize_t
tpm_show_caps(struct device
*dev
, struct device_attribute
*attr
,
869 rc
= tpm_getcap(dev
, TPM_CAP_PROP_MANUFACTURER
, &cap
,
870 "attempting to determine the manufacturer");
873 str
+= sprintf(str
, "Manufacturer: 0x%x\n",
874 be32_to_cpu(cap
.manufacturer_id
));
876 rc
= tpm_getcap(dev
, CAP_VERSION_1_1
, &cap
,
877 "attempting to determine the 1.1 version");
881 "TCG version: %d.%d\nFirmware version: %d.%d\n",
882 cap
.tpm_version
.Major
, cap
.tpm_version
.Minor
,
883 cap
.tpm_version
.revMajor
, cap
.tpm_version
.revMinor
);
886 EXPORT_SYMBOL_GPL(tpm_show_caps
);
888 ssize_t
tpm_show_caps_1_2(struct device
* dev
,
889 struct device_attribute
* attr
, char *buf
)
895 rc
= tpm_getcap(dev
, TPM_CAP_PROP_MANUFACTURER
, &cap
,
896 "attempting to determine the manufacturer");
899 str
+= sprintf(str
, "Manufacturer: 0x%x\n",
900 be32_to_cpu(cap
.manufacturer_id
));
901 rc
= tpm_getcap(dev
, CAP_VERSION_1_2
, &cap
,
902 "attempting to determine the 1.2 version");
906 "TCG version: %d.%d\nFirmware version: %d.%d\n",
907 cap
.tpm_version_1_2
.Major
, cap
.tpm_version_1_2
.Minor
,
908 cap
.tpm_version_1_2
.revMajor
,
909 cap
.tpm_version_1_2
.revMinor
);
912 EXPORT_SYMBOL_GPL(tpm_show_caps_1_2
);
914 ssize_t
tpm_store_cancel(struct device
*dev
, struct device_attribute
*attr
,
915 const char *buf
, size_t count
)
917 struct tpm_chip
*chip
= dev_get_drvdata(dev
);
921 chip
->vendor
.cancel(chip
);
924 EXPORT_SYMBOL_GPL(tpm_store_cancel
);
927 * Device file system interface to the TPM
929 * It's assured that the chip will be opened just once,
930 * by the check of is_open variable, which is protected
933 int tpm_open(struct inode
*inode
, struct file
*file
)
935 int minor
= iminor(inode
);
936 struct tpm_chip
*chip
= NULL
, *pos
;
939 list_for_each_entry_rcu(pos
, &tpm_chip_list
, list
) {
940 if (pos
->vendor
.miscdev
.minor
== minor
) {
942 get_device(chip
->dev
);
951 if (test_and_set_bit(0, &chip
->is_open
)) {
952 dev_dbg(chip
->dev
, "Another process owns this TPM\n");
953 put_device(chip
->dev
);
957 chip
->data_buffer
= kmalloc(TPM_BUFSIZE
* sizeof(u8
), GFP_KERNEL
);
958 if (chip
->data_buffer
== NULL
) {
959 clear_bit(0, &chip
->is_open
);
960 put_device(chip
->dev
);
964 atomic_set(&chip
->data_pending
, 0);
966 file
->private_data
= chip
;
969 EXPORT_SYMBOL_GPL(tpm_open
);
972 * Called on file close
974 int tpm_release(struct inode
*inode
, struct file
*file
)
976 struct tpm_chip
*chip
= file
->private_data
;
978 del_singleshot_timer_sync(&chip
->user_read_timer
);
979 flush_scheduled_work();
980 file
->private_data
= NULL
;
981 atomic_set(&chip
->data_pending
, 0);
982 kfree(chip
->data_buffer
);
983 clear_bit(0, &chip
->is_open
);
984 put_device(chip
->dev
);
987 EXPORT_SYMBOL_GPL(tpm_release
);
989 ssize_t
tpm_write(struct file
*file
, const char __user
*buf
,
990 size_t size
, loff_t
*off
)
992 struct tpm_chip
*chip
= file
->private_data
;
993 size_t in_size
= size
, out_size
;
995 /* cannot perform a write until the read has cleared
996 either via tpm_read or a user_read_timer timeout */
997 while (atomic_read(&chip
->data_pending
) != 0)
1000 mutex_lock(&chip
->buffer_mutex
);
1002 if (in_size
> TPM_BUFSIZE
)
1003 in_size
= TPM_BUFSIZE
;
1006 (chip
->data_buffer
, (void __user
*) buf
, in_size
)) {
1007 mutex_unlock(&chip
->buffer_mutex
);
1011 /* atomic tpm command send and result receive */
1012 out_size
= tpm_transmit(chip
, chip
->data_buffer
, TPM_BUFSIZE
);
1014 atomic_set(&chip
->data_pending
, out_size
);
1015 mutex_unlock(&chip
->buffer_mutex
);
1017 /* Set a timeout by which the reader must come claim the result */
1018 mod_timer(&chip
->user_read_timer
, jiffies
+ (60 * HZ
));
1022 EXPORT_SYMBOL_GPL(tpm_write
);
1024 ssize_t
tpm_read(struct file
*file
, char __user
*buf
,
1025 size_t size
, loff_t
*off
)
1027 struct tpm_chip
*chip
= file
->private_data
;
1030 del_singleshot_timer_sync(&chip
->user_read_timer
);
1031 flush_scheduled_work();
1032 ret_size
= atomic_read(&chip
->data_pending
);
1033 atomic_set(&chip
->data_pending
, 0);
1034 if (ret_size
> 0) { /* relay data */
1035 if (size
< ret_size
)
1038 mutex_lock(&chip
->buffer_mutex
);
1039 if (copy_to_user(buf
, chip
->data_buffer
, ret_size
))
1041 mutex_unlock(&chip
->buffer_mutex
);
1046 EXPORT_SYMBOL_GPL(tpm_read
);
1048 void tpm_remove_hardware(struct device
*dev
)
1050 struct tpm_chip
*chip
= dev_get_drvdata(dev
);
1053 dev_err(dev
, "No device data found\n");
1057 spin_lock(&driver_lock
);
1058 list_del_rcu(&chip
->list
);
1059 spin_unlock(&driver_lock
);
1062 misc_deregister(&chip
->vendor
.miscdev
);
1063 sysfs_remove_group(&dev
->kobj
, chip
->vendor
.attr_group
);
1064 tpm_bios_log_teardown(chip
->bios_dir
);
1066 /* write it this way to be explicit (chip->dev == dev) */
1067 put_device(chip
->dev
);
1069 EXPORT_SYMBOL_GPL(tpm_remove_hardware
);
1071 #define TPM_ORD_SAVESTATE cpu_to_be32(152)
1072 #define SAVESTATE_RESULT_SIZE 10
1074 static struct tpm_input_header savestate_header
= {
1075 .tag
= TPM_TAG_RQU_COMMAND
,
1076 .length
= cpu_to_be32(10),
1077 .ordinal
= TPM_ORD_SAVESTATE
1080 /* Bug workaround - some TPM's don't flush the most
1081 * recently changed pcr on suspend, so force the flush
1082 * with an extend to the selected _unused_ non-volatile pcr.
1084 static int tpm_suspend_pcr
;
1085 static int __init
tpm_suspend_setup(char *str
)
1087 get_option(&str
, &tpm_suspend_pcr
);
1090 __setup("tpm_suspend_pcr=", tpm_suspend_setup
);
1093 * We are about to suspend. Save the TPM state
1094 * so that it can be restored.
1096 int tpm_pm_suspend(struct device
*dev
, pm_message_t pm_state
)
1098 struct tpm_chip
*chip
= dev_get_drvdata(dev
);
1099 struct tpm_cmd_t cmd
;
1102 u8 dummy_hash
[TPM_DIGEST_SIZE
] = { 0 };
1107 /* for buggy tpm, flush pcrs with extend to selected dummy */
1108 if (tpm_suspend_pcr
) {
1109 cmd
.header
.in
= pcrextend_header
;
1110 cmd
.params
.pcrextend_in
.pcr_idx
= cpu_to_be32(tpm_suspend_pcr
);
1111 memcpy(cmd
.params
.pcrextend_in
.hash
, dummy_hash
,
1113 rc
= transmit_cmd(chip
, &cmd
, EXTEND_PCR_RESULT_SIZE
,
1114 "extending dummy pcr before suspend");
1117 /* now do the actual savestate */
1118 cmd
.header
.in
= savestate_header
;
1119 rc
= transmit_cmd(chip
, &cmd
, SAVESTATE_RESULT_SIZE
,
1120 "sending savestate before suspend");
1123 EXPORT_SYMBOL_GPL(tpm_pm_suspend
);
1126 * Resume from a power safe. The BIOS already restored
1129 int tpm_pm_resume(struct device
*dev
)
1131 struct tpm_chip
*chip
= dev_get_drvdata(dev
);
1138 EXPORT_SYMBOL_GPL(tpm_pm_resume
);
1140 /* In case vendor provided release function, call it too.*/
1142 void tpm_dev_vendor_release(struct tpm_chip
*chip
)
1144 if (chip
->vendor
.release
)
1145 chip
->vendor
.release(chip
->dev
);
1147 clear_bit(chip
->dev_num
, dev_mask
);
1148 kfree(chip
->vendor
.miscdev
.name
);
1150 EXPORT_SYMBOL_GPL(tpm_dev_vendor_release
);
1154 * Once all references to platform device are down to 0,
1155 * release all allocated structures.
1157 void tpm_dev_release(struct device
*dev
)
1159 struct tpm_chip
*chip
= dev_get_drvdata(dev
);
1161 tpm_dev_vendor_release(chip
);
1166 EXPORT_SYMBOL_GPL(tpm_dev_release
);
1169 * Called from tpm_<specific>.c probe function only for devices
1170 * the driver has determined it should claim. Prior to calling
1171 * this function the specific probe function has called pci_enable_device
1172 * upon errant exit from this function specific probe function should call
1173 * pci_disable_device
1175 struct tpm_chip
*tpm_register_hardware(struct device
*dev
,
1176 const struct tpm_vendor_specific
*entry
)
1178 #define DEVNAME_SIZE 7
1181 struct tpm_chip
*chip
;
1183 /* Driver specific per-device data */
1184 chip
= kzalloc(sizeof(*chip
), GFP_KERNEL
);
1185 devname
= kmalloc(DEVNAME_SIZE
, GFP_KERNEL
);
1187 if (chip
== NULL
|| devname
== NULL
)
1190 mutex_init(&chip
->buffer_mutex
);
1191 mutex_init(&chip
->tpm_mutex
);
1192 INIT_LIST_HEAD(&chip
->list
);
1194 INIT_WORK(&chip
->work
, timeout_work
);
1196 setup_timer(&chip
->user_read_timer
, user_reader_timeout
,
1197 (unsigned long)chip
);
1199 memcpy(&chip
->vendor
, entry
, sizeof(struct tpm_vendor_specific
));
1201 chip
->dev_num
= find_first_zero_bit(dev_mask
, TPM_NUM_DEVICES
);
1203 if (chip
->dev_num
>= TPM_NUM_DEVICES
) {
1204 dev_err(dev
, "No available tpm device numbers\n");
1206 } else if (chip
->dev_num
== 0)
1207 chip
->vendor
.miscdev
.minor
= TPM_MINOR
;
1209 chip
->vendor
.miscdev
.minor
= MISC_DYNAMIC_MINOR
;
1211 set_bit(chip
->dev_num
, dev_mask
);
1213 scnprintf(devname
, DEVNAME_SIZE
, "%s%d", "tpm", chip
->dev_num
);
1214 chip
->vendor
.miscdev
.name
= devname
;
1216 chip
->vendor
.miscdev
.parent
= dev
;
1217 chip
->dev
= get_device(dev
);
1218 chip
->release
= dev
->release
;
1219 dev
->release
= tpm_dev_release
;
1220 dev_set_drvdata(dev
, chip
);
1222 if (misc_register(&chip
->vendor
.miscdev
)) {
1224 "unable to misc_register %s, minor %d\n",
1225 chip
->vendor
.miscdev
.name
,
1226 chip
->vendor
.miscdev
.minor
);
1227 put_device(chip
->dev
);
1231 if (sysfs_create_group(&dev
->kobj
, chip
->vendor
.attr_group
)) {
1232 misc_deregister(&chip
->vendor
.miscdev
);
1233 put_device(chip
->dev
);
1238 chip
->bios_dir
= tpm_bios_log_setup(devname
);
1240 /* Make chip available */
1241 spin_lock(&driver_lock
);
1242 list_add_rcu(&chip
->list
, &tpm_chip_list
);
1243 spin_unlock(&driver_lock
);
1252 EXPORT_SYMBOL_GPL(tpm_register_hardware
);
1254 MODULE_AUTHOR("Leendert van Doorn (leendert@watson.ibm.com)");
1255 MODULE_DESCRIPTION("TPM Driver");
1256 MODULE_VERSION("2.0");
1257 MODULE_LICENSE("GPL");