tpm: Move TPM common base definitions to the command header

These are top level definitions shared by both TPM 1 and 2
family chips. This includes core definitions like TPM localities,
common crypto algorithm IDs, and the base TPM command header.

Co-developed-by: Daniel P. Smith <dpsmith@apertussolutions.com>
Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
Co-developed-by: Alec Brown <alec.r.brown@oracle.com>
Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
Signed-off-by: Ross Philipson <ross.philipson@gmail.com>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
This commit is contained in:
Ross Philipson 2026-07-11 09:01:04 -07:00 committed by Jarkko Sakkinen
parent 7a5ec92813
commit 88c5a62c3a
3 changed files with 92 additions and 50 deletions

View File

@ -33,7 +33,6 @@
#endif
#define TPM_MINOR 224 /* officially assigned */
#define TPM_BUFSIZE 4096
#define TPM_NUM_DEVICES 65536
#define TPM_RETRY 50

View File

@ -27,49 +27,12 @@
#include <linux/tpm_command.h>
#define TPM_DIGEST_SIZE 20 /* Max TPM v1.2 PCR size */
#define TPM2_MAX_DIGEST_SIZE SHA512_DIGEST_SIZE
#define TPM2_MAX_PCR_BANKS 8
struct tpm_chip;
struct trusted_key_payload;
struct trusted_key_options;
/* opaque structure, holds auth session parameters like the session key */
struct tpm2_auth;
/* if you add a new hash to this, increment TPM_MAX_HASHES below */
enum tpm_algorithms {
TPM_ALG_ERROR = 0x0000,
TPM_ALG_SHA1 = 0x0004,
TPM_ALG_AES = 0x0006,
TPM_ALG_KEYEDHASH = 0x0008,
TPM_ALG_SHA256 = 0x000B,
TPM_ALG_SHA384 = 0x000C,
TPM_ALG_SHA512 = 0x000D,
TPM_ALG_NULL = 0x0010,
TPM_ALG_SM3_256 = 0x0012,
TPM_ALG_ECC = 0x0023,
TPM_ALG_CFB = 0x0043,
};
/*
* maximum number of hashing algorithms a TPM can have. This is
* basically a count of every hash in tpm_algorithms above
*/
#define TPM_MAX_HASHES 5
struct tpm_digest {
u16 alg_id;
u8 digest[TPM2_MAX_DIGEST_SIZE];
} __packed;
struct tpm_bank_info {
u16 alg_id;
u16 digest_size;
u16 crypto_id;
};
enum TPM_OPS_FLAGS {
TPM_OPS_AUTO_STARTUP = BIT(0),
};
@ -127,7 +90,7 @@ struct tpm_chip_seqops {
const struct seq_operations *seqops;
};
/* fixed define for the curve we use which is NIST_P256 */
/* Fixed define for the curve we use which is NIST_P256 */
#define EC_PT_SZ 32
/*
@ -209,8 +172,6 @@ struct tpm_chip {
#endif
};
#define TPM_HEADER_SIZE 10
static inline enum tpm2_mso_type tpm2_handle_mso(u32 handle)
{
return handle >> 24;
@ -239,15 +200,6 @@ enum tpm_chip_flags {
#define to_tpm_chip(d) container_of(d, struct tpm_chip, dev)
struct tpm_header {
__be16 tag;
__be32 length;
union {
__be32 ordinal;
__be32 return_code;
};
} __packed;
enum tpm_buf_flags {
/* the capacity exceeded: */
TPM_BUF_OVERFLOW = BIT(0),

View File

@ -2,6 +2,8 @@
#ifndef __LINUX_TPM_COMMAND_H__
#define __LINUX_TPM_COMMAND_H__
#include <crypto/sha2.h>
/*
* == TPM 1 Family Chips ==
*
@ -427,4 +429,93 @@ struct tpm2_context {
__be16 blob_size;
} __packed;
/*
* == TPM Common Defs ==
*/
#define TPM_DIGEST_SIZE 20 /* Max TPM v1.2 PCR size */
#define TPM_BUFSIZE 4096
/*
* SHA-512 is, as of today, the largest digest in the TCG algorithm repository.
*/
#define TPM2_MAX_DIGEST_SIZE SHA512_DIGEST_SIZE
/*
* A TPM name digest i.e., TPMT_HA, is a concatenation of TPM_ALG_ID of the
* name algorithm and hash of TPMT_PUBLIC.
*/
#define TPM2_MAX_NAME_SIZE (TPM2_MAX_DIGEST_SIZE + 2)
/*
* Fixed define for the size of a name. This is actually HASHALG size
* plus 2, so 32 for SHA256
*/
#define TPM2_NULL_NAME_SIZE 34
/*
* The maximum number of PCR banks.
*/
#define TPM2_MAX_PCR_BANKS 8
/* If you add a new hash to this, increment TPM_MAX_HASHES below */
enum tpm_algorithms {
TPM_ALG_ERROR = 0x0000,
TPM_ALG_SHA1 = 0x0004,
TPM_ALG_AES = 0x0006,
TPM_ALG_KEYEDHASH = 0x0008,
TPM_ALG_SHA256 = 0x000B,
TPM_ALG_SHA384 = 0x000C,
TPM_ALG_SHA512 = 0x000D,
TPM_ALG_NULL = 0x0010,
TPM_ALG_SM3_256 = 0x0012,
TPM_ALG_ECC = 0x0023,
TPM_ALG_CFB = 0x0043,
};
/*
* The locality (0 - 4) for a TPM, as defined in section 3.2 of the
* Client Platform Profile Specification.
*/
enum tpm_localities {
TPM_LOCALITY_0 = 0, /* Static RTM */
TPM_LOCALITY_1 = 1, /* Dynamic OS */
TPM_LOCALITY_2 = 2, /* DRTM Environment */
TPM_LOCALITY_3 = 3, /* Aux Components */
TPM_LOCALITY_4 = 4, /* CPU DRTM Establishment */
TPM_MAX_LOCALITY = TPM_LOCALITY_4
};
/*
* Structure to represent active PCR algorithm banks usable by the
* TPM chip.
*/
struct tpm_bank_info {
u16 alg_id;
u16 digest_size;
u16 crypto_id;
};
/*
* Maximum number of hashing algorithms a TPM can have. This is
* basically a count of every hash in tpm_algorithms above
*/
#define TPM_MAX_HASHES 5
struct tpm_digest {
u16 alg_id;
u8 digest[TPM2_MAX_DIGEST_SIZE];
} __packed;
#define TPM_HEADER_SIZE 10
struct tpm_header {
__be16 tag;
__be32 length;
union {
__be32 ordinal;
__be32 return_code;
};
} __packed;
#endif