On Tue, Mar 17, 2026 at 04:03:35PM +0000, Alec Brown wrote: > From: Ross Philipson <[email protected]> > > From: Ross Philipson <[email protected]> > > 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. > > Signed-off-by: Daniel P. Smith <[email protected]> > Signed-off-by: Ross Philipson <[email protected]> > Signed-off-by: Alec Brown <[email protected]> > --- > include/linux/tpm.h | 50 +-------------------- > include/linux/tpm_command.h | 89 +++++++++++++++++++++++++++++++++++++ > 2 files changed, 90 insertions(+), 49 deletions(-) > > diff --git a/include/linux/tpm.h b/include/linux/tpm.h > index 92957452f7a7..a282b7045a24 100644 > --- a/include/linux/tpm.h > +++ b/include/linux/tpm.h > @@ -27,49 +27,12 @@ > > #include "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), > diff --git a/include/linux/tpm_command.h b/include/linux/tpm_command.h > index ee76fcd5ecef..25a247254140 100644 > --- a/include/linux/tpm_command.h > +++ b/include/linux/tpm_command.h > @@ -431,4 +431,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 > -- > 2.47.3 >
Yep, all looks great and clean to me but exactly for that reason this needs to the truth serum :-) BR, Jarkko

