On 11/10/20 8:49 AM, Ilias Apalodimas wrote: > A following patch introduces EFI_TCG2_PROTOCOL. > Add the required TPMv2 headers to support it. > > Signed-off-by: Ilias Apalodimas <ilias.apalodi...@linaro.org> > --- > changes since v2: > - Added description and pointers to TCG specs > - updated copyright info > include/tpm-v2.h | 77 ++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 77 insertions(+) > > diff --git a/include/tpm-v2.h b/include/tpm-v2.h > index f6c045d35480..c75cd5d8dfe8 100644 > --- a/include/tpm-v2.h > +++ b/include/tpm-v2.h > @@ -1,6 +1,13 @@ > /* SPDX-License-Identifier: GPL-2.0+ */ > /* > + * Defines APIs and structures that allow software to interact with a > + * TPM2 device > + * > + * Copyright (c) 2020 Linaro > * Copyright (c) 2018 Bootlin > + * > + * > https://trustedcomputinggroup.org/resource/tss-overview-common-structures-specification/ > + * > * Author: Miquel Raynal <miquel.ray...@bootlin.com> > */ > > @@ -11,6 +18,74 @@ > > #define TPM2_DIGEST_LEN 32 > > +#define TPM2_MAX_PCRS 32 > +#define TPM2_PCR_SELECT_MAX ((TPM2_MAX_PCRS + 7) / 8) > +#define TPM2_MAX_CAP_BUFFER 1024 > +#define TPM2_MAX_TPM_PROPERTIES ((TPM2_MAX_CAP_BUFFER - sizeof(u32) /* > TPM2_CAP */ - \ > + sizeof(u32)) / sizeof(struct > tpms_tagged_property)) > + > +/* > + * We deviate from this draft of the specification by increasing the value > of > + * TPM2_NUM_PCR_BANKS from 3 to 16 to ensure compatibility with TPM2 > + * implementations that have enabled a larger than typical number of PCR > + * banks. This larger value for TPM2_NUM_PCR_BANKS is expected to be > included > + * in a future revision of the specification. > + */ > +#define TPM2_NUM_PCR_BANKS 16 > + > +/* Definition of (UINT32) TPM2_CAP Constants */ > +#define TPM2_CAP_PCRS 0x00000005U > +#define TPM2_CAP_TPM_PROPERTIES 0x00000006U > + > +/* Definition of (UINT32) TPM2_PT Constants */ > +#define PT_GROUP (u32)(0x00000100)
TPM2_PT_GROUP Please, be consistent in using the TPM2 prefix. > +#define PT_FIXED (u32)(PT_GROUP * 1) TPM2_PT_FIXED Otherwise Reviewed-by: Heinrich Schuchardt <xypron.g...@gmx.de> > +#define TPM2_PT_MANUFACTURER (u32)(PT_FIXED + 5) > +#define TPM2_PT_PCR_COUNT (u32)(PT_FIXED + 18) > +#define TPM2_PT_MAX_COMMAND_SIZE (u32)(PT_FIXED + 30) > +#define TPM2_PT_MAX_RESPONSE_SIZE (u32)(PT_FIXED + 31) > + > +/* TPMS_TAGGED_PROPERTY Structure */ > +struct tpms_tagged_property { > + u32 property; > + u32 value; > +} __packed; > + > +/* TPMS_PCR_SELECTION Structure */ > +struct tpms_pcr_selection { > + u16 hash; > + u8 size_of_select; > + u8 pcr_select[TPM2_PCR_SELECT_MAX]; > +} __packed; > + > +/* TPML_PCR_SELECTION Structure */ > +struct tpml_pcr_selection { > + u32 count; > + struct tpms_pcr_selection selection[TPM2_NUM_PCR_BANKS]; > +} __packed; > + > +/* TPML_TAGGED_TPM_PROPERTY Structure */ > +struct tpml_tagged_tpm_property { > + u32 count; > + struct tpms_tagged_property tpm_property[TPM2_MAX_TPM_PROPERTIES]; > +} __packed; > + > +/* TPMU_CAPABILITIES Union */ > +union tpmu_capabilities { > + /* > + * Non exhaustive. Only added the structs needed for our > + * current code > + */ > + struct tpml_pcr_selection assigned_pcr; > + struct tpml_tagged_tpm_property tpm_properties; > +} __packed; > + > +/* TPMS_CAPABILITY_DATA Structure */ > +struct tpms_capability_data { > + u32 capability; > + union tpmu_capabilities data; > +} __packed; > + > /** > * TPM2 Structure Tags for command/response buffers. > * > @@ -123,11 +198,13 @@ enum tpm2_return_codes { > * TPM2 algorithms. > */ > enum tpm2_algorithms { > + TPM2_ALG_SHA1 = 0x04, > TPM2_ALG_XOR = 0x0A, > TPM2_ALG_SHA256 = 0x0B, > TPM2_ALG_SHA384 = 0x0C, > TPM2_ALG_SHA512 = 0x0D, > TPM2_ALG_NULL = 0x10, > + TPM2_ALG_SM3_256 = 0x12, > }; > > /* NV index attributes */ >