[SeaBIOS] [PATCH 08/10] tpm: Introduce tpm_get_capability() helper function
Stefan Berger
stefanb at linux.vnet.ibm.com
Wed Dec 30 03:09:09 CET 2015
On 12/29/2015 07:17 PM, Kevin O'Connor wrote:
> Introduce helper function to call the TPM_ORD_GetCapability command.
> Update all get capability callers to use this helper.
>
> Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
> ---
> src/std/tcg.h | 17 +++---
> src/tcgbios.c | 176 ++++++++++++++++------------------------------------------
> 2 files changed, 57 insertions(+), 136 deletions(-)
>
> diff --git a/src/std/tcg.h b/src/std/tcg.h
> index 70daa41..9f7f021 100644
> --- a/src/std/tcg.h
> +++ b/src/std/tcg.h
> @@ -254,13 +254,21 @@ struct tpm_rsp_extend {
> } PACKED;
>
>
> -struct tpm_req_getcap_perm_flags {
> +struct tpm_req_getcap {
> struct tpm_req_header hdr;
> u32 capArea;
> u32 subCapSize;
> u32 subCap;
> } PACKED;
>
> +#define TPM_CAP_FLAG 0x04
> +#define TPM_CAP_PROPERTY 0x05
> +#define TPM_CAP_FLAG_PERMANENT 0x108
> +#define TPM_CAP_FLAG_VOLATILE 0x109
> +#define TPM_CAP_PROP_OWNER 0x111
> +#define TPM_CAP_PROP_TIS_TIMEOUT 0x115
> +#define TPM_CAP_PROP_DURATION 0x120
> +
>
> struct tpm_permanent_flags {
> u16 tag;
> @@ -286,13 +294,6 @@ struct tpm_res_getcap_perm_flags {
> struct tpm_permanent_flags perm_flags;
> } PACKED;
>
> -struct tpm_req_getcap_stclear_flags {
> - struct tpm_req_header hdr;
> - u32 capArea;
> - u32 subCapSize;
> - u32 subCap;
> -} PACKED;
> -
> struct tpm_stclear_flags {
> u16 tag;
> u8 flags[5];
> diff --git a/src/tcgbios.c b/src/tcgbios.c
> index 8f9f321..510d4b3 100644
> --- a/src/tcgbios.c
> +++ b/src/tcgbios.c
> @@ -36,31 +36,6 @@ static const u8 PhysicalPresence_NOT_PRESENT_LOCK[] = { 0x00, 0x14 };
> static const u8 CommandFlag_FALSE[1] = { 0x00 };
> static const u8 CommandFlag_TRUE[1] = { 0x01 };
>
> -static const u8 GetCapability_Permanent_Flags[] = {
> - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04,
> - 0x00, 0x00, 0x01, 0x08
> -};
> -
> -static const u8 GetCapability_STClear_Flags[] = {
> - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04,
> - 0x00, 0x00, 0x01, 0x09
> -};
> -
> -static const u8 GetCapability_OwnerAuth[] = {
> - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04,
> - 0x00, 0x00, 0x01, 0x11
> -};
> -
> -static const u8 GetCapability_Timeouts[] = {
> - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04,
> - 0x00, 0x00, 0x01, 0x15
> -};
> -
> -static const u8 GetCapability_Durations[] = {
> - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04,
> - 0x00, 0x00, 0x01, 0x20
> -};
> -
> typedef u8 tpm_ppi_code;
>
>
> @@ -257,39 +232,46 @@ tpm_set_failure(void)
> TPM_working = 0;
> }
>
> +static int
> +tpm_get_capability(u32 cap, u32 subcap, struct tpm_rsp_header *rsp, u32 rsize)
> +{
> + struct tpm_req_getcap trgc = {
> + .hdr.tag = cpu_to_be16(TPM_TAG_RQU_CMD),
> + .hdr.totlen = cpu_to_be32(sizeof(trgc)),
> + .hdr.ordinal = cpu_to_be32(TPM_ORD_GetCapability),
> + .capArea = cpu_to_be32(cap),
> + .subCapSize = cpu_to_be32(sizeof(trgc.subCap)),
> + .subCap = cpu_to_be32(subcap)
> + };
> + u32 resp_size = rsize;
> + u32 rc = tpmhw_transmit(0, &trgc.hdr, &rsp, &resp_size,
> + TPM_DURATION_TYPE_SHORT);
Bug: &rsp -> rsp !
Otherwise it looks good.
Stefan
More information about the SeaBIOS
mailing list